从菜单栏项

时间:2018-04-05 22:29:48

标签: swift macos shell

我跟着一个非常有帮助的guide来创建一个简单的菜单栏应用程序,它有两个动作。但是,我希望在选择其中一个操作时执行2个shell命令。

Xcode中的当前函数是:

func constructMenu() {
let menu = NSMenu()

menu.addItem(NSMenuItem(title: "ON", action: #selector(AppDelegate.printQuote(_:)), keyEquivalent: "S"))
menu.addItem(NSMenuItem(title: "OFF", action: #selector(AppDelegate.printQuote(_:)), keyEquivalent: "R"))
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(title: "Quit SMAC", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))

statusItem.menu = menu

这显示了单击菜单栏时预测的三个选项:

Screenshot of the menu bar options

然而,这是我的Cocoa知识证明不足的地方。我希望在单击ON操作时执行以下shell脚本:

chmod u+x ~/Desktop/Mask.sh
~/Desktop/Mask.sh

最后按下OFF按钮时执行以下两个bash脚本:

chmod u+x ~/Desktop/Unmask.sh
~/Desktop/Unmask.sh

1 个答案:

答案 0 :(得分:0)

以下两个类应该相关:ProcessNSUserUnixTask

  

<强>过程
  表示当前进程的子进程的对象。
使用Process类,您的程序可以运行另一个程序   一个子进程,可以监视该程序的执行情况。一个过程   object创建一个单独的可执行实体;它与Thread的不同之处在于   它不会与创建的进程共享内存空间   它

这将是您用于chmod脚本的例子。

Foundation | Streams, Sockets, and Ports | Process

  

<强> NSUserUnixTask
  执行unix应用程序的对象。
NSUserUnixTask类用于运行unix应用程序,通常是   shell脚本,来自您的应用程序。它旨在执行   用户提供的脚本,并将在。之外执行它们   应用程序的沙箱,如果有的话。

这可用于执行shell脚本。

Foundation | Processes and Threads | NSUserUnixTask