Saltar al contenido principal
Mobile CI/CD Capacitor

Explicación de los tipos de compilaciones: Desde local hasta producción

Confundido por todos los tipos de compilaciones? Este guía explica todo, desde compilaciones locales, CI, de depuración y de liberación, hasta estrategias de firma, distribución y rollback.

Martin Donadieu

Martin Donadieu

Redactor de contenido

Explicación de los tipos de compilaciones: Desde local hasta producción

Abres un proyecto y ves build:ios:dev, build:android:qa, build:staging, build:release, build:prod, más unos pocos scripts de shell que nadie quiere tocar. Luego alguien dice, “¿Puedes hacer una compilación de staging para el cliente antes de fin de día?” Si eres un desarrollador móvil de nivel medio, esa solicitud suele sentirse vagamente molesta. ¿Qué configuración? ¿Qué identidad de firma? ¿Qué backend? ¿Qué ruta de distribución?

La confusión suele surgir al tratar los tipos de compilación como una lista plana. No lo son. Son un flujo de trabajo. Cada compilación existe para resolver un problema específico en un punto específico entre su laptop y el dispositivo de un usuario.

Una compilación no es solo una aplicación compilada. Es una versión de su aplicación ensamblada para un propósito, un público y un entorno. Algunas compilaciones existen para ayudarlo a depurar. Algunas existen para ayudar a QA a romper cosas de manera segura. Algunas existen para que el equipo de ingeniería de lanzamiento pueda producir un artefacto confiable. Algunas existen para que los equipos de producto puedan enviar cambios con menos riesgo.

Si su configuración local todavía se siente inestable antes de que comience cualquier cosa, obtenga eso bajo control primero con una configuración de entorno local adecuada Capacitor configuración de entorno local adecuadaÍndice

Desenredando el mundo de las compilaciones de software

Desenredando el mundo de las construcciones de software

El error más común que veo es asumir que los nombres de construcción cuentan toda la historia. No lo hacen. staging podría significar “sabor de liberación apuntado a APIs de staging.” En otro repositorio, podría significar “artículo de QA depurable con pagos simulados.” En un tercero, podría significar “construcción firmada por producción distribuida de manera privada.”

Es por eso que los equipos se enredan. La etiqueta es útil solo si entiende el trabajo que esa construcción está haciendo.

Una forma útil de pensar sobre los tipos de construcciones es esta:

  • Construcciones locales ayudan a un desarrollador individual a avanzar rápidamente.
  • Construcciones CI crean una fuente compartida de verdad para el equipo.
  • Flavores de depuración y de liberación definen cómo se compila y se instrumenta la aplicación.
  • Ediciones de distribución definen a quién se le envía la aplicación y cómo.
  • Ediciones firmadas determinan si la plataforma confiará en el artefacto.
  • Actualizaciones basadas en canales determinan cómo se mueven los cambios después de la instalación.

Estos no son categorías competitivas. Se superponen.

Una ‘edición de staging’ raramente es una sola cosa. Es usualmente una combinación de sabor, entorno, firma y elección de distribución.

Por eso dos equipos pueden decir ‘necesitamos una edición beta’ y significar completamente diferentes artefactos.

Esto importa más en móviles porque cada paso agrega fricción. Compilación nativa, secretos, configuración de provisión, seguimiento de tiendas de aplicaciones, acceso de los probadores, configuración de entorno y rollback deben alinearse. Si una parte está suelta, el proceso de liberación se convierte en conocimiento tribal. Luego un ingeniero se va de vacaciones y nadie puede enviar limpiamente.

Los equipos que manejan esto bien no memorizan más scripts. Definen tipos de compilación como controles de calidad. Cada control reduce un tipo diferente de riesgo: code roto, configuración incorrecta, firma incorrecta, despliegue incorrecto, o recuperación incorrecta.

El Espectro de Compilación Local vs Compilaciones CI

Una compilación local es la versión que haces para ti mismo. Una compilación CI es la versión que el equipo puede confiar.

