CatalogOpenAI Codex Plugins · OpenAI

expo-deployment

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes

ValidatedOfficial7.5k stars

Savant verdict: Validated

Passed Savant's safety scan and scored 70+ on a live evaluation.

Live evaluation

76overall
81quality
79compliance
76grounding
82actionability
58efficiency
Why this score may understate the skillThe live evaluation is a chat-only run: the model follows the skill's instructions but can't execute its scripts, call tools or reach the network.
  • Expects tools, MCP servers, installs or network access that a chat-only run doesn't have.
  • 2 reference files were too large to include in the run's context.
Live telemetry from real runs (via the Savant skill router) replaces this estimate as it accumulates.

6 pass · 3 investigate · 1 fail across 10 cases. Jev accepted 10 of 11 LLM-drafted cases. Drafted and run by nvidia/nemotron-3-super-120b-a12b, validated and scored by jev-latest.

  • I need to deploy my Expo app to the iOS App Store for production release. My app is ready and I have configured Apple credentials. What command should I use to build and submit the iOS production build?positive case · pass
  • I want to deploy my Expo web app to EAS Hosting for production. I have already exported the web bundle. What is the correct command to deploy it to production?positive case · pass
  • I am setting up automated CI/CD for my Expo app and want to create a workflow that builds and submits both iOS and Android production builds when pushing to the main branch. What should the workflow configuration look like?positive case · pass
  • I want to submit my Android app to the Google Play Store but I'm not sure which track to use for initial testing. Should I use internal or alpha track?edge case · pass
  • I need to deploy my Expo app but I forgot whether I should run the build command before or after submitting to TestFlight. Can you clarify the sequence?edge case · investigate
  • My eas.json has autoIncrement set to false for iOS builds. Will this cause issues when submitting to the App Store, and how should I fix it?edge case · pass
  • I want to deploy my React Native (non-Expo) app to the iOS App Store using EAS. Can you guide me through the process?negative case · investigate
  • I need to update my app's metadata in the Google Play Store, such as the description and screenshots, using EAS commands. How do I do this?negative case · fail

Safety (NVIDIA SkillSpector)

Risk score
17/100
Recommendation
CAUTION
Severity
LOW
Savant decision
Passed (low risk)
SkillSpector rated it CAUTION, but its risk score is below 20/100, so Savant's policy passes it. Its findings are still listed for review. SkillSpector 2.12.0, static analysis.

15 patterns found

  • MCP Rug Pull: npx eas-climedium · SKILL.md:34 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:45 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:48 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:51 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:58 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:61 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:74 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx eas-climedium · SKILL.md:77 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx testflightmedium · SKILL.md:64 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
  • MCP Rug Pull: npx testflightmedium · SKILL.md:121 · npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

SKILL.md

---
name: expo-deployment
description: Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes
version: 1.0.0
license: MIT
---

# Deployment

This skill covers deploying Expo applications across all platforms using EAS (Expo Application Services).

## References

Consult these resources as needed:

- ./references/workflows.md -- CI/CD workflows for automated deployments and PR previews
- ./references/testflight.md -- Submitting iOS builds to TestFlight for beta testing
- ./references/app-store-metadata.md -- Managing App Store metadata and ASO optimization
- ./references/play-store.md -- Submitting Android builds to Google Play Store
- ./references/ios-app-store.md -- iOS App Store submission and review process

## Quick Start

### Install EAS CLI

```bash
npm install -g eas-cli
eas login
```

### Initialize EAS

```bash
npx eas-cli@latest init
```

This creates `eas.json` with build profiles.

## Build Commands

### Production Builds

```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
```

### Submit to Stores

```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
```

## Web Deployment

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
```

## EAS Configuration

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"
      }
    }
  }
}
```

## Platform-Specific Guides

### iOS

- Use `npx testflight` for quick TestFlight submissions
- Configure Apple credentials via `eas credentials`
- See ./reference/testflight.md for credential setup
- See ./reference/ios-app-store.md for App Store submission

### Android

- Set up Google Play Console service account
- Configure tracks: internal → closed → open → production
- See ./reference/play-store.md for detailed setup

### Web

- EAS Hosting provides preview URLs for PRs
- Production deploys to your custom domain
- See ./reference/workflows.md for CI/CD automation

## Automated Deployments

Use 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.

## Version Management

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
```

## Monitoring

```bash
# List recent builds
eas build:list

# Check build status
eas build:view

# View submission status
eas submit:list
```