Alcance de versiones
Copia un prompt de configuración con los pasos de instalación y la guía de markdown completa para este plugin.
Esta guía explica cómo entregar automáticamente la última versión compatible del paquete a los usuarios según su versión nativa de la aplicación. similar a Ionic AppFlow’s enfoqueEsto garantiza un manejo de actualizaciones simplificado y lanzamientos más rápidos, evitando problemas de compatibilidad.
Resumen
Sección titulada “Resumen”El sistema de versión de Capgo te permite:
- Entregar actualizaciones compatibles de manera automática a los usuarios según su versión nativa de la aplicación
- Prevenir cambios que rompen la aplicación de llegar a versiones de aplicación incompatibles
- Gestionar múltiples versiones de la aplicación de manera simultánea sin lógica compleja
- Realizar actualizaciones suaves a segmentos de usuarios específicos
Por qué la versión de destino importa (sobre todo para usuarios de AppFlow)
Por qué la versión objetivo es importante (sobre todo para usuarios de AppFlow)Si estás familiarizado con Ionic AppFlow, sabrás cuán crítico es asegurarse de que los usuarios reciban solo actualizaciones compatibles. AppFlow automatizó automáticamente los conjuntos de live update para versiones nativas de la aplicación, evitando que se entregara JavaScript incompatible a versiones nativas más antiguas de code.
Capgo ofrece las mismas garantías de seguridad, con características adicionales:
- Control más detallado sobre la coincidencia de versiones
- Strategias múltiples (canales, semver, restricciones nativas)
- Mejor visibilidad en la distribución de versiones
- API y CLI controlan junto con la gestión de la consola
Esta aproximación es particularmente útil cuando:
- Tienes usuarios en diferentes versiones principales de tu aplicación (por ejemplo, v1.x, v2.x, v3.x)
- Deben mantener la compatibilidad hacia atrás mientras se implementan cambios disruptivos
- Quieren evitar que los paquetes más nuevos rompan las versiones nativas antiguas code
- Están migrando a los usuarios gradualmente de una versión a otra
- Están migrando desde AppFlow y quieren mantener la misma seguridad de actualización
Capgo utiliza un enfoque multiestratificado para emparejar a los usuarios con actualizaciones compatibles:
- Restricciones de versión nativa: Prevenga que los paquetes se entreguen a versiones nativas incompatibles
- Ruteo basado en canal: Ruta diferentes versiones de la aplicación a diferentes canales de actualización
- Control de versiones semánticasAutomáticamente bloquear actualizaciones entre versiones principales/minoristas/patch.
- Sobrescrituras a nivel de dispositivo: Target specific devices or user groups
Flujo de coincidencia de versión
Sección titulada “Flujo de coincidencia de versión”graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check local plugin channel} D -->|setChannel value| E[Use local setChannel channel] D -->|No local channel| F{Check defaultChannel in App} F -->|Has defaultChannel| G[Use App's defaultChannel] F -->|No defaultChannel| H[Use Cloud Default Channel] C --> I{Check Version Constraints} E --> I G --> I H --> I I -->|Compatible| J[Deliver Update] I -->|Incompatible| K[Skip Update]Estrategia 1: Ruta de versión basada en canal
Sección titulada “Estrategia 1: Ruta de versión basada en canal”Esta es la aproximación recomendada para gestionar cambios importantes y actualizaciones de versión mayor. Es similar al modelo de entrega de AppFlow.
Escenario de Ejemplo
Sección titulada “Escenario de Ejemplo”- App v1.x (100.000 usuarios) →
productioncanal - App v2.x (50.000 usuarios con cambios disruptivos) →
v2canal - App v3.x (10.000 usuarios beta) →
v3canal
Implementación
Sección titulada “Implementación”Paso 1: Configura canales para cada versión mayor
Sección titulada “Paso 1: Configura canales para cada versión mayor”// capacitor.config.ts for version 1.x buildsimport { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', // or omit for default } }};
export default config;// capacitor.config.ts for version 2.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // Routes v2 users automatically } }};// capacitor.config.ts for version 3.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v3', // Routes v3 users automatically } }};Paso 2: Crea canales
Sección titulada “Paso 2: Crea canales”# Create channels for each major versionnpx @capgo/cli channel add productionnpx @capgo/cli channel add v2npx @capgo/cli channel add v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignPaso 3: Sube paquetes específicos de versión
Sección titulada “Paso 3: Sube paquetes específicos de versión”# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3Beneficios
Sección titulada “Beneficios”- Cero cambios code - El ruteo de canales ocurre automáticamente
- Separación clara Cada versión tiene su propio pipeline de actualizaciones
- Configuración flexible - Actualizar a grupos de versiones específicas
- Implementación segura - Cambios importantes nunca llegan a versiones incompatibles
Estrategia 2: Controles de versión semántica
Título de la sección “Estrategia 2: Controles de versión semántica”Utilice Capgo’s integrado Control de versiones semánticas Desactivar Actualizaciones Automáticas entre Versiones Principales
Disable Auto-Update Across Major Versions
Sección titulada “Deshabilitar la actualización automática entre versiones principales”# Create a channel that blocks major version updatesnpx @capgo/cli channel add stablenpx @capgo/cli channel set stable --disable-auto-update majorEsta configuración significa:
- Los usuarios de la aplicación con versión 1.2.3 recibirán actualizaciones hasta 1.9.9
- Usuarios podrán NO recibirán la versión 2.0.0 automáticamente
- Evita que los cambios de ruptura lleguen a versiones nativas antiguas code
- La comparación utiliza la base nativa enviada como
version_build
Opciones de control granular
Sección titulada “Opciones de control granular”# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (1.2.3 won't get 1.2.4)npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updatesnpx @capgo/cli channel set stable --disable-auto-update noneEstrategia 3: Restricciones de Versión Nativa
Sección titulada “Estrategia 3: Restricciones de Versión Nativa”Specifica una versión mínima de la aplicación nativa (min_update_version ) en cada paquete para que Capgo solo lo envíe a dispositivos cuya binaria nativa es lo suficientemente nueva.
Esta utiliza el canal metadatos estrategia (--disable-auto-update metadata) más --min-update-version o --auto-min-update-version estrategia de canal más metadatos --native-version bandera de CLI.
Habilite la configuración de metadatos para el canal
Sección titulada “Habilite la configuración de metadatos para el canal”# one-time: require min_update_version metadata on uploads to this channelnpx @capgo/cli@latest channel set production --disable-auto-update metadataEstablecer una versión nativa mínima en la carga
Sección titulada “Establecer una versión nativa mínima al subir”Al subir un paquete, pase la versión nativa más baja que pueda recibir:
# This bundle requires native version 2.0.0 or highernpx @capgo/cli@latest bundle upload \ --channel production \ --min-update-version "2.0.0"O deje que Capgo establezca el piso desde la compatibilidad del paquete nativo:
npx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-versionCasos de uso
Sección titulada “Casos de uso”-
Nueva Placa Nativa Requerida
Ventana de terminal # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli@latest bundle upload \--channel production \--min-update-version "2.0.0" -
Actualizaciones Nativas de API
Ventana de terminal # Bundle uses new Capacitor 6 APIsnpx @capgo/cli@latest bundle upload \--channel production \--min-update-version "3.0.0" -
Migración Gradual
Ventana de terminal # one-time: enable metadata gating on betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata# Test bundle only on latest native versionnpx @capgo/cli@latest bundle upload \--channel beta \--min-update-version "2.5.0"
Estrategia 4: Prevención de Descenso Automático
Sección titulada “Estrategia 4: Prevención de Descenso Automático”Evita que los usuarios reciben paquetes más antiguos que su versión nativa actual.
Habilitar en Configuración de Canal
Sección titulada “Habilitar en Configuración de Canal”En el Capgo panel de control:
- Ir a Canales Seleccionar su canal
- Habilitar Deshabilitar la desescalada automática en nativo
- Guardar cambios
O mediante CLI:
npx @capgo/cli@latest channel set production --no-downgradeEjemplo
Sección titulada “Ejemplo”- Dispositivo del usuario: Versión nativa 1.2.5
- Paquete de canal: Versión 1.2.3
- Resultado: La actualización está bloqueada (sería una desactualización)
Esto es útil cuando:
- Users manually installed a newer version from the app store
- Debes asegurarte de que los usuarios siempre tengan las últimas actualizaciones de seguridad
- Quieres evitar bugs de regresión
Estrategia 5: Targeteo a nivel de dispositivo
Estrategia 5: Targeteo a nivel de dispositivoSuperar la asignación de canal para dispositivos o grupos de usuarios específicos.
Forzar Versión Específica para Pruebas
Estrategia 5: Targeteo a nivel de dispositivoimport { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}Panel de control de dispositivo
Estrategia 5: Targeteo a nivel de dispositivoEn el Capgo panel de control:
- Vaya a Dispositivos → Encuentra dispositivo
- Haga clic Establecer Canal o Establecer Versión
- Ovérvela con una versión específica de canal o paquete
- El dispositivo recibirá actualizaciones de la fuente sobrescrita
Flujo de trabajo completo estilo AppFlow
Sección titulada “Flujo de trabajo completo estilo AppFlow”Aquí hay un ejemplo completo que combina todas las estrategias:
1. Configuración inicial (App v1.0.0)
Sección titulada “1. Configuración inicial (App v1.0.0)”# Create production channel, then enable metadata min-version gatingnpx @capgo/cli@latest channel add productionnpx @capgo/cli@latest channel set production \ --disable-auto-update metadata \ --no-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};2. Lanzamiento de cambio disruptivo (App v2.0.0)
Sección titulada “2. Lanzamiento de cambio disruptivo (App v2.0.0)”# Create v2 channel for new versionnpx @capgo/cli@latest channel add v2npx @capgo/cli@latest channel set v2 \ --disable-auto-update metadata \ --no-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. Envía actualizaciones a ambas versiones
Sección titulada “3. Envía actualizaciones a ambas versiones”# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli@latest bundle upload \ --channel production \ --min-update-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli@latest bundle upload \ --channel v2 \ --min-update-version "2.0.0"4. Monitorea la distribución de versiones
Sección titulada “4. Monitorea la distribución de versiones”Utiliza el Capgo panel para seguir:
- ¿Cuántos usuarios están en v1 vs v2
- Tasas de adopción de paquetes por versión
- Errores o congelamientos por versión
5. Deprecar Versión Antigua
Sección titulada “5. Deprecar Versión Antigua”Una vez que el uso de v1 caiga por debajo del umbral:
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)Precedencia de Canal
Sección titulada “Precedencia de Canal”Cuando existen múltiples configuraciones de canal, Capgo utiliza este orden de precedencia:
- Sobrescritura de dispositivo (Panel de control o API) - Mayor prioridad y visible en la UI de Sobrescritura de dispositivo
- Canal de plugin local a través de
setChannel()- Stored on the device only and not shown in the Device Override UI - defaultChannel en capacitor.config.ts
- Canales por defecto (Configuración de Cloud) - Prioridad más baja
Prácticas recomendadas
Sección titulada “Prácticas recomendadas”1. Establecer siempre defaultChannel para versiones principales
Sección titulada “1. Establecer siempre defaultChannel para versiones principales”// ✅ Good: Each major version has explicit channel// v1.x → production// v2.x → v2// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching// All versions → production, switch manually2. Utilizar la versión semántica
Sección titulada “2. Utilizar la versión semántica”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Mantener ramas separadas
Sección titulada “3. Mantener ramas separadas”# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Prueba antes de la implementación
Sección titulada “4. Prueba antes de la implementación”# one-time: create beta and enable metadata gating# (production is set up in the complete workflow above)npx @capgo/cli@latest channel add betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel firstnpx @capgo/cli@latest bundle upload \ --channel beta \ --auto-min-update-version
# Monitor for issues, then promote to productionnpx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-version5. Monitorear la distribución de versiones
Sección titulada “5. Monitorear la distribución de versiones”Revisa regularmente tu tablero:
- ¿Los usuarios están actualizando a versiones nativas más nuevas?
- ¿Las versiones antiguas siguen recibiendo un alto tráfico?
- ¿Deberías deprecate los canales antiguos?
Comparación con Ionic AppFlow
Sección titulada “Comparación con Ionic AppFlow”Para equipos que migran desde Ionic AppFlowAquí está cómo compara Capgo la versión de destino.
| Característica | Ionic AppFlow | Capgo |
|---|---|---|
| Ruteo basado en versión | Automático según la versión nativa | Automático mediante defaultChannel + múltiples estrategias |
| Versión semántica | Apoyo básico | Avanzado con --disable-auto-update (mayor/minor/patch) |
| Restricciones de versión nativas | Configuración manual en la consola de AppFlow | Integrado --min-update-version / --auto-min-update-version con canales de metadatos |
| Gestión de canales | Interfaz de usuario web + CLI | Interfaz de usuario web + CLI + API |
| Superposiciones de dispositivo | Control de dispositivo limitado | Control completo a través de la consola/API |
| Prevención de descargas automáticas | Sí | Sí a través de --no-downgrade |
| Mantenimiento de varias versiones | Gestión de rama/canal manual | Gestión de canal con precedencia automática |
| Autohospedaje | No | Sí (control completo) |
| Análisis de versiones | Basic | Detalles por versión |
Solución de problemas
Sección titulada “Resolución de problemas”Título de sección: Solución de problemas
Usuarios que no reciben actualizacionesVerifique lo siguiente:
-
Asignación de CanalVerificar que el dispositivo está en el canal correcto
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Restricciones de Versión: Verificar si el paquete tiene requisitos de versión nativos
- Panel de control → Paquetes → Ver la columna “Versión Nativa”
-
Configuración de Semver: Verificar la configuración del canal
disable-auto-updateConfiguraciónVentana de terminal npx @capgo/cli channel list -
Sobrescritura de DispositivoVerificar si el dispositivo tiene override manual
- Panel de control → Dispositivos → Buscar dispositivo → Verificar canal/versión
Bundle entregado a la versión incorrecta
Sección titulada “Bundle entregado a la versión incorrecta”- Revisar defaultChannel: Asegurarse de que el canal correcto en
capacitor.config.ts - Verificar carga de Bundle: Verificar si el bundle se subió al canal previsto
- Inspeccionar minima versión de actualización: Confirmar
--min-update-version(o--auto-min-update-version) se estableció y el canal utiliza--disable-auto-update metadata
Cambios de ruptura que afectan versiones antiguas
Sección titulada “Cambios de ruptura que afectan versiones antiguas”- Solución inmediata: Sobreescribir dispositivos afectados con paquete seguro
- Dashboard → Devices → Bulk select → Set Version
- Solución a largo plazo: Crear canales versionados y mantener ramas separadas
- Prevención: Siempre probar actualizaciones en dispositivos representativos antes de la implementación
Migración desde Ionic AppFlow
Sección titulada “Migración desde Ionic AppFlow”Si estás migrando desde Aplicación de flujo de IonicLa versión targeting funciona muy de manera similar en Capgo, con mayor flexibilidad.
Mapeo de conceptos
Título de la sección “Mapeo de conceptos”| Concepto de flujo de Aplicación | Capgo Equivalente | Notas |
|---|---|---|
| Canal de despliegue | Capgo Canal | El mismo concepto, pero más poderoso |
| Bloqueo de versión nativa | --min-update-version / --auto-min-update-version | Más control granular |
| Prioridad de Canal | Precedencia de Canal (sobreescribir → en la nube → predeterminado) | Precedencia más transparente |
| Destino de Despliegue | Canal + semver controla | Disponibles varias estrategias |
| Canal de Producción | production canal (o cualquier nombre) | Nombres flexibles |
| Despliegue basado en Git | CLI carga de paquete desde rama | Mismo flujo de trabajo |
| Compatibilidad de versión automática | defaultChannel + restricciones de versión | Mejorado con varias estrategias |
Diferencias clave para usuarios de AppFlow
Sección titulada “Diferencias clave para usuarios de AppFlow”- Más control: Capgo te da varias estrategias (canales, semver, versión nativa) que se pueden combinar
- Mayor visibilidad: La consola muestra la distribución de versiones y problemas de compatibilidad
- API Acceso: Control programático completo sobre la configuración de versiones
- Auto-hospedaje: Opción para ejecutar tu propio servidor de actualizaciones con la misma lógica de versión
Migración Pasos
Sección titulada “Migración Pasos”- Mapa tus canales de AppFlow a Capgo canales (usualmente 1:1)
- Establecer
defaultChannelincapacitor.config.tspara cada versión mayor - para cada versión mayor Si deseas bloqueo automático en límites de versión
- Subir paquetes específicos de versión using
--min-update-version(el canal debe utilizar la estrategia de metadatos) - Monitorear la distribución de versiones en el panel de Capgo
Patrones Avanzados
Sección titulada “Patrones Avanzados”Despliegue Gradual por Versión
Sección titulada “Despliegue Gradual por Versión”// Gradually migrate v1 users to v2async function migrateUsers() { const deviceId = await CapacitorUpdater.getDeviceId() const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) { // User is in rollout group - migrate to v2 await CapacitorUpdater.setChannel({ channel: 'v2' }) }}Banderas de características por versión
Sección titulada “Banderas de características por versión”// Enable features based on native versionasync function checkFeatureAvailability() { const info = await CapacitorUpdater.getDeviceId() const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) { // Enable features requiring v2.0.0+ enableNewCameraFeature() }}Pruebas A/B a través de versiones
Sección titulada “Pruebas A/B a través de versiones”// Run A/B tests within same native versionasync function assignABTest() { const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) { // Only A/B test on v2 users const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b' await CapacitorUpdater.setChannel({ channel: variant }) }}Resumen
Sección titulada “Resumen”Capgo ofrece varias estrategias para la entrega de actualizaciones específicas de versión:
- Ruteo basado en canal: Separación automática de versiones mediante
defaultChannel - Numeralización semántica: Evita actualizaciones entre versiones principales/secundarias/puntuales
- Restricciones de Versión Nativa: Requiere versión nativa mínima para paquetes
- Prevención de Descenso Automático: Nunca entrega paquetes más antiguos a versiones nativas más nuevas
- Oversights de Dispositivo: Control manual para pruebas y targeting
Al combinar estas estrategias, puedes lograr la entrega automática de actualizaciones con AppFlow, con aún más flexibilidad y control. Elige el enfoque que mejor se adapte a la versión y el flujo de despliegue de tu aplicación.
Para más detalles sobre características específicas:
- Guía de Cambios Significativos - Estrategia detallada de versionado de canales
- Gestión de Canales - Referencia completa de configuración de canal
- Comportamiento de Actualización - Retrasos y condiciones de versión nativa
Sigue adelante desde la configuración de versión
Sección titulada “Sigue adelante desde la versión objetivo”Si estás utilizando Versión Dirigida to plan channel routing and staged rollout, connect it with Canales para el detalle de implementación en los Canales, Canales para el detalle de implementación en los canales, Canales para los detalles de implementación en Canales, Solución de Pruebas Beta para el flujo de trabajo del producto en Solución de Pruebas Beta, y Solución de Enfoque de Versión para el flujo de trabajo del producto en la Solución de Versionamiento.