Partager via


Signer une application mobile

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Pour signer et approvisionner une application mobile pour les systèmes d’exploitation Android ou Apple, vous devez gérer les certificats de signature et les profils d’approvisionnement Apple. Cet article explique comment gérer en toute sécurité les certificats et les profils pour la signature et l’approvisionnement de votre application dans Azure Pipelines.

Remarque

Vous avez besoin d’au moins un agent pour exécuter une build ou une version. Vous pouvez utiliser un agent de build Linux, macOS ou Windows hébergé par Microsoft, ou configurer votre propre agent. Pour plus d’informations, consultez Les agents de build et de mise en production.

Signer votre application Android

Suivez ces étapes pour signer votre application Android tout en conservant votre certificat de signature sécurisé.

Charger le fichier de magasin de clés

  1. Obtenez un fichier de magasin de clés qui contient votre certificat de signature. La documentation Android décrit le processus de génération d’un fichier de magasin de clés et de sa clé correspondante.

  2. Dans Azure Pipelines, accédez aux fichiers sécurisés des bibliothèques>. Sélectionnez + Fichier sécurisé et chargez votre fichier de magasin de clés dans la bibliothèque de fichiers sécurisés. Pendant le chargement, votre magasin de clés est chiffré et stocké en toute sécurité.

Ajouter la tâche de signature au pipeline

Ajoutez la tâche AndroidSigning@3 à votre pipeline YAML après l’étape qui génère votre application. Dans la AndroidSigning@3 tâche :

  • <apkFiles> est obligatoire et correspond au chemin d’accès et aux noms des fichiers APK à signer. Par défaut, il s’agit de **/*.apk.
  • <apksign> doit être true, qui est la valeur par défaut.
  • <keystore-file> est le nom de votre fichier de magasin de clés chargé dans la bibliothèque de fichiers sécurisés.
  • <apksignerKeystorePassword> est le mot de passe du fichier de magasin de clés non chiffré.
  • <apksignerKeystoreAlias> est l’alias de clé du certificat de signature.
  • <apksignerKeyPassword> est le mot de passe de la clé associée à l’alias spécifié.

Vous pouvez définir et utiliser des variables dans YAML, ou vous pouvez définir les variables à l’aide de l’onglet Variables de l’interface utilisateur Azure Pipelines et les référencer dans yaML.

variables:
  keystore-password: <keystore file password>
  key-alias: <key alias for the signing certificater>
  key-password: <password for the key associated with the alias>

steps:
- task: AndroidSigning@3
  displayName: 'Signing and aligning APK file(s) **/*.apk'
  inputs:
    apkFiles: '**/*.apk'
    apksign: true
    apksignerKeystoreFile: <keystore-filename.keystore>
    apksignerKeystorePassword: $(keystore-password)
    apksignerKeystoreAlias: $(key-alias)
    apksignerKeyPassword: $(key-password)

Tout agent de build peut désormais signer en toute sécurité votre application sans gestion des certificats sur l’ordinateur de build lui-même.

Signer votre application Apple iOS, macOS, tvOS ou watchOS

Pour signer et approvisionner votre application, votre build Xcode ou Xamarin.iOS a besoin d’accéder à votre certificat de signature P12 et à un ou plusieurs profils d’approvisionnement. Les étapes suivantes expliquent comment obtenir ces fichiers.

