项目发布之后,回头看最开始定下的三个词:简洁、优雅、高效。如果只是形容词,等于什么都没说,所以这一篇把它们落到具体的数字和取舍上,也把没做到的部分老实写出来。

高效:量出来的数字

在 M1 的 MacBook Pro 上,用 Release 版本,Touch Bar 上显示着 Dock,键鼠空闲,连续 5 次采样,每次间隔 2 秒:CPU 占用全部是 0.0%,空闲唤醒 0 次,线程 3 到 4 个,物理内存约 34 MB。空闲唤醒我用内核记录的进程计数器隔 20 秒读两次做差:新增 0 次,中断唤醒也是 0,CPU 时间 0.0 毫秒。App 体积 1.1 MB,其中包含 arm64 和 x86_64 两份。代码约 1650 行 Swift,9 个文件,没有第三方依赖。

点击的响应也量过:被点的 App 变成前台,中位数 40 多毫秒;但窗口画面到位要约 530 毫秒,多出来的约 480 毫秒是台前调度的窗口动画,不是程序造成的(详见上一篇)。同样重要的是没测的:有大量图标、长时间运行后的内存变化;关掉台前调度后画面能快多少;以及和 Pock 等其他软件的对比。没测的东西,我就不在页面上写对比数字。

简洁和优雅:落到取舍上

简洁体现在删掉的东西上:没有小组件和插件,菜单里只有几个开关,连 Touch Bar 最右边的收起按钮也去掉了。优雅体现在向系统看齐:图标顺序和运行小圆点和 Dock 一致,用系统自带的滚动控件,单击不为了等双击而延迟,长按的进度条安静而且可以反悔。

局限:写在前面

只对带 Touch Bar 的 MacBook Pro 有意义。用了私有接口,不能上架 Mac App Store,以后的 macOS 更新也可能让它失效,届时菜单里会显示“当前系统不支持”,App 不会崩。Dock 会占满整条 Touch Bar,开着的时候系统控制条看不到,要用亮度和音量时,从菜单里关掉 Dock。

实测环境只有一台:M1 的 MacBook Pro 13 英寸、macOS 27.0。安装包是通用二进制,Intel 部分我只在 Rosetta 下确认能启动,从没有在真正的 Intel 机器上跑过,所以页面和 README 里都标为“未实测”。这也是选择公开源码的一个原因:让有别的机器的人能帮忙验证。

许可证:个人使用免费,保留商业化的权利

我选了 PolyForm Noncommercial 1.0.0:个人和其他非商业用途可以免费使用、修改、分享,商业使用需要另行授权。它是现成的标准文本,比自己写一份“仅限个人使用”不容易出漏洞。要注意的是,它是“源码可见”,不是 OSI 定义的开源,所以我在页面和 README 里都没有用“开源”这个词。

和 AI 一起做的体会

有四点。第一,先验证,再写代码:让 AI 先去做探针和可行性验证,最大的不确定性消除之后,后面的路才短。第二,让 AI 检查它自己的产出:发布前的隐私扫描、二进制检查、文档里的数字和代码是否一致,都是让它去核对的,写文档时对照代码还发现了一个真实的边界 bug。第三,有些事必须由人来做:凭据的输入、许可证的取舍、“这个功能到底要不要加”的判断。第四,要让 AI 老实汇报数据。这个项目里有好几次,一个方案“看起来变好了”,其实是测试环境变了、判据失效或者样本太小;它该说的是“这一轮数据不能下结论”,而不是“应该稳定了”。AI 可以把选项和证据摆清楚,决定还是要人来下。

下一步不急:让有 Intel 机器的人反馈;如果能确认台前调度关闭的系统上最小化可用,就做成可选项;再往后,才考虑未读角标这类功能,前提是它也符合“简洁”这个标准。

这个案例适合讲什么

如果把它当成教程案例,它适合讲四件事:从一个具体的不满走到清楚的目标和“不做”清单;怎样为依赖私有接口的功能做风险控制;怎样验证“摸不到”的界面;以及从签名、公证到公开发布的完整链路,包括发布前该检查什么。这四件事在别的小工具上都能复用,和 Touch Bar 本身关系不大。

它也是一个适合读源码的小案例:代码量小,通读一遍不需要太久,每个决定的原因都能在开发日记里找到。