Source of Truth
The mobile build workflow is defined by these files:apps/mobile/package.jsonapps/mobile/scripts/eas-build.mjsapps/mobile/eas.jsonapps/mobile/app.config.jsapps/mobile/app.json
Modes
The mobile app has two config modes:| Mode | Trigger | Use case |
|---|---|---|
development | pnpm dev, pnpm dev:lan, pnpm dev:tunnel | Local Expo Go development |
production | pnpm start:eas, all EAS build scripts, and EAS cloud builds | Dev client, preview, production, and App Store submission |
apps/mobile/app.config.js reads EXPO_CONFIG_MODE and strips EAS-only fields in development mode. In production mode it keeps the full EAS configuration intact. apps/mobile/metro.config.js is shared across both modes; the build scripts do not switch Metro to a separate config file.
Commands
Run these commands fromapps/mobile:
| Purpose | Command |
|---|---|
| Expo Go dev server | pnpm dev |
| Expo Go dev server over LAN | pnpm dev:lan |
| Expo Go dev server over tunnel | pnpm dev:tunnel |
| Local production config | pnpm start:eas |
| EAS dev client build | pnpm eas:build:dev |
| EAS preview build | pnpm eas:build:preview |
| Production build | pnpm eas:build |
| Production build without compute fingerprinting | pnpm eas:build:no-fingerprint |
| Production build and auto-submit to TestFlight | pnpm eas:build:submit |
| Production build, skip compute fingerprinting, and auto-submit | pnpm eas:build:submit:no-fingerprint |
| Show build status | pnpm eas:status |
| Submit an existing build | pnpm eas:submit |
Production Runner
apps/mobile/scripts/eas-build.mjs is the only production build entry point. It always runs the production iOS profile and supports two optional flags:
--auto-submit--skip-fingerprint
--.
Examples:
EAS Rules
apps/mobile/eas.jsonsetsEXPO_CONFIG_MODE=productionfor all EAS profiles.EXPO_USE_FAST_RESOLVER=1stays enabled for EAS builds.- Fingerprint skipping is opt-in only. It is no longer hardcoded into the
productionprofile. - iOS production builds use the default Expo-managed EAS workflow.