Xamarin.MacでResource Bundleを利用する
2017年12月21日 (木) 01:32時点におけるimported>Administratorによる版 (Administrator がページ「Xamarin.Mac/Resource Bundleを利用する」を「Xamarin.MacでResource Bundleを利用する」に移動しました)
Xamarin.Macのプロジェクト直下のResourcesフォルダに画像などの各種ファイルを突っ込んでおくとアプリの一部として配布することができる。
パスの取得
いわゆるアイコンとしてみ見えるMacのアプリは拡張子が「.app」のフォルダであり、その中に本当の実行ファイルやリソースなどが詰め込まれている。 プラットフォームによってはリソースファイルといえばひとつのバイナリに固められて専用APIで取り出したりするが、Mac OSXの場合は単純に「○○○.app/Contents/Resources/」(○○○はアプリ)の中にファイルなどとして格納されている。
アプリのルートディレクトリはNSBundle.MainBundle.BundlePathプロパティで取得できるので、あとは決め打ちえ「Contents」と「Resources」を付け加えてやればよい。なお、ディレクトリセパレータはWindowsではバックスラッシュだがMacではスラッシュなので、そこら辺はSystem.IO.Path.Combineメソッドに任せておいた方が無難だと思われる。
using System.IO;
using Foundation;
// 中略
var path = Path.Combine(NSBundle.MainBundle.BundlePath, "Contents", "Resources");
var file = "images-blue.png";
var image = new NSImage(Path.Combine(path,file));