EAS local build and version management skill. Run with `/local-build`. Uses `eas build --local` to build iOS/Android locally and automatically manages version and build numbers in app.json. Triggers when user mentions build, deploy, local build, or version bump.
Build Expo apps locally instead of using EAS cloud builds, with automatic version and build number management.
/local-build ios # iOS production build
/local-build android # Android production build
/local-build both # Build both platforms
/local-build ios --patch # Bump patch version and build (1.0.0 → 1.0.1)
/local-build ios --minor # Bump minor version and build (1.0.0 → 1.1.0)
/local-build ios --major # Bump major version and build (1.0.0 → 2.0.0)
/local-build --version-only # Bump version without building
/local-build --submit # Build and submit to store
If buildNumber or versionCode is missing from , automatically fetch the latest build numbers from EAS remote builds.
app.jsonios.buildNumber exists in app.json# Get latest iOS build number
eas build:list --platform ios --status finished --limit 1 --json --non-interactive
# Get latest Android build number
eas build:list --platform android --status finished --limit 1 --json --non-interactive
appBuildVersion from JSON response for each platformeas.json appVersionSource from "remote" to "local"autoIncrement from eas.json if present[Auto-detect] Fetched EAS remote build numbers:
- iOS latest buildNumber: "7"
- Android latest versionCode: 7
Switching to local management:
- iOS buildNumber: "8" (previous + 1)
- Android versionCode: 8 (previous + 1)
- eas.json appVersionSource: "remote" → "local"
Confirm with user before updating app.json and eas.json.
app.json or app.config.tseas.json exists and is properly configuredShow current version info and confirm with user:
Current version: 1.0.0
iOS buildNumber: 8
Android versionCode: 8
Bump version? (--patch/--minor/--major or keep)
--patch: Bug fix (1.0.0 → 1.0.1)--minor: New feature (1.0.0 → 1.1.0)--major: Breaking change (1.0.0 → 2.0.0)When version changes:
buildNumber: Reset to "1"versionCode: Increment by 1 (never reset — must always increase)When version stays the same:
buildNumber: Increment by 1versionCode: Increment by 1Update the following fields in app.json under the expo object:
{
"expo": {
"version": "1.0.1",
"ios": {
"buildNumber": "1"
},
"android": {
"versionCode": 9
}
}
}
Note: If the project uses app.config.ts, also update the APP_VERSION default value.
Ensure eas.json is configured for local builds:
appVersionSource should be "local" (handled in Step 0)autoIncrement should be removed (handled in Step 0)# iOS build
eas build --local --platform ios --profile production
# Android build
eas build --local --platform android --profile production
Build output:
.ipa file (generated in project root).aab file (generated in project root)# iOS: Upload ipa to App Store Connect
eas submit --platform ios --path ./build-xxxxx.ipa
# Android: Upload aab to Google Play
eas submit --platform android --path ./build-xxxxx.aab
versionCode must never decrease — Google Play will reject it.
app.json and eas.json.ipa, .aab) should be added to .gitignore