Publicamos aplicaciones de iOS en la App Store con GitLab y fastlane

Publicamos aplicaciones de iOS en la App Store con GitLab y fastlane

Cómo GitLab con fastlane compila, firma y publica aplicaciones para iOS en el App Store.

Recientemente tuvimos una publicación sobre cómo compilar y lanzar rápidamente una aplicación de Android con GitLab y fastlane. Aquí veremos cómo compilar y lanzar una aplicación de iOS y publicarla en TestFlight. Echa un vistazo a lo genial que es hacer un cambio en un iPad Pro con GitLab Web IDE, tomar la compilación y obtener la actualización de la versión de prueba de la aplicación en el mismo iPad Pro donde la desarrollé.

Aquí utilizaremos una aplicación sencilla para iOS en Swift, con la que grabé el 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 aprovisionamiento para unir todo.

Lo más complicado aquí es configurar los permisos de firma en el App Store. Espero que puedan manejar esto por sí mismos. Si son nuevos, les indicaré la dirección correcta, pero aquí no hablaremos de los detalles de la gestión de certificados de Apple, además, estos cambian constantemente. Esta publicación les ayudará a empezar.

Mis aplicaciones

Necesitan una aplicación en App Store Connect para tener un ID para la configuración .xcodebuild. El perfil y el ID de la aplicación combinan las compilaciones de código, precios y disponibilidad, así como la configuración de TestFlight para distribuir aplicaciones de prueba entre los usuarios. No hagan pruebas públicas, es suficiente con la privada si tienen un grupo pequeño, una configuración sencilla y no necesitan permisos adicionales de Apple.

El perfil de aprovisionamiento

Además de configurar la aplicación, necesitan claves de distribución y desarrollo de iOS, creadas en la sección Certificados, Identificadores y Perfiles en la consola de Apple Developer. Todos estos certificados se pueden combinar en un perfil de aprovisionamiento.

Los usuarios que pasarán por la autenticación necesitan la capacidad de crear certificados, de lo contrario, en las etapas cert y sigh verán un error.

Otras opciones

Además de este método sencillo, hay otras formas de configurar certificados y perfiles. Así que, si trabajan de manera diferente, tal vez tengan que reconfigurarse. Lo más importante es que necesitarán una configuración .xcodebuild, que apunte a los archivos necesarios, y la llavero debe estar disponible en la computadora de compilación para el usuario bajo cuyo nombre opera el runner. Para la firma digital utilizamos fastlane, y si hay problemas o quieren saber más, revisen su documentación detallada. documentación sobre firmas digitales.

En este ejemplo, utilizo un enfoque cert y sigh, pero para aplicaciones reales, probablemente sea mejor match.

Preparación de GitLab y fastlane

Preparación del CI Runner

Una vez que tengas todos estos datos, pasamos a la configuración del GitLab Runner en un dispositivo MacOS. Desafortunadamente, crear aplicaciones iOS solo es posible en MacOS. Pero todo puede cambiar, y si esperas avances en este área, sigue proyectos como xcbuild y isign, y nuestra tarea interna gitlab-ce#57576.

Configurar el runner es muy sencillo. Sigue las instrucciones actualizadas para configurar GitLab Runner en macOS.

Nota. El runner debe utilizar el programa ejecutable shell. Esto es obligatorio para compilar iOS en macOS, para trabajar directamente como usuario y no a través de contenedores. Si estás utilizando shell, la compilación y prueba se realizan bajo el nombre del usuario del runner, directamente en el host de compilación. Esto no es tan seguro como los contenedores, así que es mejor revisar la documentación de seguridad, para no dejar nada al azar.

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

El llavero de Apple debe estar configurado en este host con acceso a las claves que Xcode necesita para la compilación. La forma más sencilla de probar esto es iniciar sesión como el usuario que ejecutará la compilación e intentar realizar la compilación manualmente. Si el sistema solicita acceso al llavero, selecciona "Siempre permitir" para que CI funcione. Puede que valga la pena iniciar sesión y observar los primeros par de pipelines, para asegurarte de que ya no solicitan el llavero. El problema es que Apple no facilita el trabajo con el modo automático, pero una vez que lo configures, todo debería estar bien.

