All skills
expo avatar

/eas-app-stores

@85c7236 official
by expoexpo/skills2.6k stars
156

EAS service (paid). Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for eas.json setup, release pipelines, signing, app versions and build numbers, store submissions, and listing metadata. For Expo websites and API routes, use eas-hosting; for adding React Native screens to a native app, use expo-brownfield.

Use this Skill: https://skilld.dev/gh/expo/skills/eas-app-stores

This session only. Nothing lands on disk.

referencesplay-store.md

≈1.4k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Submitting to Google Play Store

Prerequisites

  1. Google Play Console Account - Register at play.google.com/console
  2. App Created in Console - Create your app listing before first submission
  3. Service Account - For automated submissions via EAS

Once these are complete, the default eas submit works for a first-time submission and creates the app's first release on the internal testing track. Store listing, content rating, and pricing are only required before promoting a release to production.

Service Account Setup

1. Create Service Account

  1. Go to Google Cloud Console → IAM & Admin → Service Accounts
  2. Create a new service account
  3. Grant the "Service Account User" role
  4. Create and download a JSON key

2. Link to Play Console

  1. Go to Play Console → Setup → API access
  2. Click "Link" next to your Google Cloud project
  3. Under "Service accounts", click "Manage Play Console permissions"
  4. Grant "Release to production" permission (or appropriate track permissions)

3. Configure EAS

Add the service account key path to eas.json:

{
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "./google-service-account.json",
        "track": "internal"
      }
    }
  }
}

Store the key file securely and add it to .gitignore.

Environment Variables

For CI/CD, use environment variables instead of file paths:

# Base64-encoded service account JSON
EXPO_ANDROID_SERVICE_ACCOUNT_KEY_BASE64=...

Or use EAS Secrets:

eas secret:create --name GOOGLE_SERVICE_ACCOUNT --value "$(cat google-service-account.json)" --type file

Then reference in eas.json:

{
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "@secret:GOOGLE_SERVICE_ACCOUNT"
      }
    }
  }
}

Release Tracks

Google Play uses tracks for staged rollouts:

Track Purpose
internal Internal testing (up to 100 testers)
alpha Closed testing
beta Open testing
production Public release

Track Configuration

{
  "submit": {
    "production": {
      "android": {
        "track": "production",
        "releaseStatus": "completed"
      }
    },
    "internal": {
      "android": {
        "track": "internal",
        "releaseStatus": "completed"
      }
    }
  }
}

Release Status Options

  • completed - Immediately available on the track
  • draft - Upload only, release manually in Console
  • halted - Pause an in-progress rollout
  • inProgress - Staged rollout (requires rollout percentage)

Staged Rollout

{
  "submit": {
    "production": {
      "android": {
        "track": "production",
        "releaseStatus": "inProgress",
        "rollout": 0.1
      }
    }
  }
}

This releases to 10% of users. Increase via Play Console or subsequent submissions.

Submission Commands

# Build and submit to internal track
eas build -p android --profile production --auto-submit

# Submit existing build to Play Store
eas submit -p android --latest

# Submit specific build
eas submit -p android --id BUILD_ID

App Signing

Google Play App Signing (Recommended)

EAS uses Google Play App Signing by default:

  1. First upload: EAS creates upload key, Play Store manages signing key
  2. Play Store re-signs your app with the signing key
  3. Upload key can be reset if compromised

Checking Signing Status

eas credentials -p android

Version Codes

Android requires incrementing versionCode for each upload:

{
  "build": {
    "production": {
      "autoIncrement": true
    }
  }
}

With appVersionSource: "remote", EAS tracks version codes automatically.

First Submission Checklist

Before your first Play Store submission:

  • Create app in Google Play Console
  • Complete app content declaration (privacy policy, ads, etc.)
  • Set up store listing (title, description, screenshots)
  • Complete content rating questionnaire
  • Set up pricing and distribution
  • Create service account with proper permissions
  • Configure eas.json with service account path

Common Issues

"App not found"

The app must exist in Play Console before EAS can submit. Create it manually first.

"Version code already used"

Increment versionCode in app.json or use autoIncrement: true in eas.json.

"Service account lacks permission"

Ensure the service account has "Release to production" permission in Play Console → API access.

"APK not acceptable"

Play Store requires AAB (Android App Bundle) for new apps:

{
  "build": {
    "production": {
      "android": {
        "buildType": "app-bundle"
      }
    }
  }
}

Internal Testing Distribution

For quick internal distribution without Play Store:

# Build with internal distribution
eas build -p android --profile development

# Share the APK link with testers

Or use EAS Update for OTA updates to existing installs.

Monitoring Submissions

Follow the submission URL returned by eas submit for status and logs. Check Play Console for the resulting track and release state.

With EAS CLI 23.2.0, eas submit:list -p android --json and eas submit:view SUBMISSION_ID --json report EAS submission jobs. submit:status currently reads Apple status only; do not treat an EAS job's success as confirmation of Play Console rollout.

Tips

  • Start with internal track for testing before production
  • Use staged rollouts for production releases
  • Keep service account key secure - never commit to git
  • Set up Play Console notifications for review status
  • Pre-launch reports in Play Console catch issues before review

Source: SKILL.md on GitHub

No alerts22d3 checks · Risk SAFE
  • Gen Agent Trust Hub22d

    This skill facilitates Expo app deployments using EAS, covering builds, store submissions, and metadata management. All activities, including external tool usage and dynamic configuration, are standard for the Expo development ecosystem and present no security risk.

  • Socket22d

    No alerts

  • Snyk22d

    Risk: LOW · No issues

Signed by skilld at 85c7236. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 3 weeks ago
version
1.1.0

README badge

README badge for expo/skills/eas-app-stores