

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel : signature de code Apple avec Fastlane lors de CodeBuild l'utilisation de S3 pour le stockage de certificats
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/) est un outil d'automatisation open source populaire qui permet d'automatiser les déploiements et les versions bêta de vos applications iOS et Android. Il gère toutes les tâches fastidieuses, comme la génération de captures d'écran, la signature de code et la publication de votre application.

## Conditions préalables
<a name="sample-fastlane-prerequisites"></a>

Pour terminer ce didacticiel, vous devez d'abord avoir configuré les éléments suivants :
+ Un Compte AWS
+ Un [compte Apple Developer](https://developer.apple.com/)
+ Un compartiment S3 pour le stockage des certificats
+ fastlane installé dans votre projet - [Guide](https://docs.fastlane.tools/getting-started/ios/setup/) d'installation de fastlane

## Étape 1 : configurer Fastlane Match avec S3 sur votre machine locale
<a name="sample-fastlane-S3"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) est l'un des [outils de Fastlane](https://fastlane.tools/). Il permet une configuration fluide pour la signature de code, à la fois dans votre environnement de développement local et ailleurs. CodeBuild Fastlane Match stocke tous vos certificats de signature de code et profils de provisionnement dans un stockage Git repository/S3 Bucket/Google Cloud, et télécharge et installe les certificats et profils nécessaires en cas de besoin.

Dans cet exemple de configuration, vous allez configurer et utiliser un compartiment Amazon S3 pour le stockage. 

****

1. Initialisez match dans votre projet :

   ```
   fastlane match init
   ```

1. Lorsque vous y êtes invité, choisissez S3 comme mode de stockage.

1. Mettez à jour votre « *Matchfile* » pour utiliser 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
   ```

## Étape 2 : Configurez votre Fastfile
<a name="sample-fastlane-S3-fastfile"></a>

Créez ou mettez à jour votre `Fastfile` avec la ligne suivante.

Activé CodeBuild, Fastlane Match devra être exécuté chaque fois que vous créez et signez votre application. Le moyen le plus simple de le faire est d'ajouter l'`match`action à la voie qui crée votre application.

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

**Note**  
Assurez-vous d'ajouter des `setup_ci` éléments à la `before_all ` section `Fastfile` pour que l'action de match fonctionne correctement. Cela garantit qu'un trousseau Fastlane temporaire doté des autorisations appropriées est utilisé. Si vous ne l'utilisez pas, vous risquez de rencontrer des échecs de compilation ou des résultats incohérents. 



## Étape 3 : Exécutez la `fastlane match` commande pour générer les certificats et profils respectifs
<a name="sample-fastlane-S3-certificates"></a>

La commande fastlane match pour le type donné (par exemple, development, appstore, adhoc, enterprise) générera le certificat et le profil s'ils ne sont pas disponibles dans le magasin distant. Les certificats et les profils seront stockés dans S3 par fastlane.

```
bundle exec fastlane match appstore
```

L'exécution de la commande sera interactive et fastlane demandera de définir une phrase secrète pour déchiffrer les certificats.

## Étape 4 : Créez le dossier de candidature pour votre projet
<a name="sample-fastlane-S3-appfile"></a>

Créez ou ajoutez le fichier de candidature en fonction de votre projet.

****

1. Créez ou ajoutez le [Gymfile, Appfile](http://docs.fastlane.tools/actions/gym/#gymfile)[, Snapfile](http://docs.fastlane.tools/advanced/Appfile/)[, [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile)](http://docs.fastlane.tools/actions/snapshot/#snapfile) en fonction des exigences de construction de votre projet.

1. Validez les modifications dans votre dépôt distant

## Étape 5 : Création de variables d'environnement dans Secrets Manager
<a name="sample-fastlane-S3-secrets"></a>

Créez deux secrets pour stocker le cookie de session Fastlane et le mot de passe correspondant. Pour plus d'informations sur la création de secrets dans Secrets Manager, voir [Création d'un AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

1. Accédez à votre cookie de session Fastlane comme suit.

   1. Clé secrète - `FASTLANE_SESSION`

   1. Valeur secrète : cookie de session généré par l'exécution de la commande suivante sur votre ordinateur local.
**Note**  
Cette valeur est disponible après authentification dans un fichier local :`~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Phrase de passe Fastlane Match - Pour permettre à Fastlane Match de déchiffrer les certificats et les profils stockés dans le compartiment S3, il est nécessaire d'ajouter le mot de passe de chiffrement que vous avez configuré à l'étape de configuration de Match aux variables d'environnement du projet. CodeBuild

   1. Clé secrète - `MATCH_PASSWORD`

   1. Valeur secrète -*<match passphrase to decrypt certificates>*. Le mot de passe est défini lors de la génération des certificats à l'étape 3.

**Note**  
Lorsque vous créez les secrets ci-dessus dans Secrets Manager, n'oubliez pas de donner un nom au secret avec le préfixe suivant : `/CodeBuild/`

## Étape 6 : Création d'un parc informatique
<a name="sample-fastlane-S3-fleet"></a>

Créez le parc informatique pour votre projet.

****

1. Dans la console, accédez à CodeBuild et créez un nouveau parc informatique.

1. Choisissez « macOS » comme système d'exploitation et sélectionnez le type de calcul et l'image appropriés.

## Étape 7 : Création d'un projet dans CodeBuild
<a name="sample-fastlane-S3-project"></a>

Créez votre projet dans CodeBuild.



****

1. Ouvrez la AWS CodeBuild console sur [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Créez un projet de génération. Pour plus d’informations, consultez [Création d'un projet de génération (console)](create-project.md#create-project-console) et [Exécution d'une génération (console)](run-build-console.md).

1. Configurez votre fournisseur de source (tel que GitHub, CodeCommit). Il s'agit du référentiel des sources du projet iOS et non du référentiel de certificats.

1.  Dans **Environment (Environnement)** : 
   + Choisissez **Capacité réservée**.
   + Pour **Fleet**, sélectionnez la flotte créée ci-dessus.
   + Indiquez le nom du rôle de service qui CodeBuild sera créé pour vous.
   + Fournissez les variables d'environnement ci-dessous.
     + Nom :`MATCH_PASSWORD`, Valeur :*<secrets arn>*, Type : Secrets Manager (Secrets ARN créé à l'étape 5 pour MATCH\$1PASSWORD)
     + Nom :`FASTLANE_SESSION`, Valeur :*<secrets arn>*, Type : Secrets Manager (ARN de secrets créé à l'étape 5 pour FASTLANE\$1SESSION)

1. Dans **Buildspec**, ajoutez ce qui suit :

   ```
   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)
   ```

## Étape 8 : Configuration du rôle IAM
<a name="sample-fastlane-S3-role"></a>

Une fois le projet créé, assurez-vous que le rôle de service de votre CodeBuild projet est autorisé à accéder au compartiment S3 contenant les certificats. Ajoutez la politique suivante au rôle :

------
#### [ 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/*"
        }
    ]
}
```

------

## Étape 9 : Exécuter le build
<a name="sample-fastlane-S3-run"></a>

Exécutez la génération. Vous pouvez consulter l'état de la construction et vous connecter CodeBuild.

Une fois la tâche terminée, vous pourrez consulter le journal de la tâche.

## Résolution des problèmes
<a name="sample-fastlane-S3-troubleshooting"></a>
+ Si vous rencontrez des problèmes lors de l'extraction des certificats, assurez-vous que vos autorisations IAM sont correctement configurées pour l'accès S3.
+ Si vous rencontrez des problèmes lors du déchiffrement des certificats, assurez-vous de définir le mot de passe correct dans la variable d'environnement MATCH\$1PASSWORD.
+ Pour les problèmes de signature de code, vérifiez que votre compte Apple Developer possède les certificats et profils nécessaires, et que l'identifiant du bundle de votre projet Xcode correspond à celui de votre profil d'approvisionnement.

## Considérations sur la sécurité
<a name="sample-fastlane-considerations"></a>

Les considérations de sécurité suivantes concernent ce didacticiel.
+ Assurez-vous que votre compartiment S3 possède les paramètres de sécurité appropriés, y compris le chiffrement au repos. Assurez-vous en particulier que le bucket n'est pas accessible au public et limitez l'accès uniquement CodeBuild au système qui a besoin d'un accès.
+ Envisagez de l'utiliser AWS Secrets Manager pour stocker des informations sensibles telles que MATCH\$1PASSWORD et FASTLANE\$1SESSION.

Cet exemple fournit une configuration pour la signature de code iOS avec Fastlane lors de CodeBuild l'utilisation d'Amazon S3 pour le stockage de certificats. Vous devrez peut-être ajuster certaines étapes en fonction des exigences et de CodeBuild l'environnement spécifiques de votre projet. Cette approche tire parti des AWS services pour améliorer la sécurité et l'intégration au sein de l' AWS écosystème.