次のスニペットを使用して、アクティブでないプロセスの Dock タイルを非表示にすることができます。
- (void)applicationWillResignActive:(NSNotification *)notification
{
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
if([self.window isVisible])
{
[self.window performSelector:@selector(orderFrontRegardless) withObject:nil afterDelay:0.05];
}
}
- (void)applicationWillBecomeActive:(NSNotification *)notification
{
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
SetFrontProcessWithOptions(&psn, kSetFrontProcessCausedByUser);
}
上記のコードをアプリ デリゲートに追加するだけで、プロセスがアクティブでなくなると、アプリの Dock アイコンが消えます。
プロセスが UIElement アプリケーションになった後もウィンドウを表示したままにするには、orderFrontRegardless
メッセージを送信します。(非常にハックなことは知っていますが、それは非標準のウィンドウ/プロセス処理の代償に違いありません)
おそらく、ユーザーが非表示のウィンドウを選択できるようにする Dock メニューも維持する必要があります。
「メイン」アプリからエントリを動的に追加できます。詳細については、ドック タイル プログラミング ガイドの「アプリケーション デリゲートを使用してメニュー項目を動的に追加する」セクションを参照してください。
更新:
上記のコード サンプルを少し変更しました。これは、以前のアプローチではアプリを再アクティブ化した後にメイン メニューが応答しなくなったためです。