Signer une application mobile
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Pour signer et provisionner une application mobile pour les systèmes d'exploitation Android ou Apple, vous devez gérer les certificats de signature et les profils de provisionnement Apple Cet article décrit comment gérer en toute sécurité les certificats et les profils pour la signature et le provisionnement de votre application dans Azure Pipelines.
Remarque
Vous avez besoin d'au moins un agent pour exécuter un build ou une release. Vous pouvez utiliser un agent de construction Linux, macOS ou Windows hébergé par Microsoft ou configurer votre propre agent. Pour plus d'informations, reportez-vous à la section Agents de construction et de mise en production.
Signer votre application Android
Suivez ces étapes pour signer votre application Android tout en sécurisant votre certificat de signature.
Chargez le fichier keystore
Obtenez un fichier keystore 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.
Dans Azure Pipelines, accédez à Bibliothèques>Sécuriser les fichiers. Sélectionnez + Fichier sécurisé et chargez votre fichier keystore dans la bibliothèque de fichiers sécurisés. Lors du chargement, votre keystore est chiffré et stocké de manière sécurisée.
Ajouter la tâche de signature au pipeline
Ajoutez la tâche AndroidSigning@3 à votre pipeline YAML après l'étape de construction de votre application. Dans la tâche AndroidSigning@3
:
<apkFiles>
est obligatoire et correspond au chemin et aux noms des fichiers APK à signer. Par défaut, il s’agit de**/*.apk
.<apksign>
doit êtretrue
, ce qui est la valeur par défaut.<keystore-file>
est le nom du fichier keystore que vous avez chargé dans la bibliothèque des fichiers sécurisés.<apksignerKeystorePassword>
est le mot de passe du fichier keystore non chiffré.<apksignerKeystoreAlias>
est l'alias de la clé pour le 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 le YAML, ou vous pouvez définir les variables à l'aide de l'onglet Variables dans l'interface utilisateur Azure Pipelines et y faire référence dans le 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)
N'importe quel agent de construction peut maintenant signer votre application en toute sécurité sans aucune gestion de certificat sur la machine de construction elle-même.
Signer votre application Apple iOS, macOS, tvOS ou watchOS
Pour signer et provisionner votre application, votre build Xcode ou Xamarin.iOS doit avoir accès à votre certificat de signature P12 et à un ou plusieurs profils de provisionnement. Les étapes suivantes expliquent comment obtenir ces fichiers.
Obtenez votre certificat de signature P12
Exportez votre certificat de signature de développement ou de distribution vers un fichier .p12 en utilisant soit Xcode, soit l'application Accès au trousseau sur macOS.
Pour exporter à l'aide de Xcode :
Allez dans Xcode>Préférences>Comptes.
Dans la colonne de gauche, sélectionnez votre ID Apple.
Dans la colonne de droite, sélectionnez votre compte personnel ou d'équipe et sélectionnez Gérer les certificats.
Ctrl+Sélectionnez le certificat que vous souhaitez exporter et sélectionnez Exporter le certificat dans le menu.
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 section Signature iOS pour suivre un processus similaire à l'aide de l'application Accès au trousseau sur macOS ou générer un certificat de signature sous Windows.
Chargez votre fichier P12 dans la bibliothèque de fichiers sécurisés d'Azure Pipelines. Pendant le chargement, votre certificat est chiffré et stocké de manière sécurisée.
Dans votre pipeline, allez dans l'onglet Variables et ajoutez une variable nommée P12password avec le mot de passe de votre certificat comme valeur. Veillez à sélectionner l'icône du cadenas pour sécuriser votre mot de passe et l'occulter dans les journaux.
Obtenez votre profil de provisionnement
Si votre application n'utilise pas la signature automatique, vous pouvez télécharger votre profil de provisionnement d'application depuis le portail Apple Developer. Pour plus d'informations, voir Modifier, télécharger ou supprimer des profils de provisionnement.
Vous pouvez également utiliser Xcode pour accéder aux profils de provisionnement installés sur votre Mac. Dans Xcode, accédez à Xcode>Préférences>Comptes. Sélectionnez votre ID Apple et votre équipe, puis sélectionnez Télécharger les profils manuels.
Dans Azure Pipelines, chargez votre profil de provisionnement dans la bibliothèque de fichiers sécurisés. Pendant le chargement, votre fichier est chiffré et stocké de manière sécurisée.
Ajoutez les tâches de signature et de provisionnement au pipeline.
Pour signer et provisionner votre application, vous pouvez soit installer le certificat et le profil lors de chaque build, soit préinstaller les fichiers sur un agent de build macOS.
Installer le certificat et le profil lors de chaque compilation
Installez le certificat et le profil lors de chaque compilation lorsque vous n'avez pas d'accès permanent à l'agent de compilation, 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 du fichier .p12 que vous avez chargé. Utilisez la variable pour la sécuritéP12password
.- task: InstallAppleCertificate@2 inputs: certSecureFile: '<secure-file.p12>' certPwd: '$(P12password)'
Remarque
Dans la tâche
InstallAppleCertificate@2
, le paramètredeleteCert
est par défauttrue
, ce qui supprime le certificat après la construction.Ajoutez la tâche InstallAppleProvisioningProfile@1 à votre pipeline YAML avant la tâche Xcode ou Xamarin.iOS. Remplacez
<secure-file.mobileprovision>
par le nom de votre fichier de profil de provisionnement.- task: InstallAppleProvisioningProfile@1 inputs: provProfileSecureFile: '<secure-file.mobileprovision>'
Remarque
Dans la tâche
InstallAppleProvisioningProfile@1
, le paramètreremoveProfile
est par défauttrue
, ce qui supprime le profil après la construction.
N'importe quel agent de compilation peut maintenant signer votre application en toute sécurité sans avoir à gérer de certificat ou de profil sur la machine de compilation elle-même.
Préinstaller le certificat et le profil sur un agent de compilation macOS
Au lieu d'installer le certificat de signature et les profils de provisionnement pendant la construction, vous pouvez les préinstaller sur un agent de construction macOS. Les fichiers sont alors disponibles pour une utilisation continue par les builds. N'utilisez cette méthode que si vous faites confiance aux personnes et aux processus qui ont accès au trousseau de clés de macOS sur la machine de l'agent.
Préinstaller le certificat P12
Pour installer le certificat P12 dans le trousseau par défaut, exécutez la commande suivante à partir d'une fenêtre Terminal macOS sur l'agent de build. Remplacez
<certificate.p12>
par le chemin 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>
Ajoutez une nouvelle variable à votre pipeline, nommée KEYCHAIN_PWD. Définissez la valeur comme étant le mot de passe du 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 de provisionnement
Trouvez le nom complet de votre identité de signature en ouvrant une fenêtre de terminal macOS et en saisissant
security find-identity -v -p codesigning
. Vous voyez une liste d'identités de signature sous la formeiPhone 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é.Pour installer le profil de provisionnement sur la machine de l'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 de provisionnement et remplacez<UUID>
par l'UUID du profil de provisionnement, qui est le nom du fichier de profil de provisionnement sans l'extension.mobileprovision
.sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision
Ajoutez des tâches de signature et de provisionnement qui utilisent le trousseau de clés 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
: Le nom du fichier .p12 que vous avez chargé.certPwd
: La variable pour la sécuritéP12password
.signingIdentity
: Le nom complet de votre identité de signature.keychain
:default
, pour permettre l'accès au trousseau par défaut.keychainPassword
: La variableKEYCHAIN_PWD
.deleteCert
:false
, pour conserver la certification entre les différentes versions.
- 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
comme étant le nom de votre fichier de profil de provisionnement. - Réglez
removeProfile
surfalse
pour que le profil soit conservé entre les constructions.
- task: InstallAppleProvisioningProfile@1 inputs: provProfileSecureFile: '<secure-file.mobileprovision>' removeProfile: false
- Définissez
L'agent de construction de macOS peut désormais signer et provisionner votre application de manière sécurisée pour toutes les constructions sans autre gestion de certificat ou de profil.
Référencez les fichiers sécurisés dans la tâche de construction 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 construction Xcode ou Xamarin.iOS.
Les références des fichiers sécurisés dans les tâches de construction 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 de provisionnement Apple pour le certificat et le profil de provisionnement 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 construction du pipeline signe et provisionne désormais votre application en toute sécurité sans autre gestion de certificat ou de profil sur la machine de construction elle-même.
Contenu connexe
Le cas échéant, consultez les références suivantes :
- Pipelines pour les applications Android, voir Construire, tester et déployer des applications Android.
- Pipelines pour les applications iOS, voir Construire, tester et déployer des applications Xcode.
- Agents, voir Agents Azure Pipelines.
- Pools d'agents et files d'attente, voir Créer et gérer des pools d'agents.
- Variables dans les pipelines, voir Définir des variables.
- Dépannage des pipelines, voir Dépannage des exécutions de pipelines.