Xamarin.MacでDockアイコンを非表示にする
Mac OS Xのシステムステータスバー(Windowsでいうタスクトレイ)にアイコンを表示する、いわゆる常駐アプリケーションではドック(Windowsでいうタスクバー)のアイコンは非表示にしたい。
目次
実装1
プリファレンスファイルで設定する[1]。
- info.plistファイルを開く
- 下部にあるタブで「ソース」を選ぶ
- Add new entryをクリックして以下の一行をする
- プロパティに「LSUIElement」(Application is agentと表示される)
- 型に「Boolean」
- 値に「Yes」
実装2: 動的に制御する
info.plistでドックアイコンを非表示にする方法では常に非表示になってしまい使いにくい場面も多い。 ソースコードで動的に制御できると捗る。
NSApplicationインスタンスのActivationPolicyプロパティに、「Accessory」または「Prohibited」を設定するとドックアイコンが非表示になり、「Regular」を設定するとドックアイコンが表示になる。
public partial class AppDelegate : NSApplicationDelegate
{
// 〜〜〜中略〜〜〜
public override void DidFinishLaunching(NSNotification notification)
{
var app = NSApplication.SharedApplication;
app.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
}
}
上記の例ではAppDelegateのDidFinishLaunchingメソッドでドックアイコンを消しているがこれに限らず、たとえばNSApplicationのインスタンスを生成しているMainメソッドでいきなり叩いても動くようだ。
static class MainClass
{
static void Main(string[] args)
{
NSApplication.Init();
var application = NSApplication.SharedApplication;
application.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
application.Delegate = new AppDelegate();
application.Run();
}
}
その他
Xamarin.MacではHIServices.frameworkが使えないのでソースコードレベルで動的に制御することはできない[2]。