El proceso de creación y distribución de binarios en iOS de forma manual es lento y repetitivo. Sería fantástico poder automatizarlo y poderlo integrar con nuestro servidor de integración continua. Hoy vamos a ver cómo podemos hacer esto de forma sencilla utilizando shenzhen y deliver.

Shenzhen es una utilidad que nos permite generar IPAs desde la línea de comandos. Por otra parte, deliver nos permite distribuir aplicaciones a iTunes Connect para revisión de Apple o para distribuir internamente a nuestros testers via Testflight.

Primero de todo, vamos a instalar shenzhen (asumiendo que tenemos Ruby on Rails instalado en nuestro sistema):

sudo gem install shenzhen
Shenzhen es una herramienta que nos permite compilar nuestra aplicación y generar el correspondiente ipa desde línea de comandos. Para ello, nos posicionamos en el directorio que tiene nuestro proyecto y ejecutamos:
ipa build 
Shenzhen nos permite distribuir nuestra aplicación usando RivieraBuild, HockeyApp, Crashlytics, Deploygate, fir.im, Pgyer, Amazon S3 y TestFairy. También nos permite distribuirlo por FTP y a iTunes Connect para revisión.

Sin embargo, no nos permite subirlo a Testflight para distribución interna. Utilizaremos otra herramienta llamada deliver:
sudo gem install deliver
Nos aseguramos que tengamos xcode command line instalado:
xcode-select --install
Inicializamos deliver en nuestro proyecto:
deliver init
Este proceso descarga la utilidad, descarga la información de AppStore/iTunes Connect si la aplicación ya está distribuida.

Editamos el fichero Deliverfile con nuestro editor de texto favorito y ponemos la versión correcta.

Y ya podemos distribuir nuestra aplicación:
deliver testflight
Para hacerlo más sencillo de recordar, crearemos un fichero shell script que realice estos dos pasos en uno solo:
echo "ipa build && deliver testflight" > deploy.sh
chmod +x deploy.sh
Y ya podemos compilar y distribuir nuestra aplicación en un paso:
./deploy.sh
Aquí podemos ver más documentación de shenzhen y de deliver:

https://github.com/nomad/shenzhen

https://github.com/KrauseFx/deliver

Errores frecuentes

Si observáis el siguiente Warning al ejecutar el comando de deliver:

[Transporter Warning Output]: WARNING ITMS-90191: "Missing beta entitlement. Your app does not include the beta-reports-active entitlement. If you intend to distribute this build via TestFlight for beta testing, please re-build this app with a newly generated provisioning profile."

Es porque al generar el IPA habéis utilizado un provisioning profile de tipo Ad Hoc en vez de utilizar el de AppStore. El provisioning profile de AppStore contiene el entitlement de beta-reports-active activado.

Para ello, nos aseguramos de seleccionar el provisioning profile correcto en el Build Settings de nuestro target:


Blogger news

Blogroll