Partager via


Générer, tester et déployer des applications Xcode

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

Cet article explique comment générer et déployer des projets Xcode avec des pipelines YAML dans Azure Pipelines.

Prérequis

  • Une organisation et un projet Azure DevOps où vous avez la permission de créer des pipelines et de déployer des applications.
  • Un projet Xcode 9+ et une application dans un référentiel GitHub. Pour plus d’informations, veuillez consulter la section Créer un projet Xcode pour une application.

Créer le pipeline

Important

Lors des procédures GitHub, il est possible qu’il vous soit demandé de créer une connexion de service GitHub ou que vous soyez redirigé vers GitHub pour vous connecter, installer Azure Pipelines, ou autoriser Azure Pipelines. Suivez les instructions à l’écran pour compléter le processus. Pour plus d’informations, veuillez consulter la section Accès aux référentiels GitHub.

  1. Dans votre projet Azure DevOps, sélectionnez Pipelines>Nouveau pipeline ou Créer un pipeline si ce pipeline est le premier dans le projet.
  2. Sélectionnez GitHub comme emplacement de votre code source.
  3. Sur l’écran Sélectionner un référentiel, sélectionnez le référentiel pour votre projet Xcode.
  4. Sur l’écran Configurer votre pipeline, sélectionnez Xcode.

Azure Pipelines fournit un pipeline de démarrage basé sur le modèle Xcode. Examinez le code dans azure-pipelines.yml.

Environnement de génération

Xcode est préinstallé sur les agents macOS hébergés par Microsoft dans Azure Pipelines, vous n’avez donc pas besoin de configurer d’infrastructure. Pour connaître les versions exactes de Xcode qui sont préinstallées, veuillez consulter la section Logiciels des agents hébergés par Microsoft.

Le nœud pool en haut de votre fichier azure-pipelines.yml sélectionne le pool d’agents approprié.

pool:
  vmImage: 'macOS-latest'

Tâche de build Xcode

La tâche Xcode génère, teste ou archive un espace de travail Xcode sur macOS et peut éventuellement empaqueter une application. L’étape Xcode du fichier de démarrage azure-pipelines.yml génère le projet iOS à l’aide de son schéma par défaut, pour le simulateur et sans empaquetage. Vous pouvez modifier les valeurs et ajouter des paramètres pour correspondre à la configuration de votre projet.

Build de développement :

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphonesimulator'
    configuration: 'Debug'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath

Version de production pour App Store :

Pour les versions de production, spécifiez une version Xcode explicite, le schéma de votre application et la configuration release :

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: 'YourAppScheme'
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: '14'
    packageApp: true
    exportPath: '$(build.artifactStagingDirectory)'
    exportOptions: 'automatic'

Principales différences pour la production :

  • xcodeVersion : spécifiez une version fixe (par exemple, '14') au lieu de 'default' pour générer des versions cohérentes et reproductibles.
  • schéma : remplacez la chaîne vide par le nom réel du schéma de votre application.
  • sdk : Utilisation 'iphoneos' pour les builds d’appareils ; utilisation 'iphonesimulator' pour les builds de simulateur.
  • configuration : Utiliser 'Release' pour la production ; utiliser 'Debug' pour le développement.
  • packageApp : défini pour true générer un .ipa fichier pour la distribution.
  • exportPath : dirige la sortie du package vers le répertoire de préproduction de build pour la publication d’artefacts.

Enregistrer et exécuter le pipeline

Lorsque vous avez terminé d’examiner le code dans azure-pipelines.yml, sélectionnez Enregistrer et exécuter.

Capture d’écran du bouton Enregistrer et exécuter dans un nouveau pipeline YAML.

Modifiez éventuellement le Commit message et fournissez une description. Ensuite, sélectionnez à nouveau Enregistrer et exécuter pour valider le fichier azure-pipelines.yml dans votre référentiel et démarrer une compilation.

La page d’exécution de la compilation affiche les détails et la progression de la compilation. Si vous voulez voir votre pipeline en action, sélectionnez Tâche dans la partie inférieure de la page.

Vous disposez maintenant d’un pipeline YAML fonctionnel, azure-pipelines.yml, dans votre référentiel, prêt à être personnalisé.

Personnaliser votre pipeline

Pour apporter des modifications à votre pipeline, sélectionnez Modifier sur la page du pipeline. Les sections suivantes décrivent certaines façons courantes de personnaliser votre pipeline Xcode en fonction de vos besoins spécifiques :

  • Signature et approvisionnement : Requis pour le déploiement sur des appareils physiques ou sur l’App Store.
  • Gestion des dépendances : Configurez l’authentification pour les référentiels privés.
  • Gestion des artefacts : Stockez les sorties de build pour les tests et le déploiement.
  • Distribution: Automatisez la mise en production vers TestFlight ou l’App Store.

Ajouter des tâches de signature et d’approvisionnement

