Skip to main content
Mobile Launcher
First App Launch in 30 minutes

Expo Dev Integration

Set up Expo Application Services (EAS) for builds, updates, and submissions

Expo Dev Integration

EAS (Expo Application Services) is already configured in the boilerplate. This guide shows you how to connect your own Expo account and configure builds, submissions, and over-the-air updates.

What's Included

  • EAS Build: Development, preview, and production build profiles
  • EAS Submit: Automated submission to App Store and Google Play
  • EAS Update: Over-the-air updates without rebuilding
  • Environment Profiles: Separate configs for dev, staging, and production

Step 1: Create an Expo Account

Sign Up

  1. Go to expo.dev and create an account
  2. (Optional) Create an organization if working with a team
  3. Review the pricing plans, the free tier includes limited builds per month, and the $29/month production plan offers unlimited builds

Get Your Access Token

  1. Go to expo.dev/settings/access-tokens
  2. Click Create token
  3. Name it (e.g., "CI/CD" or "Development")
  4. Copy the token and save it, you'll need it for your .env file and CI/CD

Step 2: Configure EAS Build

Understand Build Profiles

The boilerplate includes an eas.json with three build profiles:

  • development: Creates a dev client with debugging enabled, distributed internally to your team
  • preview: Internal distribution build for testing, no dev tools, closer to production
  • production: Optimized build ready for App Store and Google Play submission

iOS Build Setup

To build for iOS, you need:

  1. An Apple Developer account ($99/year at developer.apple.com/programs)
  2. EAS can manage certificates and provisioning profiles automatically, when prompted during your first build, select Let EAS handle it
  3. For push notifications, make sure you've already uploaded your APNs key to Firebase (see the Firebase guide)

Android Build Setup

To build for Android, you need:

  1. A Google Play Developer account ($25 one-time fee at play.google.com/console/signup)
  2. EAS generates an Android keystore automatically on first build, save it securely as you'll need the same keystore for all future builds
  3. Make sure your google-services.json is in the project root (see the Firebase guide)

Step 3: Configure EAS Submit

iOS Submission

To submit to the App Store:

  1. Create your app in App Store Connect with the matching bundle ID
  2. Generate an App Store Connect API key (App Store Connect → Users and Access → Integrations → App Store Connect API)
  3. Add the API key credentials to your EAS configuration or as project secrets
  4. EAS Submit will handle uploading the build to TestFlight/App Store

Android Submission

To submit to Google Play:

  1. Create your app in Google Play Console with the matching package name
  2. Use the same service account JSON you created for RevenueCat (or create a new one with deployment permissions)
  3. Add the service account JSON as an EAS project secret
  4. EAS Submit will handle uploading to the internal, closed, or production track

Step 4: Configure EAS Update (OTA)

The boilerplate is pre-configured for over-the-air updates. This lets you push JavaScript changes to users without rebuilding the app.

  • Update channels map to build profiles (development, preview, production)
  • Runtime versions ensure updates are only sent to compatible builds
  • Updates happen automatically when the app starts, or you can configure manual update checks

OTA updates can only change JavaScript code. Native changes (new libraries, permissions, etc.) require a new build.


Step 5: Environment Management

The boilerplate uses environment variables for different stages:

  • Development: Local API URLs, debug flags, verbose logging
  • Staging: Staging API URLs, test payment credentials
  • Production: Production API URLs, live payment credentials

Store sensitive values as EAS Secrets (project-level) rather than in your .env file, especially for CI/CD builds.


Common Issues

IssueSolution
Build fails on iOSCheck certificates and provisioning profiles, let EAS re-generate them
Keystore mismatch on AndroidEnsure you're using the same keystore as previous builds
OTA update not applyingVerify runtime version matches between build and update
Environment variables missingCheck they're set as EAS Secrets for CI builds
Submission rejectedReview store guidelines, App Store, Google Play

Additional Resources