Obtenir votre certificat de signature P12

  1. Exportez votre certificat de signature de développement ou de distribution vers un fichier .p12 à l’aide de Xcode ou de l’application Keychain Access sur macOS.

    • Pour exporter à l’aide de Xcode :

      1. Accédez aux comptes de préférences>Xcode.>

      2. Dans la colonne de gauche, sélectionnez votre ID Apple.

      3. Sur le côté droit, sélectionnez votre compte personnel ou votre compte d’équipe, puis sélectionnez Gérer les certificats.

      4. Ctrl+Sélectionner le certificat que vous souhaitez exporter et sélectionner Exporter le certificat dans le menu.

        Capture d’écran de l’exportation d’un certificat à l’aide de Xcode.

      5. Dans la boîte de dialogue, entrez le nom du certificat, l’emplacement pour enregistrer le fichier et un mot de passe pour sécuriser le certificat.

    • Vous pouvez également utiliser la procédure décrite dans la signature iOS pour suivre un processus similaire à l’aide de l’application Keychain Access sur macOS ou générer un certificat de signature sur Windows.

  2. Chargez votre fichier P12 dans la bibliothèque de fichiers sécurisés Azure Pipelines. Pendant le chargement, votre certificat est chiffré et stocké en toute sécurité.

  3. Dans votre pipeline, accédez à l’onglet Variables et ajoutez une variable nommée P12password avec votre mot de passe de certificat comme valeur. Veillez à sélectionner l’icône de verrouillage pour sécuriser votre mot de passe et les masquer dans les journaux.

Obtenir votre profil d’approvisionnement

Si votre application n’utilise pas la signature automatique, vous pouvez télécharger votre profil d’approvisionnement d’application à partir du portail des développeurs Apple. Pour plus d’informations, consultez Modifier, télécharger ou supprimer des profils d’approvisionnement.

Vous pouvez également utiliser Xcode pour accéder aux profils d’approvisionnement installés sur votre Mac. Dans Xcode, accédez aux comptes de préférences>Xcode.> Sélectionnez votre ID Apple et votre équipe, puis téléchargez des profils manuels.

Dans Azure Pipelines, chargez votre profil d’approvisionnement dans la bibliothèque de fichiers sécurisés. Pendant le chargement, votre fichier est chiffré et stocké en toute sécurité.

Ajouter les tâches de signature et d’approvisionnement au pipeline

Pour signer et approvisionner votre application, vous pouvez installer le certificat et le profil pendant chaque build, ou préinstaller les fichiers sur un agent de build macOS.

Installer le certificat et le profil pendant chaque build

Installez le certificat et le profil pendant chaque build lorsque vous n’avez pas d’accès durable à l’agent de build, par exemple lorsque vous utilisez des agents macOS hébergés. Le certificat P12 et le profil d’approvisionnement sont installés au début de la build et supprimés une fois qu’elle est terminée.

  • Ajoutez la tâche InstallAppleCertificate@2 à votre pipeline YAML avant la tâche Xcode ou Xamarin.iOS. Dans le code, remplacez <secure-file.p12> par le nom de votre fichier .p12 chargé. Utilisez la variable pour le fichier sécurisé P12password.

    - task: InstallAppleCertificate@2
        inputs:
          certSecureFile: '<secure-file.p12>'
          certPwd: '$(P12password)'
    

    Remarque

    Dans la InstallAppleCertificate@2 tâche, le deleteCert paramètre est défini par défaut truesur , ce qui supprime le certificat après la génération.

  • Ajoutez la tâche InstallAppleProvisioningProfile@1 à votre yaML avant la tâche Xcode ou Xamarin.iOS. Remplacez <secure-file.mobileprovision> par le nom de votre fichier de profil d’approvisionnement.

    - task: InstallAppleProvisioningProfile@1
        inputs:
          provProfileSecureFile: '<secure-file.mobileprovision>'
    

    Remarque

    Dans la InstallAppleProvisioningProfile@1 tâche, le removeProfile paramètre est défini par défaut truesur , ce qui supprime le profil après la génération.

Tout agent de build peut désormais signer en toute sécurité votre application sans aucune gestion de certificat ou de profil sur l’ordinateur de build lui-même.

Préinstaller le certificat et le profil sur un agent de build macOS

Au lieu d’installer le certificat de signature et les profils d’approvisionnement pendant la build, vous pouvez les préinstaller sur un agent de build macOS. Les fichiers sont ensuite disponibles pour une utilisation continue par les builds. Utilisez cette méthode uniquement lorsque vous faites confiance aux personnes et processus qui ont accès au trousseau macOS sur l’ordinateur agent.