fastlane init

Para utilizar fastlane en el proyecto, ejecuta fastlane init. Simplemente sigue las instrucciones para instalar y ejecutar fastlane, especialmente en la sección sobre Gemfile, ya que necesitamos un inicio rápido y predecible a través del pipeline automatizado de CI.

En el directorio del proyecto, ejecuta estos comandos:

xcode-select --install
sudo gem install fastlane -NV
# Alternativamente usando Homebrew
# brew cask install fastlane
fastlane init

fastlane te pedirá la configuración básica y luego creará en el proyecto una carpeta fastlane con tres archivos:

1. fastlane/Appfile

No hay nada complicado aquí. Simplemente verifica que el ID de Apple y el ID de la aplicación estén correctos.

app_identifier("com.vontrance.flappybird") # El identificador del paquete de tu aplicación
apple_id("your-email@your-domain.com") # Tu dirección de correo electrónico de Apple

2. fastlane/Fastfile

Fastfile define los pasos de construcción. Usamos muchas capacidades integradas de fastlane, así que aquí también es claro. Creamos una línea que obtiene los certificados, realiza la construcción y la sube a TestFlight. Puedes 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.

Acciones get_certificates y get_provisioning_profile están relacionadas con el enfoque de firma cert y sigh. Si usas match o algo más, realiza los cambios.

default_platform(:ios)

platform :ios do
  desc "Construir la aplicación"
  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 los resultados en la carpeta actual. Esto facilita la CI. Si te interesa, lee sobre gym y sus parámetros en la documentación.

https://docs.fastlane.tools/actions/gym/

Nuestro .gitlab-ci.yml

Así que tenemos un corredor de CI para el proyecto y estamos listos para probar el pipeline. 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 está perfecto! Establecemos el formato UTF-8 para fastlane, como se requiere, usamos la estrategia clone con el ejecutable shell, para tener un espacio de trabajo limpio para cada construcción, y simplemente llamamos a flappybuild fastlane, como se muestra arriba. Como resultado, obtenemos la construcción, firma y despliegue de la última construcción en TestFlight.

También obtenemos el artefacto y lo guardamos con la construcción. Ten en cuenta que el formato .ipa es un archivo ejecutable ARM firmado, que no se puede ejecutar en el simulador. Si deseas resultados para el simulador, simplemente añade un objetivo de construcción que lo genere y luego inclúyelo en la ruta del artefacto.

Otras variables de entorno

Aquí hay un par de variables de entorno en las que todo funciona.

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD y FASTLANE_SESSION

Para la autenticación en la App Store y la carga en TestFlight, se necesita autenticación para fastlane. Para ello, crea una contraseña de aplicación que se utilizará en CI. Detalles aquí.

Si tienes autenticación de dos factores, crea una variable FASTLANE_SESSION (instrucciones allí mismo).

FASTLANE_USER y FASTLANE_PASSWORD

Para cert y sigh llamamos al perfil de inicialización y certificados bajo demanda, necesitas establecer variables FASTLANE_USER y FASTLANE_PASSWORD. Detalles aquí. Esto no es necesario si utilizas otro método de firma.

En conclusión

Vea cómo funciona todo esto en mi ejemplo sencillo.

Espero que haya sido útil y que lo haya inspirado a trabajar con las compilaciones de iOS en su proyecto de GitLab. Aquí hay más consejos sobre CI para fastlane, por si acaso. Quizás quiera usar CI_BUILD_ID (para compilaciones incrementales), para incrementar automáticamente la versión.

Otra gran función de fastlane es capturas de pantalla automáticas para la App Store, que son muy fáciles de configurar.

Comparta en los comentarios su experiencia y comparta ideas para mejorar GitLab para el desarrollo de aplicaciones iOS.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster