最も柔軟な方法は、ストーリーボードではなく、メインウィンドウのコントロールを自分で行うことだと思います。
アプリケーションの起動が完了したら、以下のようにアプリケーションポリシーに従ってメインウィンドウを表示するかどうかを指定できます。
switch AppDefaults.shared.applicationRunMode {
case .menuAndDock:
_ = ApplicationMode.toggleDock(show: true)
MainWindowController.shared.window?.makeKeyAndOrderFront(nil)
case .menuOnly:
_ = ApplicationMode.toggleDock(show: false)
_ = MainWindowController.shared.window
default:
MainWindowController.shared.window?.makeKeyAndOrderFront(nil)
}
このtoggleDock
方法が実際に行うことは、アプリケーションの表示方法を変更することです。
// Get transform state.
let transformState = show ?
ProcessApplicationTransformState(kProcessTransformToForegroundApplication)
: ProcessApplicationTransformState(kProcessTransformToUIElementApplication)
// Show / hide dock icon.
var psn = ProcessSerialNumber(highLongOfPSN: 0, lowLongOfPSN: UInt32(kCurrentProcess))
let transformStatus: OSStatus = TransformProcessType(&psn, transformState)
return transformStatus == 0
UIElement
唯一の方法でinfo.plist
、CocoaアプリケーションがUIを非表示にする機能を有効にします。