Skip to main content
You need an active Apple Developer Program membership to sign and distribute iOS builds. Complete app identity and EAS project setup before creating Apple records.

Decide which variants to distribute

apps/mobile/app.config.js creates these bundle identifiers from the base BUNDLE_ID: Register every identifier that you will sign. The included dev-store, preview-store, and production-store profiles can all produce store-distribution builds, so each may need its own App ID and App Store Connect app. You can omit non-production store records if you only distribute those variants internally.

Replace starter Apple values

Before creating a build, replace:
  • expo.ios.appleTeamId in apps/mobile/app.json
  • Every submit.<profile>.ios.appleTeamId in apps/mobile/eas.json
  • Every submit.<profile>.ios.ascAppId in apps/mobile/eas.json
ascAppId is the numeric Apple ID shown in App Store Connect. It is not the bundle identifier.
The repository contains starter-specific Apple team and App Store Connect IDs. Builds or submissions can target the wrong account if you leave them unchanged.

Register identifiers and capabilities

In Certificates, Identifiers & Profiles, create an explicit App ID for each distributed bundle identifier. Enable only the capabilities your variant needs. The current app configuration requires attention to:
  • Associated Domains for applinks:mobile-starter.amisi.ai; replace this domain and host the required apple-app-site-association file.
  • Sign in with Apple when using the Apple auth flow. The expo-apple-authentication plugin is installed; enable the capability for the App ID and add ios.usesAppleSignIn: true if required by your Expo configuration.
  • Push Notifications when shipping OneSignal or Expo push notifications.
  • Firebase and Google sign-in settings that must match the exact bundle identifier.
Update expo.ios.associatedDomains in apps/mobile/app.json for your domain. Update the Firebase iOS app and plist for every variant after changing identifiers.

Create App Store Connect records

In App Store Connect:
  1. Open My Apps and create an app.
  2. Select the registered bundle ID.
  3. Choose a unique SKU.
  4. Record the numeric Apple ID as the profile’s ascAppId in eas.json.
  5. Complete app information, pricing and availability, privacy disclosures, age rating, support and privacy URLs, and version metadata.
Create separate records for suffixed variants only when you intend to submit those variants through their store profiles.

Configure signing with EAS

From the mobile app directory, let EAS create or reuse the distribution certificate and provisioning profile:
Use an Apple account with sufficient access, or configure App Store Connect API-key access for your team. Review generated credentials before sharing a profile across apps. Verify the evaluated identity, team, associated domains, and Firebase path:

Build and submit

The root production build command creates an internal-distribution artifact. Build the store profile explicitly for App Store Connect:
After processing, submit with the configured store profile:
The development and preview submit scripts use dev-store and preview-store. Ensure their ascAppId values refer to records whose bundle IDs match the .dev and .preview builds.

TestFlight and review checklist

Before review:
  • Test the exact production-store build through TestFlight.
  • Verify login, account deletion where applicable, purchases, restore purchases, notifications, universal links, and offline/error states.
  • Provide a working review account when authentication gates functionality.
  • Complete App Privacy disclosures for Firebase, analytics, crash reporting, subscriptions, notifications, and any other data collection.
  • Add required usage descriptions and explain non-obvious functionality in review notes.
  • Confirm screenshots, support URL, privacy policy, export-compliance answers, and contact details.
  • Follow Apple’s Sign in with Apple requirements when offering qualifying third-party sign-in options.
For external TestFlight testing, complete beta app information and submit the build for beta review. Internal testers must be App Store Connect users with appropriate access.

Troubleshooting

Bundle ID is unavailable

Use an identifier owned by your team. Bundle IDs are globally unique and become difficult or impossible to change after release.

Provisioning profile lacks a capability

Enable the capability on the App ID, update Expo config, and regenerate the provisioning profile with eas credentials before rebuilding.

Build does not appear in App Store Connect

Confirm the build’s bundle ID, App Store Connect record, signing team, and ascAppId. Then review EAS submission and App Store Connect processing logs.

Official documentation

Next steps