This guide will help developers master Expo’s EAS Build system, covering:
- What EAS Build is and why it matters
- How it differs from classic builds
- Setting up and configuring EAS Build
- Step-by-step deployment walkthrough
- Common pitfalls and tips for smooth production release
- Managing builds, credentials, and app stores with EAS
Table of Contents
- Introduction: Why Build & Deploy Matters
- What is Expo EAS Build?
- Classic Expo Build vs. EAS Build
- Setting Up Your Project for EAS Build
- Configuring
eas.json
for Production Builds - Managing Credentials: Signing Your Apps
- Running Your First EAS Build
- Testing Your Production Build
- Submitting to App Stores via EAS Submit
- Common Pitfalls & How to Avoid Them
- Tips for a Smooth Production Release
- Advanced: Using Build Profiles and Environment Variables
- Conclusion
1. Introduction: Why Build & Deploy Matters
As a developer, building your app for production and publishing it to app stores is a critical milestone. Yet, many get stuck due to:
- Complex native build processes
- Manual management of certificates and provisioning profiles
- Confusing configurations across platforms
- Handling multiple build environments (dev, staging, production)
Expo’s EAS Build aims to simplify and streamline this process with cloud-powered builds tailored for production. In this guide, you’ll learn the right way to use EAS Build so you can focus on shipping your app confidently and efficiently.
2. What is Expo EAS Build?
EAS Build (Expo Application Services Build) is a hosted service by Expo that compiles your React Native project into native binaries (APKs, AABs for Android; IPAs for iOS) in the cloud.
Unlike the old expo build
command:
- It supports custom native code and packages
- It’s faster and more reliable
- It uses configurable build profiles
- It manages signing credentials automatically or manually
- Supports both managed and bare workflow apps
EAS Build replaces the classic Expo build with a modern, production-ready system that scales with your app’s complexity.
3. Classic Expo Build vs. EAS Build
Feature | Classic expo build | EAS Build |
---|---|---|
Custom native code | ❌ | ✅ |
Build profiles | ❌ | ✅ |
Cloud hosted builds | ✅ | ✅ |
Credential management | Semi-automatic | Fully automated & manual options |
Build speed | Slower | Faster with caching & parallel |
Managed & Bare workflows | Managed only | Managed & Bare |
Support for latest SDKs | Limited | Supports latest React Native & Expo SDKs |
If your app requires native code modifications or you want granular control, EAS Build is the way to go.
4. Setting Up Your Project for EAS Build
Step 1: Install EAS CLI
You need Expo’s new CLI tool for EAS services.
npm install -g eas-cli
or
yarn global add eas-cli
Step 2: Login to Your Expo Account
eas login
Use your Expo credentials or sign up.
Step 3: Initialize EAS in Your Project
From your project root:
eas build:configure
This will create an eas.json
file with default build profiles for Android and iOS.
Step 4: Review app.json
or app.config.js
Ensure your Expo config includes all required info:
name
andslug
version
andbuildNumber
/versionCode
- Splash screens and icons
- Permissions
Example app.json
snippet:
{
"expo": {
"name": "MyApp",
"slug": "my-app",
"version": "1.0.0",
"ios": {
"buildNumber": "1"
},
"android": {
"versionCode": 1
},
"assetBundlePatterns": ["**/*"],
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
}
}
5. Configuring eas.json
for Production Builds
The eas.json
file controls how your app builds. It contains profiles you can customize per environment.
Basic eas.json
:
{
"build": {
"production": {
"ios": {
"workflow": "managed",
"buildType": "app-store"
},
"android": {
"workflow": "managed",
"buildType": "apk"
}
},
"development": {
"ios": {
"workflow": "managed",
"buildType": "development"
},
"android": {
"workflow": "managed",
"buildType": "apk"
}
}
}
}
workflow
:"managed"
or"bare"
depending on your appbuildType
:"app-store"
,"development"
,"apk"
, or"aab"
(Android App Bundle)
For production, you’ll often build with app-store
(iOS) and aab
(Android).
6. Managing Credentials: Signing Your Apps
iOS Credentials
To submit to the App Store, your iOS app must be signed with:
- A valid Distribution Certificate
- A Provisioning Profile linked to your app’s Bundle Identifier
EAS Build can manage these automatically:
eas credentials
You’ll be prompted to:
- Let Expo create new credentials for you, or
- Upload your own certificates and profiles
Android Credentials
For Android, you need:
- A Keystore to sign your APK/AAB
- Upload key for Play Store (if you use Play App Signing)
EAS can also generate or manage your keystores.
7. Running Your First EAS Build
Run production build for iOS:
eas build --platform ios --profile production
Run production build for Android:
eas build --platform android --profile production
You’ll see logs streaming as your build runs in the cloud. After the build finishes, you get a URL to download the binary.
8. Testing Your Production Build
- Download the
.apk
or.aab
for Android, install or upload to Play Store. - For iOS, use TestFlight to distribute and test your
.ipa
. - Verify app version, build number, assets, and functionality.
9. Submitting to App Stores via EAS Submit
You can also use EAS to submit your builds automatically:
eas submit --platform ios --path ./path-to-your-app.ipa
eas submit --platform android --path ./path-to-your-app.aab
Configure your credentials for submission or use environment variables.
10. Common Pitfalls & How to Avoid Them
- Incorrect Bundle ID or Package Name: Make sure these match your app and provisioning profiles.
- Missing App Icons or Splash Screens: Add all required assets for iOS and Android.
- Version Code and Build Number Mismatches: Always increment build numbers before submitting.
- Expired Credentials: Renew certificates and keystores when needed.
- Not Using the Right Profile: Double-check
eas.json
profile used during build.
11. Tips for a Smooth Production Release
- Use version control on your
eas.json
and config files. - Automate builds using CI/CD pipelines with EAS CLI.
- Test your builds thoroughly on physical devices.
- Use build hooks in
eas.json
for scripts like environment variable injection. - Monitor build status via Expo dashboard.
12. Advanced: Using Build Profiles and Environment Variables
You can define multiple profiles in eas.json
for:
- Development
- Staging
- Production
Example:
{
"build": {
"production": {...},
"staging": {
"ios": {
"workflow": "managed",
"buildType": "app-store"
},
"android": {
"workflow": "managed",
"buildType": "apk"
},
"env": {
"API_URL": "https://staging.example.com"
}
}
}
}
Pass environment variables to your app for different build environments.
13. Conclusion
Deploying your app for production with Expo EAS Build unlocks a streamlined, modern approach that simplifies native builds, signing, and publishing.
By mastering:
- Configuring your project and
eas.json
- Managing signing credentials
- Running and testing production builds
- Automating submissions
You can deliver your React Native apps faster, with fewer headaches.
If you haven’t tried EAS Build yet, now’s the perfect time to start — it’s a game changer for Expo developers.