Eso parece obvio, pero una gran parte del dolor de compilación comienza cuando los equipos mezclan esas dos cosas. Alguien prueba “funciona en mi máquina”, luego la rama falla en CI porque el entorno local dependía implícitamente de una dependencia caché, un archivo editado manualmente o un activo de firma que nunca llegó a la automatización.

Un hombre enfocado trabajando en su portátil en una oficina moderna, estudiando el desarrollo local versus el desarrollo CI.

Compilaciones locales

Las compilaciones locales son privadas, rápidas y descartables. Las usas para responder a preguntas inmediatas.

Puede que la pantalla se renderice? ¿Se inicializa el plugin nativo? ¿La modificación de Gradle o Xcode rompió la compilación? ¿Puedes reproducir el error con los registros activados?

Una buena compilación local prioriza la velocidad sobre la ceremonia. A menudo incluye comprobaciones más laxas, registros verbales, alternativas de desarrollador y instrumentación temporal. Eso está bien. Su trabajo es proporcionar feedback rápido.

No funciona es promover una compilación local a algo más importante de lo que es. Una compilación local nunca debe convertirse en el artefacto de lanzamiento porque se compiló correctamente en una sola laptop.

Compilaciones CI

Los builds CI son más lentos por una razón. Eliminan el estado de la máquina personal de la ecuación y hacen que el proceso de compilación sea repetible.

Cuando CI está saludable, hace tres cosas bien:

  • Reconstruye desde cero: Prueba que el proyecto se puede compilar sin suposiciones locales ocultas.
  • Ejecuta verificaciones a nivel de equipo: Las pruebas unitarias, el análisis de código y las reglas de empaquetado ocurren en el mismo lugar cada vez.
  • Produce un artefacto rastreable: El equipo puede vincular un build a un commit, una rama y una ejecución de pipeline.

Es por eso que me gusta la analogía taller-fábrica. Tu portátil es la mesa donde iteras. El CI es la línea de ensamblaje que prueba que el proceso es real.

Si tu equipo todavía está decidiendo manualmente qué script ejecuta dónde, centraliza esa lógica en la automatización. Una referencia práctica es esta guía sobre el manejo de builds de dev y prod con __CAPGO_KEEP_0__ Actions managing dev and prod builds with GitHub Actions.

Practical rule: Si QA, producto o soporte necesitan el artefacto, debe venir de CI, no de la máquina de un desarrollador.

Una vez que aceptes eso, el resto del ciclo de vida de la construcción se vuelve más fácil. La selección de sabor, la firma, la inyección de entorno y la distribución pertenecen a una canalización que cualquier miembro del equipo puede inspeccionar.

Flavores de Construcción Core Depuración vs. Liberación

Hay muchos etiquetas utilizadas para las construcciones, pero bajo todo ese nombre, dos sabores suelen importar más: depuración y liberación.

Ellos existen porque los desarrolladores y los usuarios finales necesitan cosas opuestas.

Una infografía de comparación entre la construcción de depuración y la construcción de liberación, mostrando las diferencias clave en rendimiento y propósito.

Construcciones de depuración

Una construcción de depuración está destinada a ayudar a los humanos a inspeccionar el comportamiento. Suele mantener más metadatos alrededor, facilita la depuración y evita la optimización agresiva que puede ocultar problemas.

Hay una analogía útil de especificaciones de construcción. Las especificaciones comúnmente se dividen en tipos de construcción, rendimiento, propiedad exclusiva, y estándar de referencia tipos, y un tipo de construcción de depuración se ajusta perfectamente a un tipo de construcción prescriptivo enfoque porque dicta herramientas y métodos exactos para el análisis, mientras que un tipo de construcción de lanzamiento se ajusta a un enfoque de rendimiento enfoque enfocado en el resultado requerido, tal como se describe en esta descomposición de tipos de especificación de construcción.

En la práctica, un tipo de construcción de depuración es donde quieres cosas como:

  • Diagnósticos legibles: pistas de pila, salida de consola y símbolos que te ayudan a encontrar el error.
  • Facilidades para desarrolladores: botones de simulación, menús de prueba y interruptores de características que serían inapropiados para los usuarios finales.
  • Iteración con baja fricción: los ciclos de instalación y ejecución más rápidos importan más que un paquete pulido.

