Leo*_*bus 18
Xcode 8.3.2•Swift 3.1
import Cocoa
func openPhotos() {
NSWorkspace.shared().open(URL(fileURLWithPath: "/Applications/Photos.app"))
}
openPhotos()
Run Code Online (Sandbox Code Playgroud)
或者在方法中使用带有app name参数的launchApplication:
import Cocoa
func openApp(_ named: String) -> Bool {
return NSWorkspace.shared().launchApplication(named)
}
// Usage
if openApp("Photos") {
print(true)
}
// Or
print(openApp("Photos") ? true : false)
Run Code Online (Sandbox Code Playgroud)
斯威夫特4及以后
用NSWorkspace.shared而不是NSWorkspace.shared()
voo*_*dlo 16
XCode 11 • MacOS Catalina 10.15 • Swift 5
NSWorkspace.shared.launchApplication已弃用,从 MacOS 10.15 开始,应使用新功能NSWorkspace.shared.openApplication。
示例 - 通过捆绑 ID 打开终端应用程序
guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: "com.apple.Terminal") else { return }
let path = "/bin"
let configuration = NSWorkspace.OpenConfiguration()
configuration.arguments = [path]
NSWorkspace.shared.openApplication(at: url,
configuration: configuration,
completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
示例 - 按路径打开终端应用程序
let url = NSURL(fileURLWithPath: "/System/Applications/Utilities/Terminal.app", isDirectory: true) as URL
let path = "/bin"
let configuration = NSWorkspace.OpenConfiguration()
configuration.arguments = [path]
NSWorkspace.shared.openApplication(at: url,
configuration: configuration,
completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
有不同的方法可以做到这一点。最有效的是使用 fvork 和 execve - seeman vfork和man execve。
效率较低但更灵活的是使用system库调用。实际上,它的作用是运行一个 shell(如 bash),然后将您提供的字符串传递给 bash。所以你可以设置管道、重定向等。
或者,您可以将 Apple 事件发送到 Finder:“告诉 Finder 打开 iPhoto”。
在前两种情况下,您希望启动捆绑包内的可执行文件,即/Applications/iPhoto.app/Contents/MacOS/iPhoto.
在终端中从命令行尝试上述操作:
$ /Applications/iPhoto.app/Contents/MacOS/iPhoto
Run Code Online (Sandbox Code Playgroud)
您将看到 iPhoto 应用程序启动。
| 归档时间: |
|
| 查看次数: |
6893 次 |
| 最近记录: |