Claude-skill-registry jutsu-expo:expo-build
Use when building and deploying Expo apps with EAS Build. Covers build configuration, development builds, production builds, and app store submission.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/expo-build" ~/.claude/skills/majiayu000-claude-skill-registry-jutsu-expo-expo-build && rm -rf "$T"
manifest:
skills/data/expo-build/SKILL.mdsource content
Expo Build with EAS
Use this skill when building and deploying Expo applications using EAS (Expo Application Services) Build.
Key Concepts
EAS Build Configuration
// eas.json { "cli": { "version": ">= 5.9.0" }, "build": { "development": { "developmentClient": true, "distribution": "internal", "ios": { "simulator": true } }, "preview": { "distribution": "internal" }, "production": { "autoIncrement": true } }, "submit": { "production": {} } }
Build Commands
# Development build eas build --profile development --platform ios eas build --profile development --platform android # Preview build eas build --profile preview --platform all # Production build eas build --profile production --platform all # Local build eas build --profile production --platform ios --local
Development Builds
{ "build": { "development": { "developmentClient": true, "distribution": "internal", "env": { "NODE_ENV": "development" } } } }
Best Practices
Environment Variables
// eas.json { "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
# Set secrets 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 # List secrets eas secret:list # Use in eas.json { "build": { "production": { "env": { "API_KEY": "$(EAS_SECRET_API_KEY)" } } } }
Version Management
// eas.json { "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
// eas.json { "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", "autoIncrement": true } } }
Custom Native Code
{ "build": { "production": { "ios": { "buildConfiguration": "Release" }, "android": { "gradleCommand": ":app:bundleRelease" } } } }
App Store Submission
# iOS eas submit --platform ios # Android eas submit --platform android # Configure submission # eas.json { "submit": { "production": { "ios": { "appleId": "your.apple.id@example.com", "ascAppId": "1234567890", "appleTeamId": "AB12CD34EF" }, "android": { "serviceAccountKeyPath": "./service-account.json", "track": "production" } } } }
Build Monitoring
# View build status eas build:list # View specific build eas build:view [build-id] # Cancel build eas build:cancel [build-id]
Anti-Patterns
Don't Commit Secrets
// Bad - Secrets in eas.json { "build": { "production": { "env": { "API_KEY": "sk_live_1234567890" } } } } // Good - Use EAS Secrets eas secret:create --scope project --name API_KEY --value sk_live_1234567890
Don't Skip Version Increments
// Bad - Manual version management { "build": { "production": { "autoIncrement": false } } } // Good - Auto increment { "build": { "production": { "autoIncrement": true } } }
Related Skills
- expo-config: Configuring app for builds
- expo-updates: OTA updates after builds