skills/0xkynz/codekit/mobile-app-distribution

mobile-app-distribution

SKILL.md

Mobile App Distribution

Publish React Native apps to Apple App Store and Google Play Store. Covers signing, building, submitting, and passing review.

Quick Reference

Topic Reference
Android Signing & Publishing Upload key, Gradle config, AAB/APK, ProGuard, Google Play
iOS Publishing Xcode release scheme, archiving, App Store Connect, TestFlight
App Store Review Guidelines Apple's review rules — safety, performance, business, design, legal
Pre-Submission Checklist Both platforms — signing, metadata, screenshots, compliance

Android: Key Steps

1. Generate upload key

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

2. Configure Gradle signing

Add to ~/.gradle/gradle.properties (not project, to avoid Git commits):

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Add signing config to android/app/build.gradle:

signingConfigs {
    release {
        if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
            storeFile file(MYAPP_UPLOAD_STORE_FILE)
            storePassword MYAPP_UPLOAD_STORE_PASSWORD
            keyAlias MYAPP_UPLOAD_KEY_ALIAS
            keyPassword MYAPP_UPLOAD_KEY_PASSWORD
        }
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

3. Build release AAB

npx react-native build-android --mode=release

Output: android/app/build/outputs/bundle/release/app-release.aab

4. Test release build

npx react-native run-android --mode=release

iOS: Key Steps

1. Configure release scheme

Xcode: Product > Scheme > Edit Scheme > Run > Build Configuration > Release

2. Build and archive

  • Set device to Any iOS Device (arm64)
  • Product > Archive
  • Verify Bundle Identifier matches Apple Developer Dashboard

3. Submit

  • Archive window: Distribute App > App Store Connect > Upload
  • Find build in App Store Connect under TestFlight
  • Fill metadata, select build, Submit For Review

CLI alternative

npx react-native run-ios --mode=Release

Apple Review: Common Rejection Reasons

Reason Guideline Fix
Crashes/bugs 2.1 Test thoroughly, fix all crashes before submission
Incomplete metadata 2.3 Complete all fields, accurate screenshots showing app in use
Login required without demo 2.1 Provide demo account in App Review notes
Missing privacy policy 5.1.1 Add privacy policy link in App Store Connect and within app
Requesting unnecessary permissions 5.1.1(iii) Only request data relevant to core functionality
Hidden features 2.3.1 Describe all features in Notes for Review
In-app purchase bypass 3.1.1 Use Apple IAP for digital content/features
No account deletion 5.1.1(v) Offer account deletion if supporting account creation
Minimum functionality 4.2 App must be more than a repackaged website
Missing Sign in with Apple 4.8 Required when offering third-party social login

Key Rules

  • Keep keystore private — if Android upload key is compromised, follow Google's reset process
  • Never commit signing credentials to Git — use ~/.gradle/gradle.properties or CI secrets
  • Ensure gradle.properties does not have org.gradle.configureondemand=true — breaks JS bundling
  • Test release builds on device before submitting
  • Screenshots must show app in use — not splash screens or login pages
  • Privacy policy is mandatory for both platforms
  • Expo users: Use expo build or EAS Build for automated distribution
Weekly Installs
4
Repository
0xkynz/codekit
GitHub Stars
1
First Seen
11 days ago
Installed on
opencode4
antigravity4
claude-code4
github-copilot4
codex4
zencoder4