- Azure
- Azure DevOps
- Xamarin
- Xamarin.iOS
- App Center
Dans ce tutoriel, je vais vous montrer comment builder et signer votre application Xamarin.iOS et la distribuer à vos utilisateurs via App Center.
Pour réussir, nous devons suivre ces étapes :
Commençons donc par aller sur Azure DevOps!
Dans l’onglet Pipelines, créez un New pipeline et suivez les 4 étapes pour obtenir le code source à partir du repository approprié. Azure DevOps créera automatiquement un nouveau fichier azure-pipelines.yml
à la racine du dossier de votre projet. C’est à cet endroit que la définition du job sera définie et ensuite interprétée par Azure DevOps.
Nous allons compiler notre application Xamarin.iOS en utilisant la dernière version de mac disponible sur Azure DevOps: 10.14
. Cela nous permettra de compiler notre application iOS pour iOS 13.0
. Pour le configurer, nous devons sélectionner la correcte version mono sur notre agent MacOs. Pour plus de détails sur le choix de votre version mono, veuillez consulter la documentation de Microsoft. Pour ce tutoriel, nous utiliserons l’une des plus récentes, la version 6.4.0.
Précisons d’abord ceci à notre azure-pipelines.yml
:
pool:
vmImage: 'macOS-10.14'
steps:
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 6_4_0
displayName: 'Select the Xamarin SDK version'
enabled: true
Ce job nécessitera plusieurs variables telles que le chemin du dossier, des variables d’environnements et des mots de passes. Donc, pour gérer tout cela, créons un variable group. Si vous n’êtes pas familier avec cela, vous pouvez consulter mon précédent tutoriel à ce sujet.
Pour ce tutoriel, le groupe de variables sera appelé xamarin-ios-pipeline
, chargez-le en l’ajoutant au-dessus de steps
.
variables:
- group: xamarin-ios-pipeline
Pour signer votre application, vous aurez besoin d’un provisioning profile et d’un accès à un certificat de distribution iOS.
N’oubliez pas que si vous utilisez un certificat pour l’App Store, vous ne pourrez pas installer votre application directement sur un périphérique. Pour ce faire, vous aurez besoin d’un certificat Ad Hoc , surtout si vous souhaitez déployer votre application sur App Center.
Avec votre certificat et votre provisioning profile prêts, vous devez maintenant les uploader dans le Secure File
. Pour ce faire, accédez à Pipelines > Library > Secure files. Pour ce tutoriel, mon provisioning profile s’appellera My_Demo_Application_AdHoc_Distribution.mobileprovision
.
Lorsque votre certificat de distribution est prêt, vous devez en exporter la clé publique. Pour ce faire, ajoutez-le à votre Keychain
sur votre mac, puis faites un clic droit dessus et exportez-le en tant que fichier .p12
, vous pourrez ensuite l’uploader dans la section des Secure File
. N’oubliez pas d’ajouter le mot de passe associé au groupe de variables.
Votre groupe de variables doit maintenant ressembler à ceci:
Ceci fait, nous pouvons ajouter deux tâches à notre azure-pipelines.yml
:
Tout d’abord, installez le certificat Apple précédemment uploadé, nous allons signer l’ipa
avec:
- task: InstallAppleCertificate@2
inputs:
certSecureFile: '$(p12FileName)'
certPwd: '$(p12Password)'
keychain: 'temp'
deleteCert: true
Ajoutez ensuite une nouvelle tâche pour installer le provisioning profile associé à votre application, de la manière suivante:
- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: '$(provisioningProfile)'
removeProfile: true
Avec nos tâches de certificats prêtes, il est temps de builder notre application. Commençons par restaurer les packages Nuget de la solution:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solutionPath)'
Ajoutez la variable solutionPath
sous la définition du groupe de variables comme ceci:
variables:
- group: xamarin-ios-pipeline
- name: solutionPath
value: '**/*.sln'
Maintenant, nous pouvons ajouter la tâche de build et de signature comme ci-dessous:
- task: XamariniOS@2
inputs:
solutionFile: '$(solutionPath)'
configuration: '$(configuration)'
packageApp: true
buildForSimulator: false
runNugetRestore: false
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
Ajoutez également la valeur configuration
aux variables:
- name: configuration
value: 'Release'
Expliquons ce que nous avons fait avec la tâche XamariniOS@2
. Nous choisissons une configuration Release
et nous avons activé la génération d’un package pour l’application: un ipa
.
La variable $ (APPLE_CERTIFICATE_SIGNING_IDENTITY)
correspond à la tâche ‘Install Apple Certificate’ que nous avons précédemment éffectué et est définie automatiquement.
La variable $(APPLE_PROV_PROFILE_UUID)
est quand à elle automatiquement définie par la tâche ‘Install Apple Provisioning Profile’ et est lié au provisioning profile précédement défini.
Si rien n’est spécifié pour les options signingIdentity
et signingProvisioningProfileID
, les paramètres du projet seront utilisés par défault.
Maintenant, si vous exécutez votre job pour la première fois, vous verrez un message d’erreur vous demandant de donner accès à vos groupes de variables et à vos fichiers sécurisés. Acceptez-le en cliquant sur Authorize resources
et redémarrez le build.
Nous avons maintenant notre ipa
signé et prêt à être envoyé à nos utilisateurs. Mon outil préféré pour cela est App Center. Vous pouvez partager votre application avec différents groupes de testeurs avant de la publier sur un store et c’est très utile.
Continuons en configurant la connexion entre App Center et Azure DevOps. Pour ce faire, il suffit de suivre mon tutorial à ce sujet, puis continuez à l’étape suivante.
Si vous avez suivi correctement le tutoriel précédent, vous pouvez maintenant ajouter votre slug d’application et votre ID de groupe de distribution au groupe de variables. À ce stade, votre groupe de variables xamarin-ios-pipeline
devrait ressembler à ceci :
Enfin, nous pouvons ajouter la tâche finale pour déployer notre ipa
dans App Center:
- task: AppCenterDistribute@3
inputs:
serverEndpoint: 'VSAC'
appSlug: '$(appSlug)'
appFile: '$(build.SourcesDirectory)/**/*.ipa'
releaseNotesOption: 'input'
releaseNotesInput: 'New ipa release ready.'
destinationType: 'groups'
distributionGroupId: '$(distributionGroupId)'
Si vous exécutez votre pipeline maintenant, vous pourrez voir votre ipa
déployé dans App Center pour le groupe approprié. Vous pouvez maintenant le télécharger et l’installer sur votre appareil !
Voici deux façons de le faire:
Connectez-vous à App Center avec votre périphérique physique et à l’intérieur de la section Distribute, trouvez les liens de téléchargement comme ci-dessous et installez directement le fichier ipa
.
Sur un Mac, ouvrez un navigateur et connectez-vous à App Center avec un mac et à l’intérieur de la section Distribute, téléchargez le fichier ipa
. Ensuite, connectez votre périphérique physique à votre mac et ouvrez XCode. Dans XCode, allez dans Window > Devices and Simulators, puis faites glisser le fichier ipa
dans la section Installed Apps
et il sera automatiquement installé. En cas de problème lors de l’installation de votre package, cliquez sur le bouton Open Console
situé au dessus de la section Installed Apps
. Vous verrez alors tous les logs de votre appareil et vous saurez pourquoi cela ne fonctionne pas. Par exemple, vous pouvez obtenir une erreur si votre appareil ne cible pas la version minimale de l’OS que vous avez spécifiée dans le fichier info.plist
.
Sources:
Vous trouverez un exemple de code sur ce répertoire Github.
Happy codding !
Vous avez aimé ce tutoriel ? Laissez une étoile sur le répertoire Github associé !