Compilare, testare e distribuire app Xcode

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Questa guida introduttiva illustra come compilare e distribuire progetti Xcode con pipeline YAML in Azure Pipelines.

Prerequisiti

  • Un'organizzazione e un progetto di Azure DevOps in cui si dispone dell'autorizzazione per creare pipeline e distribuire app.
  • Un progetto e un'app Xcode 9+ in un repository GitHub. Per altre informazioni, vedere Creazione di un progetto Xcode per un'app.

Creare la pipeline

Importante

Durante le procedure di GitHub, potrebbe essere richiesto di creare una connessione al servizio GitHub o di essere reindirizzati a GitHub per accedere, installare Azure Pipelines o autorizzare Azure Pipelines. Seguire le istruzioni visualizzate per completare il processo. Per altre informazioni, vedere Accedere ai repository GitHub.

  1. Nel progetto Azure DevOps selezionare Pipeline>nuova pipeline o Crea pipeline se la pipeline è la prima nel progetto.
  2. Selezionare GitHub come percorso del codice sorgente.
  3. Nella schermata Selezionare un repository selezionare il repository per il progetto Xcode.
  4. Nella schermata Configura pipeline selezionare Xcode.

Azure Pipelines offre una pipeline iniziale basata sul modello Xcode . Esaminare il codice in azure-pipelines.yml.

Ambiente di compilazione

Xcode è preinstallato negli agenti macOS ospitati da Microsoft in Azure Pipelines, quindi non è necessario configurare alcuna infrastruttura. Per le versioni esatte di Xcode preinstallate, vedere Software degli agenti ospitati da Microsoft.

Il pool nodo nella parte superiore del file di azure-pipelines.yml seleziona il pool di agenti appropriato.

pool:
  vmImage: 'macOS-latest'

Attività di compilazione Xcode

L'attività Xcode compila, testa o archivia un'area di lavoro Xcode in macOS e facoltativamente può creare un pacchetto di un'app. Il passaggio Xcode nel file starter azure-pipelines.yml compila il progetto iOS usando lo schema predefinito, per il simulatore e senza creazione di pacchetti. È possibile modificare i valori e aggiungere parametri in modo che corrispondano alla configurazione del progetto.

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

Salvare ed eseguire la pipeline

Al termine della revisione del codice in azure-pipelines.yml, selezionare Salva ed esegui.

Screenshot del pulsante Salva ed esegui in una nuova pipeline YAML.

Facoltativamente, modificare il messaggio Commit e fornire una descrizione. Selezionare quindi Salva ed esegui di nuovo per eseguire il commit del file azure-pipelines.yml nel repository e avviare una compilazione.

La pagina di esecuzione della compilazione mostra i dettagli e lo stato di avanzamento della compilazione. Se si vuole controllare la pipeline in azione, selezionare Processo nella parte inferiore della pagina.

È ora disponibile una pipeline YAML funzionante, azure-pipelines.yml, nel repository pronto per la personalizzazione.

Personalizzare la pipeline

Per apportare modifiche alla pipeline, selezionare Modifica nella pagina della pipeline. Le sezioni seguenti descrivono alcuni modi comuni per personalizzare la pipeline Xcode.

Aggiungere attività di firma e provisioning

Un'app Xcode deve essere firmata e di cui è stato effettuato il provisioning per poter essere eseguita in un dispositivo o pubblicarla nell'App Store. Il processo di firma e provisioning deve accedere al certificato di firma P12 e a uno o più profili di provisioning. Per altre informazioni, vedere Firmare l'app per dispositivi mobili.

Per rendere il certificato e il profilo disponibili per Xcode durante una compilazione, aggiungere le attività Installa certificato Apple e Installa profilo di provisioning Apple alla pipeline.

Usare una variabile di ambiente Carthage

Se il progetto usa Carthage con un repository carthage privato, è possibile configurare l'autenticazione usando una variabile di ambiente denominata GITHUB_ACCESS_TOKEN con un valore di token che ha accesso al repository. Carthage rileva e usa automaticamente questa variabile di ambiente.

Non aggiungere il token segreto direttamente alla pipeline YAML. Selezionare invece Variabili nella pagina della pipeline per aprire il riquadro Variabili e creare una variabile per questo token. Assicurarsi di abilitare l'icona di blocco per crittografare il valore della variabile. Per altre informazioni, vedere Impostare le variabili segrete.

Il codice della pipeline seguente usa una variabile segreta denominata myGitHubAccessToken per il valore della GITHUB_ACCESS_TOKEN variabile di ambiente.

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

Testare nei dispositivi ospitati in Azure

Per testare l'app in un lab ospitato di dispositivi iOS in Visual Studio App Center, aggiungere l'attività Test di App Center alla pipeline.

Questa attività richiede un account di valutazione gratuito di App Center , che deve essere convertito in a pagamento dopo 30 giorni per continuare a usare il lab di test. Iscriversi per ottenere un account App Center prima di usare questa attività.

L'esempio seguente esegue un gruppo di test di App Center. L'attività usa una connessione al servizio che è necessario configurare.

Per la sintassi completa delle attività e informazioni di riferimento, vedere Attività test di App Center. Per altre informazioni, vedere Uso di Azure DevOps per il test dell'interfaccia utente.

- 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'

Mantenere gli artefatti con il record di compilazione

Per archiviare il file ipA (AppStore Package) iOS con il record di compilazione o il test e distribuirlo nelle pipeline successive, aggiungere le attività Copia file e Pubblica artefatti di compilazione alla pipeline. Per altre informazioni, vedere Pubblicare e scaricare gli artefatti della pipeline.

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

Distribuire in App Center

Per distribuire un'app a un gruppo di tester o utenti beta o promuovere l'app in Intune o in Apple App Store, aggiungere l'attività Distribuzione app Center. L'attività richiede un account App Center gratuito che rimane gratuito.

L'esempio seguente distribuisce un'app agli utenti. Per informazioni di riferimento e sintassi completa delle attività, vedere App Center Distribute. Per altre informazioni, vedere Distribuire build di Azure DevOps con 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'

Installare l'estensione Apple App Store e distribuirla in Apple App Store

Per automatizzare l'interazione con Apple App Store, installare l'estensione Apple App Store e quindi usare le attività seguenti nella pipeline. Per impostazione predefinita, queste attività eseguono l'autenticazione ad Apple usando una connessione al servizio che è necessario configurare.

Per automatizzare il rilascio degli aggiornamenti alle app beta iOS TestFlight esistenti o alle app di produzione nell'App Store, aggiungere l'attività Versione dell'App Store.

Esistono limitazioni per l'uso di questa attività con l'autenticazione a due fattori di Apple. L'autenticazione Apple è specifica dell'area e i token di sessione fastlane scadono rapidamente e devono essere ricreati e riconfigurati.

- 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

Per automatizzare la promozione di un'app inviata in precedenza da iTunes Connect all'App Store, aggiungere l'attività Promuovere l'App Store.

- 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