Sdílet prostřednictvím


Sestavování, testování a nasazování aplikací Xcode

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

V tomto rychlém startu se dozvíte, jak sestavovat a nasazovat projekty Xcode s kanály YAML v Azure Pipelines.

Požadavky

  • Organizace a projekt Azure DevOps, kde máte oprávnění vytvářet kanály a nasazovat aplikace.
  • Projekt a aplikace Xcode 9+ v úložišti GitHub. Další informace najdete v tématu Vytvoření projektu Xcode pro aplikaci.

Vytvoření kanálu

Důležité

Během postupů GitHubu se může zobrazit výzva k vytvoření připojení služby GitHub nebo k přesměrování na GitHub, abyste se mohli přihlásit, nainstalovat Azure Pipelines nebo autorizovat Azure Pipelines. Dokončete proces podle pokynů na obrazovce. Další informace najdete v tématu Přístup k úložištím GitHub.

  1. V projektu Azure DevOps vyberte Kanály>Nový kanál nebo Vytvořte kanál, pokud je tento kanál v projektu prvním kanálem.
  2. Jako umístění zdrojového kódu vyberte GitHub .
  3. Na obrazovce Vybrat úložiště vyberte úložiště pro váš projekt Xcode.
  4. Na obrazovce Konfigurace kanálu vyberte Xcode.

Azure Pipelines poskytuje počáteční kanál založený na šabloně Xcode . Zkontrolujte kód v azure-pipelines.yml.

Sestavení prostředí

Xcode je předinstalovaný na agentech macOS hostovaných Microsoftem v Azure Pipelines, takže nemusíte nastavovat žádnou infrastrukturu. Přesné verze Xcode, které jsou předinstalované, najdete v softwaru agentů hostovaných Microsoftem.

Uzel pool v horní části souboru azure-pipelines.yml vybere příslušný fond agentů.

pool:
  vmImage: 'macOS-latest'

Úloha sestavení Xcode

Úloha Xcode sestaví, testuje nebo archivuje pracovní prostor Xcode v systému macOS a volitelně může zabalit aplikaci. Krok Xcode v počátečním azure-pipelines.yml souboru sestaví projekt iOS pomocí výchozího schématu simulátoru a bez balení. Můžete změnit hodnoty a přidat parametry tak, aby odpovídaly konfiguraci projektu.

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

Uložení a spuštění kanálu

Až dokončíte kontrolu kódu v azure-pipelines.yml, vyberte Uložit a spustit.

Snímek obrazovky s tlačítkem Uložit a spustit v novém kanálu YAML

Volitelně můžete upravit zprávu Potvrzení a zadat popis. Potom vyberte Uložit a spusťte znovu, aby se soubor azure-pipelines.yml uložil do úložiště a spustil sestavení.

Na stránce spuštění sestavení se zobrazují podrobnosti o sestavení a průběh. Pokud chcete sledovat kanál v akci, vyberte Úlohu v dolní části stránky.

Teď máte v úložišti funkční kanál YAML, azure-pipelines.yml, který je připravený k přizpůsobení.

Přizpůsobení kanálu

Pokud chcete v kanálu udělat změny, na stránce kanálu vyberte Upravit . Následující části popisují některé běžné způsoby přizpůsobení kanálu Xcode.

Přidání úloh podepisování a zřizování

Aplikace Xcode musí být podepsaná a zřízená, aby mohla běžet na zařízení nebo publikovat do App Storu. Proces podepisování a zřizování musí přistupovat k podpisovém certifikátu P12 a jednomu nebo více zřizovacím profilům. Další informace najdete v tématu Podepsání mobilní aplikace.

Pokud chcete certifikát a profil zpřístupnit Xcode během sestavování, přidejte do kanálu úlohy Instalace certifikátu Apple a Instalace zřizovacího profilu Apple.

Použití proměnné prostředí Carthage

