Compila y despliega tu aplicación iOS con Azure DevOps 🚀

Llegó el momento de subir tu app al App Store o enviarla para pruebas a TestFlight. 

Si lo haces manualmente probablemente sigas los siguientes pasos: 

  • Limpiar el proyecto, compilar tus dependencias
  • Elegir el Schema correcto
  • Aumentar el Build Number
  • Firmar tu app usando los certificados de Distribución, así como los Perfiles de Aprovisionamiento.
  • Subirla al App Store

Hacerlo muchas veces puede llegar a ser repetitivo, consume mucho tiempo, y es propenso error. ( Cuántas veces te olvidaste de aumentar el build number).

Además si trabajar en un entorno ágil las iteraciones hacia el área de Testing deberían ser lo más rápido posible.

Si bien existen distintas soluciones cloud en el mercado (CircleCI, Bitrise, TravisCI). En esta entrada te mostraré cómo automatizar la compilación y despliegue de tu aplicación iOS usando Azure DevOps.

Al inicio puede que te lleve un poco de tiempo configurarlo, pero el tiempo que ahorrarás a futuro valdrá la pena.

Requisitos:

  • Acceso al portal de Desarrolladores de Apple (Para configurar y descargar tus certificados)

Lo primero que necesitarás es tu certificados de Distribución:

  1. En el KeyChain de tu Mac, buscas el certificado de Distribución y le das exportar, te pedirá una contraseña de exportación, es importante recordarla, ya que la tendrás que configurar en Azure. Como resultado tendrás un archivo con extensión .p12
  1. Ingresar al portal de Desarrolladores de Apple. Ingresar a la zona de “Profiles” y descargan su certificado. Este tendrá una extensión .mobileprovision

Listo ahora tenemos 2 archivos:

  1. Iremos al portal de Azure DevOps (https://dev.azure.com/)

En la parte izquierda ingresamos a Pipelines -> Library -> Secure Files

Aquí subiremos los archivos que generamos en los pasos 1 y 2

  1. En la parte de Variable Groups, creamos una nueva variable en “+ Variable Group”

Esto es con el objetivo de no usar los nombres de los archivos directo desde nuestro script si no a través de variables.

  1. Lo siguiente que necesitarán será un archivo de exportación (Que fué incluido a partir de xCode 9.

Este paso solo lo tendrán que hace por única vez, para obtenerlo, sigan los pasos manuales para subir manualmente desde xCode, pero en vez de subirlo, le dan a exportar, esto les generará un archivo .plist, parecido al siguiente: 

Listo, ese archivo lo incluyen como parte de su repositorio. Por ejemplo, en la raíz lo ubican como “EXPORT_OPTIONS.plist”

  1. Generar una nueva conexión entre Azure y el Portal de Apple

Esto es para poder conectarse al AppleDeveloper Portal y subir nuestro archivo .ipa

En la parte inferior Project Settings -> Service Connections -> New Service Connection

Aquí ingresan las credenciales de acceso a TestFlight

Es importante que el usuario con el que accedas tenga deshabilitado la autenticación en 2 pasos. Se recomienda crear un usuario solo para este fin (distinto de un usuario con Perfil developer)

  1. En el portal de Azure, ingresan a Pipelines -> New Pipeline

Al elegir su repositorio, Azure creará un archivo azure-pipelines.yml, en este archivo definiremos las tareas que tiene ejecutar Azure Devops.

Recuerdan los pasos que hacemos manualmente desde xCode, pues son los mismos pero en forma de script.

Estructura del azure-pipelines-deployment.yml

Aquí hacemos referencia a las variables que creamos en paso 4, así como los datos de nuestra aplicación (Schema, Path, Bundle Id)

Con esta tarea descargamos las dependencias de nuestro proyecto:

Instalamos el Certificado de Distribución de Apple

Instalamos el Provisional Profile

Compilando y Firmando nuestra app:

Subiendo hacia el AppStore

Dependiendo de la magnitud de tu proyecto, por ejemplo para este proyecto tomó aproximadamente 22 minutos entre descargar las dependencias, compilar, firmar y subir al App Store.

Puedes encontrar el archivo YAML completo aquí:

https://gist.github.com/rcaos/ae24abba10a5a7df679279db76f37438

Fuentes: