{"meta":{"title":"Installation d’un certificat Apple sur des exécuteurs macOS pour le développement Xcode","intro":"Découvrez comment signer des applications Xcode dans un pipeline d’intégration continue (CI) en installant un certificat Apple de signature de code sur des runners GitHub Actions.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/how-tos","title":"Guides pratiques"},{"href":"/fr/actions/how-tos/deploy","title":"Déployer"},{"href":"/fr/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Déployer sur des plateformes tierces"},{"href":"/fr/actions/how-tos/deploy/deploy-to-third-party-platforms/sign-xcode-applications","title":"Signer des applications Xcode"}],"documentType":"article"},"body":"# Installation d’un certificat Apple sur des exécuteurs macOS pour le développement Xcode\n\nDécouvrez comment signer des applications Xcode dans un pipeline d’intégration continue (CI) en installant un certificat Apple de signature de code sur des runners GitHub Actions.\n\n## Prérequis\n\nVous devez être familiarisé avec YAML et la syntaxe pour GitHub Actions. Pour plus d’informations, consultez l’article suivant :\n\n* [Écriture de workflows](/fr/actions/how-tos/write-workflows)\n* [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax)\n\nVous devez comprendre la création et la signature d’applications Xcode. Pour plus d’informations, consultez la [documentation pour développeurs Apple](https://developer.apple.com/documentation/).\n\n## Création de secrets pour votre certificat et votre profil de provisionnement\n\nLe processus de signature implique de stocker des certificats et des profils de provisionnement, de les transférer vers l’exécuteur, de les importer dans le trousseau de l’exécuteur et de les utiliser dans votre build.\n\nPour utiliser votre certificat et votre profil d’approvisionnement sur un runner, nous vous recommandons vivement d’utiliser des secrets GitHub. Pour plus d’informations sur la création de secrets et leur utilisation dans un workflow, consultez « [Utilisation de secrets dans GitHub Actions](/fr/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) ».\n\nCréez des secrets dans votre dépôt ou votre organisation pour les éléments suivants :\n\n* Votre certificat de signature Apple.\n\n  * Il s’agit de votre fichier de certificat `p12`. Pour plus d’informations sur l’exportation de votre certificat de signature à partir de Xcode, consultez la [documentation Xcode](https://help.apple.com/xcode/mac/current/#/dev154b28f09).\n\n  * Vous devez convertir votre certificat en Base64 quand vous l’enregistrez en tant que secret. Dans cet exemple, le secret est nommé `BUILD_CERTIFICATE_BASE64`.\n\n  * Utilisez la commande suivante pour convertir votre certificat en Base64 et le copier dans le Presse-papiers :\n\n    ```shell\n    base64 -i BUILD_CERTIFICATE.p12 | pbcopy\n    ```\n\n* Mot de passe de votre certificat de signature Apple.\n  * Dans cet exemple, le secret est nommé `P12_PASSWORD`.\n\n* Votre profil de provisionnement Apple.\n\n  * Pour plus d’informations sur l’exportation de votre profil de provisionnement à partir de Xcode, consultez la [documentation Xcode](https://help.apple.com/xcode/mac/current/#/deva899b4fe5).\n\n  * Vous devez convertir votre profil de provisionnement en Base64 quand vous l’enregistrez en tant que secret. Dans cet exemple, le secret est nommé `BUILD_PROVISION_PROFILE_BASE64`.\n\n  * Utilisez la commande suivante pour convertir votre profil de provisionnement en Base64 et le copier dans le Presse-papiers :\n\n    ```shell\n    base64 -i PROVISIONING_PROFILE.mobileprovision | pbcopy\n    ```\n\n* Un mot de passe de trousseau.\n\n  * Un nouveau trousseau est créé sur l’exécuteur. Ainsi, le mot de passe du nouveau trousseau peut être n’importe quelle nouvelle chaîne aléatoire. Dans cet exemple, le secret est nommé `KEYCHAIN_PASSWORD`.\n\n## Ajouter une étape à votre workflow\n\nCet exemple de flux de travail inclut une étape qui importe le certificat Apple et le profil d’approvisionnement à partir des GitHub secrets et les installe sur l’exécuteur.\n\n```yaml copy\nname: App build\non: push\n\njobs:\n  build_with_signing:\n    runs-on: macos-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n      - name: Install the Apple certificate and provisioning profile\n        env:\n          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}\n          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}\n          BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}\n          KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}\n        run: |\n          # create variables\n          CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12\n          PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision\n          KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db\n\n          # import certificate and provisioning profile from secrets\n          echo -n \"$BUILD_CERTIFICATE_BASE64\" | base64 --decode -o $CERTIFICATE_PATH\n          echo -n \"$BUILD_PROVISION_PROFILE_BASE64\" | base64 --decode -o $PP_PATH\n\n          # create temporary keychain\n          security create-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n          security set-keychain-settings -lut 21600 $KEYCHAIN_PATH\n          security unlock-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n\n          # import certificate to keychain\n          security import $CERTIFICATE_PATH -P \"$P12_PASSWORD\" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH\n          security set-key-partition-list -S apple-tool:,apple: -k \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n          security list-keychain -d user -s $KEYCHAIN_PATH\n\n          # apply provisioning profile\n          mkdir -p ~/Library/MobileDevice/Provisioning\\ Profiles\n          cp $PP_PATH ~/Library/MobileDevice/Provisioning\\ Profiles\n      - name: Build app\n          # ...\n```\n\n> \\[!NOTE]\n> Pour les cibles de build iOS, votre profil de provisionnement doit avoir l'extension `.mobileprovision`. Pour les cibles de build macOS, l’extension doit être `.provisionprofile`. L’exemple de workflow ci-dessus doit être mis à jour pour refléter votre plateforme cible.\n\n## Nettoyage requis sur les exécuteurs auto-hébergés\n\nLes runners hébergés par GitHub sont des machines virtuelles isolées qui sont automatiquement détruites à la fin de l’exécution du travail. Cela signifie que les certificats et le profil de provisionnement utilisés sur l’exécuteur pendant le travail seront détruits avec l’exécuteur lorsque le travail sera terminé.\n\nSur les exécuteurs auto-hébergés, le répertoire `$RUNNER_TEMP` est nettoyé à la fin de l’exécution du travail, mais le trousseau et le profil de provisionnement peuvent encore exister sur l’exécuteur.\n\nSi vous utilisez des exécuteurs auto-hébergés, vous devez ajouter une étape finale à votre workflow pour vous assurer que ces fichiers sensibles sont supprimés à la fin du travail. L’étape de workflow indiquée ci-dessous est un exemple de procédure à suivre.\n\n```yaml\n- name: Clean up keychain and provisioning profile\n  if: ${{ always() }}\n  run: |\n    security delete-keychain $RUNNER_TEMP/app-signing.keychain-db\n    rm ~/Library/MobileDevice/Provisioning\\ Profiles/build_pp.mobileprovision\n```"}