Xamarin.Mac/NuGetパッケージを作る
問題点
Xamarin.Mac 1.0のすべて、およびXamarin.Mac 2.0のIndieライセンスでは、Portable Class LibraryとXamarin.Macライブラリしか扱えないという制約がある。 この制約によりNuGet公式サイトで配布されているパッケージは壊滅的に利用できない。 なお、Xamarin.Mac 2.0のBusiness以上では.NET Framework 4.5のライブラリをサポートしているのでこんな面倒なことはする必要がない。
解決策
仕方がないのでXamarin.Macに対応した自前NuGetパッケージを作り直し、自前NuGetサーバーで管理するのが得策だと思われる。 NuGet公式サイトにあるパッケージは100%オープンソースが保証されているのでソースコードを拾ってきてXamarin.Macに対応させるのが手っ取り早い。
なお、自前NuGetサーバーで管理する理由は、Xamarin.MacはXamarin.iOSのようにWindows上のVisual Studioでビルドということができず、またMac上のXamarin StudioではWindows 8.1系など向けのビルドができない。つまりXamarin.MacとWindows 8.1などに両対応したパッケージを作るのが非常に面倒なためである。これらの理由によりGitHubなどでPull Requestしても後々の管理が面倒すぎてXamarin.Mac対応については却下されるのが定番となっている。すると必然的に自前で管理する必要がでてくる。自前での管理もPhp Nuget Server[1]あたりを使えば楽勝である。
Windows PhoneやWindows 8などを考慮しなければ、オリジナルのソースコードをPortable Class LibraryやXamarin.Macライブラリプロジェクトあたりに作り変えてXamarin.Mac, Xamarin.iOS, Xamarin.AndroidあたりのMac上のXamarin Stuidoだけで扱えるかたちにしておくと捗る。
NuGetパッケージの作り方
NuGetパッケージは以下のようなディレクトリ構造となっており、もっとも一致するディレクトリ内のDLL群が参照される。 バージョンはコロンなし。 プロファイルは.NET Framework 4.0で使われた「Full」だの「Client」だのなので省略して構わない。
- lib/{プラットフォーム}{バージョン}-{プロファイル}/hagehage.dll
たとえば.NET Framework 4.5のライブラリであれば以下のようになる。
- lib/net45/hagehage.dll
これをXamarin.Mac 2.0向けにすると以下のようになる。
- lib/Xamarin.Mac20/hagehage.dll
つまり「lib/Xamarin.Mac20」の中にDLLが放り込まれていればよいだけである。