Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes
.claude/skills/expo-deployment/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 58% | 0% |
This skill covers deploying Expo applications across all platforms using EAS (Expo Application Services).
Consult these resources as needed:
bashnpm install -g eas-cli eas login
bashnpx eas-cli@latest init
This creates eas.json with build profiles.
bash# iOS App Store build npx eas-cli@latest build -p ios --profile production # Android Play Store build npx eas-cli@latest build -p android --profile production # Both platforms npx eas-cli@latest build --profile production
bash# iOS: Build and submit to App Store Connect npx eas-cli@latest build -p ios --profile production --submit # Android: Build and submit to Play Store npx eas-cli@latest build -p android --profile production --submit # Shortcut for iOS TestFlight npx testflight
Deploy web apps using EAS Hosting:
bash# Deploy to production npx expo export -p web npx eas-cli@latest deploy --prod # Deploy PR preview npx eas-cli@latest deploy
Standard eas.json for production deployments:
json{ "cli": { "version": ">= 16.0.1", "appVersionSource": "remote" }, "build": { "production": { "autoIncrement": true, "ios": { "resourceClass": "m-medium" } }, "development": { "developmentClient": true, "distribution": "internal" } }, "submit": { "production": { "ios": { "appleId": "your@email.com", "ascAppId": "1234567890" }, "android": { "serviceAccountKeyPath": "./google-service-account.json", "track": "internal" } } } }
npx testflight for quick TestFlight submissionseas credentialsUse EAS Workflows for CI/CD:
yaml# .eas/workflows/release.yml name: Release on: push: branches: [main] jobs: build-ios: type: build params: platform: ios profile: production submit-ios: type: submit needs: [build-ios] params: platform: ios profile: production
See ./reference/workflows.md for more workflow examples.
EAS manages version numbers automatically with appVersionSource: "remote":
bash# Check current versions eas build:version:get # Manually set version eas build:version:set -p ios --build-number 42
bash# List recent builds eas build:list # Check build status eas build:view # View submission status eas submit:list
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 6,235 | 2,915 | -53% | 1 | 1 | 0% | 1,158 | 1,535 | +33% | 0 | 0 | — |
case-02 | fail→pass | 11,483 | 7,345 | -36% | 1 | 1 | 0% | 2,272 | 2,587 | +14% | 0 | 0 | — |
case-03 | fail→pass | 8,705 | 2,877 | -67% | 1 | 1 | 0% | 1,582 | 1,510 | -5% | 0 | 0 | — |
case-04 | fail→pass | 3,829 | 2,042 | -47% | 1 | 1 | 0% | 651 | 1,304 | +100% | 0 | 0 | — |
case-05 | fail→pass | 4,355 | 2,382 | -45% | 1 | 1 | 0% | 878 | 1,391 | +58% | 0 | 0 | — |
case-06 | fail→pass | 10,686 | 2,231 | -79% | 1 | 1 | 0% | 1,796 | 1,290 | -28% | 0 | 0 | — |
case-07 | fail→pass | 3,857 | 2,825 | -27% | 1 | 1 | 0% | 641 | 1,463 | +128% | 0 | 0 | — |
case-08 | fail→pass | 6,760 | 2,612 | -61% | 1 | 1 | 0% | 1,144 | 1,424 | +24% | 0 | 0 | — |
case-09 | fail→fail | 3,834 | 2,136 | -44% | 1 | 1 | 0% | 698 | 1,353 | +94% | 0 | 0 | — |
case-10 | pass→pass | 11,071 | 10,176 | -8% | 1 | 1 | 0% | 2,077 | 2,406 | +16% | 0 | 0 | — |
case-11 | fail→pass | 6,141 | 3,460 | -44% | 1 | 1 | 0% | 1,155 | 1,487 | +29% | 0 | 0 | — |
case-12 | pass→pass | 3,173 | 1,994 | -37% | 1 | 1 | 0% | 492 | 1,237 | +151% | 0 | 0 | — |
case-13 | fail→pass | 5,908 | 3,410 | -42% | 1 | 1 | 0% | 1,133 | 1,631 | +44% | 0 | 0 | — |
case-14 | fail→fail | 4,390 | 1,954 | -55% | 1 | 1 | 0% | 811 | 1,304 | +61% | 0 | 0 | — |
case-15 | fail→pass | 6,515 | 2,238 | -66% | 1 | 1 | 0% | 1,276 | 1,337 | +5% | 0 | 0 | — |
case-16 | fail→fail | 6,182 | 3,177 | -49% | 1 | 1 | 0% | 1,273 | 1,511 | +19% | 0 | 0 | — |
case-17 | fail→fail | 11,689 | 7,258 | -38% | 1 | 1 | 0% | 2,180 | 2,300 | +6% | 0 | 0 | — |
case-18 | fail→fail | 3,672 | 2,468 | -33% | 1 | 1 | 0% | 560 | 1,343 | +140% | 0 | 0 | — |
case-19 | fail→fail | 6,563 | 4,193 | -36% | 1 | 1 | 0% | 1,199 | 1,748 | +46% | 0 | 0 | — |
case-20 | fail→pass | 7,866 | 1,860 | -76% | 1 | 1 | 0% | 1,411 | 1,278 | -9% | 0 | 0 | — |
case-21 | fail→fail | 11,789 | 5,922 | -50% | 1 | 1 | 0% | 2,004 | 2,293 | +14% | 0 | 0 | — |
case-22 | fail→fail | 4,274 | 4,099 | -4% | 1 | 1 | 0% | 772 | 1,745 | +126% | 0 | 0 | — |
case-23 | fail→fail | 8,359 | 6,590 | -21% | 1 | 1 | 0% | 1,645 | 2,271 | +38% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +52 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.