パイプラインを使用して Xamarin アプリをビルドしてデプロイする

Azure DevOps Services

パイプラインを使用して Xamarin アプリをデプロイすることで、Xamarin とAzure Pipelinesを概要します。 AndroidアプリとiOS アプリは、同じパイプラインまたは個別のパイプラインにデプロイできます。

前提条件

次の項目があります。

コードを取得する

GitHubで次のリポジトリをフォークします。

https://github.com/MicrosoftDocs/pipelines-xamarin

このサンプルは FirstApp 、リポジトリの https://github.com/xamarin/xamarin-forms-samples サンプルです。 Xamarin の概要の詳細については、「 最初の Xamarin.Forms アプリをビルドする」を参照してください

Azure Pipelines にサインインする

Azure Pipelinesにサインインします。 サインインすると、ブラウザーが https://dev.azure.com/my-organization-name に移動し、Azure DevOps ダッシュボーが表示されます。

選択した組織内で、"プロジェクト" を作成します。 組織にプロジェクトがない場合、 [プロジェクトを作成して開始します] 画面が表示されます。 それ以外の場合は、ダッシュボードの右上隅にある [新しいProject] ボタンを選択します。

パイプラインを作成する

  1. Azure DevOps組織にサインインし、プロジェクトに移動します。

  2. パイプラインに移動し、[新しいパイプライン] を選択します。

  3. 最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。

  4. サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。

  5. リポジトリの一覧が表示されたら、目的のリポジトリを選択します。

  6. Azure Pipelines アプリをインストールするために、GitHub にリダイレクトされる場合があります。 その場合は、[承認してインストール] を選択します。

  1. [構成] タブで、Xamarin.Android を選択してAndroid プロジェクトをビルドするか、Xamarin.iOS を選択してiOS プロジェクトをビルドします。 含まれているサンプル .yml ファイルを使用する場合は、[既存のAzure Pipelines YAML ファイル] を選択し、含まれているサンプル パイプライン (Android、iOS、または両方をビルドする結合パイプライン) のいずれかを選択します。

  2. 新しいパイプラインが表示されたら、YAML を見て、それが何をするのかを確認します。 準備ができたら、[保存および実行] を選択します。

    Save and run button in a new YAML pipeline

  3. 新しい YAML ファイルを作成した場合は、新しい azure-pipelines.yml ファイルをリポジトリにコミットします。 メッセージに問題がなければ、[ 保存] を選択してもう一度実行します。

    パイプラインの動作を監視する場合は、ビルド ジョブを選択します。 これで、リポジトリに作業 YAML パイプライン (azure-pipelines.yml) が作成され、カスタマイズする準備が整いました。

  4. パイプラインを変更する準備ができたら、Pipelines ページでパイプラインを選択し、ファイルを編集しますazure-pipelines.yml

パイプラインをカスタマイズする一般的な方法の一部については、こちらを参照してください。

Xamarin ツールを設定する

Azure Pipelinesを使用すると、独自のインフラストラクチャを設定せずに Xamarin アプリを構築できます。 Xamarin ツールは、Azure Pipelinesの Microsoft でホストされているエージェントにプレインストールされます。 macOSまたはWindows エージェントを使用して Xamarin.Android ビルドを実行し、エージェントをmacOSして Xamarin.iOS ビルドを実行できます。 セルフホステッド エージェントを使用している場合は、次のいずれかのツールをインストールします。

  • Windows エージェントのVisual Studio Tools for Xamarin
  • macOS エージェントのVisual Studio for Mac

プレインストールされている Xamarin の正確なバージョンについては、 Microsoft でホストされているエージェントを参照してください。

リポジトリのルートに azure-pipelines.yml という名前のファイルを作成します。 次に、次のスニペットを azure-pipelines.yml ファイルに追加して、適切なエージェント プールを選択します。

# https://docs.microsoft.com/azure/devops/pipelines/ecosystems/xamarin
pool:
  vmImage: 'macOS-10.15' # For Windows, use 'windows-2019'

