Skip to content
All essays
iOSFebruary 3, 202513 min

React Native Deployment: App Store & Play Store

Deploy React Native apps to production. Learn code signing, store submission, and automated builds.

Ü
Ümit Uz
Mobile & Full Stack Developer

iOS Deployment

App Store Connect

  1. 1Create App ID

- Go to Apple Developer Portal - Identifiers → App IDs → Register App

  1. 1Provisioning Profile

- Create provisioning profile - Download and install

  1. 1Code Signing
bash
# Generate certificate
openssl genrsa -out mykey.key 2048
openssl req -new -key mykey.key -out CertificateSigningRequest.certSigningRequest
  1. 1Xcode Configuration
xml
<!-- ios/MyApp/Info.plist -->
<key>CFBundleIdentifier</key>
<string>com.company.myapp</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
  1. 1Archive
bash
# Build archive
npx react-native run-ios --configuration Release

# Or use Xcode
Product Archive
  1. 1Upload to App Store
bash
# Using Xcode
Window Organizer Archive Upload

TestFlight

  1. 1Internal Testing

- Add internal testers - Distribute via TestFlight

  1. 1External Testing

- Create external testing group - Share public link

Android Deployment

Google Play Console

  1. 1Create App

- Go to Google Play Console - Create application

  1. 1Generate Signed APK/AAB
bash
# Generate signing key
keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
  1. 1Configure Gradle
groovy
// android/app/build.gradle
android {
    signingConfigs {
        release {
            storeFile file('my-upload-key.keystore')
            storePassword 'password'
            keyAlias 'my-key-alias'
            keyPassword 'password'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
  1. 1Build Release Bundle
bash
cd android
./gradlew bundleRelease
  1. 1Upload to Play Console

- Go to Release → Production - Upload AAB file

Testing Tracks

  1. 1Internal Testing: Quick testing
  2. 2Closed Testing: Beta testers
  3. 3Open Testing: Public beta
  4. 4Production: Full release

CI/CD

GitHub Actions

yaml
name: Build and Deploy

on:
  push:
    tags:
      - 'v*'

jobs:
  build-ios:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Install dependencies
        run: npm ci
      - name: Build iOS
        run: |
          cd ios
          pod install
          xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -configuration Release archive

Fastlane

ruby
# Fastfile
lane :beta do
  increment_build_number
  build_app(scheme: "MyApp")
  upload_to_testflight
end

lane :release do
  increment_build_number
  build_app(scheme: "MyApp")
  upload_to_app_store
end

Version Management

Semantic Versioning

json
{
  "version": "1.0.0",
  "buildNumber": "100"
}

Auto-Increment

javascript
// package.json
{
  "scripts": {
    "version:patch": "npm version patch && cd ios && pod install",
    "version:minor": "npm version minor && cd ios && pod install",
    "version:major": "npm version major && cd ios && pod install"
  }
}

App Icons & Splash Screens

Generate Icons

bash
npm install -g react-native-icon-setter
react-native-icon-setter icon.png

Splash Screen

bash
npm install react-native-splash-screen

Store Listing

Screenshots

  • iPhone 6.7" Display (1290x2796)
  • iPhone 6.5" Display (1242x2688)
  • Android Phone (1080x1920)

Description

Brief description (80 chars): App description here

Full description: Detailed description with features

Keywords

iOS: Separate with commas
Android: Separate with spaces

Updates

iOS Updates

  1. 1Increment version
  2. 2Build and archive
  3. 3Upload to App Store Connect
  4. 4Submit for review

Android Updates

  1. 1Increment version
  2. 2Build AAB
  3. 3Upload to Play Console
  4. 4Roll out to production

Best Practices

  1. 1Test thoroughly: Before submission
  2. 2Follow guidelines: Store policies
  3. 3Prepare assets: Screenshots, icons
  4. 4Optimize size: Reduce bundle size
  5. 5Monitor crashes: Use crash reporting
  6. 6Gather feedback: Early access testing

Conclusion

Deploying to stores requires attention to detail. Follow the process carefully for successful submissions.

Related essays

Next essay
React Native Performance Optimization: Ultimate Guide