Tutorial: Firma de código de Apple con Fastlane en CodeBuild mediante S3 para almacenamiento de certificados - AWS CodeBuild

Tutorial: Firma de código de Apple con Fastlane en CodeBuild mediante S3 para almacenamiento de certificados

fastlane es una conocida herramienta de automatización de código abierto para automatizar implementaciones y versiones beta de aplicaciones iOS y Android. Se encarga de todas las tareas tediosas, como generar capturas de pantalla, administrar la firma de código y publicar la aplicación.

Requisitos previos

Para completar este tutorial, debe configurar lo siguiente:

Paso 1: configuración de Fastlane Match con S3 en el equipo local

Fastlane Match es una de las herramientas de Fastlane y permite la configuración perfecta para la firma de código tanto en el entorno de desarrollo local como en CodeBuild. Fastlane Match almacena todos los certificados de firma de código y perfiles de aprovisionamiento en un repositorio de Git, un bucket de S3 o Google Cloud Storage, y descarga e instala los certificados y los perfiles requeridos cuando es necesario.

En este ejemplo de configuración, configurará y usará un bucket de Amazon S3 para almacenamiento.

  1. Inicialice la coincidencia en el proyecto:

    fastlane match init
  2. Cuando se le solicite, elija S3 como modo de almacenamiento.

  3. Actualice “Matchfile” para usar S3:

    storage_mode("s3") s3_bucket("your-s3-bucket-name") s3_region("your-aws-region") type("appstore") # The default type, can be: appstore, adhoc, enterprise or development

Paso 2: configuración del Fastfile

Cree o actualice el “Fastfile” con el siguiente flujo.

En CodeBuild, tendrá que ejecutar Fastlane Match cada vez que cree y firme la aplicación. La forma más sencilla de hacerlo es agregar la acción match al flujo que compila la aplicación.

default_platform(:ios) platform :ios do before_all do setup_ci end desc "Build and sign the app" lane :build do match(type: "appstore", readonly: true) gym( scheme: "YourScheme", export_method: "app-store" ) end end
nota

Asegúrese de agregar setup_ci a la sección before_all de Fastfile para que la acción de búsqueda de coincidencias funcione correctamente. Esto garantiza el uso de un llavero de Fastlane temporal con los permisos adecuados. Si no lo usa, es posible que se produzcan errores de compilación o resultados incoherentes.

Paso 3: ejecución del comando fastlane match para generar los certificados y perfiles correspondientes

El comando fastlane match para el tipo indicado (por ejemplo, desarrollo, tienda de aplicaciones, ad hoc, empresa) generará el certificado y el perfil si no están disponibles en el almacén remoto. Fastlane almacenará los certificados y los perfiles en S3.

bundle exec fastlane match appstore

La ejecución del comando será interactiva y fastlane solicitará establecer una frase de contraseña para descifrar los certificados.

Paso 4: creación del archivo de aplicación para el proyecto

Cree o agregue el archivo de aplicación que corresponda a su proyecto.

  1. Cree o agregue Gymfile, Appfile, Snapfile, Deliverfile en función de los requisitos de creación del proyecto.

  2. Confirmación de los cambios al repositorio remoto

Paso 5: creación de variables de entorno en Secrets Manager

Cree dos secretos para almacenar la cookie de sesión de fastlane y la frase de contraseña coincidente. Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte Creación de un secreto de AWS Secrets Manager.

  1. Acceda a la cookie de sesión de fastlane de la siguiente forma.

    1. Clave del secreto: FASTLANE_SESSION

    2. Valor secreto: cookie de sesión generada al ejecutar el siguiente comando en el equipo local.

      nota

      Este valor está disponible después de la autenticación en un archivo local: ~/.fastlane/spaceship/my_appleid_username/cookie.

      fastlane spaceauth -u <apple account>
  2. Frase de contraseña de Fastlane Match: para permitir que Fastlane Match descifre los certificados y los perfiles almacenados en el bucket de S3 es necesario agregar la frase de contraseña de cifrado que configuró en el paso de configuración de coincidencia a las variables de entorno del proyecto de CodeBuild.

    1. Clave del secreto: MATCH_PASSWORD

    2. Valor secreto: <frase de contraseña de coincidencia para descifrar certificados>. La frase de contraseña se establece al generar los certificados en el paso 3.