Pokud váš projekt používá Carthage s privátním úložištěm Carthage, můžete nastavit ověřování pomocí proměnné prostředí s názvem GITHUB_ACCESS_TOKEN s hodnotou tokenu, který má přístup k úložišti. Carthage automaticky detekuje a používá tuto proměnnou prostředí.

Nepřidávejte token tajného kódu přímo do YAML kanálu. Místo toho výběrem proměnných na stránce kanálu otevřete podokno Proměnné a vytvořte pro tento token proměnnou. Nezapomeňte povolit ikonu zámku pro šifrování hodnoty proměnné. Další informace naleznete v tématu Nastavení tajných proměnných.

Následující kód kanálu používá tajnou proměnnou pojmenovanou myGitHubAccessToken pro hodnotu GITHUB_ACCESS_TOKEN proměnné prostředí.

- script: carthage update --platform iOS
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Testování na zařízeních hostovaných v Azure

Pokud chcete svou aplikaci otestovat v hostované testovacím prostředí zařízení s iOSem v Centru aplikací sady Visual Studio, přidejte do kanálu úlohu Test centra App Center.

Tato úloha vyžaduje bezplatný zkušební účet App Center , který se musí po 30 dnech převést na placený, aby se testovací testovací prostředí dál používalo. Před použitím této úlohy si zaregistrujte účet App Center.

Následující příklad spustí testovací sadu App Center. Úloha používá připojení služby, které musíte nastavit.

Úplnou syntaxi úlohy a referenční informace najdete v tématu Testovací úloha App Center. Další informace najdete v tématu Použití Azure DevOps pro testování uživatelského rozhraní.

- task: AppCenterTest@1
  inputs:
    appFile: path/myapp.ipa
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'appium'
    appiumBuildDirectory: test/upload
    serverEndpoint: 'My App Center service connection'
    appSlug: username/appIdentifier
    devices: 'devicelist'

Zachování artefaktů pomocí záznamu buildu

Pokud chcete uložit soubor balíčku appstore pro iOS (IPA) se záznamem sestavení nebo testem a nasadit ho v dalších kanálech, přidejte do kanálu úlohy Kopírovat soubory a Publikovat artefakty sestavení. Další informace najdete v tématu Publikování a stahování artefaktů kanálu.

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Nasazení do App Center

Pokud chcete distribuovat aplikaci skupině testerů nebo beta uživatelů nebo zvýšit úroveň aplikace do Intune nebo Apple App Storu, přidejte úlohu Distribuce v App Center. Úkol vyžaduje bezplatný účet App Center , který zůstane zdarma.

Následující příklad distribuuje aplikaci uživatelům. Úplnou syntaxi úloh a referenční informace najdete v tématu Distribuce v App Center. Další informace najdete v tématu Nasazení buildů Azure DevOps pomocí App Center.

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: '$(APP_CENTER_SLUG)'
    appFile: '$(APP_FILE)' # Relative path from the repo root to the IPA file you want to publish
    symbolsOption: 'Apple'
    releaseNotesOption: 'input'
    releaseNotesInput: 'Here are the release notes for this version.'
    destinationType: 'groups'

Instalace rozšíření Apple App Store a nasazení do Apple App Storu

Pokud chcete automatizovat interakci s Apple App Storem, nainstalujte rozšíření Apple App Store a pak ve svém kanálu použijte následující úlohy. Ve výchozím nastavení se tyto úlohy ověřují u Společnosti Apple pomocí připojení služby, které musíte nakonfigurovat.

Pokud chcete automatizovat vydávání aktualizací stávajících beta aplikací pro iOS TestFlight nebo produkčních aplikací v App Storu, přidejte úlohu vydání z App Storu.

Používání této úlohy s dvoufaktorovým ověřováním Apple má určitá omezení. Ověřování Apple je specifické pro oblast a platnost tokenů relace fastlane rychle vyprší a musí se znovu vytvořit a znovu nakonfigurovat.

- 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

Pokud chcete automatizovat povýšení dříve odeslané aplikace z iTunes Connect do App Storu, přidejte úlohu Zvýšení úrovně App Storu.

- 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