swift 如何从另一个MacOS应用程序中启动MacOS计算器应用程序?[重复]

wpcxdonn  于 2023-03-22  发布在  Swift
关注(0)|答案(1)|浏览(122)

此问题在此处已有答案

Open another Mac app(6个答案)
4天前关闭。
我在Mac应用商店里有一个应用程序。一位客户最近要求我添加一种通过键盘快捷键从应用程序内运行计算器的方法。
我在我的应用程序的App.Swift文件的Commands部分添加了以下代码,以生成Calculator菜单项以及相关的快捷方式,该快捷方式用于启动MacOS Calculator应用程序。

Button("Calculator") {
let calendarTask = Process()
calendarTask.launchPath = "/System/Applications/Calculator.app/Contents/MacOS/Calculator"
calendarTask.launch()
}
.keyboardShortcut("=")

单击计算器菜单项或输入Cmd + =快捷方式将启动macOS计算器应用,但计算器应用在启动时会崩溃。崩溃报告提供以下分析:
损坏的线程:0调度队列:com.apple.main-thread
异常类型:EXC_BREAKPOINT(SIGTRAP)异常代码:0x00000000000001,0x0000000019948c1d0
终止原因:命名空间SIGNAL,代码5跟踪/BPT陷阱:5终止过程:exc处理程序[10604]
选择崩溃报告的Re-Open选项会导致计算器应用程序成功重新启动,但这显然不是首先启动它的正确方法!
将calendarTask.launchPath设置为“/System/Applications/Calculator.app“将导致没有操作;似乎launchPath必须指向目标应用的Unix可执行文件,而不是其应用文件,才能启动。双击Calculator可执行文件将启动Calculator应用,但作为终端中的进程:

Last login: Fri Mar 17 15:48:29 on ttys003
/System/Applications/Calculator.app/Contents/MacOS/Calculator ; exit;
christopherhull@Hull-Mac-Mini-M1 ~ % /System/Applications/Calculator.app/Contents/MacOS/Calculator ; exit;
2023-03-17 16:28:02.782 Calculator[10953:627082] XType: XTFontStaticRegistry is enabled by Info.plist.

退出终端将停止进程,计算器应用程序将退出。
请问谁能告诉我如何从另一个应用程序中启动MacOS应用程序,如计算器,而不会崩溃?

ffscu2ro

ffscu2ro1#

Process在这里是错误的工具。您希望NSWorkspace.shared.openApplication启动一个独立的应用程序。请记住,如果您的应用程序是沙箱,它可能不允许启动其他应用程序。我相信NSWorkspace是允许的,即使在沙箱中,但要注意与权限相关的问题。另请参阅How to launch another process in sandbox on Mac?

相关问题