简体   繁体   English

如何使用文件路径以编程方式从按钮打开应用程序? Swift 4,MacOS 10.13+

[英]How to programatically open an app from button using filepath? Swift 4, MacOS 10.13+

I am trying to create a menubar app that when a button in the menu is clicked, it will open an app already installed on the Mac.我正在尝试创建一个菜单栏应用程序,当单击菜单中的按钮时,它将打开一个已安装在 Mac 上的应用程序。

@objc func kineticSelf(_ sender: Any){
     NSWorkspace.shared.open(URL(fileURLWithPath: "/Library/Addigy/macamanage/MacManage.app"))
    
}

menu.addItem(NSMenuItem(title: "Open Self Service", action:
        #selector(AppDelegate.kineticSelf(_:)), keyEquivalent: ""))

When I build the project I get no errors.当我构建项目时,我没有收到任何错误。 The button shows up, but when I click it nothing happens.按钮出现了,但是当我单击它时,什么也没有发生。 I have built a version in Xcode 11 and Swift 5, but I need it to run in Swift 4.我已经在 Xcode 11 和 Swift 5 中构建了一个版本,但我需要它在 Swift 4 中运行。

What I had in Xcode 11 and Swift 5:我在 Xcode 11 和 Swift 5 中有什么:

@objc func kineticSelf(_ sender: Any){
    let path = "/bin"
    let selfServiceUrl = NSURL(fileURLWithPath: "/Library/Addigy/macmanage/MacManage.app", isDirectory: true) as URL
    let configuration = NSWorkspace.OpenConfiguration()
    configuration.arguments = [path]
    
    NSWorkspace.shared.openApplication(at: selfServiceUrl, configuration: configuration, completionHandler: nil)

I've figured out a solution:我想出了一个解决方案:

@objc func kineticSelf(_ sender: Any){
    let kineticSelfUrl = URL(string: "/Library/Addigy/macmanage/MacManage.app")
    NSWorkspace.shared.openFile(kineticSelfUrl!.path)
    // NSWorkspace.shared.open(URL(fileURLWithPath: "/Library/Addigy/macmanage/MacManage.app"))
    
}

menu.addItem(NSMenuItem(title: "Open Self Service", action:
        #selector(AppDelegate.kineticSelf(_:)), keyEquivalent: ""))
    

Thanks!谢谢!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM