Compilare e distribuire app Xamarin con una pipeline
Azure DevOps Services
Attività iniziali con Xamarin e Azure Pipelines usando una pipeline per distribuire un'app Xamarin. È possibile distribuire app Android e iOS nella stessa pipeline o separate.
Prerequisiti
Sono disponibili gli elementi seguenti:
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un'organizzazione attiva Azure DevOps. Iscriversi per Azure Pipelines.
Ottenere il codice
Eseguire il fork del repository seguente in GitHub:
https://github.com/MicrosoftDocs/pipelines-xamarin
Questo esempio è l'esempio FirstApp del https://github.com/xamarin/xamarin-forms-samples repository. Per altre informazioni su come iniziare a usare Xamarin, vedere Compilare la prima app Xamarin.Forms.
Accedere a Azure Pipelines
Accedere a Azure Pipelines. Dopo aver eseguito l'accesso, il browser passa e https://dev.azure.com/my-organization-name visualizza il dashboard di Azure DevOps.
All'interno dell'organizzazione selezionata creare un progetto. Se non si hanno progetti nell'organizzazione, viene visualizzato un progetto Crea per iniziare . In caso contrario, selezionare il pulsante Nuovo Project nell'angolo in alto a destra del dashboard.
Creare la pipeline
Accedere all'organizzazione Azure DevOps e passare al progetto.
Passare a Pipelines e quindi selezionare Nuova pipeline.
Eseguire i passaggi della procedura guidata selezionando prima GitHub come percorso del codice sorgente.
Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.
Quando viene visualizzato l'elenco dei repository, selezionare il repository.
Per installare l'app Azure Pipelines, è possibile che si venga reindirizzati a GitHub. In tal caso, selezionare Approva & installazione.
Nella scheda Configura selezionare Xamarin.Android per compilare un progetto Android o Xamarin.iOS per compilare un progetto iOS. Se si desidera usare i file di esempio
.ymlinclusi, scegliere Esistente Azure Pipelines file YAML e scegliere tra una delle pipeline di esempio incluse (Android, iOS o una pipeline combinata che compila entrambi).Quando viene visualizzata la nuova pipeline, vedere YAML per vedere cosa fa. Quando si è pronti, selezionare Salva ed esegui.

