遇到这么一个场景,有的程序打开后会在右上角menu bar入驻一个图标,譬如“微信”;而与此同时dock栏也会有一个唤醒的图标。因此有两个地方可以调起目标应用。

Screen-Shot-2020-04-03-at-23.06.41

查阅了一下如何隐藏正在运行程序在Dock中的图标。

方法一:修改目标应用的程序包中的Info.plist,加入以下键值

<key>LSUIElement</key>
<true/>

这个方法不见得对所有App有效,可能造成程序起不来,譬如“钉钉”。去了解“运行时否在Dock中显示图标是如何配置的”或许会对实施修改有帮助。

要说优点的话就是相比方法二,重启是不会失效的。

缺点。我就试了一个就造成了程序起不来所以就没再尝试。当我觉得方法二有的缺点它都有,而且改动App本身应该就算个缺点。

方法二:terminal中使用LSAppInfo

sudo lsappinfo setinfo -app XXX ApplicationType=UIElement

XXX换为目标app名称,这条命令会隐藏Dock中目标app的图标。
不知道App准确名字的可以通过以下查看:

lsappinfo | grep ") \""

恢复在Dock显示的状态

sudo lsappinfo setinfo -app XXX ApplicationType=Foreground

缺点:对于menu bar有图标的,将Foreground的应用改为UIElement显示后,通过menu bar图标唤起应用后

  • 左上角菜单栏不会再显示
  • 对于一些应用,你会发现在此状态下退出应用是个问题(需要使用terminal或者activity monitor)
  • command+tab快速切换程序也不会再显示该应用
  • 重启电脑需要重新配置(可以写给脚本配置)

方法三:有app可以实现这个功能,Ghosttiles、dockdodger