パイプラインを使用して Xamarin アプリをビルドしてデプロイする
Azure DevOps Services
パイプラインを使用して Xamarin アプリをデプロイすることで、Xamarin とAzure Pipelinesを概要します。 AndroidアプリとiOS アプリは、同じパイプラインまたは個別のパイプラインにデプロイできます。
前提条件
次の項目があります。
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- アクティブなAzure DevOps組織。 Azure Pipelinesにサインアップします。
コードを取得する
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] ボタンを選択します。
パイプラインを作成する
Azure DevOps組織にサインインし、プロジェクトに移動します。
パイプラインに移動し、[新しいパイプライン] を選択します。
最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。
サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。
リポジトリの一覧が表示されたら、目的のリポジトリを選択します。
Azure Pipelines アプリをインストールするために、GitHub にリダイレクトされる場合があります。 その場合は、[承認してインストール] を選択します。
[構成] タブで、Xamarin.Android を選択してAndroid プロジェクトをビルドするか、Xamarin.iOS を選択してiOS プロジェクトをビルドします。 含まれているサンプル
.ymlファイルを使用する場合は、[既存のAzure Pipelines YAML ファイル] を選択し、含まれているサンプル パイプライン (Android、iOS、または両方をビルドする結合パイプライン) のいずれかを選択します。新しいパイプラインが表示されたら、YAML を見て、それが何をするのかを確認します。 準備ができたら、[保存および実行] を選択します。

新しい YAML ファイルを作成した場合は、新しい azure-pipelines.yml ファイルをリポジトリにコミットします。 メッセージに問題がなければ、[ 保存] を選択してもう一度実行します。
パイプラインの動作を監視する場合は、ビルド ジョブを選択します。 これで、リポジトリに作業 YAML パイプライン (
azure-pipelines.yml) が作成され、カスタマイズする準備が整いました。パイプラインを変更する準備ができたら、Pipelines ページでパイプラインを選択し、ファイルを編集します
azure-pipelines.yml。
パイプラインをカスタマイズする一般的な方法の一部については、こちらを参照してください。
Xamarin ツールを設定する
Azure Pipelinesを使用すると、独自のインフラストラクチャを設定せずに Xamarin アプリを構築できます。 Xamarin ツールは、Azure Pipelinesの Microsoft でホストされているエージェントにプレインストールされます。 macOSまたはWindows エージェントを使用して Xamarin.Android ビルドを実行し、エージェントをmacOSして Xamarin.iOS ビルドを実行できます。 セルフホステッド エージェントを使用している場合は、次のいずれかのツールをインストールします。
プレインストールされている 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します。