2026-05-05
05-05
OAuth Verification Submitted
Google OAuth 앱 검증 신청 제출 완료
YouTube 업로드 권한(https://www.googleapis.com/auth/youtube) 일반 공개를 위한 Google OAuth 검증 절차를 처음부터 끝까지 완수하고 검증 폼 제출 완료. 6단계 심사 항목 중 2개(홈페이지, 브랜드 가이드라인) 즉시 자동 통과, 1개(개인정보처리방침) 자동 검토 중, 3개(앱 기능 / 데이터 액세스 / 최소 범위) 수동 심사 대기.
완수한 사전 작업
- Search Console 도메인 인증:
agritool-dev.github.io URL 접두어 속성으로 HTML 파일 인증 완료
- OAuth 동의 화면 브랜딩: 앱 이름·로고·홈페이지·개인정보처리방침·서비스 약관 URL·승인된 도메인 모두 등록
- 데이터 액세스 스코프 정리: 좁은 스코프 2개(
youtube.readonly, youtube.upload) 제거 후 auth/youtube 단일 스코프로 통합 — 코드와 콘솔 등록 일치
- 서비스 약관 페이지 신규 작성:
docs/terms.html (14개 조항, 무료 AS-IS 기준). 동의 화면의 "약관 링크 미표시 안내" 제거 목적
- privacy.html 스코프 표기 정정:
youtube.upload로 잘못 표기되어 있던 부분을 실제 코드와 콘솔 등록 상태에 맞춰 auth/youtube로 갱신
- 게시 상태 프로덕션 전환: 테스트 중 → 프로덕션 (테스트 사용자 100명 제한 해제, 단 검증 통과 전까지 "확인되지 않은 앱" 경고 표시)
- 데모 영상 촬영·업로드: YouTube Shorts로 OAuth 흐름 + 5개 API 호출 시연
- 검증 폼 작성·제출: 영문 정당화 텍스트 905자, 데모 영상 URL, OAuth Client ID 명시
검증 신청 핵심 정보
- OAuth Client ID:
916828115892-3kaju9rc1t47dj57af74b467sejt668l.apps.googleusercontent.com (Android - Play Signing)
- 스코프:
auth/youtube (민감 / Sensitive — CASA 보안 평가 불필요)
- 심사 기간 예상: 첫 자동 응답 3~5일 / 전체 결과 1~6주
- 심사 결과 메일 수신처: agritool@naver.com (담당자) / agritool@gmail.com (지원)
심사 중 주의사항
- OAuth 동의 화면 설정·스코프·도메인 변경 금지 (재심사 트리거)
- 데모 영상 삭제 또는 비공개 전환 금지
- privacy.html / terms.html URL 경로 변경 금지
관련 문서
2026-04-12
04-12
v2.0.1
v2.0.1 배포
- 진행률 애니메이션 개선
- MP4 타임스탬프 보정 적용
- YouTube 업로드 문구 개선
04-12
v2.0.0
Major Release
ExoPlayer Transformer 전면 전환
Android 영상 인코딩 엔진을 FFmpeg에서 ExoPlayer Transformer로 완전히 교체한 메이저 릴리스.
- ffmpeg-kit-16kb 완전 제거: APK 크기 198MB -> 58MB (-71%)
- 인코딩 속도 향상: 60장 기준 5분 -> 1분 30초, 220장 약 7분
- 출력 파일 크기 절감: 400MB -> 180MB (-55%)
- sync 검증 완료 (60장 + 220장 샘플)
용어 정리
- "다이제스트 무비" 용어를 "모션스티치 무비"로 전면 변경
코드 정리
- dead Dart 코드 6개 파일 (644줄) 삭제
Integration Test 프레임워크 도입
integration_test/app_test.dart 작성 (3그룹, 6개 테스트)
- 홈 화면 표시, 화면 전환, 출력 설정 인터랙션 검증
- pubspec.yaml에
integration_test SDK 의존성 추가
2026-04-11
04-11
v1.3.6
PoC Success
ExoPlayer Transformer PoC 성공
TransformerEngine.kt 신규 작성 (475줄)
DigestMovieMaker.kt fallback wrapper 패턴 적용
- Media3 1.10.0 의존성 추가
- 사전 베이크 셔터+silence WAV 12개 생성
04-11
v1.3.5
h264_mediacodec HW 인코더 전환
- FFmpeg에서 h264_mediacodec 하드웨어 인코더 사용으로 전환
- mpeg4 소프트웨어 인코더 fallback 구현
v1.3.5-ffmpeg-final ffmpeg 기반 마지막 릴리스
04-11
v1.3.4
Chunking + 원본 Audio 보존
- v1.3.3의 회귀 버그 수정
- 원본 비디오 클립의 audio 스트림 보존
v1.3.4-60장-스티치-성공 60장 모션포토 합성 첫 성공
04-11
v1.3.3
단일 패스 concat filter
- sync 누적 드리프트 문제 해결 시도
- 다중 세그먼트 concat에서 단일 패스 concat filter로 변경
60장 모션포토 sync 문제 진단
- ffprobe로 샘플 분석 수행
- 원인 규명:
amix duration=first의 video/audio 길이 mismatch (세그먼트당 약 150ms 누적)
- AAC priming 누적 in MPEG-TS concat
04-11
v1.3.2
iOS 앱이름 + 용어 분기
- iOS 앱 표시 이름 "MotionStitch" 설정
- "모션포토" / "라이브포토" 플랫폼별 용어 자동 분기
lib/util/platform_terms.dart 신규 작성 (motionPhotoLabel getter)
- 5개 UI 파일의 8곳 수정
Info.plist: CFBundleDisplayName, NSPhotoLibraryUsageDescription 설정
iOS MotionStitch 앨범 자동 생성
saveToPhotoLibrary에 PHAssetCollection 로직 추가
- 갤러리에 "MotionStitch" 전용 앨범 자동 생성 및 사진 추가
iOS 앱 아이콘 교체
- Flutter 기본 아이콘에서 로즈핑크 필름/스티치 디자인으로 교체
- Chrome headless SVG 렌더링으로 아이콘 생성
04-11
v1.3.1
iOS Phase 3 첫 빌드
DigestMovieBuilder.swift 신규 작성 (AVFoundation 기반 영상 합성)
LivePhotoExtractor.swift 신규 작성 (Live Photo .mov 추출)
processDigestMovie AVFoundation 구현 완료
- iOS Live Photo 해상도 1744x1308 발견 (HEVC frame cropping 이슈)
output_config.dart에 iOS 해상도 분기 추가
.claude/agents/ios-developer.md 서브에이전트 정의 추가
2026-04-10
04-10
YouTube 업로드 기능 구현
- Google Sign-In 연동
- YouTube Data API v3 resumable upload 구현
- 채널 사전 체크 + 채널 없을 시 안내 화면
- 갤러리에 YouTube 업로드 상태 표시 (회색/빨간색 아이콘)
ValueNotifier로 업로드 이력 실시간 동기화
하단 배너 광고 추가
- AdMob 하단 배너 광고 적용
showAds flag로 ON/OFF 제어
UI 개선
- CompleteScreen / ProcessingScreen 스크롤 지원 추가
- 갤러리에서 MotionStitch 폴더만 표시하도록 필터링
핵심 마일스톤 (Git Tags)
| Git Tag |
설명 |
| v2.0.0 |
ExoPlayer Transformer 전환 완료. ffmpeg 완전 제거. |
| v1.3.5-ffmpeg-final |
ffmpeg 기반 마지막 릴리스 |
| v1.3.4-60장-스티치-성공 |
60장 모션포토 합성 첫 성공 |
| android-basic-verified |
안드로이드 기본기능 검증 완료 |