C
Cathy Lai
Guest
Hot reloading on device, native modules, fast iteration โ without the App Store or Play Store hassle.
Tags: expo, reactnative, mobile, eas, devops
Works with: Expo SDK 53, Expo Router, EAS Build/Submit
A development build is your own custom โExpo Goโโit includes your appโs native plugins and permissions so you can test everything on a real device with hot reload. You install it once, then iterate quickly via
iOS specific
Android specific
Create or update
Using Expo Router? Youโre good
Dev clients work great with Expo Router. Changes to routes, screens, links, and layouts hot-reload instantly. Only native changes need a rebuild.
Stuck on โConnectingโฆโ
iOS wonโt install
Changes not showing
โDo I really need to rebuild?โ quick test
This is not required for dev clients, but useful for internal testers or production:
1) In
2) In
3) To push an update:
4) For โupdate immediately on launchโ, set:
Can I use the App/Play Store for dev?
Noโdev clients are installed via EAS internal distribution. Thatโs the point: fast iteration without the stores.
Can teammates use my dev build?
Yes. Add their devices to your Apple team (iOS) or share the Android APK/QR. Theyโll scan your Metro QR when you run
How do I debug native issues?
If you want, drop your iOS bundle ID and Android applicationId, and Iโll give you a copy-paste script tailored to your setup. Happy building!
Continue reading...
Tags: expo, reactnative, mobile, eas, devops
Works with: Expo SDK 53, Expo Router, EAS Build/Submit
Why a โdevelopment buildโ?
A development build is your own custom โExpo Goโโit includes your appโs native plugins and permissions so you can test everything on a real device with hot reload. You install it once, then iterate quickly via
expo start --dev-client
.TL;DR (after youโve done it once)
Code:
# 1) Start the dev server
npx expo start --dev-client
# 2) On your phone
# Open your installed development build and scan the QR code
# 3) Code, save, hot-reload
# Rebuild only if you change native stuff (plugins, permissions, SDK version)
Prereqs
- Node + npm/yarn installed
- Logged in to Expo:
npx expo login
(ornpx expo whoami
) - EAS CLI:
npm i -g eas-cli
- Same Wi-Fi for computer & phone (or use tunnel)
iOS specific
- iOS 16+ recommended
- Settings โ Privacy & Security โ Developer Mode: On (iOS will reboot when enabling)
Android specific
- Enable Developer options and USB debugging (if installing via USB/ADB)
1) Add a development profile
Create or update
eas.json
in your project root:
Code:
{
"cli": { "version": ">= 10.0.0" },
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": { "resourceClass": "m-medium" },
"android": {}
},
"preview": {
"distribution": "internal"
},
"production": {
"autoIncrement": "version"
}
},
"submit": {
"production": {}
}
}
developmentClient: true
tells EAS to build a dev client (your custom Expo Go) that includes your native modules.
2) Build the development client (install it once)
iOS
Code:
eas build -p ios --profile development
- First time? EAS will help register your device (UDID) via QR.
- Let EAS manage certs/profiles.
- When the build is done, open the build page and tap Install on your iPhone.
- If prompted, trust the developer and ensure Developer Mode is enabled.
Android
Code:
eas build -p android --profile development
- Youโll get an APK (or AAB if configured).
- Install options:
- From the EAS build page, scan the install QR on your phone, or
- Via USB:
adb install your-app.apk
(authorize USB debugging)
3) Day-to-day: run it on your phone
Code:
npx expo start --dev-client
- Open the development build on your phone (it has your app name/icon).
- Scan the QR from the terminal or web UI.
- Edit code โ save โ hot refresh.
- Rebuild only when you change native stuff:
- Add/modify a plugin or native module
- Change iOS/Android permissions/capabilities
- Upgrade Expo SDK / React Native version
Copy-paste cheatsheets
iOS (wireless)
Code:
# First time (one-time)
eas build -p ios --profile development
# Every day
npx expo start --dev-client
# then open the dev client on iPhone and scan the QR
Android (wireless or USB)
Code:
# One-time
eas build -p android --profile development
# Daily run
npx expo start --dev-client
# open dev client on Android and scan QR
# If Metro canโt connect over Wi-Fi:
adb reverse tcp:8081 tcp:8081 # optional; maps device port to your machine
Using Expo Router? Youโre good
Dev clients work great with Expo Router. Changes to routes, screens, links, and layouts hot-reload instantly. Only native changes need a rebuild.
Troubleshooting
Stuck on โConnectingโฆโ
- Computer and phone on the same network
- Try a tunnel:
npx expo start --tunnel
(bypasses weird Wi-Fi) - Kill other packagers using port 8081
iOS wonโt install
- Make sure the iPhone is registered on your Apple team and rebuild after registration
- Enable Developer Mode and trust the developer certificate
- Reinstall from the EAS build page if the app was removed
Changes not showing
- Shake device โ Reload in the dev client
- Clear cache:
rm -rf .expo && npx expo start -c
โDo I really need to rebuild?โ quick test
- If you only changed JS/TS/Router code โ No
- If you added/changed a plugin, permission, or SDK version โ Yes
Bonus: instant OTA updates (for preview/production)
This is not required for dev clients, but useful for internal testers or production:
1) In
eas.json
, keep a preview or production profile.2) In
app.json
/app.config.ts
, ensure expo-updates
is configured (SDK 53 has it by default).3) To push an update:
Code:
eas update --branch preview --message "Fix copy on home screen"
4) For โupdate immediately on launchโ, set:
Code:
updates: {
enabled: true,
checkOnLaunch: "ALWAYS",
fallbackToCacheTimeout: 0
}
Use this in non-dev builds where you want users to fetch new JS quickly. (Dev clients already stream from Metro.)
FAQs
Can I use the App/Play Store for dev?
Noโdev clients are installed via EAS internal distribution. Thatโs the point: fast iteration without the stores.
Can teammates use my dev build?
Yes. Add their devices to your Apple team (iOS) or share the Android APK/QR. Theyโll scan your Metro QR when you run
expo start --dev-client
.How do I debug native issues?
- iOS: open the native project in Xcode (generated when you run
npx expo prebuild
or if you use bare). - Android: use Android Studio + Logcat.
- JS debugging: React DevTools, console logs, or Flipper.
Final checklist
- [ ]
eas.json
has a"development"
profile with"developmentClient": true
- [ ] Built and installed the dev client on each device (one-time)
- [ ]
npx expo start --dev-client
running locally - [ ] Phone + computer on same network (or using
--tunnel
) - [ ] Rebuild only when you change native config
If you want, drop your iOS bundle ID and Android applicationId, and Iโll give you a copy-paste script tailored to your setup. Happy building!

Continue reading...