

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Firma de código de Apple con Fastlane al CodeBuild usar S3 para el almacenamiento de certificados
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/) 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
<a name="sample-fastlane-prerequisites"></a>

Para completar este tutorial, debe configurar lo siguiente:
+ ¿Un Cuenta de AWS
+ Una [cuenta de desarrollador de Apple](https://developer.apple.com/)
+ Un bucket de S3 para almacenar certificados
+ fastlane instalado en el proyecto: [Guía](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar fastlane

## Paso 1: configuración de Fastlane Match con S3 en el equipo local
<a name="sample-fastlane-S3"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) es una de las [herramientas de Fastlane](https://fastlane.tools/) y permite configurar sin problemas la firma de código tanto en tu entorno de desarrollo local como en otros entornos. CodeBuild Fastlane Match almacena todos sus certificados de firma de código y perfiles de aprovisionamiento en un almacenamiento en repository/S3 Bucket/Google la nube de Git, y descarga e instala los certificados y perfiles necesarios cuando es necesario.

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

****

1. Inicialice match en el proyecto:

   ```
   fastlane match init
   ```

1. Cuando se le solicite, elija S3 como modo de almacenamiento.

1. 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
<a name="sample-fastlane-S3-fastfile"></a>

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

 CodeBuildActivado, tendrás que ejecutar Fastlane Match cada vez que crees y firmes tu 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
<a name="sample-fastlane-S3-certificates"></a>

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
<a name="sample-fastlane-S3-appfile"></a>

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

****

1. Cree o agregue [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) en función de los requisitos de creación del proyecto.

1. Confirmación de los cambios al repositorio remoto

## Paso 5: creación de variables de entorno en Secrets Manager
<a name="sample-fastlane-S3-secrets"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

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

   1. Clave del secreto: `FASTLANE_SESSION`

   1. 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>
      ```

1. Contraseña de Fastlane Match: para que Fastlane Match pueda descifrar los certificados y perfiles almacenados en el depósito de S3, es necesario añadir la contraseña de cifrado que configuró en el paso de configuración de Match a las variables de entorno del proyecto. CodeBuild

   1. Clave del secreto: `MATCH_PASSWORD`

   1. Valor del secreto: *<match passphrase to decrypt certificates>* 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
<a name="sample-fastlane-S3-fleet"></a>

Cree la flota de computación para el proyecto.

****

1. En la consola, vaya a y cree una nueva flota de CodeBuild procesamiento.

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

## Paso 7: Crea un proyecto en CodeBuild
<a name="sample-fastlane-S3-project"></a>

Crea tu proyecto en CodeBuild.



****

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Ejecutar una compilación (consola)](run-build-console.md).

1. Configura tu proveedor de código fuente (por ejemplo,). GitHub CodeCommit Este es el repositorio de origen de proyectos de iOS y no el repositorio de certificados.

1.  En **Environment (Entorno)**: 
   + Elija **Capacidad reservada**.
   + En **Flota**, seleccione la flota creada anteriormente.
   + Proporcione el nombre del rol de servicio que CodeBuild se va a crear para usted.
   + Proporcione las siguientes variables de entorno.
     + Nombre:`MATCH_PASSWORD`, Valor:*<secrets arn>*, Tipo: Secrets Manager (el ARN secreto se creó en el paso 5 para MATCH\$1PASSWORD)
     + Nombre:`FASTLANE_SESSION`, Valor:*<secrets arn>*, Tipo: Secrets Manager (el ARN de secretos creado en el paso 5 para FASTLANE\$1SESSION)

1. 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
<a name="sample-fastlane-S3-role"></a>

Una vez creado el proyecto, asegúrese de que el rol de servicio del CodeBuild proyecto tenga permisos para acceder al depósito 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
<a name="sample-fastlane-S3-run"></a>

Ejecute la compilación. Puedes revisar el estado de la compilación e iniciar sesión CodeBuild.

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

## Resolución de problemas
<a name="sample-fastlane-S3-troubleshooting"></a>
+ 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\$1PASSWORD.
+ 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
<a name="sample-fastlane-considerations"></a>

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úrate de que el depósito no tenga acceso público y restringe el acceso únicamente CodeBuild al sistema al que debe acceder.
+ Considere usarlo AWS Secrets Manager para almacenar información confidencial, como MATCH\$1PASSWORD y FASTLANE\$1SESSION.

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