从应用程序中以编程方式停靠“转动隐藏”

时间:2015-12-09 17:14:46

标签: swift macos dock

如果您在Dock上进行二次点击,则可以单击Turn Hiding On选项以自动隐藏Dock。或者,您可以转到System Preferences > Dock并点击Automatically hide and show the Dock

我想模仿我正在制作的应用程序中的功能(基本上是状态栏图标应用程序),最好是在Swift中。

到目前为止我编写的用于启用Dock自动隐藏功能的代码如下:

// Update the value for key "autohide" in com.apple.dock.plist, located in ~/Library/Preferences/.
var dict = NSUserDefaults.standardUserDefaults().persistentDomainForName("com.apple.dock")
dict.updateValue(true, forKey: "autohide")
NSUserDefaults.standardUserDefaults().setPersistentDomain(dict, forName: "com.apple.dock")

// Send notification to the OS.
dispatch_async(dispatch_get_main_queue()) {
    CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(), "com.apple.dock.prefchanged", nil, nil, true)
}

代码的第一部分更新plist文件中的值,我已经确认这是有效的。第二部分向操作系统发送通知,告诉它该plist中的值已经更改,我也确认它已在工作。

然而,这两件事并没有使Dock隐藏起来,让我相信我需要做点其他事情。或者让我解决问题的方法是错的?如何让Dock开始隐藏?

PS:我已经阅读了一些名为CoreDock的私有的,未记录的API,但我想避免这样做,因为它可能会导致很多问题......

1 个答案:

答案 0 :(得分:1)

使用AppleScript或Scripting Bridge执行此操作几乎肯定会更好。以下脚本打开Dock自动隐藏:

tell application "System Events"
    set autohide of dock preferences to true
end tell

您可以使用NSAppleScript运行该功能。