Publicar una aplicación móvil no debería depender de que una persona concreta tenga su Mac disponible. Y sin embargo, es justo lo que le ocurría a uno de nuestros clientes que ofrece su app como servicio a entidades públicas. Cada nueva versión pasaba por las manos de un único desarrollador, que tenía que compilar, testear y publicar manualmente en dos tiendas distintas con procesos completamente diferentes entre sí. En SETDEVELOPERS rediseñamos todo ese flujo para convertirlo en un proceso automatizado, fiable y trazable de principio a fin.

 

Necesidad inicial

Nuestro cliente necesitaba un proceso de desarrollo bien definido para su aplicación, desarrollada en Flutter y disponible tanto para iOS como para Android. Al tratarse de un servicio que se ofrece a entidades públicas, las exigencias iban más allá de tener la app funcionando: era imprescindible automatizar la publicación tanto en el entorno de test como en producción, y disponer de datos objetivos sobre la deuda técnica y las vulnerabilidades de seguridad del código para poder reportarlos a las entidades que confían en la aplicación.

 

Compilación manual en Mac antiguo

El punto de partida era un proceso completamente dependiente de una persona y de un equipo concreto. Uno de los desarrolladores utilizaba su propio Mac para integrar los desarrollos, compilar la aplicación y publicarla, repitiendo todo el proceso dos veces: una para Apple Store y otra para Google Play. Aunque conceptualmente ambos procesos persiguen lo mismo, en la práctica son muy diferentes en su ejecución, lo que obligaba al desarrollador a dominar dos flujos distintos y a no equivocarse en ninguno de los dos.

A esto se sumaba la gestión manual de los testers: había que asignar la versión a probar al grupo correspondiente a mano, esperar su feedback y, si todo iba bien, realizar de nuevo un proceso manual de despliegue de la release en las webs de Apple Store y Google Play. Cualquier imprevisto, desde que el desarrollador no estuviera disponible hasta un fallo en el Mac, bloqueaba directamente la publicación de la app.

blank

 

Arquitectura centralizada del CI/CD

Para resolver esto, diseñamos una arquitectura centralizada de DevOps con Gitflow implementado en el repositorio de la app, que automatiza todo el ciclo desde que el desarrollador escribe código hasta que la aplicación llega a producción en ambas tiendas.

Cada commit generado pasa primero por un control de calidad mediante SonarQube y un control continuo de vulnerabilidades de seguridad mediante Dependency Track, lo que da al cliente exactamente los datos objetivos que necesitaba para informar a las entidades públicas sobre el estado del código. Además, el sistema obliga al desarrollador a tener todos los commits de la rama develop integrados en su rama feature/xxxx antes de que la Pull Request pueda mergearse. Esto permite probar cada nueva funcionalidad con todo lo que ya existe en develop, evitando que esta rama se vuelva inestable a medida que crece el equipo.

La parte más visible del cambio para el cliente fue la automatización de la compilación y publicación mediante Codemagic. Cuando un desarrollo llega a la rama develop, Codemagic compila la app automáticamente y la asocia al grupo de testers sin necesidad de ninguna intervención manual. El Mac antiguo y el proceso a mano quedaron completamente fuera de la ecuación.

Una vez que la app supera los tests realizados por el grupo de testers, llevarla a producción sigue un proceso igual de automatizado. Se genera una Pull Request entre develop y main, y en ese momento la arquitectura centralizada de CI/CD verifica la disponibilidad de publicación consultando directamente a Apple Store y a Google Play. Si ambas plataformas dan el visto bueno, la Pull Request se mergea y las apps se marcan automáticamente para desplegarse en producción, sin que nadie tenga que repetir manualmente el proceso en ninguna de las dos tiendas.

blank

 

Ventajas del despliegue automatizado de apps

El cambio liberó a un desarrollador de procesos manuales repetitivos y de la dependencia de un hardware obsoleto, permitiéndole dedicar ese tiempo a tareas que realmente aportan valor al producto. La integración de features generadas por el equipo es ahora mucho más sencilla, ya que el sistema de Pull Requests permite controlar exactamente qué funcionalidades llegan a probarse, minimizando el riesgo de versiones inestables en develop.

Quizás la ventaja más importante para una aplicación que da servicio a entidades públicas es la trazabilidad: ahora hay una garantía total de que el código que está en la rama main es exactamente el código publicado en producción. Esto elimina cualquier incertidumbre a la hora de investigar un bug, ya que el equipo sabe con certeza qué versión del código está funcionando en cada momento en las tiendas.

Si tu empresa depende todavía de procesos manuales para publicar su app, cuéntanos tu proyecto y te ayudamos a automatizarlo de principio a fin.