store-releaselisted
Install: claude install-skill thomaslimited/game-shipping-skills
# Store Release
Getting the binary into the store. For the product page itself, see `store-listing`.
## The one-way doors
Decide these correctly the first time; all three are expensive or impossible to undo.
| Decision | Why it is permanent |
|---|---|
| **Application ID / bundle ID** | cannot be changed after the first upload. A new ID is a new app with zero ratings and zero installs. Use a domain you control, reversed: `com.yourstudio.yourgame`. |
| **Upload keystore** | losing it locks you out of updating the app. Play App Signing lets Google re-issue an upload key if you lose it, which is the main reason to enrol. Without it, a lost key ends the app. |
| **Product IDs for IAP** | never reusable on either store (see `game-iap`). |
Back the keystore up **outside the repository** before the first upload, along with its password
and the certificate fingerprints. A keystore in git is a compromised keystore.
## Android
Full procedure: `references/android-release-pipeline.md`. The essentials:
- **AAB for Play** (required for new apps), APK only for direct distribution and testing.
- **Enrol in Play App Signing.** You keep an *upload* key; Google holds the signing key. This is
the only recovery path from a lost key.
- **`versionCode` must strictly increase** with every upload, per track, forever. A rejected
upload still burns the number. Automate it from CI rather than editing by hand.
- **Keep signing secrets out of the project files.** Pass them through environment