# Phase 7 — 스토어 제출 가이드 (오너 셀프 진행용)

> 이 문서 하나만 위에서부터 따라가면 **Google Play + Apple App Store 제출**까지 끝납니다.
> 코드/빌드/카피/개인정보처리방침은 모두 준비돼 있습니다. 여기 적힌 답변·문구를 **그대로 복붙**하세요.
> 막히면 Claude에게 "이 단계 막혔어" 하고 화면을 보여주면 됩니다.

마지막 업데이트: 2026-06-14

---

## ✅ 지금까지 완료된 것
**Google Play**
- 앱 생성: **Block Seasons** (`com.airkjw.blockseasons`)
- AAB 업로드: 내부 테스트 트랙에 `1 (1.0.0)` 게시됨
- 테스터 목록 설정 (`0614 테스트`)
- **판매자(결제) 프로필 설정 완료**
- **`remove_ads` 인앱상품 생성 + 활성** (173개 지역, "이전 버전과의 호환성" ✔)

**Apple App Store**
- App ID `com.airkjw.blockseasons` 등록, App Store Connect에 앱 생성
- `remove_ads` 비소모성 IAP 생성 + 가격 설정 (상태: 메타데이터 누락 → 아래 5단계에서 마무리)

**공통 자산 (이미 만들어 둠)**
- 앱 아이콘 512px: `docs/store/play_icon_512.png`
- 피처 그래픽 1024×500: `docs/store/feature_graphic.png`
- ✅ **개인정보처리방침 호스팅 완료**: `https://block-seasons.web.app/privacy-policy.html`
- ✅ **app-ads.txt 호스팅 완료**: `https://block-seasons.web.app/app-ads.txt`
- 스토어 카피 EN/KO: `docs/store/store-listing.md`
- ✅ **스크린샷** (각 3장: 홈·플레이·점수전):
  - iOS 6.7"(1290×2796): `docs/store/screenshots/ios/`
  - Android 폰(1080×1920): `docs/store/screenshots/android/`
  - (시즌 여정 맵 컷은 추후 추가 예정 — 현재 3장으로 제출 충분)

---

# 0단계 — 먼저 해둘 3가지 (양 스토어 공통 전제)

### 0-1. 🔑 안드로이드 서명키 백업 (가장 중요, 분실 시 영구 업데이트 불가)
- 파일 `BlockSeasons/android/app/upload-keystore.jks` 를 **2곳 이상**(클라우드+외장 등)에 백업
- 비밀번호 `35f52bb88a79b4279d3acce7935c33c9` (alias `upload`)을 비밀번호 관리자에 저장
- (Play 앱 서명을 쓰므로 이건 "업로드 키"지만 그래도 백업 필수)

### 0-2. ✅ 개인정보처리방침 + app-ads.txt 호스팅 — **완료** (Firebase Hosting)
두 파일을 이미 살아있는 Firebase Hosting(`block-seasons.web.app`)에 배포 완료. **아래 URL을 스토어 폼에 그대로 복붙**하세요.

| 항목 | 스토어에 넣을 값 |
|---|---|
| **개인정보처리방침 URL** | `https://block-seasons.web.app/privacy-policy.html` |
| **app-ads.txt** | `https://block-seasons.web.app/app-ads.txt` (live, text/plain ✔) |
| **개발자 웹사이트 / 마케팅 URL** | `https://block-seasons.web.app` |

> ⚠️ AdMob이 app-ads.txt를 인식하려면 **스토어의 "웹사이트/마케팅 URL"을 반드시 `https://block-seasons.web.app`로** 적어야 합니다(여기 루트의 app-ads.txt를 크롤링). `web.app`은 그 자체가 독립 루트 도메인이라 인식에 문제없음.
> 참고: `gru.farm` 루트는 NAS가 아니라 외부 사이트빌더(아임웹)라서 app-ads.txt를 못 올림 → Firebase로 호스팅함.
> 재배포 방법(파일 수정 시): `docs/store/`의 원본을 `deploy/`로 복사 후 `firebase deploy --only hosting --project block-seasons`.

