Build Custom Expo Dev Clients for iOS
Builds and installs Expo development clients via EAS Build - TestFlight, local iOS/Android builds, and Metro bundler connection.
Why it matters
Create custom Expo development clients for iOS to test native code changes on physical devices, especially when your app relies on custom native modules or specific Apple targets not supported by the standard Expo Go client.
Outcomes
What it gets done
Build development clients using EAS Build for iOS.
Submit builds directly to TestFlight for easy distribution.
Troubleshoot common build and signing errors.
Configure EAS build profiles for development builds.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-expo-dev-client | bash Overview
iOS (requires Xcode)
A skill that uses EAS Build to create Expo development clients for testing native code on physical devices - configuring eas.json, submitting to TestFlight, building locally for iOS/Android, installing builds, and connecting to a local Metro bundler. Use it when a project needs custom native code, Apple-specific targets, third-party native modules, or config plugins that Expo Go can't support - not for apps that Expo Go's bundled libraries already cover.
What it does
This skill uses EAS Build to create Expo development clients for testing native code changes on physical devices, and for creating custom Expo Go-style clients to test app branches. A development client is recommended for any real or production app - Expo Go is a playground for quick experiments with its bundled native libraries, and most apps outgrow it. A dev client is specifically needed when using local Expo modules (custom native code), Apple targets (widgets, app clips, extensions), third-party native modules not included in Expo Go, config plugins, or when testing remote push notifications and App/Universal Links.
It configures a development profile in eas.json with developmentClient: true (bundles expo-dev-client into the build), autoIncrement: true (auto-increments build numbers), and appVersionSource: "remote" (EAS as the source of truth for versions).
eas build -p ios --profile development --submit
That single command builds the iOS dev client in the cloud, automatically submits it to App Store Connect, and emails when the build is ready in TestFlight; after downloading and launching it, the expo-dev-client UI connects to a local Metro bundler or a scanned QR code. For local builds it supports eas build -p ios --profile development --local (outputs an .ipa) and eas build -p android --profile development --local (outputs an .apk/.aab), installable on an iOS simulator via xcrun simctl install, on an iOS device via Xcode's Devices window or ideviceinstaller, or on Android via adb install. Builds can be scoped to iOS only, Android only, or both platforms, and status checked with eas build:list and eas build:view.
Once installed, the dev client provides a development-server connection (enter the Metro bundler URL or scan a QR code), build information, and a launcher UI for switching between development servers - started locally with npx expo start --dev-client. Troubleshooting covers signing errors (eas credentials), clearing the build cache (--clear-cache), and checking the EAS CLI version (eas --version, eas update).
When to use - and when NOT to
Use it when a project needs custom native code, Apple-specific targets, third-party native modules outside Expo Go, config plugins, or push notification/Universal Link testing that Expo Go can't support - i.e. any real or production app moving past Expo Go's bundled-library playground.
Do not reach for a dev client build when Expo Go itself is sufficient for the libraries in use; that's a simpler, faster iteration loop for early experimentation.
Inputs and outputs
Input is an eas.json with a development build profile configured, plus the target platform (iOS, Android, or both) and build location (cloud via EAS or local machine, the latter requiring Xcode for iOS). Output is a development client build - either delivered to TestFlight (iOS, cloud + submit) or as a local .ipa/.apk/.aab artifact - that connects to a Metro bundler for live development.
Integrations
Built on EAS Build and EAS Submit (eas build, eas build:list, eas build:view, eas credentials, eas update), Expo's Metro bundler (npx expo start --dev-client), and platform tooling: Xcode/xcrun simctl/ideviceinstaller for iOS installs, adb for Android installs.
Who it's for
Expo app developers who need to test native code changes, third-party native modules, or platform-specific features on physical devices or TestFlight, beyond what Expo Go's bundled libraries support.
FAQ
Common questions
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.