← ClaudeAtlas

store-releaselisted

Build, sign, upload and ship a mobile app or game to Google Play and the App Store — upload keystores and Play App Signing, AAB vs APK, versionCode and versionName rules, internal/closed/open/production tracks, staged rollout, iOS certificates and provisioning profiles, Xcode archives, TestFlight, App Store Connect submission, CI automation with fastlane or the publishing APIs, secret handling, and what to do when review rejects the build. Use when preparing a release build, setting up signing, creating a testing track, automating uploads, or recovering from a store rejection.
thomaslimited/game-shipping-skills · ★ 1 · AI & Automation · score 77
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