Pour exécuter votre application Xcode sur un appareil physique ou la publier sur l’App Store, vous devez signer et approvisionner l’application. Ce processus implique l’utilisation d’un certificat de signature P12 (informations d’identification de sécurité qui vérifie l’identité de votre application) et les profils d’approvisionnement (qui autorisent votre application pour des appareils ou une distribution spécifiques). Pour plus d’informations, veuillez consulter la section Signer votre application mobile.

Pour rendre le certificat et le profil disponibles pour Xcode pendant une build, ajoutez les tâches Installer le certificat Apple et Installer le profil d’approvisionnement Apple à votre pipeline.

Gérer les dépendances

Votre projet Xcode peut utiliser des gestionnaires de dépendances pour gérer des bibliothèques et des frameworks tiers. Les sections suivantes décrivent comment configurer l’authentification pour les référentiels privés avec différents gestionnaires de dépendances.

Gestionnaire de package Swift

Swift Package Manager (SPM) est le gestionnaire de dépendances natif d’Apple et est intégré directement à Xcode. Pour les projets qui utilisent SPM avec des packages privés, vous devez configurer l’authentification Git.

Si vos packages Swift privés sont hébergés sur GitHub, configurez l’authentification à l’aide d’une variable d’environnement nommée GITHUB_ACCESS_TOKEN avec la valeur d’un jeton d’accès personnel qui a accès au référentiel.

N’ajoutez pas directement le jeton secret à votre yaML de pipeline, car cette action l’expose dans votre code source. Pour plus d’informations, veuillez consulter la section Définir des variables secrètes.

Le code de pipeline suivant utilise une variable secrète nommée myGitHubAccessToken pour l’authentification lors de la résolution des dépendances du package Swift :

- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Pour les packages privés hébergés sur Azure Repos ou d’autres fournisseurs Git, configurez les informations d’identification Git appropriées avant l’étape de génération.

CocoaPods

Si votre projet utilise CocoaPods, utilisez la tâche CocoaPods pour installer des dépendances .

- task: CocoaPods@0
  inputs:
    workingDirectory: '$(System.DefaultWorkingDirectory)'
    forceRepo: false

Carthage

Si votre projet utilise Carthage (gestionnaire de dépendances pour les projets iOS/macOS) avec un référentiel Carthage privé, configurez l’authentification à l’aide d’une variable d’environnement nommée GITHUB_ACCESS_TOKEN avec une valeur de jeton qui a accès au référentiel. Carthage détecte automatiquement et utilise cette variable d’environnement.

N’ajoutez pas directement le jeton secret à votre yaML de pipeline, car cette action l’expose dans votre code source. Pour plus d’informations, veuillez consulter la section Définir des variables secrètes.

Le code de pipeline suivant utilise une variable secrète nommée myGitHubAccessToken pour la valeur de la variable d’environnement GITHUB_ACCESS_TOKEN.

- script: carthage update --platform iOS
  displayName: 'Update Carthage dependencies'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Tester sur des appareils hébergés par Azure

Visual Studio App Center a été mis hors service le 31 mars 2025. Découvrez les alternatives recommandées.

Conserver les artefacts avec l’enregistrement de build

Pour stocker votre fichier iOS AppStore Package (IPA) avec l’enregistrement de build, le tester et le déployer dans les pipelines suivants, ajoutez les tâches Copier des fichiers et Publier des artefacts de pipeline à votre pipeline.

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(build.artifactStagingDirectory)'
    artifact: 'drop'

Déployer sur Apple App Store ou TestFlight

Pour distribuer une application aux testeurs ou utilisateurs bêta, utilisez TestFlight d’Apple ou déployez directement sur l’App Store. Consultez la section ci-dessous pour le déploiement d’Apple App Store.

Pour les tests bêta et les commentaires des utilisateurs, envisagez d’utiliser :

Installer l’extension Apple App Store et déployer sur l’Apple App Store

Pour automatiser l’interaction avec l’Apple App Store, installez l’extension Apple App Store, puis utilisez les tâches suivantes dans votre pipeline. Par défaut, ces tâches s’authentifient auprès d’Apple en utilisant une connexion de service que vous devez configurer.

Pour automatiser la publication des mises à jour des applications bêta iOS existantes sur TestFlight ou des applications en production sur l’App Store, ajoutez la tâche App Store Release.

Il existe des limitations lors de l’utilisation de cette tâche avec l’authentification à deux facteurs Apple. L’authentification Apple est spécifique à la région et les jetons de session fastlane (informations d’identification temporaires utilisées pour s’authentifier auprès d’Apple) expirent rapidement et doivent être recréés et reconfigurés régulièrement.

- task: AppStoreRelease@1
  displayName: 'Publish to the App Store TestFlight track'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection' 
    appIdentifier: com.yourorganization.testapplication.etc
    ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
    shouldSkipWaitingForProcessing: true
    shouldSkipSubmission: true

Pour automatiser la promotion d’une application précédemment soumise d’iTunes Connect à l’App Store, ajoutez la tâche App Store Promote.

- task: AppStorePromote@1
  displayName: 'Submit to the App Store for review'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection'
    appIdentifier: com.yourorganization.testapplication.etc
    shouldAutoRelease: false