# Phase 7 — 릴리스 & 스토어 제출 가이드 (오너용) 코드/빌드 쪽(서명, 프라이버시 매니페스트, app-ads.txt 내용, 스토어 카피)은 준비돼 있습니다. 이 문서는 **오너가 콘솔/웹에서 할 일**과 **제출 순서**입니다. 헷갈리면 Claude에게 화면 보여주면서 같이 하면 됩니다. --- ## 0. 먼저 — 안드로이드 서명 키 백업 (가장 중요) `android/app/upload-keystore.jks` 파일과 비밀번호는 **이 앱의 영구 서명 키**입니다. **잃어버리면 Play에서 이 앱을 영원히 업데이트할 수 없습니다.** - `upload-keystore.jks` 파일을 안전한 곳(클라우드 드라이브 + 외장 등 2곳 이상)에 백업. - 비밀번호도 비밀번호 관리자에 저장. (git에는 올라가지 않습니다 — gitignore됨) > 참고: Play **앱 서명(Play App Signing)**을 쓰면 이 키는 "업로드 키"가 되고 분실 시 > 재설정이 가능하지만, 그래도 백업은 필수입니다. --- ## 1. 개인정보처리방침(Privacy Policy) 페이지 — 양 스토어 필수 두 스토어 모두 **개인정보처리방침 URL**을 요구합니다. 무료로 GitHub Pages에 한 장 올리면 됩니다. 내용에 최소한 다음을 명시: - 수집 항목: **광고 식별자(IDFA/광고 ID)**, **사용 데이터(앱 이용 통계)**, **기기 정보**. - 사용처: **광고 게재(AdMob)**, **분석(Firebase Analytics)**. - 제3자: Google AdMob, Google Firebase (각 정책 링크). - 추적: iOS에서 ATT 동의 시에만 맞춤 광고. 동의 거부해도 앱 정상 작동. - 구매: "광고 제거" 인앱 구입(비소모성). - 문의 이메일. --- ## 2. app-ads.txt 호스팅 — 광고 수익 인증 - 파일 내용은 `docs/store/app-ads.txt`에 있습니다: ``` google.com, pub-5605900229781491, DIRECT, f08c47fec0942fa0 ``` - 이걸 **개발자 웹사이트 도메인 루트**에 올립니다 → `https://<도메인>/app-ads.txt`. - ⚠️ 그 도메인은 **스토어 리스팅의 "마케팅/개발자 웹사이트" URL과 정확히 같아야** AdMob이 인식합니다. (GitHub Pages 커스텀 도메인이면 그 도메인) - 올린 뒤 AdMob → 앱 → app-ads.txt 상태가 며칠 내 "발견됨"으로 바뀝니다. --- ## 3. 개인정보 라벨 — 콘솔 입력값 (그대로 답하면 됨) 코드가 실제로 수집하는 것과 일치하는 답변입니다. 이 표대로 입력하세요. ### App Store Connect → 앱 개인정보 보호 | 데이터 유형 | 수집? | 사용 목적 | 사용자 연결 | 추적에 사용 | |---|---|---|---|---| | 식별자 → 기기 ID(광고 식별자) | 예 | 제3자 광고 | 아니요 | **예** | | 사용 데이터 → 제품 상호작용 | 예 | 분석, 앱 기능 | 아니요 | 아니요 | | 구매 → 구매 내역 | (Apple이 IAP 자동 처리, 별도 수집 안 함) | — | — | — | ### Google Play → 데이터 보안(Data safety) - 데이터 수집함: **예** - 앱 활동(앱 상호작용) → 분석 목적, 사용자 연결 안 함. - 기기 또는 기타 ID(광고 ID) → 광고/마케팅 목적, **공유함(Google)**. - 전송 중 암호화: 예. 사용자가 삭제 요청 가능: 해당 시 명시. - ⚠️ **"아동 대상 앱" 아니오** (Everyone/4+, 아동 타겟 아님으로 정확히). --- ## 4. 안드로이드 — Play 업로드 1. **AAB 파일**: Claude가 빌드한 `build/app/outputs/bundle/release/app-release.aab`. (없거나 갱신 필요하면 Claude에게 "AAB 다시 빌드" 요청) 2. Play Console → Block Seasons → **테스트 → 내부 테스트 → 새 버전 만들기**. 3. AAB 업로드. (첫 업로드 시 **Play 앱 서명** 사용에 동의 — 권장) 4. 업로드되면 **수익 창출 → 제품 → 인앱 상품**에서 `remove_ads` 상품 생성 가능해집니다 (제품 ID는 **`remove_ads`** 정확히 — App Store와 동일). 5. **라이선스 테스터**(설정)에 본인 계정 추가 → 샌드박스 결제 테스트. 6. 데이터 보안·콘텐츠 등급·스토어 리스팅(아래 카피) 작성 → 내부 테스트 출시. ## 5. iOS — App Store Connect 업로드 1. **빌드 업로드**: Xcode로 `Runner.xcworkspace` 열기 → 기기를 "Any iOS Device" → Product ▸ Archive → Organizer에서 "Distribute App" → App Store Connect 업로드. (또는 `flutter build ipa` 후 Transporter 앱으로 업로드. 인증서/프로비저닝은 Xcode 자동 서명으로 처리.) 2. 업로드된 빌드가 App Store Connect → TestFlight에 나타납니다(처리 ~수십 분). 3. **IAP 마무리**: `remove_ads` 상품에 **표시 이름/설명(한·영)** + **리뷰용 스크린샷** (설정 화면 캡처) 추가 → 상태가 "제출 준비됨"으로. 첫 IAP는 **앱 버전과 함께 제출**. 4. **유료 앱 계약**(Business → 계약/세금/뱅킹) 완료해야 IAP 판매·심사 가능. 5. 앱 개인정보(위 표) + ATT 사용 이유 + 스토어 카피 작성 → **심사 제출**. ## 6. 스토어 카피 `docs/store/store-listing.md`의 EN/KO 카피를 각 콘솔에 붙여넣으세요. 스크린샷은 실기기/시뮬레이터에서 캡처(홈·시즌맵·플레이·승리·엔드리스). Claude가 캡처를 도울 수 있습니다(시뮬레이터). iOS는 6.7"/6.5" 규격, Play는 폰 스크린샷. ## 7. AdMob — 앱 연결 앱이 스토어에 **출시된 뒤**, AdMob → 앱 → "앱 스토어에 연결"로 실제 스토어 앱과 연결하면 실광고 게재가 승인됩니다. (출시 전까지는 미연결이 정상) --- ## 제출 전 최종 체크리스트 - [ ] 키스토어 백업 완료 - [ ] 개인정보처리방침 URL 게시 - [ ] app-ads.txt 게시(개발자 웹사이트 도메인 = 스토어 URL) - [ ] App Store: 빌드 업로드 + IAP(현지화·스크린샷) + 개인정보 라벨 + ATT 문구 + 카피 - [ ] Play: AAB(내부 테스트) + remove_ads 상품 + 데이터 보안 + 콘텐츠 등급 + 카피 - [ ] 유료 앱 계약(Apple)·결제 프로필(Google) 완료 - [ ] 양 스토어 심사 제출