概要
Azure PipelinesでCI対応して定期ビルドしている環境でvmImageをlatest
指定するのではなく、特定のバージョンで固定している場合、定期的にvmImageの最新情報を知りたいときどうしたらいいのか少し迷いまして。
今回は、XamarinでiOSおよびAndroidをmacOSのvmImageを使ってアプリビルドしている環境をフォーカスしてまとめていきます。
Can't resolve the reference 'System.Void UIKit.UITabBar::set_ScrollEdgeAppearance
背景としてこのエラーが起きてXamarinのiOSがビルドできなくなり、調査して解消できた詳細のまとめでもあります。
"/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されてるもののその後にまだエラー起きてると書き込んでいる人もいるので、とりあえず作業してみることに。
vmImages
公式のMicrosoft がホストする Azure Pipelines - Azure Pipelines のソフトウェアの表に指定できるvmImageについてまとめられている。ただし、ここに記載されている情報は最低限のものなので、”含まれるソフトウェア”の列にあるリンク先で最新情報が把握できる。
現在2022/03/08時点では、actions/virtual-environments/tree/main/images/macosを確認してもmacOSで指定できる最新バージョンは 11.6 ことが確認できた。
select-xamarin-sdk.sh
上記、公式ドキュメントの”MacOS で Xamarin SDK のバージョンを設定する”で解説されている内容でAzure PipelinesのYAMLからvmImage内のXamarinのバージョンを指定できることがわかる。
開発中のXamarinのバージョンを確認するには次のように詳細を確認できる。
Xamarinプロジェクト内でXamarinのバージョンを指定する設定が見当たらないので諸々注意が必要。
そしてvmImage内でどんなバージョンを指定できるのか先ほどのmacos-11-Readme.md
のXamarinを確認するとXamarin bundles
に表があるので確認する。
※スクショは、現在2022/03/08時点の内容なので必ず本家を確認すること。
Xcode
Xamarin同様にXcodeのバージョンも指定できるので最新がどのバージョンなのかを確認する。
※スクショは、現在2022/03/08時点の内容なので必ず本家を確認すること。
azure-pipelines.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