Swift 如何打开另一个cocoa应用程序窗口

Swift 如何打开另一个cocoa应用程序窗口,swift,macos,cocoa,appdelegate,Swift,Macos,Cocoa,Appdelegate,我开发了一个Mac OS应用程序。在同一捆绑包中有一个主窗口应用程序和一个菜单栏帮助程序应用程序 助手应用程序有一个名为“显示主应用程序”的菜单项。如果在我单击菜单项后未启动主应用程序,则助手应用程序应启动主应用程序。如果主应用程序隐藏在dock中或其主窗口关闭,则助手应用程序应将主应用程序置于前端 我知道如何启动主应用程序。但我不知道如何实现重新激活功能。我使用的代码如下所示 let apps = NSRunningApplication.runningApplications(withBun

我开发了一个Mac OS应用程序。在同一捆绑包中有一个主窗口应用程序和一个菜单栏帮助程序应用程序

助手应用程序有一个名为“显示主应用程序”的菜单项。如果在我单击菜单项后未启动主应用程序,则助手应用程序应启动主应用程序。如果主应用程序隐藏在dock中或其主窗口关闭,则助手应用程序应将主应用程序置于前端

我知道如何启动主应用程序。但我不知道如何实现重新激活功能。我使用的代码如下所示

let apps = NSRunningApplication.runningApplications(withBundleIdentifier: "com.xxx.yyy")
if let mainApp = apps.first {
       mainApp.activate(options: [ .activateIgnoringOtherApps ])
}
当主应用程序刚刚启动并隐藏在dock中时,activate方法似乎什么都不做。我注意到主应用程序实际上已激活,因为主菜单栏已更改为主应用程序的主菜单。但是它的AppDelegate类的“applicationShouldHandleReopen”方法没有被调用。所以主窗口不能在前面订购


如何使其工作?

无论目标应用程序是否启动,只要调用

NSWorkspace.shared().launchApplication("xxxx")

这是有效的。

为什么投反对票却没有评论?还有其他人能在这里澄清吗?当我们否决一些“应该”起作用的东西时,这对社区没有真正的帮助。@Shaunvelson我同意在一些测试之后,如果目标应用程序已经运行,并且有一个窗口挡住了应用程序,那么这并没有使目标应用程序走到前面。我们的解决方案的一部分是将此逻辑挂起,直到移除任何遮挡窗口。我们需要这样做,以便另一个应用程序可以将其自己的面板置于z顺序的顶部(由于其主窗口位于顶部,并且处于“活动”状态)。我们最终解决方案的一部分包括使用
activateIgnoringOtherApps
,您是否做到了这一点?我正在尝试激活dock中的应用程序窗口。