Прежде всего, собственное приложение macOS превращается в приложение вспомогательного типа через 3 секунды после запуска (чтобы сначала отобразить информационный экран, прежде чем приложение войдет в строку системного меню):
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
NSApplication.shared.setActivationPolicy(.accessory)
}
It имеет меню строки состояния, созданное с помощью:
class func createMenu(color: Bool) -> Void {
let statusBar = NSStatusBar.system
self.sharedInstance.storedStatusItem = statusBar.statusItem(withLength: NSStatusItem.variableLength)
self.sharedInstance.storedStatusItem.menu = ABCMenu.statusBarMenu()
}
У пользователя есть несколько опций в меню строки состояния, чтобы открывать различные экраны с элементами управления. Один из них отображается с помощью:
class func showServiceViewController() -> Void {
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: Bundle.main)
guard let vc = storyboard.instantiateController(withIdentifier: "ABCServiceViewController") as? ABCServiceViewController, let checkedWindow = ABCUIManager.sharedInstance.window else {
return
}
checkedWindow.contentViewController = vc
checkedWindow.setIsVisible(true)
checkedWindow.orderFrontRegardless()
}
Проблема в том, что иногда выбранный контроллер представления не переводится в фоновый режим и должен находиться под многими другими уже открытыми приложениями и windows. В большинстве случаев он работает нормально, но не всегда.
Существуют ли более эффективные способы обеспечения того, чтобы новый контроллер представления всегда поднимался до самого высокого уровня и показывался пользователю?
Спасибо за любые предложения.