desarrollo ios fastlane

Entrega contínua en iOS con Fastlane

La entrega contínua es de vital importancia en el software hoy en día, especialmente en el mundo de las apps. Entregar valor de forma contínua y temprana a nuestros usuarios, clientes y colaboradores proporciona un feedback de valor incalculable, con el que podemos mejorar y ajustar nuestras aplicaciones antes de lanzarlas al Store.

En iOS tenemos varias formas de distribuir binarios de nuestras apps para poder obtener feedback temprano. La opción más habitual es usar Testflight, antes servicio de terceros, después adquirido por Apple e integrado en iTunes Connect. El problema de Testflight es que para distribuir binarios y hacer pruebas internas necesitas que los probadores estén registrados en tu cuenta de iTunes Connect. Esto tiene sentido si los probadores son realmente parte de tu equipo, pero ¿y si son gente externa, o no tiene sentido incluirlos como usuarios de iTC?

 

Diawi

Una alternativa a esto es utilizar servicios de terceros. Existen varias en el mercado, pero yo en concreto uso Diawi, una herramienta para desarrolladores para desplegar versiones de desarrollo de forma “wireless” a los dispositivos.

¿Cómo funciona? Desde Xcode tienes que generar el binario y firmarlo seleccionando un provisioning profile adhoc. Además, tienes que haber incluido los UDID de los dispositivos sobre los que quieres que se ejecute la app. Tanto el provisioning profile como los UDID se configuran en tu panel de desarrollador de Apple.

Una vez exportado el binario, entras en la página de Diawi y lo arrastras allí para su carga. Cuando el proceso finaliza, te aparece una URL que será la que tengas que distribuir a tus probadores para que se puedan instalar la beta.

Si te fijas, hemos realizado unos cuantos pasos, todos ellos manuales, para una acción que debería ser más que habitual si eres desarrollador y colaboras con gente: seleccionar el provisioning profile correcto, añadir los UDID de los dispositivos de prueba, exportar el IPA seleccionando tu equpo, subir el binario a diawi, distribuir el enlace por mail/slack a los colaboradores.

¿Cómo podemos automatizar esta entrega contínua? Llega Fastlane al rescate.

 

Entrega contínua con Fastlane

Fastlane es un conjunto de herramientas para optimizar los procesos de distribución de una app iOS. Con ella puedes hacer auténticas virguerías, pero en este artículo me voy a centrar en automatizar el proceso que te cuento en el apartado anterior.

Fastlane se puede definir como un lanzador de procesos o “Lanes”. Estas lanes a su vez están formadas por “Actions”, que son finalmente los scripts que realizarán el trabajo sucio. Podemos seleccionar cualquier conjunto de actions para conformar una lane, de forma que cada vez que lancemos esa lane, se ejecutarán sus actions de forma secuencial. Existen muchas actions disponibles con Fastlane: compilar, lanzar tests, mandar build al Store, etc… Y otras que pueden instalarse como plugins.

Habíamos detectado varios pasos manuales que podríamos automatizar: crear certificado para firmar la app, crear un provisioning profile de adhoc, compilar el proyecto para generar el IPA firmado, subir el binario a Diawi, mandar un email a los colaboradores, postear en Slack la URL con la nueva build.

Te voy a mostrar la lane completa e iremos paso a paso explicando cada Action:

En el fichero Fastfile es donde configuramos las lanes. Ésta, en concreto, se llama diawiDistribution y la lanzaríamos en línea de comandos con “fastlane diawiDistribution”

Fastlane cert && sigh. Cert comporbará si alguno de los certificados de firmado están disponibles en local, de lo contrario generará uno nuevo y lo importará al llavero. Cuando lo usamos conjuntamente con sigh, se generará siempre un provisioning profile nuevo, siempre usando el certificado de firmado instalado en local con cert. Además, sigh(force: true) hace que se genere de nuevo el provisioning profile en cada lanzamiento, de forma que siempre lo tenemos acualizado. Y por último sigh(adhoc: true) hace que generemos un profile adhoc en lugar de uno de App Store.

Fastlane gym(scheme, output_directory, output_name). Con gym compilamos el proyecto. Podemos opcionalmente seleccionar esquema, directorio de salida, y nombre de fichero de salida. Se usarán el provisioning profile y el certificado de firma generados en el paso anterior.

diawi(token, file, callback_emails). Esta action no viene por defecto en Fastlane, pero se puede instalar fácilmente. Aquí tienes cómo. Token es el access token que obtienes del dashboard de diwai cuando te registras. El parámetro file es el fichero a subir. Y callback_emails es un listado de mails separados por coma a los que se le mandará un correo con el enlace de descarga.

slack(message, slack_url). Esta es la parte guay. Con slack podemos postear el mensaje del parámetro “message” en un canal representado por un webhook de slack en el parámetro “slack_url”. En el mensaje accedemos a lane_context[SharedValues::UPLOADED_FILE_LINK_TO_DIAWI], que es donde el plugin de diwai almacena el enlace de descarga una vez generado.

Con esta lane te puedes ahorrar tranquilamente 7 a 10 minutos de trabajo manual y repetitivo. Cuando eres freelance, créeme, ese tiempo lo vas a querer dedicar a otra cosa

 

Conclusión

Como te decía, la entrega contínua es de vital importancia en el mundo de las apps en particular. En este artículo he compartido contigo una lane de Fastlane que uso muchísimo en proyectos, para matener a mis clientes, usuarios y colaboradores actualizados con los últimos avances del desarrollo.

Fastlane es una gran suite de herramientas, y te hablaré más de ella en futuros posts. En el de hoy, te he mostrado como, con el lanzamiento de una línea de comandos podemos automáticamente: descargar el certificado de firma, descargar el provisioning profile de adhoc, compilar el proyecto y firmarlo con la información más reciente, subir la build a diawi, y publicar el enlace tanto por mail, como por slack.

Recuerda que ya te hablé por encima de Fastlane en su día, sobre cómo mandar una app a revisión.

¿Y tú, cómo sigues el proceso de entrega contínua? ¡Cuéntamelo en los comentarios!

 

No hay comentarios

Deja un comentario