Freigeben über


Erstellen, Testen und Bereitstellen von Xcode-Apps

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

In diesem Artikel erfahren Sie, wie Sie Xcode-Projekte mit YAML-Pipelines in Azure-Pipelines erstellen und bereitstellen.

Voraussetzungen

  • Eine Azure DevOps-Organisation und ein Projekt, in dem Sie die Berechtigung zum Erstellen von Pipelines und Bereitstellen von Apps haben.
  • Ein Xcode 9+-Projekt und eine App in einem GitHub-Repository. Weitere Informationen finden Sie unter Erstellen eines Xcode-Projekts für eine App.

Erstellen der Pipeline

Wichtig

Während GitHub-Verfahren werden Sie möglicherweise aufgefordert, eine GitHub-Dienstverbindung zu erstellen, oder werden zu GitHub umgeleitet, um sich anzumelden, Azure Pipelines zu installieren oder Azure Pipelines zu autorisieren. Folgen Sie den Anweisungen auf dem Bildschirm, um den Prozess abzuschließen. Weitere Informationen finden Sie unter Zugriff auf GitHub-Repositorys.

  1. Wählen Sie in Ihrem Azure DevOps-Projekt Pipelines>Neue Pipeline oder Pipeline erstellen aus, falls diese Pipeline die erste Pipeline im Projekt ist.
  2. Wählen Sie GitHub als Speicherort für Ihren Quellcode aus.
  3. Wählen Sie auf dem Bildschirm Repository auswählen das Repository für Ihr Xcode-Projekt aus.
  4. Wählen Sie auf dem Bildschirm Pipeline konfigurieren die Option Xcode aus.

Azure Pipelines stellt eine Startpipeline basierend auf der Xcode-Vorlage bereit. Überprüfen Sie den Code in azure-pipelines.yml.

Buildumgebung

Xcode ist auf den von Microsoft gehosteten macOS-Agents in Azure Pipelines vorinstalliert, sodass Sie keine Infrastruktur einrichten müssen. Die genauen Versionen von Xcode, die vorinstalliert sind, finden Sie unter „Software“ im Artikel „Von Microsoft gehostete Agents“.

Der pool-Knoten oben in der Datei azure-pipelines.yml wählt den entsprechenden Agentpool aus.

pool:
  vmImage: 'macOS-latest'

Xcode-Buildtask

Die Xcode-Aufgabe erstellt, testet oder archiviert einen Xcode-Arbeitsbereich unter macOS und kann optional eine App verpacken. Der Xcode-Schritt in der Startdatei azure-pipelines.yml erstellt das iOS-Projekt mithilfe des Standardschemas für den Simulator und ohne Verpackung. Sie können entsprechender Ihrer Projektkonfiguration Werte ändern und Parameter hinzufügen.

Entwicklungs-Build:

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

Produktionsbuild für den App-Store:

Geben Sie für Produktionsversionen eine explizite Xcode-Version, das Schema Ihrer App und die Releasekonfiguration an:

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'

Wichtige Unterschiede bei der Produktion:

  • xcodeVersion: Geben Sie eine feste Version (z. B. '14') anstelle für 'default' konsistente, reproduzierbare Builds an.
  • schema: Ersetzen Sie die leere Zeichenfolge durch den tatsächlichen Schemanamen Ihrer App.
  • sdk: Wird für Gerätebuilds verwendet 'iphoneos' ; für Simulatorbuilds verwenden 'iphonesimulator' .
  • Konfiguration: Verwendung 'Release' für die Produktion; Verwendung 'Debug' für die Entwicklung.
  • packageApp: Set to true generate an .ipa file for distribution.
  • exportPath: Leitet die Paketausgabe an das Build-Zwischenablageverzeichnis für die Veröffentlichung von Artefakten weiter.

Speichern und Ausführen der Pipeline

Wenn Sie mit der Überprüfung des Codes in azure-pipelines.yml fertig sind, wählen Sie Speichern und ausführen aus.

Screenshot: Schaltfläche „Speichern und ausführen“ in einer neuen YAML-Pipeline

Bearbeiten Sie optional die Commitnachricht, und geben Sie eine Beschreibung an. Wählen Sie dann erneut Speichern und ausführen aus, um die Datei azure-pipelines.yml in Ihr Repository zu committen und einen Build zu starten.

Auf der Buildausführungsseite werden Builddetails und der Fortschritt angezeigt. Wenn Sie Ihre Pipeline in Aktion sehen möchten, wählen Sie im unteren Teil der Seite Auftrag aus.

Sie verfügen jetzt über eine funktionierende YAML-Pipeline (azure-pipelines.yml) in Ihrem Repository, die Sie anpassen können.

Anpassen Ihrer Pipeline

Um Änderungen an Ihrer Pipeline vorzunehmen, wählen Sie auf der Pipelineseite Bearbeiten aus. In den folgenden Abschnitten werden einige gängige Methoden zum Anpassen Der Xcode-Pipeline basierend auf Ihren spezifischen Anforderungen beschrieben:

  • Signieren und Bereitstellen: Erforderlich für die Bereitstellung auf physischen Geräten oder im App Store.
  • Abhängigkeitsverwaltung: Konfigurieren sie die Authentifizierung für private Repositorys.
  • Artefaktverwaltung: Speichern der Buildausgaben für Tests und Bereitstellung.
  • Verteilung: Automatisieren Sie die Veröffentlichung für TestFlight oder den App Store.

Hinzufügen von Signier- und Bereitstellungstasks

