Google Play 단독 출시로 정리 + 스토어 제출 자산 준비

iOS 타깃을 제거했다. Apple Developer Program 연 $99 와 맥이 필요한데
아이폰은 기존 웹 PWA 로 이미 커버되므로 비용 대비 실익이 없다고 판단했다.
commonMain 중심 구조는 그대로라 iosTarget 만 다시 넣으면 복구된다.

멀티·리그전/커스텀 카드에 '준비 중' 배지를 붙였다. 구현되지 않은 모드가
스토어 스크린샷에서 동작하는 것처럼 보이면 Play 의 허위 표시 정책에 걸린다.

store/ 에 Play Console 제출 자산을 모았다: 등록정보 문구, 데이터 보안 설문
답안(릴리스 APK 에 INTERNET 권한이 없음을 aapt2 로 확인), 개인정보처리방침,
피처 그래픽 1024x500, 스토어 아이콘 512x512, 폰 4장 + 태블릿 3장 스크린샷.
This commit is contained in:
2026-09-24 16:28:59 +09:00
parent cbd0f62319
commit 26bf54fb43
22 changed files with 388 additions and 140 deletions

View File

@@ -6,7 +6,13 @@ TETR.IO 스타일의 **모바일 실시간 대전 블록 스태커** 웹 게임.
이 문서는 앱 제작을 위한 **최종 빌드 진입점(entry point)** 이다. 모든 설계 결정·수치·에셋의 **정본(source of truth)은 [`TETRIG-최종명세서.md`](./TETRIG-최종명세서.md)** 이며, 구현 시 반드시 명세서와 UX 목업을 함께 열어 작업한다.
> **비용 0 · 아이폰/안드로이드 모두 지원 (2026-08-22 확정)**: 명세서대로 **웹 게임 + PWA(홈화면 설치)** 로 간다. Cloudflare Pages(무료)에 배포하면 iPhone Safari·Android Chrome에서 그대로 돌아가고, "홈 화면에 추가"로 전체화면 앱처럼 실행된다(`manifest.webmanifest` + `sw.js` 오프라인 캐시 + 앱 아이콘). **맥·Xcode·앱스토어/구글플레이 등록비·Apple Developer 멤버십이 전혀 필요 없다.** (네이티브 iOS 앱만 유료·맥 필수라 웹/PWA 경로가 무료로 크로스플랫폼을 달성하는 유일한 방법이다.) 클라이언트 진입점은 [`index.html`](./index.html)(빌드 산출물), 소스는 [`src/`](./src), 서버 계획(Cloudflare Workers + D1 + WebSocket)은 명세서 그대로.
> **배포 경로 (2026-09-24 확정)**: 출시 대상은 **Google Play 안드로이드 네이티브 앱**
> (`app/`, Kotlin Multiplatform + Compose). 아이폰은 App Store 대신 **웹 PWA**
> (`https://tetrig.pages.dev`, "홈 화면에 추가")로 커버한다 — iOS 네이티브는
> Apple Developer Program 연 $99 + 맥이 필요해 접었다. 필요한 비용은 Play 개발자
> 등록비 $25(1회)뿐이고, 웹/서버는 Cloudflare 무료 티어로 간다. 웹 클라이언트
> 진입점은 [`index.html`](./index.html)(빌드 산출물), 소스는 [`src/`](./src),
> 서버 계획(Cloudflare Workers + D1 + WebSocket)은 명세서 그대로.
---
@@ -99,19 +105,20 @@ wrangler deploy # 배포
### 네이티브 앱 (Kotlin Multiplatform + Compose Multiplatform)
`app/` 이 실제 출시 대상이다. 엔진과 UI 전부 `commonMain` 한 벌이고
Android / iOS 가 그걸 공유한다.
`app/` 이 실제 출시 대상이고, **출시 플랫폼은 Google Play(안드로이드) 하나다.**
iOS 타깃은 2026-09-24 에 제거했다 — Apple Developer Program 연 $99 와 맥이
필요해 비용 대비 실익이 없다고 판단했다. 아이폰 사용자는 웹 PWA
(`https://tetrig.pages.dev`)로 커버한다. 엔진과 UI 전부 `commonMain` 한 벌이라,
나중에 iOS 가 필요해지면 `build.gradle.kts` 에 `iosTarget` 만 다시 넣으면 된다.
```
app/composeApp/src/
commonMain/ 엔진(engine/) · 모드·타이밍(game/) · UI(ui/) · 저장소(data/)
commonTest/ 엔진 테스트 (Android/iOS 양쪽에서 동일하게 돈다)
commonTest/ 엔진 테스트 28개
androidMain/ MainActivity, 매니페스트, 아이콘, SharedPreferences 구현
iosMain/ MainViewController, NSUserDefaults 구현
app/iosApp/ SwiftUI 껍데기 + XcodeGen 설정
```
안드로이드 빌드 (이 저장소에서 바로 가능):
안드로이드 빌드:
```bash
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
@@ -123,18 +130,22 @@ cp keystore.properties.sample keystore.properties # 서명 키 경로/비번
# → composeApp/build/outputs/bundle/release/composeApp-release.aab
```
iOS 빌드 (**macOS + Xcode 필요**. 리눅스에서는 코드만 컴파일 검증되고 실제
프레임워크 빌드는 되지 않는다):
### Play Console 제출 자산
```bash
brew install xcodegen
cd app/iosApp && xcodegen generate && open iosApp.xcodeproj
# Xcode 에서 실행하면 prebuild 스크립트가
# ./gradlew :composeApp:embedAndSignAppleFrameworkForXcode 를 돌려
# ComposeApp.framework 를 만들어 링크한다.
`store/` 에 스토어 등록에 필요한 것이 다 들어 있다.
```
store/listing.md 앱 이름·설명·데이터보안 설문 답안·콘텐츠 등급 가이드
store/privacy.html 개인정보처리방침 (https://tetrig.pages.dev/privacy 로 배포됨)
store/feature_graphic.png 1024x500 피처 그래픽
store/icon-512-play.png 512x512 스토어 아이콘 (알파 없는 정사각형)
store/shots/0*.png 휴대전화 스크린샷 1080x2400 4장
store/shots/tablet_*.png 태블릿 세로 1600x2560 2장 + 가로 2560x1600 1장
store/make_feature_graphic.py, store/make_play_icon.py 자산 재생성 스크립트
```
App Store 출시에는 Apple Developer Program 등록(연 $99)과 맥이 필요하다.
앱은 `INTERNET` 권한조차 요청하지 않는다(`aapt2 dump badging` 으로 확인).
그래서 Play 데이터 보안 설문은 전 항목 "수집 안 함"으로 끝난다.
### 기기 호환
@@ -147,8 +158,7 @@ App Store 출시에는 Apple Developer Program 등록(연 $99)과 맥이 필요
| 갤럭시 Z 플립 본화면(초세로) | 보드를 세로로 더 키움 |
| 갤럭시 Z 플립 커버(소형) | 축소 배율 + 넥스트 3개로 감축 |
| 갤럭시 Z 폴드 펼침(정사각형에 가까움) | 넓은 폭 레이아웃, 카드 가로 배치 |
| 태블릿 / 아이패드 가로 | 보드 가운데, 조작을 좌우 엄지 영역으로 분리 |
| 아이폰 | 동일 코드. 세이프에어리어 처리 |
| 태블릿 가로 | 보드 가운데, 조작을 좌우 엄지 영역으로 분리 |
접었다 펴기·회전은 액티비티 재시작 없이 처리한다
(`configChanges` + `resizeableActivity=true`).
@@ -168,7 +178,8 @@ scripts/release.sh patch # 또는 minor / major
### 웹 (Cloudflare Pages)
`index.html` 기반 PWA 는 그대로 유지한다 (아이폰 미설치 사용자용 / 데모).
`index.html` 기반 PWA 는 그대로 유지한다 (아이폰 사용자용 / 데모).
`dist/privacy.html` 은 개인정보처리방침이고 `/privacy` 로 서빙된다.
```bash
node build.js