##Problem
Xamarin.Android, Xamarin.iOSの話ばかりでXamarin.Macの話題がなかなか出ません。
ということでMvvmCrossを使ってXamarin.Macアプリ開発をする準備の準備です。これでようやくスタートラインに立てます。
3.1.1時点のNuSpecではXamarin.MacプロジェクトにMvvmCrossを追加すると・・・
これではもうどうしようもありません。ちなみにMonoMacプロジェクトでも同様です。現在NuSpecにMonoMac, XamMacの記述はありません。
##Build
ビルドしましょう。リポジトリを下記GitHubからクローンします。
https://github.com/MvvmCross/MvvmCross
開くのはMvvmCross_Mac.sln
です。
FirstDemo,ApiExamplesプロジェクトについてXamarin.Macに移行するか確認されます。インストールされていれば,Migrateしておきましょう。
###初期状態でビルドできるもの
Cirrious.CrossCore
Cirrious.MvvmCross
Cirrious.MvvmCross.Binding
Cirrious.MvvmCross.Localization
Cirrious.MvvmCross.Mac
System.Windows.Mac
###MSBuildエンジンではビルドできないもの
Use MSBuild build engineのチェックボックスをオフにします。
Cirrious.CrossCore.Mac
Cirrious.MvvmCross.Binding.Mac
##Try
ではApiExamples.Macプロジェクトをビルド,実行してみましょう。
事前にApiExamples.MacプロジェクトのTarget FrameworkをMono/.NET 4.5に変更しておいてください。すると・・・
AppDelegate.cs(37,37): Error CS0012: The type `MonoMac.AppKit.NSApplicationDelegate' is defined in an assembly that is not referenced. Consider adding a reference to assembly `MonoMac, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' (CS0012) (ApiExamples.Mac)
そうです。Xamarin.MacではMonoMacネームスペースをXamMac.dllで提供していますが,MvvmCrossライブラリが参照しているのはGPLのほうのMonoMacです。
##Solution
MonoMacではMonoランタイム同梱ができないし,ライセンス的にも商用では大変困ります。
MonoMacを参照しているプロジェクト全てに対し,MonoMacからXamMac.dllへ参照を変更します。XamMac.dllは適当なXamarin.Macプロジェクトをビルドすれば配置されるのでこれを使うことにします。
こんな具合に下記の3プロジェクトを書き換えてください。コピー&ペーストが使えます。
Cirrious.CrossCore.Mac
Cirrious.MvvmCross.Binding.Mac
Cirrious.MvvmCross.Mac
では再度ApiExamples.Macをビルド,実行しましょう。
できました。しかしこのままではリリースビルドできません。
Don't Link,またはLink Framework SDKs Onlyに変更してください。
できあがったDllを参照すれば自分のプロジェクトでMvvmCrossを使えるようになります。
##Conclusion
Xamarin.Macが大好きです。
MvvmCross 3.1.2ではNuSpec変更の予定もあるようなので,しばらく待てばこの状況は解消されるはずです。きっと。