Despliegue de Apps React Native 2026: EAS Build, EAS Submit y EAS Update Paso a Paso

Guía paso a paso para desplegar apps React Native en 2026 con EAS Build, EAS Submit y EAS Update: perfiles, credenciales, OTA y envío a las tiendas.

Despliegue React Native con EAS: Guía 2026

Actualizado: 11 de junio de 2026

Para desplegar una app React Native en 2026 usas EAS Build para compilar binarios nativos en la nube, EAS Submit para enviarlos automáticamente a App Store Connect y Google Play Console, y EAS Update para distribuir parches de JavaScript sin pasar por las tiendas. Estos tres servicios de Expo Application Services reemplazan al antiguo expo build (descontinuado en enero de 2023) y funcionan tanto con proyectos Expo como con CLI bare de React Native 0.81+ que usan la Nueva Arquitectura por defecto.

  • EAS Build compila binarios .ipa y .aab en máquinas de Expo, eliminando la necesidad de un Mac local para iOS.
  • El archivo eas.json define perfiles (development, preview, production) que controlan variantes, variables de entorno y canales de actualización.
  • EAS Submit envía builds a App Store Connect y Google Play Console con un solo comando, gestionando credenciales y metadatos.
  • EAS Update entrega bundles de JavaScript over-the-air en segundos, respetando las políticas de actualización de Apple y Google.
  • El plan Free de EAS en 2026 incluye 30 builds gratis al mes; Production cuesta 19 USD/mes con builds prioritarios.
  • La Nueva Arquitectura (Fabric + TurboModules) está activada por defecto en React Native 0.81 y requiere expo-build-properties bien configurado.

¿Qué es EAS Build y cómo funciona?

EAS Build es el servicio de compilación en la nube de Expo Application Services que produce binarios firmados para iOS (.ipa) y Android (.aab o .apk) sin requerir Xcode ni Android Studio en tu máquina. En mi experiencia gestionando despliegues de varias apps en producción, lo más valioso es que un equipo sin un Mac puede igualmente firmar y publicar para iOS: EAS provisiona certificados, perfiles de aprovisionamiento y push keys automáticamente.

El flujo interno es directo: cuando ejecutas eas build, la CLI empaqueta tu proyecto, lo sube a los servidores de Expo, arranca una máquina virtual macOS (iOS) o Ubuntu (Android), instala dependencias con npm/yarn/pnpm/bun, aplica los config plugins de Expo durante prebuild, compila con Xcode o Gradle y devuelve un binario descargable. Soporta proyectos managed (Expo) y bare (React Native CLI puro), y desde React Native 0.81 trabaja con la Nueva Arquitectura activada por defecto.

Comparado con compilar localmente, EAS Build te ahorra mantener una máquina de CI con Xcode actualizado, certificados de firma sincronizados y SDKs nativos. La documentación oficial de EAS Build documenta versiones de imagen, runners y tiempos típicos (entre 8 y 25 minutos por build).

Instalar y configurar EAS CLI

El primer paso es instalar la CLI globalmente y autenticarte. Asegúrate de tener Node.js 20 LTS o superior, ya que las versiones anteriores quedaron sin soporte en abril de 2026.

# Instalación global
npm install -g eas-cli

# Verifica la versión (debe ser 16.x o superior en 2026)
eas --version

# Inicia sesión con tu cuenta Expo
eas login

# Vincula el proyecto local con un slug en tu cuenta
cd mi-app-react-native
eas init --id 00000000-0000-0000-0000-000000000000

Si no tienes cuenta, créala en expo.dev. El comando eas init crea o vincula un projectId en app.json bajo expo.extra.eas.projectId. Para proyectos bare, ejecuta primero npx expo install expo y luego npx expo prebuild para generar las carpetas ios/ y android/ a partir de tu configuración.

Configurar eas.json con perfiles

El archivo eas.json en la raíz del proyecto define cómo EAS compila cada variante. Los perfiles te permiten separar builds internos (con cliente de desarrollo y inspector), preview (TestFlight, Internal Testing) y producción (tienda pública).

{
  "cli": {
    "version": ">= 16.0.0",
    "appVersionSource": "remote"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "channel": "development",
      "ios": { "simulator": true }
    },
    "preview": {
      "distribution": "internal",
      "channel": "preview",
      "android": { "buildType": "apk" },
      "ios": { "resourceClass": "m-medium" }
    },
    "production": {
      "channel": "production",
      "autoIncrement": true,
      "android": { "buildType": "app-bundle" },
      "ios": { "resourceClass": "m-large" },
      "env": {
        "EXPO_PUBLIC_API_URL": "https://api.miapp.com"
      }
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "[email protected]",
        "ascAppId": "1234567890",
        "appleTeamId": "ABCD123456"
      },
      "android": {
        "serviceAccountKeyPath": "./google-play-key.json",
        "track": "production",
        "releaseStatus": "draft"
      }
    }
  }
}

