Mejores Prácticas de Actualizaciones OTA
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de cada página en esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de cada página en esta sección.
OTA es solo JS y assets: Los módulos nativos, plugins de configuración, permisos, derechos, upgrades de SDK e iconos de aplicación requieren eas build y envío a la tienda - OTA no puede agregar símbolos nativos.
Establece una política explícita de runtimeVersion: Usa appVersion, nativeVersion o fingerprint consistentemente en app.config - documenta la opción en README y nunca mezcles políticas entre flavors sin un ADR.
Coincide con el runtime en build y update: El runtimeVersion resuelto por eas build debe ser igual a lo que eas update apunta - verifica con npx expo config --type public antes de cada publicación.
Cambia de runtime cuando los cambios nativos ocurren: Nueva dependencia nativa, edición de plugin o cambio de cadena de permiso significa nuevo build de tienda y nueva línea de runtime - no hagas OTA en JS que importa módulos nativos faltantes.
Configura updates.url y projectId: Ejecuta eas update:configure después de eas init - la falta de updates.url desactiva expo-updates silenciosamente en builds de lanzamiento.
Conecta los headers de canales a los perfiles de build: updates.requestHeaders["expo-channel-name"] debe coincidir con eas.json channel para cada perfil - impulsa desde EAS_BUILD_PROFILE en app.config dinámico.
Usa eas update --environment siempre: En SDK 55+, los update runners ignoran .env local - pasa --environment production (o preview) para que los OTA bundles coincidan con las variables de entorno del build.
Nombra canales para entornos: development, preview, staging, production - no nombres de ingenieros; asigna canales a audiencias en docs/release-channels.md.
Flujo de promoción lineal: development → preview (QA) → production - no saltes preview para pagos, autenticación o cambios de checkout independientemente del tamaño del diff.
Builds de vista previa para aprobación de OTA: QA prueba en binarios del perfil preview de EAS, no en Expo Go - Expo Go no puede recibir tu configuración de actualización de producción.
CI-only publicación de producción: Prefiere flujos de trabajo etiquetados de GitHub Actions para eas update --channel production - la publicación desde laptop es vidrio roto con aprobador secundario y postmortem.
Registra el ID de actualización anterior más conocido: Cada ticket de lanzamiento de producción almacena el ID de bundle anterior para eas update:rollback o eas update:republish - los rollbacks sin esto son adivinanza.
Define los triggers de rollback antes del lanzamiento: Crash-free drop, payment success drop y umbrales de auth error spike con propietarios - ver Release & OTA Rules Tier 4.
Practica rollback trimestralmente en preview: Ejecuta eas update:rollback en el canal preview en un drill - apunta a menos de 15 minutos desde la decisión hasta la verificación de channel head.
Gate de JS dependiente de código nativo con flags: Kill switches remotos más Application.nativeApplicationVersion checks previenen crashes hasta que la adopción de tienda cruza tu umbral.
Log updateId en análisis de producción: Updates.updateId, runtimeVersion y channel al inicio de sesión - el soporte y la respuesta a incidentes dependen de saber qué bundle se está ejecutando.
checkAutomatically ON_LOAD con fallback 0: Verifica en arranque en frío sin bloquear el lanzamiento en redes lentas - sintoniza el UX de recarga por separado mediante la API del cliente de expo-updates.
Reconstruye después de la primera configuración de updates: Agregar wiring de expo-updates requiere un nuevo binario nativo - eas update por sí solo no habilita updates en instalaciones antiguas.
Trata las regresiones de tamaño de bundle como lanzamientos: Los OTA bundles grandes dañan TTI - compara la salida de Metro antes de publicación de producción y vincula a las reglas de presupuesto de rendimiento.
Contratos de API compatibles hacia atrás: Los usuarios móviles saltan updates - el JS enviado OTA debe tolerar respuestas de API más antiguas hasta que la adopción de tienda sea alta; ejecuta contract tests en CI.
Migraciones seguras de almacenamiento local: Los cambios de esquema de MMKV y SQLite necesitan rutas de upgrade probadas desde el bundle de producción anterior - las migraciones malas cierran las instalaciones y necesitan rollback.
Rollouts escalonados en producción: Usa --rollout-percentage o eas channel:rollout después de soak de preview - monitorea crash y métricas de pago en cada paso antes de 100%.
Tag Sentry con updateId: Segmenta reportes de crash por bundle durante rollouts - sin tags de cohorte, los rollouts de porcentaje son ciegos.
Rastrear distribución de runtime semanalmente: Porcentaje de usuarios por runtimeVersion - los binarios antiguos dejan de recibir OTAs; aplica una versión nativa mínima cuando la seguridad lo requiere.
Checklist de dos pistas de lanzamiento: Checklist de envío de tienda para cambios nativos y checklist de OTA para soak de preview, flags, ID de rollback y dashboards - adjunta ambos a cada ticket de lanzamiento.
Política de runtime appVersion + canales eas.json por perfil + eas update:configure + soak de preview + publicación de producción CI + logging de updateId + drill trimestral de rollback + checklist de Release & OTA Rules.
No - los crashes nativos necesitan un nuevo build de tienda. OTA solo corrige lógica JavaScript y assets. Revierte JS si el crash proviene de importar un módulo nativo faltante, luego envía el binario.
OTA Updates Basics para límites, luego expo-updates Configuration para app.config, luego Release Channels & Branches para flujo de promoción.
appVersion para la mayoría de aplicaciones de consumidor. fingerprint cuando el proyecto nativo diverge sin bumps de versión de marketing - ver Runtime Version Policy.
Rollouts limita el radio de explosión antes de la exposición completa. Rollback Runbook se recupera después de una publicación mala - usa ambos con dashboards de monitoreo compartido.
app.configVersiones de Stack: 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