Um Ihre Xcode-App auf einem physischen Gerät auszuführen oder im App Store zu veröffentlichen, müssen Sie die App signieren und bereitstellen. Dieser Prozess umfasst die Verwendung eines P12-Signaturzertifikats (eine Sicherheitsanmeldeinformation, die die Identität Ihrer App überprüft) und Bereitstellungsprofile (die Ihre App für bestimmte Geräte oder Verteilung autorisieren). Weitere Informationen finden Sie unter Signieren Ihrer mobilen App.

Um das Zertifikat und das Profil während eines Builds für Xcode verfügbar zu machen, fügen Sie Ihrer Pipeline die Tasks Apple-Zertifikat installieren und Apple-Bereitstellungsprofil installieren hinzu.

Verwalten von Abhängigkeiten

Ihr Xcode-Projekt kann Abhängigkeitsmanager verwenden, um Bibliotheken und Frameworks von Drittanbietern zu verarbeiten. In den folgenden Abschnitten wird beschrieben, wie Sie die Authentifizierung für private Repositorys mit verschiedenen Abhängigkeitsmanagern konfigurieren.

Swift-Paket-Manager

Swift Package Manager (SPM) ist der native Abhängigkeits-Manager von Apple und wird direkt in Xcode integriert. Für Projekte, die SPM mit privaten Paketen verwenden, müssen Sie die Git-Authentifizierung konfigurieren.

Wenn Ihre privaten Swift-Pakete auf GitHub gehostet werden, richten Sie die Authentifizierung mithilfe einer Umgebungsvariable GITHUB_ACCESS_TOKEN mit dem Wert eines persönlichen Zugriffstokens ein, das Zugriff auf das Repository hat.

Fügen Sie das geheime Token nicht direkt zu Ihrer Pipeline-YAML hinzu, da diese Aktion sie im Quellcode verfügbar macht. Weitere Informationen finden Sie unter Festlegen von Geheimnisvariablen.

Der folgende Pipelinecode verwendet eine geheime Variable, die für die Authentifizierung beim Auflösen von Swift-Paketabhängigkeiten benannt myGitHubAccessToken ist:

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

Konfigurieren Sie für private Pakete, die auf Azure Repos oder anderen Git-Anbietern gehostet werden, die entsprechenden Git-Anmeldeinformationen vor dem Buildschritt.

CocoaPods

Wenn Ihr Projekt CocoaPods verwendet, verwenden Sie die CocoaPods-Aufgabe , um Abhängigkeiten zu installieren.

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

Karthago

Wenn Ihr Projekt Carthage (ein Abhängigkeits-Manager für iOS/macOS-Projekte) mit einem privaten Carthage-Repository verwendet, richten Sie die Authentifizierung mithilfe einer Umgebungsvariable GITHUB_ACCESS_TOKEN mit dem Wert eines Tokens ein, das Zugriff auf das Repository hat. Carthage erkennt und verwendet diese Umgebungsvariable automatisch.

Fügen Sie das geheime Token nicht direkt zu Ihrer Pipeline-YAML hinzu, da diese Aktion sie im Quellcode verfügbar macht. Weitere Informationen finden Sie unter Festlegen von Geheimnisvariablen.

Der folgende Pipelinecode verwendet eine Geheimnisvariable namens myGitHubAccessToken für den Wert der Umgebungsvariablen GITHUB_ACCESS_TOKEN.

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

Testen auf von Azure gehosteten Geräten

Visual Studio App Center wurde am 31. März 2025 eingestellt. Erfahren Sie mehr über empfohlene Alternativen.

Beibehalten von Artefakten mit dem Builddatensatz

Um Ihre iOS AppStore-Paketdatei (IPA) mit dem Builddatensatz oder -test zu speichern und in nachfolgenden Pipelines bereitzustellen, fügen Sie der Pipeline die Aufgaben "Dateien kopieren " und " Pipelineartefakte veröffentlichen " hinzu.

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

Veröffentlichen im Apple App Store oder bei TestFlight

Um eine App an Tester oder Betabenutzer zu verteilen, verwenden Sie apples TestFlight oder stellen Sie sie direkt im App Store bereit. Weitere Informationen zur Bereitstellung von Apple App Store finden Sie im folgenden Abschnitt.

Für Betatests und Benutzerfeedback sollten Sie Folgendes verwenden:

Installieren der Apple App Store-Erweiterung und Bereitstellen im Apple App Store

Installieren Sie zum Automatisieren der Interaktion mit dem Apple App Store die Apple App Store-Erweiterung, und verwenden Sie dann die folgenden Tasks in Ihrer Pipeline. Standardmäßig authentifizieren sich diese Tasks bei Apple mit einer Dienstverbindung, die Sie konfigurieren müssen.

Fügen Sie den Task App Store Release hinzu, um die Veröffentlichung von Updates für vorhandene iOS TestFlight-Beta-Apps oder Produktions-Apps im App Store zu automatisieren.

Es gibt Einschränkungen bei der Verwendung dieser Aufgabe mit zweistufiger Apple-Authentifizierung. Die Apple-Authentifizierung ist regionsspezifisch, und Fastlane-Sitzungstoken (temporäre Anmeldeinformationen für die Authentifizierung bei Apple) laufen schnell ab und müssen regelmäßig neu erstellt und neu konfiguriert werden.

- 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

Fügen Sie den Task App Store Promote hinzu, um die Höherstufung einer zuvor übermittelten App von iTunes Connect zum App Store zu automatisieren.

- 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