Los builds de depuración no son ‘malos’. Están diseñados con un propósito específico.

Builds de lanzamiento

Los builds de lanzamiento están diseñados para dispositivos en el mundo real. Eso cambia las prioridades de inmediato.

Ahora te importa la integridad del paquete, el comportamiento de arranque, una postura de seguridad más ajustada, paquetes más pequeños y características de tiempo de ejecución predecibles. También quieres menos puntos de entrada accidentales para inspección o abuso.

El intercambio es simple. Todo lo que hace que los builds de depuración sean más fáciles de inspeccionar tiende a hacer que los builds de lanzamiento sean menos adecuados para producción.

La frontera de decisión que uso con equipos es:

Sabor Lo mejor para ¿Qué optimiza?
Depuración Desarrollo, pruebas locales, reproducción de problemas Velocidad de iteración y visibilidad
Lanzamiento Distribución beta, presentación en tiendas, lanzamiento en producción Estabilidad, rendimiento y confianza

¿Por qué los equipos siguen cometiendo este error?

La mayor fuente de confusión es mezclar "entorno" con "sabor."

Un build puede ser flavor de lanzamiento apuntado a servicios de etapaque es común para QA porque quieres comportamiento de producción con datos no de producción. Un build también puede ser flavor de depuración apuntado a servicios de desarrollo para el codificación de día a día. Eso son ejes diferentes.

Un montón de esparcimiento de scripts proviene de equipos que codifican cada posible combinación en nombres de paquetes en lugar de documentar la matriz.

Envía el flavor de lanzamiento siempre que los no desarrolladores estén probando el comportamiento de usuario. Mantén el flavor de depuración para el trabajo de ingeniería y la depuración deliberada.

Esta regla elimina una gran cantidad de complejidad accidental.

Mappear Builds a Entornos de Distribución

La mayoría de las discusiones sobre tipos de builds terminan demasiado pronto. Explican local, depuración y lanzamiento, y luego ignoran la pregunta más difícil: ¿dónde va este build?

Este destino cambia qué debe contener el build, cómo debe ser firmado y quién debe recibirlo.

Un flujo de trabajo de build práctico suele pasar por varios entornos, cada uno con un público diferente y una tolerancia diferente al riesgo. Si estás trabajando en aplicaciones Capacitor, también ayuda a mantener una separación mental limpia entre el comportamiento de la aplicación de desarrollo y el comportamiento de la aplicación de producción en Capacitorporque muchos errores de construcción son realmente errores de mapeo del entorno.

Nightly y canary

Estos son los builds de advertencia temprana. Son para ingenieros, QA o un pequeño grupo interno dispuesto a tolerar bordes rugosos.

Un build nocturno se genera normalmente con un horario o desde el estado de la rama principal más reciente. Un build canario se expone intencionalmente a un público estrecho antes de una mayor difusión. Los trato como herramientas de aprendizaje, no como promesas de estabilidad.

Son útiles cuando necesitas responder preguntas como:

  • ¿Se integra la rama limpiamente a través de módulos?
  • ¿Un upgrade de dependencia nativa rompió una familia de dispositivos específica?
  • ¿Los probadores internos pueden detectar regresiones antes de la exposición a la beta más amplia?

¿Qué no funciona es dar builds canarios a personas que esperan software pulido. Obtendrás retroalimentación ruidosa, y el público equivocado llamará el cambio normal un problema de lanzamiento.

Staging y beta

En este punto, la calidad del producto importa más que la conveniencia de la ingeniería.

Un build de staging o beta debe sentirse cercano a lo que obtendrán los usuarios reales. Eso significa normalmente sabor de lanzamiento, configuración de producción donde sea posible, y distribución controlada a través de herramientas de plataforma como TestFlight o las pistas de prueba de Google Play.

El público cambia aquí:

  • Los equipos de QA validan regresiones, flujos de trabajo y criterios de aceptación.
  • Los gerentes de producto revisan el comportamiento en una caja de concha realista.
  • Los probadores externos validan la usabilidad, la cobertura de dispositivos y los casos de borde.
  • Los equipos de soporte o éxito pueden previsualizar los cambios futuros.

