Condividi tramite


Compilare, testare e distribuire app Xcode

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

Questo articolo 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 nuova pipeline o > 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 in cima al 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 può facoltativamente 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.

Compilazione di sviluppo:

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

Compilazione di produzione per App Store:

Per le versioni di produzione, specificare una versione Xcode esplicita, lo schema dell'app e la configurazione 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'

Differenze principali per la produzione:

  • xcodeVersion: specificare una versione fissa ,ad esempio '14', anziché 'default' per le build coerenti e riproducibili.
  • scheme: sostituire la stringa vuota con il nome effettivo dello schema dell'app.
  • sdk: usare 'iphoneos' per le compilazioni dei dispositivi; usare 'iphonesimulator' per le compilazioni del simulatore.
  • configurazione: usare 'Release' per la produzione; usare 'Debug' per lo sviluppo.
  • packageApp: impostare su true per generare un .ipa file per la distribuzione.
  • exportPath: indirizza l'output del pacchetto alla directory di staging della build per la pubblicazione di artefatti.

Salvare ed eseguire la pipeline

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

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

Facoltativamente, modificare il messaggio di 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 vuoi guardare la pipeline in azione, seleziona Job 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 in base alle esigenze specifiche:

  • Firma e provisioning: Obbligatorio per la distribuzione su dispositivi fisici o sull'App Store.
  • Gestione delle dipendenze: Configurare l'autenticazione per i repository privati.
  • Gestione degli artefatti: Archiviare gli output di compilazione per il test e la distribuzione.
  • Distribuzione: Automatizzare la versione in TestFlight o nell'App Store.

Aggiungere attività di firma e provisioning

Per eseguire l'app Xcode in un dispositivo fisico o pubblicarla nell'App Store, è necessario firmare ed effettuare il provisioning dell'app. Questo processo implica l'uso di un certificato di firma P12 (credenziali di sicurezza che verifica l'identità dell'app) e profili di provisioning (che autorizzano l'app per dispositivi o distribuzioni specifici). Per altre informazioni, vedere Firmare la tua app mobile.

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.

Gestire le dipendenze

Il progetto Xcode potrebbe usare i gestori delle dipendenze per gestire librerie e framework di terze parti. Le sezioni seguenti descrivono come configurare l'autenticazione per i repository privati con diversi gestori delle dipendenze.

Swift Package Manager

Swift Package Manager (SPM) è il gestore delle dipendenze nativo di Apple ed è integrato direttamente in Xcode. Per i progetti che usano SPM con pacchetti privati, è necessario configurare l'autenticazione Git.

Se i pacchetti Swift privati sono ospitati in GitHub, configurare l'autenticazione usando una variabile di ambiente denominata GITHUB_ACCESS_TOKEN con un valore di un token di accesso personale che ha accesso al repository.

Non aggiungere il token segreto direttamente alla pipeline YAML, perché questa azione lo espone nel codice sorgente. Per altre informazioni, vedere Impostare le variabili segrete.

Il codice della pipeline seguente usa una variabile privata denominata myGitHubAccessToken per l'autenticazione durante la risoluzione delle dipendenze del pacchetto Swift:

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

Per i pacchetti privati ospitati in Azure Repos o in altri provider Git, configurare le credenziali Git appropriate prima del passaggio di compilazione.

Baccelli di cacao

Se il progetto usa CocoaPods, usare l'attività CocoaPods per installare le dipendenze.

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

Cartagine

Se il progetto usa Carthage (un gestore delle dipendenze per i progetti iOS/macOS) con un repository carthage privato, 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, perché questa azione lo espone nel codice sorgente. 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
  displayName: 'Update Carthage dependencies'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Testare nei dispositivi ospitati in Azure

Visual Studio App Center è stato ritirato il 31 marzo 2025. Informazioni sulle alternative consigliate.

Mantenere gli artefatti con il record di build

Per archiviare il file del pacchetto dell'AppStore (IPA) iOS con il record di compilazione o per testarlo e distribuirlo nelle pipeline successive, aggiungere alla pipeline le attività Copia file e Pubblica artefatti della pipeline.

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

Pubblicare su Apple App Store o TestFlight

Per distribuire un'app ai tester o agli utenti beta, usare TestFlight di Apple o distribuirla direttamente nell'App Store. Vedere la sezione seguente per la distribuzione di Apple App Store.

Per il test beta e il feedback degli utenti, è consigliabile usare:

Installare l'estensione Apple App Store e distribuirla sull'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 esistenti TestFlight iOS o alle app di produzione nell'App Store, aggiungere l'attività App Store Release.

Esistono limitazioni quando si usa questa attività con l'autenticazione a due fattori di Apple. L'autenticazione Apple è specifica dell'area e i token di sessione fastlane (credenziali temporanee usate per l'autenticazione con Apple) scadono rapidamente e devono essere ricreati e riconfigurati periodicamente.

- 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à App Store Promuovere.

- 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