Skip to main content
Mobile Launcher
Deployment

App Store Deployment

Deploy your iOS app to the App Store

App Store Deployment

This guide walks you through building your iOS app and shipping it to the App Store, from account setup to approval.

Quick Start

Already have an Apple Developer Account and App Store Connect app created? Run these commands:

# 1. Build production IPA yarn build:prod # 2. Submit to App Store Connect eas submit --platform ios --profile production

EAS handles code signing, provisioning profiles, and upload automatically. Your build will appear in App Store Connect within minutes.

First time deploying to iOS? Follow the full guide below. It takes about 30 minutes to set everything up.


Full Guide

Prerequisites

Before you start, make sure you have:

  • Apple Developer Account ($99/year), developer.apple.com
  • Mac computer (required for Transporter upload, optional if using eas submit)
  • Xcode installed (latest version from Mac App Store)
  • App built and tested locally with yarn ios
  • App assets ready (1024x1024 icon, screenshots, description, privacy policy URL)

Part 1: Apple Developer Account Setup

Step 1: Join the Apple Developer Program

  1. Visit developer.apple.com/programs
  2. Click "Enroll"
  3. Sign in with your Apple ID (or create one)
  4. Choose your account type:
    • Individual, For personal apps ($99/year)
    • Organization, For company apps ($99/year, requires a D-U-N-S number)
  5. Complete payment
  6. Wait for approval (usually 24–48 hours)

Organization accounts require a D-U-N-S number, which can take 1–2 weeks to obtain. Start early if you need one. Check if you already have one at dnb.com.

Step 2: Enable Two-Factor Authentication

Two-factor authentication is required for App Store Connect access.

  1. Go to appleid.apple.com
  2. Navigate to Sign-In and SecurityTwo-Factor Authentication
  3. Follow the prompts to enable it

Step 3: Generate an App-Specific Password (for EAS Submit)

If you plan to use eas submit from the command line:

  1. Go to appleid.apple.com
  2. Navigate to Sign-In and SecurityApp-Specific Passwords
  3. Click "Generate" and name it "EAS Submit"
  4. Save this password, you'll need it when running eas submit

Part 2: App Store Connect Setup

Step 1: Create Your App

  1. Go to appstoreconnect.apple.com
  2. Click "My Apps""+""New App"
  3. Fill in the details:
FieldValue
PlatformsiOS
NameYour app name (max 30 characters, must be unique on the App Store)
Primary LanguageYour main language
Bundle IDMust match bundleIdentifier in your app.json (e.g., com.yourcompany.yourapp)
SKUA unique identifier (e.g., yourapp_ios_v1)
User AccessFull Access

Bundle ID not showing? You need to register it first in the Apple Developer PortalIdentifiers"+"App IDs.

Step 2: Complete App Information

In App Store Connect, navigate through these tabs to fill in your app details:

App Information Tab

  • Category: Select a Primary category (e.g., Productivity, Lifestyle) and optionally a Secondary
  • Content Rights: Declare if your app uses third-party content
  • Age Rating: Complete the questionnaire (takes 2 minutes)

Pricing and Availability Tab

  • Price: Free or select a price tier
  • Availability: Select countries where your app will be available

Privacy Tab

  • Click "Get Started" under App Privacy
  • Declare data collection practices for each category:
    • Contact Info, User Content, Identifiers, Usage Data, etc.
  • Link your Privacy Policy URL (required)

Version Information Tab

This is where you add your store listing content:

FieldDetails
ScreenshotsRequired for 6.7" (iPhone 15 Pro Max) and 6.5" (iPhone 11 Pro Max). iPad screenshots needed if supportsTablet: true.
DescriptionMax 4,000 characters. First 3 lines are visible before "more".
KeywordsMax 100 characters, comma-separated (e.g., ai,productivity,planner)
Support URLYour support page or contact link
Marketing URLYour app's website (optional)
What's NewRelease notes for this version

Screenshot sizes: Use a tool like Screenshots Pro or AppMockUp to generate store-ready screenshots with device frames. You need at minimum 6.7" and 6.5" iPhone sizes.


Part 3: Project Configuration

Update app.json

Ensure your app.json has the correct iOS configuration:

Json
{
  "expo": {
    "name": "Your App Name",
    "slug": "your-app-slug",
    "version": "1.0.0",
    "ios": {
      "bundleIdentifier": "com.yourcompany.yourapp",
      "buildNumber": "1",
      "supportsTablet": true,
      "infoPlist": {
        "NSCameraUsageDescription": "This app uses the camera to take photos.",
        "NSPhotoLibraryUsageDescription": "This app accesses your photos to let you choose a profile picture."
      }
    }
  }
}

