nkbmusic/docs/app-store-release.md
metatroncubeswdev fc989b4c77 Store release setup: app icon, launch screen, iOS config, Android signing, Codemagic
- 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>
2026-10-31 00:06:31 -04:00

97 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_app` repo added.
## 2. Codemagic setup (one-time)
1. **Variables.** Open App settings > Environment variables and create the group **`nk_app`** with:
- `SUPABASE_URL` = `https://app.nkbmusic.com`
- `SUPABASE_PUBLISHABLE_KEY` = the value from your local `env.json`
- `MEDIA_BASE_URL` = `https://app.nkbmusic.com/storage/v1/object/public/audio`
2. **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`**.
3. **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).
4. **Android signing.** On the same page, under Android keystores, upload
`C:\Users\manes\nk-keys\nk-upload.jks` with the reference name **`nk_upload_keystore`**,
alias `upload`. The password is in `C:\Users\manes\nk-keys\key.properties.backup`.
5. **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 group **`nk_google_play`**.
## 3. iOS: first release
1. 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.
2. In App Store Connect, create the app with the name **Nanga Kathai**, that bundle ID, and primary language English (India or UK).
3. 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.
4. Test it from the TestFlight app on an iPhone.
5. Fill in the listing (section 5) and submit for review.
## 4. Android: first release
1. In Play Console, create the app: Nanga Kathai, App, Free.
2. Build the first bundle locally and upload it manually. Google requires the very first upload to be done by hand.
```
flutter build appbundle --release --dart-define-from-file=env.json
```
The file is `build/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 with `nk-upload.jks`.
3. Later builds come from the Codemagic **Android release** workflow, which uploads a draft to Internal testing.
4. 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.