### 0-3. 결제 계약 확인
- **Google**: 판매자 프로필 완료됨 ✔ (이미 했음)
- **Apple**: 아래 App Store **5-④ 유료 앱 계약**을 완료해야 IAP 판매·심사 가능 (세금/뱅킹 — 본인이 입력)

---

# A. GOOGLE PLAY — 남은 순서

위치: Play Console → Block Seasons → **대시보드 → "앱 설정"** 항목을 위에서부터 채우면 됩니다.
(내부 테스트 빌드는 이미 올라가 있으니, 아래는 **프로덕션 출시에 필요한 정책/리스팅** 작성입니다.)

### A-1. 앱 액세스 권한
→ **"모든 기능을 제한 없이 사용할 수 있습니다"** 선택 (로그인 없음).

### A-2. 광고
→ **"예, 앱에 광고가 있습니다."**

### A-3. 콘텐츠 등급 (설문)
- 이메일 입력 → 카테고리 **"게임"**
- 폭력/성적/언어/약물/도박 등 전부 **아니요** (단순 블록 퍼즐)
- 결과: **전체이용가 / Everyone / PEGI 3** 예상

### A-4. 타겟층 및 콘텐츠
- 대상 연령: **만 13세 이상**(13~15, 16~17, 18세 이상) 선택 권장 — **만 13세 미만은 선택하지 말 것**
  (아동 대상이 되면 'Designed for Families' 정책 + 아동 개인정보 의무가 생겨 광고 단가에 불리)
- "앱이 아동의 관심을 끌도록 디자인되었나요?" → **아니요**

### A-5. 데이터 보안 (Data safety) — 아래 값 그대로
- 데이터 수집·공유: **예**
- **기기 또는 기타 ID** (광고 ID): 수집함 · 목적 **광고 또는 마케팅** · **Google과 공유함** · 사용자 연결 안 함
- **앱 활동 / 앱 상호작용**: 수집함 · 목적 **분석** · 공유 안 함 · 사용자 연결 안 함
- 전송 중 암호화: **예**
- 사용자가 데이터 삭제 요청 가능: 개인정보처리방침 문의 이메일 기재로 충족
- ⚠️ "아동 대상 앱" → **아니요**

### A-6. 기타 선언
- 정부 앱 / 금융 기능 / 건강 앱 → 전부 **아니요**
- 뉴스 앱 → 아니요. 콘텐츠 가이드라인·미국 수출법 → **동의**

### A-7. 메인 스토어 등록정보
`docs/store/store-listing.md`에서 복붙:
- **앱 이름**: `Block Seasons`
- **간단한 설명** (≤80): KO `블록을 놓아 줄을 지우고, 몇 주마다 새 테마 시즌을 즐기세요. 광고 강요 없는 편안한 퍼즐.`
- **자세한 설명** (≤4000): store-listing.md의 KO(또는 EN) 본문
- **앱 아이콘** (512×512): `docs/store/play_icon_512.png`
- **그래픽 이미지** (1024×500): `docs/store/feature_graphic.png`
- **휴대전화 스크린샷** (최소 2장): `docs/store/screenshots/android/` (3장)
- **카테고리**: 게임 → 퍼즐 · **태그**: 퍼즐/캐주얼
- **개인정보처리방침 URL**: `https://block-seasons.web.app/privacy-policy.html`
- **웹사이트(선택)**: `https://block-seasons.web.app` ← app-ads.txt 인식용으로 이 주소 권장
- **연락처 이메일**: `airkjw@gmail.com`

### A-8. 프로덕션 출시
1. **테스트 및 출시 → 프로덕션 → 새 버전 만들기**
2. 내부 테스트의 빌드를 **"라이브러리에서 추가"**로 가져오거나 AAB 재업로드(같은 `app-release.aab`)
3. 출시명/노트 입력 → 검토 → **출시 시작**(심사 제출)
4. ⚠️ **신규 개인 개발자 계정**은 "비공개 테스트 20명 × 14일" 후에야 프로덕션 가능 규정이 있습니다.
   - 너는 이미 출시된 앱(복지앱)이 있어 **해당 없을 가능성이 높음**. 프로덕션에서 막히면 알려줘 — 비공개 테스트로 우회 안내할게.

