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
- Go to expo.dev and create an account
- (Optional) Create an organization if working with a team
- 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
- Go to expo.dev/settings/access-tokens
- Click Create token
- Name it (e.g., "CI/CD" or "Development")
- Copy the token and save it, you'll need it for your
.envfile 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:
- An Apple Developer account ($99/year at developer.apple.com/programs)
- EAS can manage certificates and provisioning profiles automatically, when prompted during your first build, select Let EAS handle it
- 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:
- A Google Play Developer account ($25 one-time fee at play.google.com/console/signup)
- EAS generates an Android keystore automatically on first build, save it securely as you'll need the same keystore for all future builds
- Make sure your
google-services.jsonis in the project root (see the Firebase guide)
Step 3: Configure EAS Submit
iOS Submission
To submit to the App Store:
- Create your app in App Store Connect with the matching bundle ID
- Generate an App Store Connect API key (App Store Connect → Users and Access → Integrations → App Store Connect API)
- Add the API key credentials to your EAS configuration or as project secrets
- EAS Submit will handle uploading the build to TestFlight/App Store
Android Submission
To submit to Google Play:
- Create your app in Google Play Console with the matching package name
- Use the same service account JSON you created for RevenueCat (or create a new one with deployment permissions)
- Add the service account JSON as an EAS project secret
- 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
| Issue | Solution |
|---|---|
| Build fails on iOS | Check certificates and provisioning profiles, let EAS re-generate them |
| Keystore mismatch on Android | Ensure you're using the same keystore as previous builds |
| OTA update not applying | Verify runtime version matches between build and update |
| Environment variables missing | Check they're set as EAS Secrets for CI builds |
| Submission rejected | Review store guidelines, App Store, Google Play |