Saltar al contenido principal

Cómo actualizar correctamente aplicaciones de CapacitorJS mediante OTA

Aprenda a actualizar OTA aplicaciones de CapacitorJS y Electron con Capgo, abarcando configuración, firmado, canales, CI/CD, pruebas y rollback en una guía práctica.

Cómo actualizar OTA aplicaciones de CapacitorJS de manera correcta

Usted encuentra una regresión de pago en el viernes por la tarde. La corrección ya está en su capa web de Capacitor, pero la ventana de revisión de la tienda no se cerrará durante tres días. Los usuarios de Android pueden recibir un nuevo paquete más pronto, pero forzar a cada cliente a reinstalar una construcción nativa para una corrección solo de JavaScript todavía es inútil.

La razón práctica por la que los equipos aprenden a actualizar de forma OTA aplicaciones de CapacitorJS es que una liberación controlada en el aire puede entregar un paquete de bundle web firmado a los binarios instalados elegibles, descargarlo en segundo plano y aplicarlo en la próxima ejecución, mientras que los cambios nativos siguen el proceso de la tienda. La parte difícil no es subir un archivo. Es mantener la versión de destino, la firma, el control de lanzamiento, la observabilidad y la recuperación alineados en una flota en vivo.

Contenido de la tabla

Por qué la OTA importa para los equipos de CapacitorJS

A una aplicación Capacitor suele contener dos superficies de lanzamiento. La binaria nativa lleva la caja de la plataforma, permisos, plugins, iconos, derechos y otras capacidades revisadas por la tienda. La capa web lleva JavaScript, CSS, HTML, routing, copia y activos. Las actualizaciones OTA abordan la segunda superficie, por lo que un equipo puede corregir un flujo de pago roto sin reconstruir la caja nativa, siempre y cuando el cambio se mantenga dentro de los límites de la plataforma y las políticas de la tienda descritas en la Capgo guía de actualizaciones OTA.

Actualización OTA: una solución instantánea frente a retrasos en la tienda.

El beneficio operativo es más que la velocidad. Los binarios instalados no avanzan en sincronía. Algunos clientes lanzan una versión nativa más antigua, otros utilizan una versión de tienda reciente, y cada binario puede tener diferentes APIs nativas disponibles para el paquete de la web. Un paquete compilado contra una versión nativa API no soportada puede fallar incluso cuando la diferencia de JavaScript es válida. Eso hace que las actualizaciones OTA sean un sistema de compatibilidad, no un atajo alrededor de la ingeniería de lanzamiento.

Trate al actualizador como una canalización de entrega

Una configuración de producción necesita una secuencia clara:

  1. Instale la puente nativa: Agregue el paquete de actualizador y sincronice Capacitor para que iOS y Android lo conozcan.
  2. Firme el paquete: Mantén el material de firma fuera del repositorio y realiza la verificación como parte del camino del cliente.
  3. Dirija a un canal: Ruta de staging, beta, producción o cohortes específicas de clientes de manera deliberada.
  4. Automatice la entrega: Solo permita la compilación, firma, carga y promoción después de que los tests pasen.
  5. Observe la adopción: Registre descargas, instalaciones, arranques, errores y señales de salud por canal y binario.
  6. Revertir rápidamente: Restaurar un paquete conocido bueno de manera servidor y mantener la protección de recuperación del lado del cliente.

Capgo es una opción para este flujo de trabajo. Su actualizador de código abierto Capacitor y servicio en la nube publican paquetes web firmados a los canales objetivo, los aplican en el próximo arranque y exponen información de versión y entrega por dispositivo. Disponibilidad de la aplicación para Capacitor aplicaciones.

Regla práctica: No promueva un paquete si no puede identificar qué binario nativo se dirige a él.

El éxito de OTA se logra cuando reduce las liberaciones innecesarias de tiendas sin ocultar la frontera entre web code y nativo code. La pregunta no es si su equipo puede empujar un paquete. Es si puede explicar quién lo recibió, por qué eran elegibles, qué sucedió después del arranque y cómo restaurará el servicio cuando el paquete se comporte mal.

Requisitos previos e Instalación del actualizador Capgo

Antes de abrir una terminal, confirme que los proyectos y cuentas de liberación están listos. Necesitará una Capacitor 5 o 6 aplicación con @capacitor/cli cuenta de Apple Developer y Google Play Console activos para los binarios objetivo, y una Capgo cuenta de nube con un appId y API clave.

