- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 open
启动应用程序通过 Swift 工具。我有两个单独的实现,一个是 NSWorkspace.shared.openApplication(at:configuration)
适用于 10.15+ 和一个带有 NSWorkspace.shared.launchApplication(at:options:configuration)
适用于 10.14 及更低版本。在 10.14 及更低版本上一切正常,但 Catalina 忽略了向它抛出的任何参数。 该应用程序未经过沙盒处理。
10.15+ 的实现:
let appPath = URL(string: "file:///usr/bin/open")!
let configuration = NSWorkspace.OpenConfiguration()
configuration.arguments = [
"-a",
executablePath,
url.absoluteString
]
NSWorkspace.shared.openApplication(at: appPath, configuration: configuration) { (app, error) in
if let error = error {
done(error)
} else {
done(nil)
}
}
运行此命令会打开终端窗口
/usr/bin/open
没有参数,然后关闭 session 。
executablePath
是应用程序可执行文件的字符串,例如
/Application/Safari.app/Contents/MacOS/Safari
url
是一个包含 http 或 https 链接的 URL 对象
file://
来自 appPath 在 10.14 中也能正常工作,但在 10.15 结果
The application “open” could not be launched because a miscellaneous error occurred
.
最佳答案
我以不同的方式解决了这个问题。而不是使用 NSWorkspace.shared.openApplication(at:configuration:)
我现在正在调用 Process
打开 open
.
这也适用于 Catalina 以下的版本,甚至适用 带沙箱 .但是,沙箱有一个问题,请在最后阅读更多内容。
解决方法
let task = Process()
task.arguments = ["-a", executablePath, url.absoluteString]
task.launchPath = "/usr/bin/open"
task.launch()
无需等待该过程,因为 a) open 的返回不是那么有用,并且 b) 无论如何它几乎是立即的。
In a sandboxed application, child processes created with the Process class inherit the sandbox of the parent app.
Process
打开有相同的沙箱。如果您使用
open
像我一样打开一个 URL 很好,因为
open
无论如何都会在没有我们沙箱的情况下产生一个新进程。但是,这确实意味着您不能使用此打开的其他常规应用程序,除非此应用程序在您的沙箱中运行良好。
关于swift - NSWorkspace.OpenConfiguration 忽略参数,尽管没有被沙箱化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62897936/
我正在尝试使用 open 启动应用程序通过 Swift 工具。我有两个单独的实现,一个是 NSWorkspace.shared.openApplication(at:configuration)适用于
我是一名优秀的程序员,十分优秀!