Azure Pipelines で使用する vmImage の種類を確認したいとき

## 概要

Azure PipelinesでCI対応して定期ビルドしている環境でvmImageを`latest`指定するのではなく、特定のバージョンで固定している場合、定期的にvmImageの最新情報を知りたいときどうしたらいいのか少し迷いまして。

今回は、XamarinでiOSおよびAndroidをmacOSのvmImageを使ってアプリビルドしている環境をフォーカスしてまとめていきます。

### Can't resolve the reference 'System.Void UIKit.UITabBar::set_ScrollEdgeAppearance

背景としてこのエラーが起きてXamarinのiOSがビルドできなくなり、調査して解消できた詳細のまとめでもあります。

```shell
"/Users/runner/work/1/s/xxxxxxxxxx.sln" (default target) (1) ->
"/Users/runner/work/1/s/xxxxxxxxxx.iOS/xxxxxxxxxx.iOS.csproj" (default target) (4) ->
(_CompileToNative target) -> 
  MTOUCH : error MT2101: Can't resolve the reference 'System.Void UIKit.UITabBar::set_ScrollEdgeAppearance(UIKit.UITabBarAppearance)', referenced from the method 'System.Void Xamarin.Forms.Platform.iOS.TabbedRenderer::UpdateiOS15TabBarAppearance()' in 'Xamarin.iOS, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065'. [/Users/runner/work/1/s/xxxxxxxxxx.iOS/xxxxxxxxxx.iOS.csproj]

    7 Warning(s)
    1 Error(s)

Time Elapsed 00:02:22.74
##[error]Xamarin.iOS task failed with error Error: The process '/Library/Frameworks/Mono.framework/Versions/Current/Commands/msbuild' failed with exit code 1. For guidance on setting up the build pipeline, see https://go.microsoft.com/fwlink/?LinkId=760847.
```


ググったところXamarin.Formsのissuesにも同じエラーで質問している人がいるもののXamarinをバージョンアップすれば解消できたとあり、Closeされてるもののその後にまだエラー起きてると書き込んでいる人もいるので、とりあえず作業してみることに。

https://github.com/xamarin/Xamarin.Forms/issues/14921

## vmImages

公式の[Microsoft がホストする Azure Pipelines - Azure Pipelines のソフトウェア](https://docs.microsoft.com/ja-jp/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml#software)の表に指定できるvmImageについてまとめられている。ただし、ここに記載されている情報は最低限のものなので、”含まれるソフトウェア”の列にあるリンク先で最新情報が把握できる。

現在2022/03/08時点では、[actions/virtual-environments/tree/main/images/macos](https://github.com/actions/virtual-environments/tree/main/images/macos)を確認してもmacOSで指定できる最新バージョンは 11.6 ことが確認できた。

![スクリーンショット 2022-03-08 18.27.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/b859fe64-c3ca-4241-9dd8-bdf3f25e7574.png)

### select-xamarin-sdk.sh

https://docs.microsoft.com/ja-jp/azure/devops/pipelines/ecosystems/xamarin?view=azure-devops&tabs=yaml#build-a-xamarinios-app

上記、公式ドキュメントの”MacOS で Xamarin SDK のバージョンを設定する”で解説されている内容でAzure PipelinesのYAMLからvmImage内のXamarinのバージョンを指定できることがわかる。

開発中のXamarinのバージョンを確認するには次のように詳細を確認できる。
Xamarinプロジェクト内でXamarinのバージョンを指定する設定が見当たらないので諸々注意が必要。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/3afab629-7dae-7029-3052-b76d34f15e72.png"> <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/aa312261-4f46-cca5-329e-f510f6807c0a.png"> <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/8cf9e06f-0b8a-ec0d-0de6-5549033c6910.png"> <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/b3e6e7a1-74b1-8f05-4a2a-758d9ef8228c.png"> 

そしてvmImage内でどんなバージョンを指定できるのか先ほどの`macos-11-Readme.md`のXamarinを確認すると`Xamarin bundles`に表があるので確認する。
※スクショは、現在2022/03/08時点の内容なので必ず本家を確認すること。

https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md#xamarin

![スクリーンショット 2022-03-09 11.02.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/2233cbc0-4c65-0dc0-2215-52d1b8a63290.png)

### Xcode

Xamarin同様にXcodeのバージョンも指定できるので最新がどのバージョンなのかを確認する。
※スクショは、現在2022/03/08時点の内容なので必ず本家を確認すること。

https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md#xcode

![スクリーンショット 2022-03-09 11.03.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/ad76ab86-f57d-c3f7-9287-045a7109d002.png)

## azure-pipelines.yml

一部抜粋して上記の内容を実際に設定すると以下のようになる。

```yml
  - job: iOS
    pool:
      vmImage: 'macOS-11'

    variables:
      DOTNET_SDK_VERSION: '3.1.415'
      MONO_VERSION: '6_12_13'
      XCODE_ROOT_PATH: '/Applications/Xcode_13.2.1.app'

    steps:
      - task: UseDotNet@2
        inputs:
          packageType: 'sdk'
          version: '$(DOTNET_SDK_VERSION)'

      - script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh $(MONO_VERSION)

      - script: echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'$(XCODE_ROOT_PATH);sudo xcode-select --switch $(XCODE_ROOT_PATH)/Contents/Developer


```