EAS Submit
Automatizando cargas en App Store Connect y Play Console - el libro de recetas para enviar artefactos de EAS Build a TestFlight, App Review y pistas de Google Play en Expo SDK 57.
Busca en todas las páginas de la documentación
Automatizando cargas en App Store Connect y Play Console - el libro de recetas para enviar artefactos de EAS Build a TestFlight, App Review y pistas de Google Play en Expo SDK 57.
Tarjeta de referencia rápida - lista para copiar y pegar.
# Compilar y luego enviar el último artefacto
eas build --profile production --platform ios
eas submit --platform ios --latest
eas build --profile production --platform android
eas submit --platform android --latest
# Compilación + envío en un solo paso
eas build --profile production --platform ios --auto-submit// eas.json
{
"submit": {
"production": {
"ios": {
"appleId": "release@example.com",
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345"
},
"android": {
"serviceAccountKeyPath": "./secrets/play-service-account.json",
"track": "internal"
}
}
}
}# Envío de CI no interactivo
eas submit --platform all --profile production --latest --non-interactiveCuándo usar esto:
Paso 1 - Crear clave de API de App Store Connect
.p8 una sola vez - guarda en bóveda de secretos del equipo.eas credentials --platform ios
# Configura clave de API de App Store Connect para envíoPaso 2 - Configura eas.json
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345"
}
}
}
}Encuentra ascAppId en App Store Connect → App Information → Apple ID (numérico).
Paso 3 - Compilar y enviar
eas build --profile production --platform ios
eas submit --platform ios --profile production --latestO con auto-submit:
{
"build": {
"production": {
"distribution": "store",
"autoIncrement": true
}
}
}eas build --profile production --platform ios --auto-submitPaso 1 - Crear cuenta de servicio
./secrets/play-service-account.json (gitignored).Paso 2 - Configura pistas de eas.json
{
"submit": {
"production": {
"android": {
"serviceAccountKeyPath": "./secrets/play-service-account.json",
"track": "internal",
"releaseStatus": "completed"
}
},
"closed-beta": {
"android": {
"serviceAccountKeyPath": "./secrets/play-service-account.json",
"track": "alpha"
}
}
}
}Paso 3 - Compilar AAB y enviar
eas build --profile production --platform android
eas submit --platform android --profile production --latesttrack": "internal" - ciclo de QA más rápido - Internal Testing TracksversionCode debe superar todos los envíos anteriores - usa autoIncrement en el perfil de compilación# .github/workflows/release.yml (excerpt)
name: Release
on:
push:
tags: ["v*"]
jobs:
submit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npm install -g eas-cli
- run: eas submit --platform all --profile production --latest --non-interactive
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}# Envía un ID de compilación específico (no solo --latest)
eas submit --platform ios --id <build-uuid>EXPO_TOKEN - token de máquina de expo.dev → Access tokens.p8 y Play JSON como secretos de CI - referencias de rutas en eas.json o invalidaciones de envEnvía IPAs o AABs compilados fuera de EAS:
eas submit --platform ios --path ./dist/ShopApp.ipa
eas submit --platform android --path ./dist/ShopApp.aab --profile productionÚsalo cuando:
| Error | Plataforma | Solución |
|---|---|---|
| "Invalid Provisioning Profile" | iOS | Recompila con perfil de distribución válido - iOS Credentials |
| "Redundant Binary Upload" | iOS | Incrementa buildNumber - habilita autoIncrement |
| "Version code has already been used" | Android | Bumpa versionCode en app.config.ts o versión remota |
| "APK/AAB not signed with upload key" | Android | Alinea almacén de claves de EAS con certificado de carga de Play |
| "Service account lacks permission" | Android | Re-invita SA en Play Console con derechos de lanzamiento |
Stack versions: Esta página fue escrita para React 19.2.3, React Native 0.86.0, y Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última actualización: 16 jul 2026