NotchBadge:把 app 角标吊到灵动岛下方

Dock 自动隐藏腾出更大视野,菜单栏却越来越不够用,全关又怕漏消息——于是把 app 角标读出来,吊到灵动岛下方。

我一直把底部 Dock 设成自动隐藏,换来更大的可视空间;要用时,再把鼠标滑到底部唤出来。可菜单栏却越来越挤。macOS 26 虽然已经能单独控制某个 app 是否显示在菜单栏里,但真要关掉时,心里还是有点负担:几个比较重要的软件,我始终不敢撤,就怕消息没能及时看到。

于是我冒出个想法:能不能把这些 app 的角标读出来,挂到灵动岛下方?我平时在用 Alcove(灵动岛模拟软件),所以这东西没法直接做成一个灵动岛 app。那就干脆让它吊在灵动岛底下,跟 Alcove 共存。这样一来,我就能放心把一部分 app 从菜单栏里撤掉了。

这就是 NotchBadge

设计:一盏老式拉绳电灯

灵感来自老式拉绳电灯。每个带角标的 app,都像一盏小灯一样,用一根细线吊在刘海下:

  • 角标一变就摆一下——像钟摆那样轻轻晃两下,让你用余光也能察觉新消息。
  • 点一下就直接跳到对应 app。
  • 往下一拉就能「收起」(像拉灭一盏灯),图标会缩小贴回刘海;再拉一下,又能「挂回」原位。某个图标挡住浏览器标签时,顺手一拉就能收走;菜单里也支持「全部挂起」,一键收完。

还有几个小地方:

  • 有 Dock 角标的 app 会被自动收集上墙,角标清零后也会自动撤下。
  • 你正在用的那个 app 不会重复显示——既然已经在前台盯着它了,就不用它再来凑热闹。
  • 吊线做了上深下浅的渐变,穿过标签栏文字时会自然淡掉,不至于碍眼。
  • 菜单栏放了一个小图标,用来检查更新、设置开机自启和退出。

怎么做到的

拿到「别的 app 的角标」其实不用私有 API。Dock 角标可以通过辅助功能(Accessibility)读取:在 com.apple.dock 的 AX 树里,每个图标都是一个 AXApplicationDockItem,它的 AXStatusLabel 就是红圈里的数字,AXURL 则是 app 的路径(用来取图标、打开它)。定时轮询一下,就能把需要的数据拿到手。

位置上,不同机型、不同分辨率下的刘海高度都不一样,所以不能写死:竖直方向上,用 safeAreaInsets.top(当前分辨率下刘海的真实高度)来确定刘海底边;水平方向上,则挂在屏幕中线,因为刘海永远居中。多屏场景下,也会自动挑出那块带刘海的屏幕。

下载

NotchBadge Releases——下载 dmg,拖进「应用程序」文件夹,首次启动时给它授权辅助功能即可。系统要求 macOS 14+。