Use EAS Build to create development clients for testing native code changes on physical devices. Use this for creating custom Expo Go clients for testing branches of your app.
Important: When Development Clients Are Needed
Only create development clients when your app requires custom native code. Most apps work fine in Expo Go.
You need a dev client ONLY when using:
-
Local Expo modules (custom native code)
-
Apple targets (widgets, app clips, extensions)
-
Third-party native modules not in Expo Go
Try Expo Go first with npx expo start . If everything works, you don't need a dev client.
EAS Configuration
Ensure eas.json has a development profile:
{ "cli": { "version": ">= 16.0.1", "appVersionSource": "remote" }, "build": { "production": { "autoIncrement": true }, "development": { "autoIncrement": true, "developmentClient": true } }, "submit": { "production": {}, "development": {} } }
Key settings:
-
developmentClient: true
-
Bundles expo-dev-client for development builds
-
autoIncrement: true
-
Automatically increments build numbers
-
appVersionSource: "remote"
-
Uses EAS as the source of truth for version numbers
Building for TestFlight
Build iOS dev client and submit to TestFlight in one command:
eas build -p ios --profile development --submit
This will:
-
Build the development client in the cloud
-
Automatically submit to App Store Connect
-
Send you an email when the build is ready in TestFlight
After receiving the TestFlight email:
-
Download the build from TestFlight on your device
-
Launch the app to see the expo-dev-client UI
-
Connect to your local Metro bundler or scan a QR code
Building Locally
Build a development client on your machine:
iOS (requires Xcode)
eas build -p ios --profile development --local
Android
eas build -p android --profile development --local
Local builds output:
-
iOS: .ipa file
-
Android: .apk or .aab file
Installing Local Builds
Install iOS build on simulator:
Find the .app in the .tar.gz output
tar -xzf build-*.tar.gz xcrun simctl install booted ./path/to/App.app
Install iOS build on device (requires signing):
Use Xcode Devices window or ideviceinstaller
ideviceinstaller -i build.ipa
Install Android build:
adb install build.apk
Building for Specific Platform
iOS only
eas build -p ios --profile development
Android only
eas build -p android --profile development
Both platforms
eas build --profile development
Checking Build Status
List recent builds
eas build:list
View build details
eas build:view
Using the Dev Client
Once installed, the dev client provides:
-
Development server connection - Enter your Metro bundler URL or scan QR
-
Build information - View native build details
-
Launcher UI - Switch between development servers
Connect to local development:
Start Metro bundler
npx expo start --dev-client
Scan QR code with dev client or enter URL manually
Troubleshooting
Build fails with signing errors:
eas credentials
Clear build cache:
eas build -p ios --profile development --clear-cache
Check EAS CLI version:
eas --version eas update