nota

Al crear los secretos anteriores en Secrets Manager, recuerde dar un nombre de secreto con el siguiente prefijo: /CodeBuild/

Paso 6: creación de una flota de computación

Cree la flota de computación para el proyecto.

  1. En la consola, vaya a CodeBuild y cree una nueva flota de computación.

  2. Elija “macOS” como sistema operativo y seleccione un tipo de computación y una imagen adecuados.

Paso 7: creación de un proyecto en CodeBuild

Cree el proyecto en CodeBuild.

  1. Abra la consola de AWS CodeBuild en https://console.aws.amazon.com/codesuite/codebuild/home.

  2. Cree un proyecto de compilación. Para obtener más información, consulte Creación de un proyecto de compilación (consola) y Ejecutar una compilación (consola).

  3. Configure el proveedor de origen (por ejemplo, GitHub o CodeCommit). Este es el repositorio de origen de proyectos de iOS y no el repositorio de certificados.

  4. En Environment (Entorno):

    • Elija Capacidad reservada.

    • En Flota, seleccione la flota creada anteriormente.

    • Proporcione el nombre del rol de servicio que CodeBuild creará.

    • Proporcione las siguientes variables de entorno.

      • Nombre: MATCH_PASSWORD, Valor: <arn de secretos>, Tipo: Secrets Manager (ARN de secretos creado en el paso 5 para MATCH_PASSWORD)

      • Nombre: FASTLANE_SESSION, Valor: <arn de secretos>, Tipo: Secrets Manager (ARN de secretos creado en el paso 5 para FASTLANE_SESSION)

  5. En Buildspec, agregue lo siguiente:

    version: 0.2 phases: install: commands: - gem install bundler - bundle install build: commands: - echo "Building and signing the app..." - bundle exec fastlane build post_build: commands: - echo "Build completed on date" artifacts: files: - '*/.ipa' name: app-$(date +%Y-%m-%d)

Paso 8: configuración del rol de IAM

Una vez creado el proyecto, asegúrese de que el rol de servicio del proyecto de CodeBuild tenga permisos para acceder al bucket de S3 que contiene los certificados. Agregue la siguiente política al rol:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": "arn:aws:s3:::your-s3-bucket-name" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::your-s3-bucket-name/*" } ] }

Paso 9: ejecución de la compilación

Ejecute la compilación. Puede revisar el estado de compilación y los registros en CodeBuild.

Una vez que se haya completado el trabajo, podrá ver el registro de este.

Solución de problemas

  • Si tiene problemas al obtener certificados, asegúrese de que los permisos de IAM estén configurados correctamente para el acceso a S3.

  • Si tiene problemas al descifrar certificados, asegúrese de establecer la frase contraseña correcta en la variable de entorno MATCH_PASSWORD.

  • En caso de problemas con la firma de código, compruebe que la cuenta de desarrollador de Apple tiene los certificados y los perfiles necesarios y que el identificador de agrupación del proyecto de Xcode coincide con el del perfil de aprovisionamiento.

Consideraciones de seguridad

Tenga en cuenta los siguientes aspectos de seguridad en este tutorial.

  • Asegúrese de que el bucket de S3 tenga la configuración de seguridad adecuada, incluido cifrado en reposo. En concreto, asegúrese de que el bucket no tenga acceso público y restrinja el acceso solo a CodeBuild y al sistema que debe tener acceso.

  • Considere usar AWS Secrets Manager para almacenar información confidencial, como MATCH_PASSWORD y FASTLANE_SESSION.

En este ejemplo se proporciona una configuración para la firma de código de iOS con Fastlane en CodeBuild mediante Amazon S3 para almacenamiento de certificados. Es posible que deba ajustar algunos pasos en función de los requisitos específicos del proyecto y del entorno de CodeBuild. Este método aprovecha los servicios de AWS para mejorar la seguridad y la integración en el ecosistema de AWS.