App Store (iOS)Expo

How to Publish an Expo App on the App Store

Expo simplifies React Native development by abstracting away much of the native complexity. With Expo Application Services (EAS), you can build iOS binaries in the cloud without even owning a Mac. This guide covers the modern Expo workflow using EAS Build and EAS Submit to go from `expo init` to the App Store with minimal friction.

Prerequisites

  • An Expo account (free at expo.dev)
  • An Apple Developer Program membership ($99/year)
  • EAS CLI installed globally (npm install -g eas-cli)
  • Your app built with Expo SDK 49+ (managed or bare workflow)
  • app.json or app.config.js properly configured

Step-by-Step Build Process

1

Configure app.json for iOS

Set `expo.ios.bundleIdentifier` (e.g., 'com.yourcompany.appname'), `expo.ios.buildNumber` (increment for each upload), and `expo.ios.supportsTablet` if applicable. Add `expo.ios.infoPlist` entries for any required permissions.

2

Set up EAS Build

Run `eas build:configure` to generate eas.json. This file defines your build profiles. The default 'production' profile for iOS uses the 'app-store' distribution method.

3

Run the cloud build

Execute `eas build --platform ios --profile production`. EAS will prompt you to log in to your Apple account, create/select certificates and provisioning profiles automatically. The build runs on Expo's cloud infrastructure — no Mac needed.

4

Download and verify the IPA

Once the build completes, download the .ipa from the EAS dashboard. While EAS Submit can upload directly, it's good practice to verify the build succeeded by checking the artifact size and build logs for warnings.

Code Signing & Certificates

Let EAS manage credentials (recommended)

When running `eas build` for the first time, choose 'Let Expo handle it'. EAS will create a distribution certificate and provisioning profile on your Apple account automatically. This is the simplest approach and works for most indie developers.

Using your own credentials

If you prefer manual control, generate a distribution certificate in the Apple Developer portal and create an App Store provisioning profile. Point to them in eas.json under `ios.credentialsSource: 'local'`.

Store Submission Steps

1

Create the app in App Store Connect

Log into App Store Connect and create a new app. Use the same bundle identifier as in app.json. Fill in the required metadata, screenshots, and app description.

2

Submit using EAS Submit

Run `eas submit --platform ios`. EAS will upload the latest build directly to App Store Connect. You'll need an App Store Connect API key — EAS guides you through creating one.

3

Configure app metadata in App Store Connect

Add screenshots, description, keywords, and support URL. Set the pricing and availability. Fill in the App Review Information with demo credentials if your app requires login.

4

Submit for Apple review

Select the uploaded build in App Store Connect, complete all required fields, and click 'Submit for Review'. Apple reviews typically take 24-48 hours.

Common Rejection Reasons & Fixes

Guideline 2.1 - Performance: App Completeness

Expo apps using `expo-updates` sometimes show an update loading screen on first launch that confuses reviewers. Disable OTA updates for the review build or ensure the app loads quickly without an update available.

Guideline 4.0 - Minimum Functionality

Apps built with Expo's default template may look too simple to Apple. Ensure your app provides genuine value and isn't just a web wrapper. Use native components and gesture handling to feel native.

Guideline 5.1.2 - Data Use and Sharing

If using expo-tracking-transparency, ensure the ATT prompt appears before any tracking occurs. Declare all Expo SDK data collection (analytics, crash reports) in the App Privacy section.

Missing push notification entitlement

If your app requests push notification permissions (via expo-notifications), ensure the Push Notification capability is enabled in your Apple Developer account for your App ID.

Pro Tips

  • Use `expo-dev-client` during development to test native modules without ejecting
  • Run `npx expo-doctor` before building to catch configuration issues early
  • Set up EAS Update for over-the-air JavaScript updates after your app is published
  • Use `eas build --auto-submit` to combine build and submission in one command
  • Keep your Expo SDK version up to date — Apple sometimes requires newer iOS APIs that older SDK versions don't support

Skip the hassle. Let us handle it.

Publishing a Expo app on the App Store (iOS) involves dozens of steps, certificates, and potential rejection pitfalls. Our team handles the entire process for you — from build configuration to store approval.

Related Guides