El error aquí es tratar a la beta como “solo otra compilación de depuración”. Si sus probadores están evaluando flujos de usuario reales, necesitan condiciones similares a las de una versión de lanzamiento.

Compilaciones de distribución privada

Algunas aplicaciones necesitan compilaciones que nunca lleguen al público en la tienda de aplicaciones o necesitan llegar a un grupo más estrecho primero.

Eso incluye compilaciones específicas de clientes, aplicaciones internas de empleados, flujos de trabajo regulados, herramientas de operaciones de campo y distribuciones solo para empresas. A menudo requieren un control más estricto sobre quién puede instalar la aplicación y qué backend se conecta.

También es aquí donde el nombre se vuelve peligroso. Los equipos a menudo dicen “compilación de empresa” cuando en realidad significan una de varias cosas:

  • una aplicación interna firmada privadamente
  • una aplicación distribuida en la tienda con controles de acceso solo para internos
  • un artefacto personalizado para el cliente
  • un candidato de lanzamiento previo a la producción para la revisión de los partes interesados

Son diferentes modelos operativos. Manténlos separados en tu pipeline y en el nombre.

Producción

Los builds de producción son el compromiso público. Van a la Tienda de Aplicaciones, a la Tienda de Juegos o al canal aprobado equivalente para tus usuarios.

Por este punto, el build debería ser aburrido. Eso es un cumplido.

Quieres que un build de producción sea reproducible, firmado correctamente, probado en condiciones de lanzamiento y vinculado a un plan de rollback. No quieres ediciones manuales de última hora, hacks específicos de la máquina o compromisos de “lo arreglaremos en el próximo build”.

¡Aquí tienes la versión a ojo!

Tipos de construcción de software y sus características

Tipo de construcción Destinatarios contexto: Página/área: Página de producto de empresa/precios. Rol: Etiqueta de interfaz de usuario. Clave de mensaje `enterprise_audience_label` (Etiqueta de audiencia de empresa). Metodo de Distribución
Desarrollador local Desarrollador individual Suele depurar, iteración rápida, ajustes de entorno local Instalación directa desde la máquina local
Validación de CI Equipo de ingeniería Construcción automática repetible, comprobaciones compartidas Almacenamiento de artefactos de CI
Nocturno o canario Pruebas internas, miembros seleccionados del equipo Estado de integración temprano, limitado despliegue Herramientas de distribución interna
Pruebas o beta QA, producto, pruebas externas Normalmente, un entorno de mapa no público, similar a la versión de lanzamiento TestFlight, pistas de pruebas de Play, enlaces privados
Ad-hoc o empresarial Empleados internos, clientes, grupos restringidos Configuración controlada, firma específica de destino Canales de distribución privados
Producción Usuarios públicos Configuración de lanzamiento final, firma lista para la tienda Tienda de aplicaciones o Google Play

El tipo de construcción adecuado es el que se ajusta a la tolerancia del público al riesgo. La mayoría de los errores de lanzamiento ocurren cuando los equipos omiten esa alineación.

El papel crítico de la firma de Code

Un archivo de construcción por sí solo no significa mucho en móviles. La plataforma necesita pruebas de que proviene de una fuente confiable y que nadie lo alteró después de la creación. Esa prueba es la firma de code.

Si alguna vez ha tenido una construcción que compiló perfectamente pero se negó a instalarse, subir, o lanzarse correctamente, la firma probablemente fue el problema.

A computer screen displaying Python source code for Blender with a Code Signing overlay text.

¿Qué firma realmente prueba

Para un equipo de móviles, la firma de code cumple tres funciones.

  • Autenticidad: vincula la aplicación al desarrollador o organización que la produjo.
  • Integridad: ayuda a demostrar que el artefacto no ha sido manipulado desde la firma.
  • Autorización: en las plataformas de Apple, especialmente, también controla dónde y cómo se permite que la aplicación se ejecute.

Es ese tercer punto lo que confunde a muchos desarrolladores. La firma no es solo identidad. También es permiso.