El campo channel conecta cada build con su canal de EAS Update correspondiente, de modo que un binario de production solo recibe parches del canal production. La opción autoIncrement incrementa buildNumber (iOS) y versionCode (Android) automáticamente en cada build, evitando rechazos por número de versión repetido. Para apps que ya cuentan con navegación compleja con Expo Router, revisa también nuestra guía de navegación en React Native 2026 para configurar deep links que sobrevivan al despliegue.

Crear tu primer build de producción

Con la configuración lista, lanza el build con un solo comando. EAS te guiará interactivamente la primera vez para generar certificados de iOS y un keystore de Android, guardándolos en el servicio de credenciales gestionado.

# Compila ambos en paralelo
eas build --platform all --profile production

# Solo Android (más rápido si no necesitas iOS aún)
eas build --platform android --profile production

# Build local en tu máquina (útil para depurar)
eas build --platform ios --profile production --local

Tras unos minutos verás una URL de descarga en la consola y en expo.dev/accounts/<tu-usuario>/projects/<slug>/builds. Descarga el .aab de Android o el .ipa de iOS para inspeccionarlo, o salta directo a EAS Submit. Si tu proyecto incluye módulos nativos personalizados —tema que cubrimos a fondo en módulos nativos en React Native 2026— EAS los detecta automáticamente vía autolinking sin configuración adicional.

Enviar a App Store y Google Play con EAS Submit

Una vez tienes un build de producción, EAS Submit lo entrega a las tiendas sin pasar por Transporter ni la consola de Google Play. Para Apple necesitas un App Store Connect API Key (descargable desde Users and Access → Keys) y para Google una Service Account con permisos de Release Manager en formato JSON.

# Subir el último build de producción de iOS a TestFlight
eas submit --platform ios --latest --profile production

# Subir Android al track de producción como borrador
eas submit --platform android --latest --profile production

# Subir un binario específico por ID de build
eas submit --platform ios --id 12345678-abcd-1234-abcd-123456789012

El comando lee la sección submit de eas.json y maneja toda la negociación con las APIs. Para iOS, EAS espera tu binario en TestFlight (el envío a App Store público sigue siendo manual desde App Store Connect tras revisión). Para Android, puedes ir directo a internal, alpha, beta o production. La documentación de EAS Submit detalla cómo configurar Service Accounts paso a paso.

Actualizaciones OTA con EAS Update

EAS Update es el sustituto moderno del antiguo expo publish: empuja un nuevo bundle de JavaScript (y assets) a usuarios en producción sin esperar revisión de la tienda. Es ideal para corregir bugs críticos, ajustar copy o desplegar features detrás de flags, siempre dentro de los términos de Apple y Google (no puedes cambiar fundamentalmente el propósito de la app vía OTA).

# Instala las dependencias necesarias
npx expo install expo-updates

# Configura el canal en app.json
# "expo": { "updates": { "url": "https://u.expo.dev/<projectId>" }, "runtimeVersion": { "policy": "appVersion" } }

# Publica una actualización al canal production
eas update --channel production --message "Hotfix: corregir crash en el feed"

# Listar actualizaciones recientes
eas update:list --channel production

# Revertir a la versión anterior (rollback)
eas update:republish --group <group-id>

El concepto clave es runtimeVersion: cada build nativo declara una versión de runtime y solo recibe updates compatibles. Si añades un módulo nativo nuevo, el runtimeVersion cambia y los usuarios necesitan un binario nuevo desde la tienda. La política appVersion (recomendada en 2026) liga runtimeVersion al campo version de app.json, simplificando la coordinación.

EAS Update usa una CDN global con tiempos de descarga típicos de 200–800 ms, según mediciones publicadas en el blog de ingeniería de Expo. Para apps con tráfico alto, valida el rendimiento percibido como describimos en nuestra guía de rendimiento en React Native 2026.

Variables de entorno y secretos

Los builds de EAS no tienen acceso a tu .env local: debes declarar variables en eas.json o subirlas como secretos cifrados. Las variables con prefijo EXPO_PUBLIC_ se inlinean en el bundle de JS (visibles para clientes), mientras que las privadas solo existen durante el build.

