2026.04.23 작업일지 v1.0.1
v1.0.0 이 저장된 18:55 이후에도 다섯 시간이 더 이어졌다. 포모도로 백그라운드 타이머·신규 스킬 3종·심사레이더 iOS 최초 런치 디버그까지. 00:06 에
41aabea커밋이 찍히며 KST 자정을 넘겨 마감.
v1.0.0 이후 달라진 것 (19:00~00:08)
v1.0.0 이 저장된 시점(18:55 KST) 이후의 활동을 추적. 두 축으로 나뉜다.
- 저녁(19:00~23:30): 포모도로 백그라운드 타이머 + 스토어 준비 마무리, 신규 스킬 3종 추가(/insta-post, /create-play-app, /toss-tone 제거), automations 의 play-upload TCC 폴백, 심사레이더 v0.2 디자인 하이브리드.
- 심야(23:39~00:08): 강대종님의 “심사레이더 안켜지는데” 한 줄로 시작된 iOS 최초 런치 디버그. 근본원인 2건(Dart SDK 버전 미스매치 + iOS GIDClientID 누락) 을 순차적으로 해결해 iOS 시뮬레이터에서 Google 로그인 consent 다이얼로그까지 정상 도달.
포모도로 — 스토어 직전 마무리
e8a6cf2 20:47 feat(home): idle 시 리셋 버튼 숨김 + non-idle 은 아이콘-only 60×60
bb8e9bb 21:03 chore: bump version to 1.0.0+2
9b75ac8 21:27 feat(pomodoro): 백그라운드 타이머 + 완료 로컬 푸시 알림
- 홈 화면 리셋 버튼 UX 조정: idle 상태에서는 아예 숨겨 시선 분산 제거, non-idle 은 60×60 아이콘-only.
- 버전 bump 1.0.0+2 (Play Console 빌드 번호 맞춤).
- 핵심 기능: 백그라운드 타이머 + iOS/Android 로컬 푸시. 앱 닫혀 있어도 타이머 완료 알림이 뜨도록.
포모도로 개인정보처리방침 — daejong-page
dbda1fe 19:07 feat: privacy policy for 포모도로 (local-only, zero data collection)
- daejong-page 에
/privacy/pomodoro.html신규 추가. “로컬 전용, 수집 데이터 0” 선언. - Play Console / App Store Connect 제출 시 개인정보처리방침 URL 요구사항 충족.
스킬 3종 — /insta-post, /create-play-app, /toss-tone 제거
beed8fb 20:59 feat: /create-play-app 스킬 + ~/Downloads 샌드박스 lesson
dbe55fa 21:52 feat(insta-post): worklog → 1080×1350 toss-tone card PNG → telegram
ae207f3 23:10 chore: remove /toss-tone skill
- /create-play-app: Play Console 앱 만들기 자동화(Playwright MCP 웹 UI 클릭 + Android Publisher API probe
edits.insert403→200 검증).~/Downloads샌드박스 관련 lesson 동반 기록. - /insta-post: 오늘 worklog 를 1080×1350 인스타 카드 PNG 로 렌더해 텔레그램 전송. 반자동(렌더·전송까지, 업로드는 수동).
- /toss-tone 제거: 기능이 /insta-post 로 흡수돼 중복 제거.
automations — play-upload TCC 폴백 + coord 훅
f8e2399 20:59 feat: play-upload.py ~/Downloads TCC fallback + coord-auto-push hook
- Play Console 업로드 스크립트에 macOS TCC(권한) 거부 시
~/Downloads경로 폴백 추가. - coord-auto-push 훅: 좌표 매핑 수정 시 즉시 자동 커밋+푸시. multi-device 좌표 드리프트 방지.
심사레이더 — A2/B1 디자인 하이브리드
a48e0e0 23:25 feat(design): apply A2 Traffic Light + B1 Mono-section hybrid
- v0.2 디자인 탐색의 결론: A2(Traffic Light 신호등 컴포넌트) + B1(Mono-section 단일 리스트 그룹핑) 하이브리드 채택.
- 이 커밋 직후 강대종님이 실행 테스트를 시도하며 심야 디버그 세션이 시작됨.
심사레이더 iOS 최초 런치 디버그 (23:39~00:08) ✨
트리거: 23:39 강대종님 “심사레이더 안켜지는데”.
근본원인 1: Dart SDK 버전 미스매치
- 시뮬레이터 부팅(iPhone 17, iOS 26.2) 후
flutter run시도 → PATH 에flutter없음 →fvm설치 확인 →~/fvm/versions/stable/bin/flutter= 3.41.6 (Dart 3.11.4) pubspec.yaml은sdk: ^3.11.5요구 → pub get 실패~/fvm/versions/3.41.7/bin/flutter= 3.41.7 (Dart 3.11.5+) 로 수동 경로 지정 → 해결
근본원인 2: iOS GIDClientID 누락 크래시
첫 빌드는 성공(Xcode build done. 33.1s), 앱 설치까지 됐으나 런치 직후 SIGABRT:
NSInvalidArgumentException: 'No active configuration. Make sure GIDClientID is set in Info.plist.'
스택: GIDSignIn signInWithOptions → FLTGoogleSignInPlugin signInWithHint:additionalScopes:completion: → HomeScreen initState 의 자동 controller.refresh().
원인: RealGmailService 가 Android-only 가정으로 쓰여졌음(주석: “Android 는 package name + SHA-1 매칭이라 Client ID 코드에 넣을 필요 없음”). iOS 는 Info.plist 의 GIDClientID 키를 요구하는데 한 번도 세팅된 적 없음. 그간 테스트는 S24 에서만.
조치 순서
- Mock 임시 스왑(검증용):
RealGmailService()→MockGmailService(), 커밋 없이 빌드+런치 → UI 정상 렌더 확인(심사레이더 홈 화면, Toss-tone 신호등, 통계 카드). 원인이 UI 가 아닌 OAuth 경로임을 확정. - Mock 스왑 revert: repo 클린 상태로 복구.
- GCP iOS OAuth Client 생성:
review-radar-493922프로젝트에 Bundle IDcom.ssamssae.reviewRadar로 iOS Client 추가. 강대종님 수동 작업(GCP 콘솔 Mac 브라우저로 열어 안내). - Client ID 수신 (23:59):
1056684831781-2680sm18t1lhnusu5ooh200j122de6mh.apps.googleusercontent.com - Info.plist 편집:
GIDClientID+CFBundleURLTypes→ reversed scheme 추가 - 재빌드+재런치 (00:04): 크래시 없음, Google 로그인 consent 다이얼로그 정상 노출
- 커밋+푸시 (00:06):
41aabea feat(review_radar): iOS Google Sign-In config + CocoaPods integration— Info.plist + 첫 iOS 빌드 부산물(CocoaPods integration artifacts) 묶어서 하나의 커밋
이슈 기록
포스트모템을 /issue 로 기록: 2026-04-23-ios-gidclientid-missing.md. 재발 가능성 high (google_sign_in 쓰는 신규 Flutter 앱은 iOS 에서 동일 재현). Forcing function 3가지 제안:
- flutter-factory 템플릿에 iOS OAuth 체크 스크립트 추가
- Dart 레벨 Platform.isIOS 가드에서 GIDClientID 누락 시 StateError 로 fail-fast
- flutter-factory README 의 OAuth 섹션 첫 문장에 “iOS/Android 별 Client 각각 필요” 명시
관련 커밋 (v1.0.0 이후)
| repo | SHA | 시각 | 메시지 |
|---|---|---|---|
| daejong-page | dbda1fe | 19:07 | feat: privacy policy for 포모도로 |
| pomodoro | e8a6cf2 | 20:47 | feat(home): idle 리셋 버튼 숨김 |
| automations | f8e2399 | 20:59 | feat: play-upload TCC fallback + coord 훅 |
| skills | beed8fb | 20:59 | feat: /create-play-app + Downloads lesson |
| pomodoro | bb8e9bb | 21:03 | chore: bump 1.0.0+2 |
| pomodoro | 9b75ac8 | 21:27 | feat: 백그라운드 타이머 + 푸시 알림 |
| skills | dbe55fa | 21:52 | feat(insta-post): worklog → 카드 PNG |
| skills | ae207f3 | 23:10 | chore: remove /toss-tone |
| review_radar | a48e0e0 | 23:25 | feat(design): A2+B1 하이브리드 |
| review_radar | 41aabea | 00:06 (04-24) | feat: iOS Google Sign-In config |
| claude-skills | 273b963 | 00:17 | issue: iOS GIDClientID 누락 크래시 |
| daejong-page | 4641716 | 00:17 | issue: 공개본 동기화 |
총 12개(v1.0.0 작성 시점 13개와는 별개). 00:00 KST 를 넘겨 커밋 2건이 04-24 로 기록되지만 같은 연속 세션.
남은 작업
- 심사레이더 Safari 로그인 마무리(강대종님 몫): “계속” 탭 → gayoremix@gmail.com → Gmail readonly 승인 → 앱 복귀 → 실제 메모요 심사 메일 렌더 확인
- flutter-factory 템플릿에 iOS OAuth 체크 스크립트 추가(예방 forcing function 1번)
- 아이폰 실기 검증(/to-iphone review_radar → /land)