Mac状态栏Hack
依旧是一篇探究 Mac 软件原理的文章 前几天在用小历的时候,发现了这么一个功能。 选择之后,小历会从这样变到这样。 然后我就开始想这个是怎么实现的,这里我们必须要对比一个软件,卖了105.88人民币的著名 Mac 状态栏管理软件 Bartender 2。 在 Bartender 中有一个功能,你可以按住 ⌘ 之后点击图标来拖动来改变它在 Mac 状态栏的位置,就像这样(看网易云音乐)。 如果 Bartender 可以的,那为什么小历不能这么做,这样的话用户体验不是更好吗?于是开始了一轮疯狂的 Google 和 Stackoverflow 。 结果结论是,在老版本的 Mac 操作系统中,是默认支持 ⌘+ 图标改变位置的,但是在 10.11 中,这个功能被取消了,只有使用 Bartender 来改变位置。而在 Apple 给出的 API 中,没有可以改变状态栏图标位置的方法。那么 Bartender 是怎么实现的,小历又为什么不能实现。之后就是接着查。 经过不断的改变关键字..在某一个 Stackoverflow 中发现了一个叫做 NSMenuExtra 的类,这是私有的 API ,在这个方法中,可以实现 Bartender 中的那个改变位置的效果,但是如果使用了苹果私有的 API ,应用是不能上线到 App Store 的,小历上线到了 App Store ,说明没有用到私有 API,之后我就一片混乱了… 无耐之下,我在微博上给小历的作者发了一个私信,没想到很快小历的作者就给我回复了!他给了我一个 Github 的地址,NSStatusBar-MISSINGOrder 之后我看了一下,正如作者所说,是构造了一个 Selector,但实际上是用 Hack 的方法调用了两个方法 - (void)_insertStatusItem:(id)arg1 withPriority:(long long)arg2; - (id)_statusItemWithLength:(double)arg1 withPriority:(long long)arg2;...