La primera instalación es intencionalmente pequeña:

npm install @capgo/capacitor-updater
npx cap sync
npx @capgo/cli init

npm install agrega el paquete de JavaScript y la dependencia nativa. npx cap sync es el paso que la gente omite, y esa omisión deja el puente nativo desvinculado. La capa de JavaScript puede compilar mientras el runtime llama más tarde a un puente que no está presente en el binario instalado. Realice la sincronización después de instalar y nuevamente cuando cambien las configuraciones de plugin nativo.

El inicializador parchea su capacitor.config.ts con las configuraciones de actualización, punto de conexión web y canal predeterminado. No acepte el parche a ciegas. Abra el archivo y verifique la identidad de la aplicación y el contrato de actualización explícitamente:

const config: CapacitorConfig = {
  appId: 'com.example.app',
  appName: 'Example',
  version: '1.0.0',
  autoUpdate: true,
  updateUrl: '',
  capgo: {
    channel: 'staging'
  }
}

La estructura generada exacta puede variar con su proyecto y CLI versión, pero los valores importantes son los mismos. appId debe coincidir con el binario instalado. version debe describir la relación de construcción nativa. autoUpdate debe reflejar su política de lanzamiento. updateUrl debe apuntar a la servicio en el que tu binario confía, y el capgo el bloque debe identificar el canal inicial.

Verificar antes de construir una versión

Ejecuta el comando de diagnóstico antes de abrir Xcode o Android Studio:

npx @capgo/cli doctor

Un resultado limpio debería confirmar que el CLI está disponible, la configuración del proyecto es legible, el paquete de actualización se detecta, existen identificadores de aplicación requeridos y la autenticación puede alcanzar la cuenta configurada. No debería informar de una sincronización nativa faltante, identidad de aplicación ausente o configuración de actualización inválida.

Foto desde https://capgo.app/docs/img/cli-doctor.png

Mantén la primera compilación nativa deliberadamente aburrida. Instálala en un dispositivo físico de iOS y Android, lanzala con acceso a la red, ciérrala y abrírala, y confirma que la actualización puede verificar sin afectar el camino de arranque normal. El El flujo de instalación del actualizador Capacitor es útil cuando necesitas comparar la configuración del proyecto contra el conjunto de configuración esperado del plugin.

Shipping Your First OTA Bundle Safely

Trate el primer paquete como una prueba de ruta de lanzamiento, no como un lanzamiento de características. Crea o gira la clave de firma antes de preparar el artefacto:

npx @capgo/cli key create

Coloque la clave privada en un administrador de secretos. No la comunique, almacénela en un archivo de proyecto o la exponga en la salida de CI. La ruta de confianza nativa necesita el material de verificación público. Solo el trabajo de firma debería acceder a la clave privada.

Modifique la versión del lado del JavaScript en package.json o los metadatos de su lanzamiento web. Mantenga los campos de versión nativa sin cambios para una solución web solo. Un paquete OTA no puede agregar una versión nativa code o alterar las capacidades declaradas por el binario instalado, por lo que un cambio de versión nativa obscurecería la compatibilidad en lugar de mejorarla.

Cargue el artefacto firmado en el canal previsto:

npx @capgo/cli bundle upload --channel production

Un subida exitosa solo confirma que el servidor aceptó una solicitud. Lea la salida del comando y verifique el identificador del paquete, el límite de versión nativa objetivo, el resumen firmado y la asignación de canal. Esos campos identifican el artefacto y muestran si los binarios instalados están elegibles para recibirlo.

Lea el panel de control como una puerta de lanzamiento

La vista de detalles del paquete debería resolver cuatro preguntas de lanzamiento:

  • Versión nativa mínima: Which oldest binary can run this bundle?
  • Versión nativa máxima: ¿Cuáles de los binarios más recientes están intencionalmente excluidos?
  • Canal: ¿Cuál es el público que puede descubrir el artefacto?
  • Porcentaje de lanzamiento: Cuantos de ese público elegible pueden recibirlo?

Iniciar exposición de producción en 5%luego defina la evidencia requerida para la expansión. Verifique el éxito de la descarga e instalación, arranques fríos normales, sesiones sin crash y errores de JavaScript en el flujo modificado. Mantenga la identidad del artefacto y los controles de entrega visibles en el Capgo dashboard.

Captura de pantalla desde https://capgo.app/docs/img/bundle-detail.png

