Photo par pxhere.com

Comment builder, signer et déployer votre application Xamarin.iOS avec Azure DevOps et App Center

Créez votre ipa et distribuez-le à vos utilisateurs.

Posted by Damien Aicheh on November 14, 2019 · 11 mins

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 :

  • Sélectionnez la version correcte de Mono pour compiler notre application Xamarin.iOS.
  • Générer un provisioning profile et un certificat de distribution Apple
  • Configurez un groupe de variables et téléchargez vos certificats Apple
  • Builder votre application
  • Configurer Azure DevOps avec App Center
  • Déployer votre application sur App Center

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.

Configurations globales

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

Créez votre groupe de variables

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

Importez vos certificats

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:

Variable groups

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

Builder et signer

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.

Déployer sur App Center

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 :

Variable groups

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.

XCode Installation

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é !

N'hésitez pas à me suivre sur pour ne pas rater mon prochain tutoriel !