Entonces la misma aplicación code puede requerir diferentes materiales de firma dependiendo de si deseas ejecutarla localmente en un dispositivo, distribuirla a los probadores, desplegarla internamente o enviarla a la tienda.

Cómo cambia la firma según el destino

Esto es el modelo mental que mantiene el proceso sano: la firma sigue a la distribución.

Una instalación de desarrollador local utiliza un conjunto de identidades y permisos. Una versión beta enviada a través de TestFlight utiliza otro. Un camino de distribución interno puede requerir perfiles diferentes nuevamente. Una publicación en la tienda tiene sus propias expectativas de firma y empaque compatible con la revisión.

Es por eso que 're-firma la construcción' raramente es una petición pequeña. Una vez que cambia la firma, los destinos permitidos del artefacto pueden cambiar con ella.

Un conjunto de configuración disciplinado suele incluir:

  • Activos de firma almacenados en CI: no en laptops personales.
  • Separación clara por destino: desarrollo, pruebas privadas, empresa, lanzamiento en tiendas.
  • Control de rotación y acceso: especialmente cuando contratistas o múltiples equipos de productos comparten infraestructura.
  • Auditoría: necesitas saber qué pipeline utilizó qué identidad de firma.

Si tu equipo envía actualizaciones web dentro de una aplicación Capacitor, hay un segundo nivel de firma para considerar también. Esta visión general de la seguridad de extremo a extremo para la actualización de Capacitor y la firma de __CAPGO_KEEP_1__ end-to-end security for Capacitor updater code signing Los problemas de firma no suelen provenir de la criptografía. Proceden de la propiedad poco clara, el manejo manual y las líneas de producción que ocultan qué identidad se aplicó.

Trata el material de firma como la infraestructura de producción, porque eso es lo que es.

Si tu equipo envía actualizaciones web dentro de una aplicación __CAPGO_KEEP_0__, hay un segundo nivel de firma para considerar también.

Orquestar los lanzamientos con CI/CD y canales de actualización

Por el momento en que un equipo madura, el desafío no es saber los tipos de compilaciones. Es coordinarlos sin adivinanzas humanas.

Esas coordinaciones pertenecen a CI/CD.

Pantallazo desde https://capgo.app

Tus pipeline es el contrato de compilación

Un pipeline confiable debería responder a las mismas preguntas cada vez:

  • ¿Para qué es esta compilación?
  • ¿Qué sabor utiliza?
  • ¿Qué valores de entorno recibe?
  • ¿Qué pruebas debe superar?
  • ¿Qué identidad de firma se aplica?
  • ¿Dónde se entrega el artefacto?

Esa estructura refleja una buena especificación técnica. Una buena especificación debería incluir propósito y alcance, requisitos funcionales, requisitos de diseño, estándares técnicos, requisitos de prueba, requisitos de entrega y requisitos de soporte o mantenimiento, tal como se describe en esta guía de especificación técnica. Esa misma disciplina hace que el CI/CD sea más fácil de razonar porque el pipeline deja de ser una bolsa de scripts y se convierte en una política de lanzamiento ejecutable.

En la práctica, el pipeline debería decidir, no el ingeniero que lo ejecuta manualmente. Las reglas de rama, las etiquetas, los pasos de aprobación, el contexto de firma y los objetivos de despliegue deberían estar codificados.

Lo que funciona:

  • Intención impulsada por rama: Las ramas principales, de lanzamiento y las etiquetas desencadenan diferentes flujos de trabajo.
  • Nombres explícitos de artefactos: Sabor, entorno y destino son visibles en la salida.
  • Promoción en lugar de reconstruir a mano: avanzar artefactos validados en lugar de recrearlos ad hoc.

¿Qué falla consistentemente es el enfoque de ‘un script flexible’ donde todos pasan banderas personalizadas y esperan que coincidan con lo que los almacenes o los probadores necesitan?

Los canales agregan control después de que se envía el binario.

Los compilados nativos todavía son de gran grano. Una vez que un lanzamiento está en el almacén, cambiar el contenido web dentro de una aplicación Capacitor no siempre requiere un nuevo binario completo.