Xamarin をビルドします。Android アプリ

Xamarin をビルドします。アプリAndroid、次のスニペットをファイルに追加しますazure-pipelines.yml。 プロジェクトの構成に合わせて値を変更します。 オプションの詳細については、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'

Xamarin に署名します。Android アプリ

アプリへの署名の詳細については、「CI 中にモバイル Android アプリに署名する」を参照してください。

Xamarin をビルドします。iOS アプリ

Xamarin をビルドします。アプリiOS、次のスニペットをファイルに追加しますazure-pipelines.yml。 プロジェクトの構成に合わせて値を変更します。 オプションの詳細については、Xamarin.iOS タスクを参照してください。

variables:
  buildConfiguration: 'Release'

steps:
- task: XamariniOS@2
  inputs:
    solutionFile: '**/*iOS.csproj'
    configuration: '$(buildConfiguration)'
    packageApp: false
    buildForSimulator: true

Xamarin に署名してプロビジョニングします。iOS アプリ - PackageApp オプション

署名済みおよびプロビジョニング済みの Xamarin を生成します。iOSアプリの .ipa パッケージに設定packageAppしますtrue。 ジョブを実行しているエージェントに、アプリ バンドル ID と一致する適切な Apple プロビジョニング プロファイルと Apple 証明書が既にインストールされていることを確認します。

これらの必須の要件を満たすには、Microsoft 提供のタスクを使用して 、Apple Provisioning Profile をインストール し、 Apple 証明書をインストールします

- task: XamariniOS@2
    inputs:
      solutionFile: '**/*iOS.csproj'
      configuration: 'AppStore'
      packageApp: true

ヒント

Xamarin。ビルド タスクiOS、ジョブを実行しているエージェントに適切なプロビジョニング プロファイルと Apple 証明書がインストールされている場合にのみ、.ipa パッケージが生成されます。 packageApp オプションを有効にし、エージェントに適切な Apple プロビジョニング プロファイル (.mobileprovision) と apple certificate(.p12) がない場合、ビルドは成功する可能性がありますが、.ipa は生成されません。

Microsoft ホスト型エージェントの場合、.ipa パッケージは既定で次のパスの下にあります。
{iOS.csproj root}/bin/{Configuration}/{iPhone/iPhoneSimulator}/

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"

次の使用例は、Build Artifact Staging Directory で .ipa を検索します。 各ビルド実行に成果物としてAzure DevOpsにプッシュする準備が整いました。 これをAzure DevOpsにプッシュするには、パイプラインの末尾に成果物の発行タスクを追加します。

iOS アプリの署名とプロビジョニングの詳細については、「CI 中にモバイル iOS アプリに署名する」を参照してください。

macOSで Xamarin SDK のバージョンを設定する

Microsoft でホストされているmacOS エージェント プールで使用する特定の Xamarin SDK バージョンを設定するには、ファイル内のタスクの前に次のXamariniOSスニペットを追加しますazure-pipelines.yml。 バージョン番号を適切に書式設定する方法の詳細 (下の 5_4_1) については、「Hosted macOS エージェントでツールのバージョンを手動で選択する方法」を参照してください。

- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_4_1
  displayName: 'Select Xamarin SDK version'

Xamarin をビルドします。Androidと Xamarin。1 つのパイプラインでアプリをiOSする

Xamarin をビルドしてテストできます。Android アプリ、Xamarin。iOSアプリと、同じパイプライン内の関連アプリで複数のジョブazure-pipelines.ymlを定義します。 これらのジョブは、時間を節約するために並列で実行できます。 次の完全な例では、Xamarin をビルドします。Windows上のアプリをAndroidし、macOS上の Xamarin.iOS アプリで 2 つのジョブを使用します。

# 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

リソースをクリーンアップする

サンプル コードが必要ない場合は、GitHub リポジトリを削除し、プロジェクトをAzure Pipelinesします。

次の手順