🚀

Xamarin iOSアプリをAzure PipelinesでビルドしてAppCenterに送信する(配布編)

2020/12/20に公開

はじめに

Azure Pipelines 使っていますか? 昨今は GitHub Actions に後塵を拝している感が否めませんが、マルチステージを利用した承認機能など、実は結構便利に利用できます。今回は Xamarin.Forms で実装した iOS アプリをビルドするための Azure Pipelines を組んでみます。またビルド結果を AppCenter へ送信し、テスト配布も行います。

全体を一本の記事にするととても長くなってしまうためビルドとテスト配布の2つに分割しました。本記事は後編の配布編です。

<span style="font-size: 80%;">ノンビリと書いていたら GitHub Actions にも承認処理が来てしまったような気がしますが、気にしたら負けです。</span>

環境

  • Visual Studio 2019 (16.8)
  • Xamarin iOS 14.4
  • mono 6.12
  • XCode 12.2

今回試したものはこちらに置いてあります。

https://github.com/noxi515/pipeline-sample-xamarin-ios

ビルドYAML全体

前編の記事でビルドした Xamarin iOS アプリを AppCenter へ送信する Pipeline YAML は全体でこのようになります。実際にはビルドと配布のマルチステージ構成となっていますので、 GitHub 上の YAML をご参照下さい。

variables:
  AppCenterAppSlug: 'AppCenterの識別名 "チーム名/アプリ名" '

pool:
  vmImage: 'ubuntu-latest' # 何でも良い

steps:

  # Pipeline Artifacts をダウンロード
  - download: current

  # AppCenter へビルドしたアプリを配信
  - task: AppCenterDistribute@3
    displayName: 'Distribute to AppCenter'
    inputs:
      serverEndpoint: 'AppCenterConnection'
      appSlug: '$(AppCenterAppSlug)'
      appFile: '$(Pipeline.Workspace)/drop/SampleApp.iOS.ipa'
      releaseNotesOption: 'input'
      releaseNotesInput: '$(Build.SourceVersionMessage)'
      destinationType: 'groups'
      isSilent: false

Azure Pipeline Tasks

download

downloadDownload Pipeline Artifact タスクのショートカットです。ドキュメントに記載の通りこのショートカットを使用すると $(Pipeline.Workspace)/ に Pipeline Artifacts がダウンロードされます。デプロイ系のジョブであれば自動で Pipeline Artifacts を持ってきてくれる気がしますが普通のジョブでは手動の点、注意が必要です。

https://docs.microsoft.com/ja-jp/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#download

AppCenterDistribute@3

ビルドで生成された *.ipa ファイルを AppCenter で配布するために AppCenter へと送信するタスクです。このタスクを使用するには AppCenter から取得したトークンを元に ServiceConnection を作成することが必須となります。また AppCenter のアプリ登録を {userName}/{appName} の形式で appSlug に設定します。先行タスクで Pipeline Artifacts から ipa ファイルをダウンロードしているので、 appFile にはダウンロードしたファイルのパスを指定します。
そしてちょっと面倒臭いことに AppCenter に登録するリリースノート情報が必須です。リリースノートの指定は releaseNotesOptionreleaseNotesInput または releaseNotesFile を使用します。サンプルではビルド対象のコミットのコミットメッセージが格納されている Azure Pipelines の Build.SourceVersionMessage 環境変数を固定で指定しています。

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/app-center-distribute?view=azure-devops

task: AppCenterDistribute@3
inputs:
  serverEndpoint: 'AppCenterConnection'
  appSlug: '$(AppCenterAppSlug)'
  appFile: '$(Pipeline.Workspace)/drop/SampleApp.iOS.ipa'
  releaseNotesOption: 'input'
  releaseNotesInput: '$(Build.SourceVersionMessage)'
  destinationType: 'groups'
  isSilent: false

AppCenter ServiceConnection

続いて AppCenter へ送信するために必要な ServiceConnection の登録方法です。まずはプロジェクトの設定画面から ServiceConnection を選択して新規作成を行います。種別は Visual Studio App Center を選択します。選択した後の設定値は表を参考にして下さい。

設定名 設定値
Server URL (元の値から変更しない)
API Token AppCenter の設定画面から FullAccess スコープで出力したトークンキー
Service connection name AppCenterDistribute タスクの serverEndpoint に指定する名前
Description お好みで

Discussion