Use a debug build to exercise the device path. getCurrent() informa sobre el paquete activo, y notifyAppReady() confirma que el nuevo paquete alcanzó un estado saludable:

import { CapacitorUpdater } from '@capgo/capacitor-updater'

const current = await CapacitorUpdater.getCurrent()
console.log(current)

await CapacitorUpdater.notifyAppReady()

Llame a la disponibilidad solo después de que la aplicación se haya inicializado lo suficiente para superar sus controles de salud. Si nunca confirma la disponibilidad, la recuperación automática puede marcar el paquete como fallido durante el próximo arranque frío. Ese mecanismo de seguridad protege a los usuarios de producción, pero también puede hacer que un test incompleto parezca un problema de entrega. Registre el paquete activo y el resultado de arranque para cada dispositivo de prueba antes de expandir la exposición.

Canales, Lanzamientos y Automatización de CI/CD

Los canales son la capa de enrutamiento entre un paquete publicado y un dispositivo instalado. También son su puerta de admisión. Un canal de staging debe apuntar a un binario nativo conocido, un canal beta debe servir a un grupo controlado y la producción debe moverse solo después de que el canal anterior haya superado las pruebas de humo.

Crear un camino de staging con nombres explícitos:

npx @capgo/cli channel create staging
npx @capgo/cli bundle assign <bundle-id> --channel staging

Pin ese canal a la versión nativa utilizada por tus dispositivos de prueba. Los probadores deben ejecutar la misma binaria que la producción apoyará, no una compilación de desarrollo local con plugins adicionales o una configuración diferente. Una vez que el conjunto de humo pase, promueve el artefacto probado en lugar de subir una segunda, ligeramente diferente, paquete.

Su mapa de canales debe residir en capgo.config.json y ser revisado como una aplicación code. Mantenga los nombres de los canales estables, identifique el rango de compatibilidad nativa previsto y haga que la promoción a producción sea una acción CI explícita. Para los equipos que gestionan la exposición de características junto con la exposición de entrega, estos consejos de gobernanza de banderas de características proporcionan una forma útil de separar la autorización de despliegue de la activación de usuario.

Conecta la promoción a CI

Un diseño práctico de GitHub Actions tiene dos caminos:

  • Solicitudes de extracción: Construye la capa web, firma con una credencial de visor restringida y publica en un canal de visor ephemeris. Destruye o expira ese canal cuando la solicitud de extracción se cierre.
  • Versiones principales etiquetadas: Ejecuta pruebas unitarias, construye el paquete de producción, valida su restricción de versión nativa, sube y promueve solo cuando la tarea de prueba se sale con éxito.

Un comando de promoción puede verse así:

npx @capgo/cli bundle promote <bundle-id> \
  --to-channel production \
  --percent 5

Aumenta la exposición en pasos deliberados como 25%, 50% y 100%, con una aprobación de CI o un trabajo monitoreado entre cada paso. Las porcentajes y comandos son controles, no evidencia de seguridad. Un build exitoso te dice que el paquete es sintácticamente válido. No te dice cómo se comporta en un binario nativo particular, con un estado local persistente, una conexión lenta o un dispositivo que se reinicia desde una sesión antigua.

Límite de liberación: Un paquete web pertenece a una ventana de compatibilidad binaria. Un canal nunca debe convertirse en una brecha para servir code que referencia APIs nativas que el aplicación instalada no contiene.

Mantén coherentes las compilaciones de pruebas y los builds internos de Android en el canal de pruebas, vinculando cada paquete a la versión nativa exacta para la que se construyó. Si el build nativo cambia, publica un nuevo paquete dirigido a la compatibilidad o crea una nueva asignación de canal. El Capgo GitHub Guía de integración de acciones puede ayudar a traducir esa política en pasos de flujo repetibles.

Un diagrama que ilustra los tres pasos de los canales de software y automatización: Canal de Etapa, Pin Binario y Auto-despliegue CI/CD.

Estrategias de Pruebas y Retroceso Automático

Una liberación OTA puede pasar la CI y fallar después de la activación. La falla puede depender del paquete, el binario nativo, el estado del dispositivo almacenado o las condiciones de red. Un simulador puede confirmar que una pantalla se renderiza, pero no puede cubrir cada binario instalado o mostrar si un inicio fallido se recupera limpiamente.