# Subir un secreto a tu proyecto
eas secret:create --scope project --name SENTRY_AUTH_TOKEN --value sntrys_xxxx

# Listar secretos disponibles
eas secret:list

# Usar la variable durante el build (en eas.json > build.production.env)
{
  "build": {
    "production": {
      "env": {
        "EXPO_PUBLIC_API_URL": "https://api.miapp.com",
        "SENTRY_AUTH_TOKEN": "$SENTRY_AUTH_TOKEN"
      }
    }
  }
}

Recuerda que cualquier cosa expuesta con EXPO_PUBLIC_ aparece en el bundle minificado y puede ser extraída con herramientas de ingeniería inversa. Nunca pongas claves de Stripe Secret, API keys con permisos de escritura, ni secretos de OAuth ahí: úsalos solo en tu backend.

Solucionar errores comunes de despliegue

Estos son los fallos que aparecen con más frecuencia en el panel de soporte de Expo durante 2026, junto con la solución que aplico en mis proyectos:

Error: "No matching provisioning profile found"

Ocurre cuando el bundle identifier en app.json no coincide con el registrado en App Store Connect. Ejecuta eas credentials, elimina el perfil cacheado y deja que EAS regenere uno nuevo, o sube manualmente un perfil de Apple Developer.

Error: "Gradle build failed: Execution failed for task ':app:bundleReleaseJsAndAssets'"

Casi siempre es un problema de metro.config.js o de una dependencia que falla en modo producción. Ejecuta npx expo export --platform android localmente para reproducir el error antes de gastar tiempo en builds remotos.

Error: "ITMS-90478: Invalid Bundle Structure"

Indica que un módulo nativo añadió frameworks duplicados. Limpia con cd ios && pod deintegrate && pod install tras hacer prebuild, y revisa que no tengas dos versiones de react-native-reanimated o react-native-svg en tu package-lock.json.

EAS Update no aplica el bundle nuevo

Verifica que runtimeVersion del binario instalado coincida con el del update publicado: eas update:list muestra ambos. Si difieren, los usuarios necesitan un nuevo build desde la tienda.

Precios de EAS en 2026

La tabla siguiente resume los planes vigentes a junio de 2026 según la página oficial de precios.

CaracterísticaFreeProduction (19 USD/mes)Enterprise (99 USD/mes)
Builds incluidos / mes30Builds prioritarios ilimitados*Ilimitados + cola dedicada
Tiempo máximo por build30 min2 h4 h
EAS Update (MAU)1 0001 000 000Ilimitado
Concurrencia12Hasta 10
SoporteComunidadEmail (24 h)SLA + Slack
Imágenes de runner personalizadasNoNo

*Production aplica límites razonables (fair use). Si compilas en grandes equipos con múltiples PRs simultáneos, Enterprise paga rápidamente la inversión por la cola dedicada y la concurrencia ampliada.

Preguntas frecuentes

¿Necesito un Mac para publicar mi app React Native en iOS con EAS?

No. EAS Build provisiona máquinas macOS en la nube y firma el binario con tus credenciales gestionadas. Solo necesitas una cuenta de Apple Developer (99 USD/año) y EAS CLI desde Windows, Linux o macOS.

¿Cuál es la diferencia entre EAS Build y el antiguo comando expo build?

expo build fue descontinuado el 4 de enero de 2023. EAS Build es su reemplazo: soporta proyectos bare, módulos nativos personalizados, Nueva Arquitectura, credenciales modernas y builds más rápidos en runners macOS arm64.

¿Puedo desplegar una app React Native CLI bare sin migrar a Expo?

Sí. EAS Build funciona con proyectos React Native CLI puros desde 2021. Basta con instalar eas-cli, crear eas.json y opcionalmente añadir el paquete expo para usar config plugins. No tienes que adoptar el SDK Expo completo.

¿EAS Update viola las políticas de Apple sobre actualizaciones dinámicas?

No mientras respetes la guideline 3.3.2 de Apple: el código JavaScript actualizado debe mantener el propósito original de la app y no introducir features no aprobadas. EAS Update está diseñado específicamente para cumplir esos términos.

¿Cómo configuro despliegue continuo desde GitHub Actions con EAS?

Usa la acción oficial expo/expo-github-action, genera un EXPO_TOKEN en tu cuenta y ejecútalo en un workflow con eas build --non-interactive --auto-submit. EAS también ofrece su propia integración nativa llamada EAS Workflows desde 2025.

Sobre el Autor Editorial Team

Our team of expert writers and editors.