ScaleRocket/Mobile

App Store Deployment

Build, submit, and publish your mobile app to the Apple App Store with EAS Build and EAS Submit.

App Store Deployment

This guide covers building your iOS app with EAS, submitting to the App Store, and navigating the review process.

Prerequisites

1. Prepare Your App

Update app.json before your first production build:

{
  "expo": {
    "name": "Your App Name",
    "slug": "your-app-slug",
    "version": "1.0.0",
    "ios": {
      "bundleIdentifier": "com.yourcompany.yourapp",
      "buildNumber": "1",
      "supportsTablet": true
    }
  }
}

Important: The bundleIdentifier cannot be changed after publishing to the App Store. Choose carefully.

2. Build with EAS

eas build --platform ios --profile production

EAS handles certificate and provisioning profile management automatically. On your first build, it will:

  1. Create a Distribution Certificate
  2. Create a Provisioning Profile
  3. Store them securely on EAS servers

The build takes approximately 10-20 minutes. You can monitor progress on expo.dev.

3. Submit to App Store

eas submit --platform ios

EAS Submit uploads the build to App Store Connect. You will need your Apple ID and an app-specific password (generate one at appleid.apple.com).

4. Complete the Submission

In App Store Connect, fill in the required metadata:

  • Screenshots — Required for 6.7" and 5.5" iPhone sizes (iPad if you support tablets)
  • Description — App description, keywords, support URL
  • Privacy policy URL — Required for all apps
  • App category — Select the most relevant category
  • Review notes — Provide a demo account if sign-up requires verification

Review Notes Template

Demo account:
Email: reviewer@example.com
Password: ReviewTest123!

This app requires an internet connection.
Push notifications are optional.

App Store Review Process

Apple reviews typically take 24-48 hours (can be longer for first submissions). Your app may be approved, rejected, or put on hold.

Common Rejection Reasons

ReasonHow to Avoid
Broken loginProvide a working demo account in review notes
Missing privacy policyAdd a privacy policy URL in App Store Connect and in-app
Incomplete metadataProvide screenshots for all required device sizes
Crash on launchTest the production build on a real device before submitting
No Apple Sign-InIf you offer Google OAuth, you must also offer Apple Sign-In on iOS
Wrong purchase methodDigital goods must use Apple's In-App Purchase (Stripe is only for physical goods/services)
Missing usage descriptionsIf using camera, location, etc., add purpose strings to app.json

Version Bumping

For each new release, increment the version and build number in app.json:

{
  "expo": {
    "version": "1.1.0",
    "ios": {
      "buildNumber": "2"
    }
  }
}

The version is shown to users. The buildNumber must be unique per submission.

Environment Variables

Set production environment variables for EAS builds:

eas secret:create --name EXPO_PUBLIC_SUPABASE_URL \
  --value "https://prod.supabase.co" --scope project

Or configure them in eas.json:

{
  "build": {
    "production": {
      "env": {
        "EXPO_PUBLIC_SUPABASE_URL": "https://prod.supabase.co"
      }
    }
  }
}

On this page