Utiliza tres niveles de pruebas:

  1. Pruebas de paquetes de CI: Ejecuta pruebas unitarias, comprobaciones de tipo, limpieza de código y una compilación web de producción. Ejercita rutas de pago, autenticación, navegación y persistencia en lugar de detenerse en la compilación.
  2. Canales de dispositivo privado: Sembrar un canal privado con dispositivos físicos que ejecutan el binario nativo anterior. Cubrir ambas plataformas, instalaciones limpias, instalaciones de actualización y estado almacenado representativo.
  3. Canario de producción: Comenzar con una pequeña cohorte elegible, informes de errores de conexión y alertas de errores de JavaScript. Tratar las fallas de arranque como urgentes porque los usuarios afectados pueden nunca llegar al code que informa un error en la aplicación.

La La guía de pruebas de actualizaciones OTA Capacitor explica los mecanismos de prueba. La regla operativa es sencilla: probar cada actualización contra el binario nativo que pretende proteger.

Control de servidor separado de recuperación del cliente

La devolución del servidor detiene los nuevos descargas:

npx @capgo/cli channel set production --bundle <previous-id>

Esto cambia qué dispositivos elegibles descubren a continuación. No borra un paquete ya descargado o activo en cada dispositivo, por lo que el cliente también necesita controles de recuperación. Configurar el actualizador para retener un fallback conocido bueno y revertir después de una condición de falla de arranque definida.

Un camino de recuperación confiable incluye:

  • Seguimiento de fallas de descarga: Distinguir problemas de conectividad de artefactos inválidos.
  • Seguimiento de fallas de instalación: Detectar problemas de desempaquetado, verificación y sistema de archivos.
  • Seguimiento de salud de arranque: Confirmar que la aplicación alcance un estado usable después de la activación.
  • Fallo automático: Restaurar el paquete conocido bueno anterior cuando el arranque falla repetidamente.
  • Escalada manual: Preservar identificadores de dispositivo y paquete para soporte y ingeniería.

A escala de flota, una pequeña tasa de fallas aún crea una carga significativa de soporte. 99.95% de actualización exitosa de OTA aún implica alrededor de 1,000 fallas por 1 millón de dispositivosde acuerdo a Los benchmarks de pruebas OTA para flotas de IoT. La misma fuente describe los guardrails que incluyen el rollback dentro de 30 minutos, una tasa de fallas por debajo del 0,1% y el 98% de los dispositivos dentro de la ventana de soporte. Trate estos como ejemplos de referencia, no como criterios de aceptación universal. Establezca el presupuesto de errores según el riesgo y el impacto del usuario de la aplicación.

La Firma, Seguridad y lo que la OTA no puede cambiar

Una actualización no firmada hace que el punto de entrega sea parte de la superficie de ataque de la cadena de suministro. TLS protege la conexión, pero el cliente también debe confirmar que el artefacto descargado provino de un proceso de liberación autorizado y no fue reemplazado o alterado durante el tránsito.

Generar una clave de pareja Ed25519 con la herramienta de actualización. Almacene la clave privada en un secreto de CI y embase la clave de verificación pública en el binario nativo durante la compilación de la aplicación. El cliente debe verificar cada paquete antes de la activación. Limitar los tokens CLI por entorno y alcance de permiso, retener registros de carga y promoción y requerir una autenticación fuerte para acciones de producción.

Trate la rotación de claves como una migración de compatibilidad, no como un cambio de configuración individual. Genere una clave de reemplazo, envíe una compilación nativa que confíe en ambas claves públicas actuales y de reemplazo, y luego firme las liberaciones con la nueva clave privada. Elimine la clave antigua solo después de que los binarios nativos compatibles hayan adoptado la de reemplazo. Eliminar la confianza demasiado pronto impide que los binarios antiguos acepten actualizaciones válidas. Dejar una clave comprometida confiada indefinidamente defrauda la rotación.

Dibuja la frontera en el plan de liberación

OTA maneja cambios en la capa web. Se requieren liberaciones nativas cuando un cambio depende de capacidades ausentes del binario instalado:

Categoría Envíe mediante OTA Requiere liberación nativa
Comportamiento de la aplicación lógica de JavaScript, ruteo, validación y manejo de estado Implementación de plugin nativo
Presentación CSS, HTML, copia, tokens de tema y recursos de imagen compatibles Icono de la aplicación y recursos de pantalla de inicio
Acceso a la plataforma Existencias de llamadas de capa web Capacitor a capacidades ya incluidas en el binario Nuevas permisos, derechos o APIs nativas
Configuración Configuración de capa web compatible y reglas de contenido remoto Info.plist, AndroidManifest.xml, identidad de firma
Metadatos de la tienda None que cambie el comportamiento revisado por la tienda o metadatos de versión Metadatos de la tienda y cambios en el número de versión

