Entrega Continua para iOS usando Fastlane y GitHub Actions y certificado
Requisitos previos
Antes de continuar con el tutorial…
- Asegúrate de tener Fastlane instalado en tu máquina de desarrollo
- Membresía del programa de desarrollador de iOS
- Ganas de leer 😆…
Importante sobre el precio
https://githubcom/features/actions
El servicio es ‘gratuito’ hasta cierto límite, dependiendo de la máquina elegida Vamos a usar una máquina macOS, puedes ver en la captura su precio y límites (precios a la fecha de creación del tutorial, podrían sufrir cambios en el futuro)
🔴 Una vez advertidos de requisitos y precios, si te parece, continuamos…
📣 En la publicación asumimos que tenemos la app creada en iTunes Connect, tenemos los certificados del ecosistema de Apple, ¡todo será copiado por Fastlane!
Vamos al lío 🧑🏽💻
Pasos a seguir en la publicación
- Usar la API de App Store Connect con Fastlane
- Requisitos
- Crear una clave de API de App Store Connect
- Usar una clave de API de App Store Connect
- Copiar archivos de Fastlane
- Configurar GitHub Actions
1. Usar la API de App Store Connect con Fastlane
A partir de febrero de 2021, se requiere autenticación de dos factores o verificación en dos pasos para que todos los usuarios inicien sesión en App Store Connect. Esta capa adicional de seguridad para tu Apple ID ayuda a garantizar que solo tú puedas acceder a tu cuenta. De Soporte de Apple
Requisitos
Para poder usar la API de App Store Connect, Fastlane necesita tres cosas:
- ID del emisor
- ID de la clave
- Archivo de clave o contenido de la clave
Crear una clave de API de App Store Connect
Para generar claves, debes tener permiso de Administrador en App Store Connect. Si no tienes ese permiso, puedes dirigir a la persona relevante a este artículo y seguir las siguientes instrucciones.
1 — Inicia sesión en App Store Connect
2 — Selecciona Usuarios y Acceso
3 — Selecciona la pestaña Claves API
4 — Haz clic en Generar clave API o en el botón Agregar (+)
5 — Ingresa un nombre para la clave. El nombre es solo para tu referencia y no es parte de la clave en sí
6 — En Acceso, selecciona el rol para la clave. Los roles que se aplican a las claves son los mismos roles que se aplican a los usuarios de tu equipo. Consulta los permisos de roles. Recomendamos seleccionar Gestión de aplicaciones
7 — Haz clic en Generar
El acceso de una clave API no se puede limitar a aplicaciones específicas
El nombre de la nueva clave, el ID de la clave, un enlace de descarga y otra información aparecen en la página
Puedes obtener las tres informaciones necesarias aquí: <1> ID del emisor <2> ID de la clave <3> Haz clic en “Descargar clave API” para descargar tu clave privada de API. El enlace de descarga aparece solo si la clave privada aún no se ha descargado. Apple no guarda una copia de la clave privada. Por lo tanto, solo puedes descargarla una vez.
🔴 Guarda tu clave privada en un lugar seguro. Nunca debes compartir tus claves, almacenarlas en un repositorio de código o incluirlas en el código del lado del cliente.
Usar una clave de API de App Store Connect
El archivo de clave API (archivo p8 que descargas), el ID de la clave y el ID del emisor son necesarios para crear el token JWT para la autorización. Hay varias formas de ingresar esta información en Fastlane usando la nueva acción de Fastlane, app_store_connect_api_key
. Puedes aprender otras formas en la documentación de Fastlane.Muestro este método porque creo que es la forma más fácil de trabajar con la mayoría de los CI existentes, donde se pueden establecer variables de entorno
Ahora podemos gestionar Fastlane con la clave API de App Store Connect, ¡genial!
Crear certificados y perfiles de aprovisionamiento
Certificados
Abre XCode y ve a Ajustes > Cuentas > Apple ID > Equipos y selecciona tu equipo
Haz clic en Gestionar certificados > + y selecciona Distribución de Apple
Luego puedes crear un nuevo certificado
Después necesitas ir al llavero para descargar el certificado como un archivo p12
Para hacerlo, debes ir al llavero, cambiar al llavero login y luego a la pestaña Mis Certificados
Luego puedes seleccionar el certificado que quieres descargar (Busca por la fecha del certificado)
Y luego haz clic derecho en el certificado y selecciona Exportar
Elige el formato de archivo Personal Information Exchange (p12)
Eso descargará el certificado como un archivo p12
Perfiles de aprovisionamiento
Abre Apple Developer y selecciona el equipo correcto
Luego crea un nuevo perfil, haciendo clic en +
Y selecciona App Store Connect
Luego necesitas seleccionar la aplicación correcta, ten cuidado de no usar comodín ya que la firma fallará
Selecciona el certificado correcto que creaste antes (busca la fecha de caducidad, debería ser el mismo día y mes que hoy) y haz clic en Continuar
Finalmente ingresa el nombre del perfil y haz clic en Generar
El nombre se usará para identificar el perfil en Fastlane, bajo el valor de
APPLE_PROFILE_NAME
Puedes descargar el perfil como un archivo mobileprovision
Crear secretos de GitHub para tu certificado y perfil de aprovisionamiento
El proceso de firma implica almacenar certificados y perfiles de aprovisionamiento, transferirlos al runner, importarlos al llavero del runner y usarlos en tu compilación
Crea secretos en tu repositorio u organización para los siguientes elementos:
-
Tu certificado de firma de Apple
-
Este es tu archivo de certificado
p12
Para más información sobre cómo exportar tu certificado de firma desde Xcode, consulta la documentación de Xcode -
Debes convertir tu certificado a Base64 cuando lo guardes como secreto En este ejemplo, el secreto se llama
BUILD_CERTIFICATE_BASE64
-
Usa el siguiente comando para convertir tu certificado a Base64 y copiarlo a tu portapapeles:
-
-
La contraseña de tu certificado de firma de Apple
- En este ejemplo, el secreto se llama
P12_PASSWORD
- En este ejemplo, el secreto se llama
-
Tu perfil de aprovisionamiento de Apple
-
Para más información sobre cómo exportar tu perfil de aprovisionamiento desde Xcode, consulta la documentación de Xcode
-
Debes convertir tu perfil de aprovisionamiento a Base64 cuando lo guardes como secreto En este ejemplo, el secreto se llama
BUILD_PROVISION_PROFILE_BASE64
-
Usa el siguiente comando para convertir tu perfil de aprovisionamiento a Base64 y copiarlo a tu portapapeles:
-
2\ Copiar archivos de Fastlane
Fastlane es una biblioteca de Ruby creada para automatizar tareas comunes de desarrollo móvil Usando Fastlane, puedes configurar “lanes” personalizadas que agrupan una serie de “acciones” que realizan tareas que normalmente harías usando Android Studio Puedes hacer mucho con Fastlane, pero para los propósitos de este tutorial, usaremos solo un puñado de acciones principalesCrea una carpeta Fastlane en la raíz de tu proyecto y copia los siguientes archivos: Fastfile
Procesamiento de compilación
En GitHub Actions, se te cobra según los minutos que hayas utilizado para ejecutar tu flujo de trabajo de CI/CD. Por experiencia, toma alrededor de 10-15 minutos antes de que una compilación pueda ser procesada en App Store Connect.
Para proyectos privados, el costo estimado por compilación puede llegar hasta $0.08/min x 15 mins = $1.2, o más, dependiendo de la configuración o dependencias de tu proyecto.
Si compartes las mismas preocupaciones sobre el precio que yo para proyectos privados, puedes mantener el skip_waiting_for_build_processing
en true
.
¿Cuál es el inconveniente? Tienes que actualizar manualmente el cumplimiento de tu aplicación en App Store Connect después de que la compilación haya sido procesada, para poder distribuir la compilación a tus usuarios.
Este es solo un parámetro opcional para actualizar si quieres ahorrar en los minutos de compilación para proyectos privados. Para proyectos gratuitos, esto no debería ser un problema en absoluto. Ver precios
3. Configurar GitHub Actions
Configurar secretos de GitHub
¿Alguna vez te has preguntado de dónde vienen los valores de ENV
? Bueno, ya no es un secreto – es de los secretos de tu proyecto 🤦
-
APP_STORE_CONNECT_TEAM_ID
- el ID de tu equipo de App Store Connect si estás en múltiples equipos -
PROVISIONING_PROFILE_SPECIFIER
-match AppStore <YOUR_APP_BUNDLE_IDENTIFIER>
, ej.match AppStore com.domain.blabla.demo
-
BUILD_CERTIFICATE_BASE64
- Certificado codificado en Base64 -
BUILD_PROVISION_PROFILE_BASE64
- Perfil de aprovisionamiento codificado en Base64 -
BUNDLE_IDENTIFIER
- el identificador de paquete de tu aplicación -
APPLE_KEY_ID
— ID de clave de API de App Store Connect 🔺 -
APPLE_ISSUER_ID
— ID de emisor de API de App Store Connect 🔺 -
APPLE_KEY_CONTENT
— Contenido de la clave 🔺 de p8 de API de App Store Connect, compruébalo
4. Configurar archivo de flujo de trabajo de GitHub
Crea un directorio de flujo de trabajo de GitHub
Dentro de la carpeta workflow
, crea un archivo llamado build-upload-ios.yml
y añade lo siguiente
Este flujo de trabajo debería activarse después de cada etiqueta de GitHub, si necesitas automatizar la etiqueta, consulta primero Compilación y lanzamiento automático con acciones de GitHub
Luego, este flujo de trabajo extraerá tus dependencias de NodeJS, las instalará y compilará tu aplicación JavaScript.
Cada vez que envíes un nuevo commit, se construirá una versión en TestFlight
Tu aplicación no necesita usar Ionic, solo es obligatorio Capacitor base, puede tener módulos antiguos de Cordova, pero se deberían preferir los plugins JS de Capacitor.
5. Activar flujo de trabajo
Crear un Commit
Haz un commit, deberías ver el flujo de trabajo activo en el repositorio
Activar el flujo de trabajo
Empuja los nuevos commits a la rama main
o development
para activar el flujo de trabajo
Después de unos minutos, la compilación debería estar disponible en tu panel de App Store Connect
¿Se puede desplegar desde la máquina local?
Sí, puedes, y es muy sencillo
Puedes usar Xcode para compilar y firmar tu aplicación, como siempre
Gracias
Este blog está basado en los siguientes artículos: