- App icon from the NK emblem (iOS set, Android adaptive icon, Play 512 icon) - Dark launch screen on both platforms; app locked to portrait; iPhone-only - Info.plist: display name, photo/camera reasons, export compliance - Android release signing from key.properties or Codemagic CM_KEYSTORE_* - codemagic.yaml: iOS to TestFlight, Android to Play internal testing - Account deletion web page; fix trailing dot in email links - docs/app-store-release.md: step-by-step store guide Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5.9 KiB
5.9 KiB
Releasing Nanga Kathai to Google Play and the App Store
| Android | iOS | |
|---|---|---|
| App ID | com.metatroncubesolutions.nanga_kathai |
com.metatroncubesolutions.nangaKathai |
| Built by | Codemagic (android-release) or locally |
Codemagic (ios-release) |
| First stop | Play Console, Internal testing | TestFlight |
The version comes from pubspec.yaml (version: 1.0.0+1). Raise the first part (1.0.1, 1.1.0…) for
each store release. Build numbers are set automatically by Codemagic.
1. Accounts (one-time)
- Apple Developer Program (US$99 a year), enrolled as an organisation. This needs a D-U-N-S number for Metatroncube Software Solutions.
- Google Play Console (US$25 once), as an organisation account. A personal account must run a closed test with at least 12 testers for 14 days before it can publish, so use an organisation account.
- Codemagic, signed in with GitHub, with the
metatroncubeswdev/nkbmusic_apprepo added.
2. Codemagic setup (one-time)
- Variables. Open App settings > Environment variables and create the group
nk_appwith:SUPABASE_URL=https://app.nkbmusic.comSUPABASE_PUBLISHABLE_KEY= the value from your localenv.jsonMEDIA_BASE_URL=https://app.nkbmusic.com/storage/v1/object/public/audio
- App Store Connect API key.
- In App Store Connect, open Users and Access > Integrations > App Store Connect API and generate a key with the App Manager role.
- In Codemagic, open Team settings > Team integrations > Developer Portal and add the key with the name
NK App Store Connect.
- iOS signing. Open Team settings > codemagic.yaml settings > Code signing identities.
- Under iOS certificates, generate an Apple Distribution certificate.
- Under iOS provisioning profiles, fetch the App Store profile for
com.metatroncubesolutions.nangaKathai. Create that profile on developer.apple.com first if it doesn't exist (see step 3.1).
- Android signing. On the same page, under Android keystores, upload
C:\Users\manes\nk-keys\nk-upload.jkswith the reference namenk_upload_keystore, aliasupload. The password is inC:\Users\manes\nk-keys\key.properties.backup. - Google Play publishing (optional).
- Create a Google Cloud service account, invite it in Play Console > Users and permissions with release rights, and download its JSON key.
- Store the key as
GCLOUD_SERVICE_ACCOUNT_CREDENTIALS(secure) in a variable groupnk_google_play.
3. iOS: first release
- On developer.apple.com, open Identifiers and register the App ID
com.metatroncubesolutions.nangaKathai. In-App Purchase is on by default. Background audio needs nothing extra. - In App Store Connect, create the app with the name Nanga Kathai, that bundle ID, and primary language English (India or UK).
- In Codemagic, start the iOS release (TestFlight) workflow, or push a tag:
git tag v1.0.0 && git push github v1.0.0. The build is uploaded to TestFlight automatically after about 20–30 minutes plus Apple processing. - Test it from the TestFlight app on an iPhone.
- Fill in the listing (section 5) and submit for review.
4. Android: first release
- In Play Console, create the app: Nanga Kathai, App, Free.
- Build the first bundle locally and upload it manually. Google requires the very first upload to be done by hand.
The file isflutter build appbundle --release --dart-define-from-file=env.jsonbuild/app/outputs/bundle/release/app-release.aab. Upload it under Testing > Internal testing > Create release. Accept Play App Signing: Google keeps the app signing key, and you sign uploads withnk-upload.jks. - Later builds come from the Codemagic Android release workflow, which uploads a draft to Internal testing.
- Promote it from Internal testing, to Closed testing (optional), to Production.
5. Store listing checklist
Links (publish the files from site/ on nkbmusic.com first)
- Privacy Policy:
https://nkbmusic.com/privacy - Terms:
https://nkbmusic.com/terms - Account deletion (required by Play):
https://nkbmusic.com/delete-account - Support:
support@nkbmusic.com
Graphics (in assets/brand/: app_icon_1024.png and play_store_icon_512.png)
- Play: a 512×512 icon, a 1024×500 feature graphic, and 2–8 phone screenshots.
- App Store: 6.9-inch iPhone screenshots (1320×2868). The app is iPhone-only, so no iPad screenshots are needed.
Questionnaires
- Data collected (Play Data safety and Apple App Privacy):
- email, name, optional phone and photo;
- app interactions (plays) and crash/diagnostics data if crash reporting is added;
- not used for tracking or ads, data encrypted in transit, users can request deletion.
- Content rating: music app, no violence and no user chat. Expect Everyone / 4+.
- Ads: none. In-app purchases: yes (the Support products in
docs/support-payments.md).
App Review notes (important)
- Create a reviewer account (for example
review@nkbmusic.com) with a password, and enter it as the sign-in details. Apple and Google can't receive the email code. - Music rights are the most likely reason for a rejection (Apple guideline 5.2.3 and Google's IP policy). Explain it in the notes: "Nanga Kathai preserves Badaga community music from a family collection. Every song has an in-app 'Is this your song?' claim or removal option, and we act on requests promptly. New songs will come only from verified creators who confirm their rights." Keep written permission from any singers you can reach, in case review asks.
6. Keys: back these up now
C:\Users\manes\nk-keys\ holds the Android upload key and its password. Copy that folder to
two safe places, such as a password manager and an offline drive. If it is lost, Google can reset
the upload key, but that takes a support request and several days. Never commit it to git.