Es ahí donde los canales de actualización se vuelven útiles. Permiten a los equipos dirigir actualizaciones de activos web a un subconjunto de usuarios dentro de un binario de producción instalado. Para los equipos Capacitor, una opción es Capgoque publica paquetes web firmados en canales específicos para que puedas enviar cambios en JavaScript, CSS, copia, configuración y activos sin tener que reconstruir la caja nativa cada vez.

Un patrón práctico se parece a esto:

  • Compilación binaria en CI/CD: Crear, firmar y distribuir la aplicación nativa.
  • Asignación de canales: Asignar usuarios o entornos a flujos de pruebas, staging, producción o canales específicos para clientes.
  • Despliegue selectivo: enviar cambios web a un grupo antes de una mayor exposición.
  • Ruta de rollback: deshabilitar o revertir una actualización mala sin esperar la revisión del almacen.

Si aún no has configurado ese modelo, este tutorial sobre crear y eliminar canales de actualización en Capacitor explica los mecanismos de manera concreta.

Un breve demostración ayuda si aún no has visto los canales en acción:

Esta es la gran transformación que necesitan muchos equipos móviles. Los tipos de construcción no son solo artefactos. Son puntos de control. La CI/CD controla cómo se producen los binarios. Los canales controlan cómo se exponen los cambios posteriores a la instalación.

Prácticas recomendadas para un flujo de construcción moderno

Un sistema de construcción sano es opinativo. No permite que cada desarrollador improvise el comportamiento de la liberación.

Los mejores setups con los que he trabajado comparten algunos hábitos:

  • Separar eje claramente: El sabor, el entorno, el objetivo de firma y el objetivo de distribución no deben estar mezclados en una etiqueta vaga.
  • Deje que la CI produzca artefactos para la comunidad: Los builds locales son para el desarrollo, no para la confianza de los partes interesadas.
  • Pruebe en condiciones similares a la versión de lanzamiento temprano: Los QA y los probadores beta deben ver el comportamiento que se ajusta lo más posible a la aplicación real.
  • Mantenga los activos de firma fuera de los portátiles: Las claves pertenecen a la infraestructura controlada con acceso restringido.
  • Nombra los artefactos de modo que los humanos puedan leerlos: Si alguien no puede identificar qué es un archivo para en unos segundos, la nomenclatura es mala.
  • Preferir la promoción sobre la recreación: Una vez que un artefacto está validado, muevalo hacia adelante a través del flujo de trabajo en lugar de reconstruir manualmente.
  • Antes de lanzar: el rollback de diseño: El rollback en la tienda es lento y operativamente pesado. El rollback de la capa web para actualizaciones de Capacitor puede ser mucho más rápido, pero solo si planificaste los canales y políticas primero.

El cambio de mentalidad más grande es este: no preguntar ‘¿Cuál script de construcción debería ejecutar?’ Preguntar ‘¿Qué riesgo estoy gestionando en esta etapa?’ Produce mejores sistemas de construcción.

Si tu flujo de trabajo responde a esa pregunta de manera clara, tu proceso de lanzamiento se vuelve más fácil de operar, más fácil de auditar y mucho menos dependiente de un ingeniero senior que recuerde la incantación correcta.


Si tu equipo envía aplicaciones Capacitor y quiere un control más estricto sobre los flujos de trabajo de lanzamiento Capgo es recomendable evaluar como parte de esa pila. Maneja actualizaciones en vivo dirigidas para activos web dentro de aplicaciones Capacitor, admite paquetes firmados, rollouts basados en canales y controles de rollback, lo que lo hace útil cuando necesitas arreglos más rápidos sin reemplazar tu pipeline de construcción nativa.

Actualizaciones en vivo para aplicaciones Capacitor

Cuando un error de capa web está activo, envíe la corrección a través de Capgo en lugar de esperar días a la aprobación de la tienda de aplicaciones. Los usuarios obtienen la actualización en segundo plano mientras que los cambios nativos siguen en el camino de revisión normal.

asesoría humana de Martin

Iniciar Ahora

Últimas noticias de nuestro Blog

Capgo te da las mejores perspectivas que necesitas para crear una aplicación móvil profesionalmente