Я думаю, что наиболее гибкий способ заключается в том, что вы должны сами взять управление основным окном вместо раскадровки.
Когда приложение завершит запуск, вы можете показывать главное окно или нет в соответствии с политикой приложения какниже:
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имеет возможность не показывать пользовательский интерфейс.