El Capacitor actualizador code-documentación de firma explica el modelo de verificación. Aplicarlo operativamente con registros de auditoría evidentes de manipulación, verificación de certificados, TLS, controles de acceso estrictos y un proceso de investigación para el engaño de versión o la pérdida de clave.

La compatibilidad de destino sigue siendo importante porque la población nativa instalada cambia gradualmente. Apple informó 66% de todos los dispositivos activos en iOS 26 y 74% de los dispositivos introducidos en los últimos cuatro años en iOS 26, mientras que otro informe colocó a iOS 26 en 79% de todos los dispositivos más adelante en el ciclo, como se resume en investigación de gestión de claves OTA móvil. Estas cifras cubren diferentes puntos y poblaciones de dispositivos. La conclusión práctica es consistente: incluso las plataformas maduras no actualizan todos los dispositivos al mismo tiempo. Asigna conjuntos por versión nativa y capacidad, en lugar de asumir que un artefacto OTA se ajusta a toda la flota.

Lista de Verificación Operativa Antes de Cada Lanzamiento

Mantenga la lista de verificación de lanzamiento en una página, almacenada con el repositorio o runbook. Actualícela después de cada incidente. Un control agregado después de una falla real suele prevenir la próxima recurrencia.

Antes de subir

  • Verificar compatibilidad: Verifique que el paquete apunta a la binaria nativa exacta y utiliza ninguna API de plugin inaccesible.
  • Revisar el artefacto: Construya desde un espacio de trabajo limpio, inspeccione los archivos generados y confirme la versión web deseada.
  • Proteger la firma: Confirme que CI tiene la clave secreta esperada y verifique que los registros no expongan material privado.
  • Validar canales: Revisar las asignaciones de etapa, beta y producción antes de asignar el paquete.
  • Preservar la recuperación: Registre el paquete conocido bueno anterior y verifique que el camino de fallback sigue funcionando.
  • Ejecutar pruebas de humo físicas: Prueba el arranque, inicio de sesión, pago, navegación, persistencia y preparación de actualizaciones en dispositivos representativos.

Durante promoción

Lanzar a un colectivo limitado primero, luego observar señales vinculadas al impacto del usuario:

  • Sessions sin errores: Comparar el resultado con el paquete anterior y investigar regresiones.
  • Tasa de errores de JavaScript: Grupos de errores por paquete, versión nativa, plataforma y ruta de función.
  • Comportamiento de arranque frío: Verificar si los cambios de activación afectan el arranque o dejan a los usuarios en una pantalla en blanco.
  • Cobertura de características: Confirmar que la funcionalidad habilitada remotamente coincide con el binario que lo recibe.
  • Adopción y fracasos: Separar dispositivos elegibles que no han revisado una actualización de los dispositivos que revisaron y fallaron.

Retenga la primera ventana de observación post-promoción durante 30 minutos antes de expandir la exposición. Si se rompe un camino crítico, reemplaza el canal de producción con el paquete anterior, preserva los registros y decide si la solución pertenece a otro paquete de actualización OTA o a una nueva versión nativa.

Disciplina de envío: Un paquete de fallback ayuda solo cuando el equipo conoce su identificador, rango de compatibilidad y comando de restauración.

Trate esta lista como un operativo compartido code. Capgo puede proporcionar la entrega de paquetes firmados, la configuración de canales, el control de la actualización, el historial de actualizaciones y la observabilidad a nivel de dispositivo. Su equipo sigue siendo responsable de la política de compatibilidad y la decisión de promover.


Capgo da a los equipos de CapacitorJS un camino controlado para actualizaciones firmadas de JavaScript, CSS, configuración y activos, con canales, entrega estadiada, protección de retroceso y observabilidad de la liberación. Coloque la lista en la próxima despliegue, pruébela contra un binario de staging y evalúe Capgo para el flujo de trabajo de producción.

Actualizaciones en vivo para aplicaciones Capacitor

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Últimas noticias de nuestro Blog

Capgo te da las mejores herramientas para crear una aplicación móvil profesional de verdad.