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:

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

  1. Accedere all'organizzazione Azure DevOps e passare al progetto.

  2. Passare a Pipelines e quindi selezionare Nuova pipeline.

  3. Eseguire i passaggi della procedura guidata selezionando prima GitHub come percorso del codice sorgente.

  4. Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.

  5. Quando viene visualizzato l'elenco dei repository, selezionare il repository.

  6. Per installare l'app Azure Pipelines, è possibile che si venga reindirizzati a GitHub. In tal caso, selezionare Approva & installazione.

  1. 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 .yml inclusi, scegliere Esistente Azure Pipelines file YAML e scegliere tra una delle pipeline di esempio incluse (Android, iOS o una pipeline combinata che compila entrambi).

  2. Quando viene visualizzata la nuova pipeline, vedere YAML per vedere cosa fa. Quando si è pronti, selezionare Salva ed esegui.

    Save and run button in a new YAML pipeline

  3. 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.

  4. Quando si è pronti per apportare modifiche alla pipeline, selezionarla nella pagina Pipelines e quindi Modificare il azure-pipelines.yml file.

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:

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.

Passaggi successivi