打开另一台Mac应用

Tom*_*mer 5 macos xcode external swift swift3

在我的应用程序中,我想打开另一个安装在用户Mac上的应用程序(例如iPhoto).我不确定在文档中我应该寻找什么.这叫什么,我应该怎么做?谢谢

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)


Mik*_*ord 0

有不同的方法可以做到这一点。最有效的是使用 fvork 和 execve - seeman vforkman 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 应用程序启动。