Préinstaller le certificat P12

  1. Pour installer le certificat P12 dans le trousseau par défaut, exécutez la commande suivante à partir d’une fenêtre de terminal macOS sur l’agent de build. Remplacez <certificate.p12> par le chemin d’accès et le nom de votre fichier P12. Remplacez <password> par le mot de passe de chiffrement de votre fichier P12.

    sudo security import <certificate.p12> -P <password>
    
  2. Ajoutez une nouvelle variable à votre pipeline nommé KEYCHAIN_PWD. Définissez la valeur comme mot de passe sur le trousseau par défaut, qui est normalement le mot de passe de l’utilisateur qui démarre l’agent. Veillez à sélectionner l’icône de verrouillage pour sécuriser ce mot de passe.

Préinstaller le profil d’approvisionnement

  1. Recherchez le nom complet de votre identité de signature en ouvrant une fenêtre de terminal macOS et en entrant security find-identity -v -p codesigning. Vous voyez une liste d’identités de signature dans le formulaire iPhone Developer/Distribution: Developer Name (ID). Si une identité n’est pas valide, vous voyez quelque chose comme (CSSMERR_TP_CERT_REVOKED) après l’identité.

  2. Pour installer le profil d’approvisionnement sur l’ordinateur agent, exécutez la commande suivante à partir d’une fenêtre de terminal macOS. Remplacez <profile> par le chemin d’accès à votre fichier de profil d’approvisionnement et remplacez-le <UUID> par l’UUID du profil d’approvisionnement, qui est le nom de fichier de profil d’approvisionnement sans l’extension .mobileprovision .

    sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision
    

Ajouter des tâches de signature et d’approvisionnement qui utilisent le trousseau par défaut

  • Ajoutez la tâche InstallAppleCertificate@2 à votre pipeline YAML avant la tâche Xcode ou Xamarin.iOS. Dans le code, définissez les valeurs suivantes :

    • certSecureFile: nom de votre fichier .p12 chargé.
    • certPwd: Variable pour le secure P12password.
    • signingIdentity: nom complet de votre identité de signature.
    • keychain: , defaultpour autoriser l’accès au trousseau par défaut.
    • keychainPassword: Variable KEYCHAIN_PWD .
    • deleteCert: , falsepour conserver le certificat entre les builds.
    - task: InstallAppleCertificate@2
      inputs:
        certSecureFile: '<secure-file.p12>'
        certPwd: '$(P12password)'
        signingIdentity: <full-signing-identity>
        keychain: default
        keychainPassword: `$(KEYCHAIN_PWD)
        deleteCert: false
    
  • Ajoutez la tâche InstallAppleProvisioningProfile@1 . Dans le code :

    • Définissez provProfileSecureFile le nom de votre fichier de profil d’approvisionnement.
    • Défini removeProfile pour false que le profil soit conservé entre les builds.
    - task: InstallAppleProvisioningProfile@1
        inputs:
          provProfileSecureFile: '<secure-file.mobileprovision>'
          removeProfile: false
    

L’agent de build macOS peut désormais signer et provisionner votre application de manière sécurisée pour toutes les builds sans gestion de certificat ou de profil supplémentaire.

Référencer les fichiers sécurisés dans la tâche de génération Xcode ou Xamarin.iOS

Pour utiliser le certificat et le profil sécurisés dans vos pipelines, configurez les paramètres suivants dans vos tâches de build Xcode ou Xamarin.iOS.

Les références de fichiers sécurisés dans les tâches de génération utilisent des variables pour le signingIdentity et le provisioningProfileUuid. Ces variables sont automatiquement définies par les tâches Installer le certificat Apple et installer le profil d’approvisionnement Apple pour le certificat et le profil d’approvisionnement que vous avez sélectionnés.

Pour Xcode :

- task: Xcode@5
  inputs:
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

Pour Xamarin.iOS :

- task: XamariniOS@2
    inputs:
      solutionFile: '**/*.iOS.csproj'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'

L’agent de build de pipeline signe et provisionne désormais en toute sécurité votre application sans autre gestion de certificat ou de profil sur l’ordinateur de build lui-même.

Le cas échéant, consultez les références suivantes :