Remove unused permissions! Apple will reject your app if you request permissions you don't use. Only include infoPlist entries for features your app actually uses.

Configure EAS Submit

Add your Apple credentials to eas.json so EAS can upload builds automatically:

Json
{
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@email.com",
        "ascAppId": "1234567890",
        "appleTeamId": "ABC123DEF4"
      }
    }
  }
}

Where to find these values:

FieldWhere to Find
appleIdYour Apple ID email
ascAppIdApp Store Connect → Your App → GeneralApp InformationApple ID (numeric)
appleTeamIddeveloper.apple.com/accountMembership DetailsTeam ID

Part 4: Build & Submit

Step 1: Run the Production Build

yarn build:prod

This triggers an EAS cloud build that:

  1. Compiles your app for iOS
  2. Signs it with your provisioning profile (EAS manages this automatically)
  3. Generates an .ipa file
  4. Stores it on your Expo dashboard

First build? EAS will prompt you to log in and may ask you to select or create credentials. Follow the prompts, EAS handles provisioning profiles and certificates automatically.

The build typically takes 10–20 minutes. You can monitor progress at expo.dev.

Step 2: Upload to App Store

Choose one of these methods:

Option A: EAS Submit (Recommended)

The fastest way, runs entirely from the command line:

eas submit --platform ios --profile production

EAS will ask you to select a build and then upload it directly to App Store Connect.

Option B: Transporter App (Manual)

If you prefer a visual tool:

  1. Download Transporter from the Mac App Store
  2. Sign in with your Apple ID
  3. Download your .ipa from the Expo dashboard → your project → Builds
  4. Drag and drop the .ipa into Transporter
  5. Click "Deliver"

Transporter gives more detailed error messages if something goes wrong.

Privacy Manifests (Required since 2024)

Apple requires a PrivacyInfo.xcprivacy file for apps using certain APIs. Expo SDK 50+ handles this automatically when configured in app.json:

Json
"ios": {
  "privacyManifests": {
    "NSPrivacyAccessedAPITypes": [
      {
        "NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryFileTimestamp",
        "NSPrivacyAccessedAPITypeReasons": ["C617.1"]
      },
      {
        "NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryUserDefaults",
        "NSPrivacyAccessedAPITypeReasons": ["CA92.1"]
      }
    ]
  }
}

If you receive emails from Apple about missing privacy manifests, check Expo's privacy manifest docs for the latest required entries.


Part 5: TestFlight & App Review

TestFlight Beta Testing

Before releasing publicly, test with real users via TestFlight.

Internal Testing (No Review)

  1. Go to TestFlight tab in App Store Connect
  2. Click "+" next to Internal Group to create a group
  3. Add team members by email (up to 100 internal testers)
  4. Testers receive an email with a link to install via the TestFlight app
  5. Builds are available immediately, no review required

External Testing (Requires Review)

  1. Click "+" next to External Group to create a group
  2. Add testers by email or generate a public link
  3. Fill in the beta test details (what to test, contact info)
  4. Submit for Beta App Review (usually approved within 24 hours)
  5. External testers can then install via TestFlight

Submit for App Review

Once you're satisfied with testing:

  1. Go to the App Store tab → select your version (e.g., 1.0)
  2. Scroll to Build → click "+" → select your uploaded build
  3. Fill in App Review Information:
    • Contact info: Name, phone, email
    • Demo account: If your app requires login, provide test credentials
    • Notes: Any special instructions for the reviewer
  4. Verify all metadata, screenshots, and privacy info are complete
  5. Click "Submit for Review"

Review Timeline

Review TypeTypical Duration
Beta App Review24 hours
First App Review24–48 hours
Update Review24 hours
Expedited ReviewSame day (request via Apple's form)

Common rejection reasons: Missing privacy policy, requesting unused permissions, incomplete metadata, crashes during review. Test thoroughly before submitting.


Common Issues

IssueSolution
"Missing Compliance"In App Store Connect, select "No" for encryption export if you only use standard HTTPS (no custom encryption).
Privacy Manifest emailsUpdate expo-secure-store and add the required API types to privacyManifests in app.json.
Bundle ID mismatchEnsure bundleIdentifier in app.json matches exactly what's registered in App Store Connect.
Build fails with signing errorRun eas credentials to check/reset your iOS credentials. EAS manages them automatically but sometimes needs a refresh.
"Invalid Binary" after uploadUsually a missing NSPrivacyAccessedAPITypes entry. Check Apple's email for the specific issue.
App rejected for permissionsRemove any infoPlist permission strings for features you don't use.
Screenshots rejectedEnsure screenshots show actual app content (no placeholder text) and match the selected device sizes.

Next Steps