
Cómo GitLab con fastlane recopila, firma y publica aplicaciones de iOS en App Store.
Recientemente tuvimos una publicación sobre cómo crear y ejecutar rápidamente una aplicación de Android con GitLab y fastlane . Aquí veremos cómo compilar y ejecutar una aplicación iOS y publicarla en TestFlight. Mira lo genial que estoy haciendo un cambio en el iPad Pro con el IDE web de GitLab , tomando la compilación y obteniendo una actualización de la versión de prueba de la aplicación en el mismo iPad Pro donde la desarrollé.
Aquí tomamos una aplicación simple de iOS en Swift con la que grabé un video.
Algunas palabras sobre la configuración de Apple Store
Necesitaremos una aplicación en App Store, certificados de distribución y un perfil de inicialización para unir todo.
Lo más difícil aquí es configurar los derechos de firma en la App Store. Espero que puedas resolverlo por ti mismo. Si es un principiante, lo guiaré en la dirección correcta, pero aquí no hablaremos sobre las complejidades de administrar los certificados de Apple, y están cambiando constantemente. Esta publicación te ayudará a comenzar.
Mis aplicaciones
Necesita una aplicación en App Store Connect para tener una ID para la configuración de .xcodebuild
. El perfil y el ID de la aplicación combinan el ensamblaje del código, los precios y la disponibilidad, así como la configuración de TestFlight para distribuir las aplicaciones de prueba a los usuarios. No haga pruebas públicas, lo privado es suficiente si tiene un grupo pequeño, una configuración simple y no necesita permisos adicionales de Apple.
Perfil de inicialización
Además de la configuración de la aplicación, necesita las claves de distribución y desarrollo de iOS creadas en la sección Certificados, identificadores y perfiles de la consola Apple Developer. Todos estos certificados se pueden combinar en un perfil de inicialización.
Los usuarios de autenticación necesitan la capacidad de crear certificados, de lo contrario, verá un error en los pasos de cert y suspiro .
Otras opciones
Además de este método simple, hay otras formas de configurar certificados y perfiles. Por lo tanto, si trabaja de manera diferente, es posible que deba reconstruir. Lo más importante, necesitará la configuración .xcodebuild
, que apuntará a los archivos necesarios, y el llavero debe estar disponible en la computadora de compilación para el usuario bajo cuyo nombre trabaja el corredor. Utilizamos fastlane para firmas digitales, y si hay problemas o si desea saber más, consulte su documentación detallada sobre firmas digitales .
En este ejemplo, utilizo el enfoque de cert y suspiros , pero para una aplicación real, la coincidencia es probablemente mejor.
Preparando GitLab y Fastlane
Preparando CI Runner
Una vez recopilados todos estos datos, procedemos a la configuración del corredor GitLab en el dispositivo MacOS. Desafortunadamente, hacer aplicaciones de iOS es real solo en MacOS. Pero las cosas pueden cambiar, y si está esperando progreso en esta área, vigile proyectos como xcbuild e isign , y nuestra tarea interna, gitlab-ce # 57576 .
Configurar un corredor es muy simple. Siga las instrucciones actuales para configurar GitLab Runner en macOS .
Nota El corredor debe usar el ejecutable de shell
. Esto es necesario para construir iOS en macOS para poder trabajar directamente como usuario, y no a través de contenedores. Si usa un shell
, el ensamblaje y las pruebas se realizan en nombre del usuario del corredor, directamente en el host del ensamblaje. No es tan seguro como los contenedores, por lo que es mejor desplazarse por la documentación de seguridad para que no se pierda nada.
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 sudo chmod +x /usr/local/bin/gitlab-runner cd ~ gitlab-runner install gitlab-runner start
Apple Keychain debe configurarse en este host con acceso a las claves que Xcode necesita para construir. La forma más fácil de probar esto es iniciar sesión como el usuario que inicia la compilación e intenta compilar manualmente. Si el sistema solicita acceso al llavero, seleccione Permitir siempre que CI funcione. Puede valer la pena ingresar y observar el primer par de tuberías, para asegurarse de que ya no soliciten un montón de llaves. El problema es que Apple no nos facilita trabajar con el modo automático, pero cuando lo arregles, todo estará bien.
inicio de línea rápida
Para usar fastlane en un proyecto, ejecute fastlane init
. Simplemente siga las instrucciones para instalar e iniciar fastlane , especialmente en la sección Gemfile , porque necesitamos un lanzamiento rápido y predecible a través de la canalización automática de CI.
En el directorio del proyecto, ejecute estos comandos:
xcode-select --install sudo gem install fastlane -NV # Alternatively using Homebrew # brew cask install fastlane fastlane init
fastlane le pedirá la configuración básica y luego creará una carpeta fastlane en el proyecto con tres archivos:
1. fastlane/Appfile
Nada complicado aquí. Solo asegúrese de que la ID de Apple y la ID de la aplicación sean correctas.
app_identifier("com.vontrance.flappybird") # The bundle identifier of your app apple_id("your-email@your-domain.com") # Your Apple email address
2. fastlane/Fastfile
Fastfile
define los pasos de compilación. Utilizamos muchas funciones integradas de carril rápido, por lo que todo está claro aquí también. Cree una línea que reciba certificados, compilaciones y las cargue en TestFlight. Puede dividir este proceso en diferentes tareas, si es necesario. Todas estas operaciones ( get_certificates
, get_provisioning_profile
, gym
y upload_to_testflight
) ya están incluidas en fastlane.
Las get_provisioning_profile
get_certificates
y get_provisioning_profile
están relacionadas con el enfoque de firma de cert y suspiros . Si está utilizando match u otra cosa, realice un cambio.
default_platform(:ios) platform :ios do desc "Build the application" lane :flappybuild do get_certificates get_provisioning_profile gym upload_to_testflight end end
3. fastlane/Gymfile
Este es un archivo opcional, pero lo creé manualmente para cambiar el directorio de salida predeterminado y colocar la salida en la carpeta actual. Esto simplifica el CI. Si está interesado, lea sobre el gym
y sus parámetros en la documentación .
https://docs.fastlane.tools/actions/gym/
Nuestro .gitlab-ci.yml
Entonces, tenemos un corredor de CI para el proyecto, y estamos listos para probar la tubería. Veamos qué tenemos en .gitlab-ci.yml
:
stages: - build variables: LC_ALL: "en_US.UTF-8" LANG: "en_US.UTF-8" GIT_STRATEGY: clone build: stage: build script: - bundle install - bundle exec fastlane flappybuild artifacts: paths: - ./FlappyBird.ipa
¡Todo es genial! Configuramos el formato UTF-8 para fastlane, según sea necesario , usamos la estrategia de clone
con el ejecutable de shell
para que tengamos un espacio de trabajo limpio para cada ensamblaje, y simplemente llamemos a flappybuild
fastlane, como se ve arriba. Como resultado, obtenemos el ensamblaje, la firma y la implementación del último ensamblaje en TestFlight.
También obtenemos el artefacto y lo guardamos con el ensamblaje. Tenga en cuenta que el formato .ipa
es un ejecutable ARM firmado que no se ejecuta en el simulador. Si desea la salida para el simulador, simplemente agregue el objetivo de ensamblaje que lo produce y luego inclúyalo en la ruta del artefacto.
Otras variables de entorno
Hay un par de variables de entorno en las que todo funciona.
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
y FASTLANE_SESSION
La autenticación en App Store y la carga en TestFlight requieren autenticación para la línea rápida. Para hacer esto, cree una contraseña para la aplicación que se utilizará en CI. Detalles aquí
Si tiene autenticación de dos factores, cree la variable FASTLANE_SESSION
(instrucciones allí).
FASTLANE_USER
y FASTLANE_PASSWORD
Para que cert y sigh invoquen el perfil de inicialización y los certificados a pedido, se deben establecer las variables FASTLANE_USER
y FASTLANE_PASSWORD
. Detalles aquí Esto no es necesario si utiliza un método de firma diferente.
En conclusión
Puedes ver cómo funciona todo en mi sencillo ejemplo .
Espero que esto haya sido útil y te inspire a trabajar con las compilaciones de iOS en el proyecto GitLab. Aquí hay algunos consejos de CI más para fastlane, por si acaso. Es posible que desee utilizar CI_BUILD_ID
(para compilaciones incrementales) para incrementar automáticamente la versión .
Otra característica interesante de fastlane son las capturas de pantalla automáticas para la App Store, que son muy fáciles de configurar.
Comparta sus experiencias en los comentarios y comparta ideas para mejorar el desarrollo de aplicaciones GitLab para iOS.