| name | expo-build |
| user-invocable | false |
| description | Use when building and deploying Expo apps with EAS Build. Covers build configuration, development builds, production builds, and app store submission. |
| allowed-tools | ["Read","Write","Edit","Bash","Grep","Glob"] |
Expo Build with EAS
Use this skill when building and deploying Expo applications using EAS (Expo Application Services) Build.
Key Concepts
EAS Build Configuration
{
"cli": {
"version": ">= 5.9.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"simulator": true
}
},
"preview": {
"distribution": "internal"
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {}
}
}
Build Commands
eas build --profile development --platform ios
eas build --profile development --platform android
eas build --profile preview --platform all
eas build --profile production --platform all
eas build --profile production --platform ios --local
Development Builds
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"env": {
"NODE_ENV": "development"
}
}
}
}
Best Practices
Environment Variables
{
"build": {
"production": {
"env": {
"APP_ENV": "production",
"API_URL": "https://api.myapp.com"
}
},
"staging": {
"env": {
"APP_ENV": "staging",
"API_URL": "https://staging-api.myapp.com"
}
}
}
}
Secrets Management
eas secret:create --scope project --name API_KEY --value your_api_key
eas secret:create --scope project --name GOOGLE_SERVICES_JSON --value "$(cat google-services.json)" --type file
eas secret:list
{
"build": {
"production": {
"env": {
"API_KEY": "$(EAS_SECRET_API_KEY)"
}
}
}
}
Version Management
{
"build": {
"production": {
"autoIncrement": true,
"ios": {
"buildNumber": "1"
},
"android": {
"versionCode": 1
}
}
}
}
Build Hooks
{
"build": {
"production": {
"prebuild": "npm run generate-assets",
"postbuild": "npm run cleanup"
}
}
}
Common Patterns
Multi-Environment Builds
{
"build": {
"development": {
"developmentClient": true,
"channel": "development",
"distribution": "internal"
},
"staging": {
"channel": "staging",
"distribution": "internal",
"ios": {
"bundleIdentifier": "com.myapp.staging"
},
"android": {
"package": "com.myapp.staging"
}
},
"production": {
"channel": "production",
Custom Native Code
{
"build": {
"production": {
"ios": {
"buildConfiguration": "Release"
},
"android": {
"gradleCommand": ":app:bundleRelease"
}
}
}
}
App Store Submission
eas submit --platform ios
eas submit --platform android
{
"submit": {
"production": {
"ios": {
"appleId": "your.apple.id@example.com",
"ascAppId": "1234567890",
"appleTeamId": "AB12CD34EF"
},
"android": {
"serviceAccountKeyPath": "./service-account.json",
"track": "production"
}
}
}
}
Build Monitoring
eas build:list
eas build:view [build-id]
eas build:cancel [build-id]
Anti-Patterns
Don't Commit Secrets
{
"build": {
"production": {
"env": {
"API_KEY": "sk_live_1234567890"
}
}
}
}
eas secret:create --scope project --name API_KEY --value sk_live_1234567890
Don't Skip Version Increments
{
"build": {
"production": {
"autoIncrement": false
}
}
}
{
"build": {
"production": {
"autoIncrement": true
}
}
}
Related Skills
- expo-config: Configuring app for builds
- expo-updates: OTA updates after builds