JXUGC #24 春の App Center 祭りに参加してきました。 これまで、VSTS+App CenterでKumalica vNextのビルドと配布(アルファ版・ベータ版)をしようと思って少しずつ触ってはいましたが、 これを機にXamarin.FormsのAndroidアプリとUWPアプリをビルドして配布する方法をしっかりと調べています。
App CenterでのXamarin.FormsなUWPアプリのビルドの問題
実際にApp CenterでXamarin.Formsアプリをビルドして問題になったのが、Xamarin.FormsのUWP部分のビルドです。
まず、OSをAndroid、PlatformをXamarinと指定してアプリを定義すると、Xamarin.Formsのリポジトリを参照させて作成したビルド定義では、Project欄がAndroidのcsprojファイルに設定されて、Androidアプリだけをビルドできます。
{ width=300 }{ target="_blank" } | { width=300 }{ target="_blank" } |
しかし、OSをWindowsと指定すると、PlatformはUWPしか選択できず、Xamarin.Formsのリポジトリを参照させて作成したビルド定義では、Project欄がソリューションファイル(.sln)に設定されます。
{ width=300 }{ target="_blank" } | { width=300 }{ target="_blank" } |
この状態でビルドを実行すると、BUILD OUTPUTに
Project "d:\a\1\s\AppCenterSample.sln" (1) is building "d:\a\1\s\AppCenterSample\AppCenterSample.Android\AppCenterSample.Android.csproj" (2) on node 1 (default targets).
と表示されることからわかるように、UWPアプリだけでなく、Androidアプリもビルドされます。
原因と暫定的な回避策
App CenterのWindows/UWPを指定したアプリで、Xamarin.FormsアプリのAndroid部分もビルドされるのは、 ビルド定義が参照するslnファイルで、ビルド構成がそのように定義されているからです。 つまり、DebugとReleaseの両方で、UWPとAndroidの両方がビルド・配置されるように定義されていることが原因です。
{ width=300 }{ target="_blank" }
根本的には、App CenterでWindows/Xamarinのアプリを定義できて、そしてビルド定義ではUWP部分のcsprojファイルを参照するように改善されるしかないのですが、 暫定的な回避策として、Xamarin.Formsアプリのビルド定義で対応する方法があります。
まず、Visual Studioのメニューから、ビルド>構成マネージャーを選択して、アクティブソリューション構成欄から新規作成を選択します。
{ width=300 }{ target="_blank" } | { width=300 }{ target="_blank" } |
表示された新しいソリューション構成ダイアログで、名前を「Release-UWP」、設定のコピー元を「Release」、新しいプロジェクト構成を作成するにチェックを入れて、OKを押します。さらに、構成マネージャーで、Release-UWPのARM・x86・x64に対して、Androidのビルド・配置のチェックを外します。
{ width=300 }{ target="_blank" } | { width=300 }{ target="_blank" } |
{ width=300 }{ target="_blank" } | { width=300 }{ target="_blank" } |
これをGitリポジトリにプッシュすると、App Centerのビルド定義でRelease-UWPが選択できるようになるので、これでビルドしてみます。
{ width=300 }{ target="_blank" }
BUILD OUTPUTのログをみると、今度はAndroidプロジェクトはビルドされずに、UWPアプリだけがビルドされているはずです。
{ width=300 }{ target="_blank" }
まとめ
この暫定的な回避策は、将来にWindowsのXamarinアプリがサポートされたときに(現状ではOS・Platformの変更ができないので)AnalyticsやCrashesの情報を引き継げない問題があります。しかし、現状では、Xamarin.FormsアプリのUWP部分を適切にビルドするためは、この回避策しかないのかなと思います。もし、他に良い方法があったらご教授ください。