40abc26f5d
- Android: release keystore signing wired via gitignored key.properties (falls back to debug when absent). Verified: signed AAB built (signer CN=Block Seasons). - iOS: app PrivacyInfo.xcprivacy (ATT tracking flag, device-id/usage data types, UserDefaults+FileTimestamp required-reason APIs) registered in the Runner target. - Store: app-ads.txt (pub-5605900229781491), EN/KO listing copy, owner submission guide (privacy labels, app-ads hosting, upload/submit steps). Secrets (keystore, key.properties) are gitignored — owner backs them up. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
111 lines
5.9 KiB
Markdown
111 lines
5.9 KiB
Markdown
# 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) 완료
|
|
- [ ] 양 스토어 심사 제출
|