### A-9. (출시 후) 샌드박스 결제 테스트
- 설정 → **라이선스 테스트**에 본인 Google 계정 추가 → 내부 테스트 앱에서 `remove_ads` 구매가 **실제 청구 없이** 테스트됨.

---

# B. APPLE APP STORE — 남은 순서

위치: [App Store Connect](https://appstoreconnect.apple.com) → Block Seasons

### B-1. 빌드 업로드 (Xcode 권장 — CLI는 경로 공백 이슈 회피)
1. Xcode로 `ios/Runner.xcworkspace` 열기
2. 상단 기기 선택을 **"Any iOS Device (arm64)"**
3. 메뉴 **Product ▸ Archive** (서명은 Xcode 자동 서명)
4. Organizer 창 → **Distribute App ▸ App Store Connect ▸ Upload**
5. 처리에 수십 분 → App Store Connect → **TestFlight**에 빌드가 나타남
> Claude가 대신 IPA를 만들기 어려운 이유: iOS 서명은 너의 Apple 인증서가 필요해서 Xcode에서 해야 안전함. 막히면 단계별로 안내할게.

### B-2. 앱 정보 / 버전 정보
- 카테고리: **게임 → 퍼즐**, 연령 등급 설문 → **4+**
- 부제(≤30): KO `시즌마다 새로워지는 블록 퍼즐`
- 프로모션 텍스트·설명·키워드: `docs/store/store-listing.md`에서 복붙
- **개인정보처리방침 URL**: `https://block-seasons.web.app/privacy-policy.html`
- **스크린샷**: `docs/store/screenshots/ios/` (1290×2796=6.7", 3장). 6.5"는 같은 컷 재업로드 또는 생략 가능

### B-3. 앱 개인정보 (App Privacy) — 아래 값 그대로
| 데이터 | 수집 | 목적 | 사용자 연결 | 추적 |
|---|---|---|---|---|
| 기기 ID(광고 식별자) | 예 | 제3자 광고 | 아니요 | **예** |
| 사용 데이터(제품 상호작용) | 예 | 분석, 앱 기능 | 아니요 | 아니요 |
- 추적 사용 이유(ATT) 문구 예: "비맞춤형 대신 맞춤형 광고를 제공하기 위해 사용합니다."

### B-4. IAP 마무리 (`remove_ads`)
- 표시 이름: EN `Remove Ads` / KO `광고 제거`
- 설명: `배너·전면 광고를 영구히 제거합니다. 보상형 영상은 그대로 사용할 수 있어요.`
- **리뷰용 스크린샷**: 앱 **설정 화면**(광고 제거 버튼 보이는 캡처) 1장 첨부
- ⚠️ **첫 IAP는 앱 버전과 함께 제출**해야 함 (버전 화면에서 IAP 포함시켜 제출)

### B-5. 계약 / 제출
- ④ **유료 앱 계약(Paid Apps)**: 비즈니스 → 계약/세금/뱅킹 완료 (본인 입력) — IAP 판매·심사 전제
- 앱 심사 정보: 로그인 없음 → 데모 계정 불필요, 비고에 "No login required" 정도
- **심사 제출**

---

# 권장 진행 순서 (최단 경로)
1. **0-1 키스토어 백업** (5분, 지금)
2. ✅ **0-2 개인정보처리방침 + app-ads.txt 호스팅 완료** (`block-seasons.web.app` — 스토어 폼에 URL 복붙만 하면 됨)
3. **스크린샷 준비됨** ✅ (`docs/store/screenshots/`) — 리스팅에 바로 업로드
4. **Apple B-1 빌드 업로드 시작** (처리에 시간 걸리니 먼저 걸어두기)
5. Play A-1~A-7 + Apple B-2~B-4 문항 채우기 (대부분 위 표 복붙)
6. Apple B-5 유료앱 계약 → 양쪽 **심사 제출**

문항별로 막히면 그 화면만 보여줘 — 그 부분만 같이 풀자.
