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.jsonfor 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:
nameandslugversionandbuildNumber/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
.apkor.aabfor 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.jsonprofile used during build.
11. Tips for a Smooth Production Release
- Use version control on your
eas.jsonand config files. - Automate builds using CI/CD pipelines with EAS CLI.
- Test your builds thoroughly on physical devices.
- Use build hooks in
eas.jsonfor 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.
