技术 · 2026-04-26 · 12 分钟

从零开始写一个菜单栏 App

MenuBarExtra 是那种 API 表面干净、运行时却有点闹鬼的 SwiftUI 新成员。Promptory 的菜单栏入口形状,在三次重写之后才定下来。

三次重写

  1. MenuBarExtra 窗口——首次绘制卡顿,因为窗口是惰性创建的, 内容又是无边界的 SwiftUI。
  2. NSStatusBar + 手写 NSPanel——很快,但每个键盘交互都要 手工胶水拼接。
  3. MenuBarExtra + 一个轻量预热的 body——最终上架的那个版本。

这篇手记将会展开:预热技巧(App 启动时挂载一个隐藏视图)、用 Carbon 注册全局热键(对,至今如此),以及如何做一个可聚焦、可搜索、关闭后 把焦点还给用户原本所在窗口的面板。

更多手记