Visual Studio for Mac で Uno Platform テンプレートが起動出来ない

2021.07.17

いわさです。

先日から Uno Platform を触り始めました。

Uno PlatformはWindowsだけでなく、macOS上でも開発を行うことが出来ます。
macOS上で開発する際は主に Visual Studio for Mac を使います。

しかし、Visual Studio for Mac から起動しようとしたのですがエラーが発生しました。
本日は、どういうエラーが起きたのかとどう対策したのかを記しておきます。

ソリューションの作成に失敗 or 開いてもエラーになる

導入手順にしたがって、Uno Platform テンプレートはインストール済みです。
また、以下の必要コンポーネントもインストール済みです。

  • Visual Studio for Mac 8.8
  • Xcode 10.0 or higher
  • An Apple ID
  • .NET Core SDK
    • .NET Core 3.1 SDK (version 3.1.8 (SDK 3.1.402) or later)
    • .NET Core 5.0 SDK (version 5.0 (SDK 5.0.100) or later)
  • GTK+3 for running the Skia/GTK projects

セットアップは完了しているため、新規プロジェクト作成時のテンプレート選択画面に Uno Platform のロゴのCross-Platform Appというテンプレートが選択可能になっています。
こちらを使ってプロジェクトを作成してみましょう。

プロジェクトを作成できませんでした。
Exception has been thrown by the target of an invocation.

エラーダイアログが表示され、プロジェクトの作成はキャンセルされました。
どうしたものかと思っていたのですが、Uno PlatformはCLIからもプロジェクトの新規作成が可能です。
CLIからの作成も失敗するのでしょうか。試してみましょう。

dotnet new unoapp -o MyApp

コマンドからのプロジェクト作成は成功しました。

生成されたソリューションファイルを開いてみましょう。

プロジェクトのロード中に、またエラーダイアログが表示されてしまいました。

プロジェクト '/Users/iwasa.takahito/work/MyApp/MyApp.macOS.csproj'を読み込もうとしているときにエラーが発生しました: The type initializer for 'MonoDevelop.MonoMac.XamMac2ProjectFlavor' threw an exception.

しかし、先程より詳細なエラーが表示されました。
macOS.csprojの読み込み中にエラーが発生していることがわかりました。

原因は Xamarin.mac SDK だった

セットアップ手順の要求コンポーネントには Visual Studio for Mac とまでの記載でしたが、macOS用のXamarin SDKをインストールする必要がありました。

Xamarin SDKのセットアップには Visual Studio for Mac のインストーラーが必要です。
以下から、Visual Studio for Macのインストーラーをダウンロードして実行しましょう。

やはりmacOS (Cocoa)がインストールされていませんでした。

こちらをインストール後にプロジェクトを再度、新規作成してみましょう。

今度はエラーダイアログが表示されずに起動することが出来ました!

NuGetパッケージの復元エラー

起動はできたのですが、NuGetパッケージの復元エラーが発生していました。

原因としてはWPFプロジェクトが影響しているようです。
以下のように公式ドキュメントでもWPFプロジェクトを除外するよう指示があります。
なのでWPFプロジェクトをアンロードしましょう。

If you did not get presented a list of options to create the project, as of Visual Studio for Mac 8.8, the Uno Platform template contains WPF projects that prevent NuGet restore to work properly. To fix this:

  • Select the MyProject.Skia.Wpf and MyProject.Skia.Wpf.Host
  • Right click to remove them from the solution.
  • At the top of the tree, on the solution node, right click and select Restore Nuget Packages

アンロード後、ソリューションからNuGetパッケージの復元操作を行ってください。

今度はエラーなく、復元に成功しました。

起動してみる

最後にmacOSアプリで起動してみましょう。

ターゲットプロジェクトで*.macOSを選択し、実行ボタンを押します。

無事、動作させることが出来ました。

まとめ

  • Visual Studio for Mac の Xamarin SDKコンポーネントもインストールされているか確認
  • IDEから確認できない場合は、CLIからの確認もしてみる
  • WPFプロジェクトは除外する

Windows版の Visual Studio は不足コンポーネントの自動インストールなどをしてくれましたが、Visual Studio for Mac ではそういった機能はないようでした。不足コンポーネントがないか十分な確認が必要です。

参考