Se è stato creato un nuovo file YAML, eseguire il commit di un nuovo file azure-pipelines.yml nel repository. Dopo aver soddisfatto il messaggio, selezionare Salva ed esegui di nuovo.
Se si vuole controllare la pipeline in azione, selezionare il processo di compilazione. È ora disponibile una pipeline YAML funzionante (
azure-pipelines.yml) nel repository pronto per personalizzare.Quando si è pronti per apportare modifiche alla pipeline, selezionarla nella pagina Pipelines e quindi Modificare il
azure-pipelines.ymlfile.
Per altre informazioni, vedere alcuni dei modi più comuni per personalizzare la pipeline.
Configurare gli strumenti Xamarin
È possibile usare Azure Pipelines per creare app Xamarin senza configurare l'infrastruttura personalizzata. Gli strumenti Xamarin sono preinstallati negli agenti ospitati da Microsoft in Azure Pipelines. È possibile usare macOS o Windows agenti per eseguire build Xamarin.Android e macOS agenti per eseguire build Xamarin.iOS. Se si usa un agente self-hosted, installare uno degli strumenti seguenti:
- Visual Studio Tools per Xamarin per gli agenti Windows
- Visual Studio per Mac per gli agenti di macOS
Per le versioni esatte di Xamarin preinstallate, fare riferimento agli agenti ospitati da Microsoft.
Creare un file denominato azure-pipelines.yml nella radice del repository. Aggiungere quindi il frammento di codice seguente al azure-pipelines.yml file per selezionare il pool di agenti appropriato:
# https://docs.microsoft.com/azure/devops/pipelines/ecosystems/xamarin
pool:
vmImage: 'macOS-10.15' # For Windows, use 'windows-2019'
Compilare un Xamarin. app Android
Per compilare un Xamarin. Android'app, aggiungere il frammento di codice seguente al azure-pipelines.yml file. Modificare i valori in base alla configurazione del progetto. Per altre informazioni sulle opzioni, vedere l'attività Xamarin.Android.
variables:
buildConfiguration: 'Release'
outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '**/*.sln'
- task: XamarinAndroid@1
inputs:
projectFile: '**/*Droid*.csproj'
outputDirectory: '$(outputDirectory)'
configuration: '$(buildConfiguration)'
msbuildVersionOption: '16.0'
Firmare un Xamarin. app Android
Per informazioni sulla firma dell'app, vedere Firmare l'app per dispositivi mobili Android durante l'integrazione continua.
Creare un'app Xamarin.iOS
Per compilare un'app Xamarin.iOS, aggiungere il frammento di codice seguente al azure-pipelines.yml file. Modificare i valori in base alla configurazione del progetto. Per altre informazioni sulle opzioni, vedere l'attività Xamarin.iOS .
variables:
buildConfiguration: 'Release'
steps:
- task: XamariniOS@2
inputs:
solutionFile: '**/*iOS.csproj'
configuration: '$(buildConfiguration)'
packageApp: false
buildForSimulator: true
Firmare e effettuare il provisioning di un'app Xamarin.iOS - Opzione PackageApp
Per generare un pacchetto Xamarin.iOS app .ipaS firmato e con provisioning, impostare su packageApptrue. Assicurarsi di aver già installato il profilo di provisioning Apple e i certificati Apple che corrispondono all'ID bundle dell'app nell'agente che esegue il processo.
Per soddisfare questi requisiti obbligatori, usare le attività Microsoft Fornite per installare un profilo di provisioning Apple e installare i certificati Apple.
- task: XamariniOS@2
inputs:
solutionFile: '**/*iOS.csproj'
configuration: 'AppStore'
packageApp: true
Suggerimento
L'attività di compilazione Xamarin.iOS genera solo un pacchetto con estensione ipa se l'agente che esegue il processo ha il profilo di provisioning appropriato e il certificato Apple installato. Se si abilita l'opzione packageApp e l'agente non ha il profilo di provisioning apple appropriato(.mobileprovision) e il certificato apple(.p12) la compilazione può avere esito positivo, ma l'ipa non viene generato.
Per gli agenti ospitati da Microsoft, il pacchetto ipa è per impostazione predefinita situato nel percorso seguente:
{iOS.csproj root}/bin/{Configuration}/{iPhone/iPhoneSimulator}/
È possibile configurare il percorso di output aggiungendo un argomento all'attività Xamarin.iOS:
- task: XamariniOS@2
inputs:
solutionFile: '**/*iOS.csproj'
configuration: 'AppStore'
packageApp: true
args: /p:IpaPackageDir="/Users/vsts/agent/2.153.2/work/1/a"
In questo esempio viene individuato l'ipa nella directory di gestione temporanea dell'artefatto di compilazione. È possibile eseguire il push in Azure DevOps come artefatto per ogni esecuzione di compilazione. Per eseguirne il push in Azure DevOps, aggiungere un'attività Publish Artifact alla fine della pipeline.
Per altre informazioni sulla firma e il provisioning dell'app iOS, vedere Firmare l'app iOS per dispositivi mobili durante l'applicazione CI.
Impostare la versione di Xamarin SDK in macOS
Per impostare una versione specifica di Xamarin SDK da usare nel pool di agenti macOS ospitata da Microsoft, aggiungere il frammento di codice seguente prima dell'attività XamariniOS nel azure-pipelines.yml file. Per informazioni dettagliate sulla formattazione corretta del numero di versione (illustrato come 5_4_1 riportato di seguito), vedere Come è possibile selezionare manualmente le versioni degli strumenti nell'agente hosted macOS?.
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_4_1
displayName: 'Select Xamarin SDK version'
Compilare Xamarin. app Android e Xamarin.iOS con una pipeline
È possibile compilare e testare Xamarin. Android app, app Xamarin.iOS e app correlate nella stessa pipeline definendo più processi in azure-pipelines.yml. Questi processi possono essere eseguiti in parallelo per risparmiare tempo. Nell'esempio completo seguente viene compilato un Xamarin. Android'app in Windows e un'app Xamarin.iOS in macOS, usando due processi.
# Xamarin.Android and Xamarin.iOS
# Build a Xamarin.Android and Xamarin.iOS app.
# Add steps that test, sign, and distribute the app, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/ecosystems/xamarin
jobs:
- job: Android
pool:
vmImage: 'windows-2019'
variables:
buildConfiguration: 'Release'
outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '**/*.sln'
- task: XamarinAndroid@1
inputs:
projectFile: '**/*droid*.csproj'
outputDirectory: '$(outputDirectory)'
configuration: '$(buildConfiguration)'
msbuildVersionOption: '16.0'
- task: AndroidSigning@3
inputs:
apksign: false
zipalign: false
apkFiles: '$(outputDirectory)/*.apk'
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(outputDirectory)'
- job: iOS
pool:
vmImage: 'macOS-10.15'
steps:
# To manually select a Xamarin SDK version on the Hosted macOS agent, enable this script with the SDK version you want to target
# https://go.microsoft.com/fwlink/?linkid=871629
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_4_1
displayName: 'Select Xamarin SDK version'
enabled: false
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '**/*.sln'
- task: XamariniOS@2
inputs:
solutionFile: '**/*.sln'
configuration: 'Release'
buildForSimulator: true
packageApp: false
Pulire le risorse
Se non è necessario il codice di esempio, eliminare il repository di GitHub e Azure Pipelines progetto.