# 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` - 개인정보처리방침 페이지: `docs/store/privacy-policy.html` - app-ads.txt: `docs/store/app-ads.txt` - 스토어 카피 EN/KO: `docs/store/store-listing.md` - ⬜ **스크린샷**: 아직 없음 → Claude에게 "스크린샷 뽑아줘" 요청하면 시뮬레이터로 생성 --- # 0단계 — 먼저 해둘 3가지 (양 스토어 공통 전제) ### 0-1. 🔑 안드로이드 서명키 백업 (가장 중요, 분실 시 영구 업데이트 불가) - 파일 `BlockSeasons/android/app/upload-keystore.jks` 를 **2곳 이상**(클라우드+외장 등)에 백업 - 비밀번호 `35f52bb88a79b4279d3acce7935c33c9` (alias `upload`)을 비밀번호 관리자에 저장 - (Play 앱 서명을 쓰므로 이건 "업로드 키"지만 그래도 백업 필수) ### 0-2. 🌐 개발자 웹사이트 도메인 하나 정하고 2개 파일 올리기 양 스토어가 **개인정보처리방침 URL**을 요구하고, AdMob 수익엔 **app-ads.txt**가 필요합니다. **도메인 하나**(예: GitHub Pages 무료 사이트, 또는 보유 중인 `gru.farm`)를 정해 아래 2개를 올리세요: | 파일 | 올릴 위치(URL) | 내용 | |---|---|---| | `privacy-policy.html` | `https://<도메인>/privacy-policy.html` | `docs/store/privacy-policy.html` 그대로 | | `app-ads.txt` | `https://<도메인>/app-ads.txt` (반드시 **도메인 루트**) | `google.com, pub-5605900229781491, DIRECT, f08c47fec0942fa0` | > ⚠️ **그 도메인이 스토어 리스팅의 "웹사이트/마케팅 URL"과 정확히 같아야** AdMob이 app-ads.txt를 인식합니다. > GitHub Pages가 가장 쉬움: 새 repo 만들고 두 파일 올린 뒤 Pages 켜기 → `https://<아이디>.github.io//...`. (이러면 app-ads.txt가 루트가 아니므로, AdMob용으로는 **커스텀 도메인**이나 별도 루트 호스팅을 권장. 우선 개인정보처리방침 URL만 있어도 스토어 제출은 가능하고, app-ads.txt는 출시 후 며칠 내 인식돼도 됩니다.) ### 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장): ⬜ Claude에게 요청해 받기 - **카테고리**: 게임 → 퍼즐 · **태그**: 퍼즐/캐주얼 - **개인정보처리방침 URL**: 0-2에서 올린 주소 - **연락처 이메일**: `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**: 0-2 주소 - **스크린샷** (6.7" 및 6.5" 필수): ⬜ Claude에게 요청 ### 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 호스팅** (양 스토어 리스팅의 필수 입력값이라 먼저) 3. **Claude에게 스크린샷 요청** (리스팅에 필요) 4. **Apple B-1 빌드 업로드 시작** (처리에 시간 걸리니 먼저 걸어두기) 5. Play A-1~A-7 + Apple B-2~B-4 문항 채우기 (대부분 위 표 복붙) 6. Apple B-5 유료앱 계약 → 양쪽 **심사 제출** 문항별로 막히면 그 화면만 보여줘 — 그 부분만 같이 풀자.