macOS 需要恢复网格布局
摘要
作者回顾了 macOS Leopard 中基于网格的 Spaces 功能,批评了 Lion 版本中将其移除的决定,并介绍了自己构建的一个名为 GridLion 的工具,用于恢复虚拟桌面的网格布局。
暂无内容
查看缓存全文
缓存时间: 2026/06/02 04:47
# macOS 需要找回它的网格布局
来源:https://blog.hopefullyuseful.com/blog/macos-needs-its-grid-back/
二十年前,我的 Mac 桌面体验比现在更好。虽然当时我只有一块低分辨率(按今天标准看)的屏幕,但我感觉自己就像《剑鱼行动》里的 Hugh Jackman——不假思索地灵巧操作着九个以上的显示空间,肌肉记忆和空间记忆无缝配合。
> **太长不看版**:我开发了一款应用,让 macOS 的 Spaces 恢复到 Lion 之前支持网格布局的荣光。请继续阅读——这篇文章包含一个真实人类逐渐稀有的怀旧体验、*为什么要做这个*背后的思考,以及途中遇到的一些问题。或者直接在这里下载。
## 2006
差不多在我捣鼓日本马桶的时候,我也在尝试桌面操作系统。在那之前,我的开发者生涯大部分时间都在用 Windows,但后来开始尝试桌面 Linux,再后来因为一场精彩的演讲而心动,足够让我买一台 Mac,就为了能开始用 TextMate。
TextMate(以及它革命性的文本片段)是我迁移的催化剂,但有趣的是,我并没有用它太久。其他编辑器很快迎头赶上,但我留在了 macOS 上。我的职业生涯也转向了 iOS 开发,所以之后其实也没得选了。不管怎样,那个时代有一件事一直伴随着我。
OS X 10.5 Leopard(图像来自互联网档案馆)Spaces(图像来自 OSXDaily 档案)
## macOS Leopard Spaces
2006 年的大版本是 macOS 10.5 Leopard。它有一堆新功能,最出名的可能是 Time Machine。但二十年过去了,我依然既没用过也不怀念 Time Machine。我怀念的是 John Siracusa 那篇史诗级评测里称为“杂项”的东西。我怀念 Spaces。
**Spaces 为 macOS 引入了虚拟桌面,并允许你将它们排列成可自定义的网格。** 任何以这种方式使用过虚拟桌面的人都知道它的好处。它让你可以把它们当作**空间位置上的实际显示器**来对待。我总是喜欢 3x3 的网格,就像我有 9 个屏幕一样。中心屏幕是我的网页浏览器,它上面的屏幕是我的编辑器,这样我就可以按一下键来回切换。左上角是 Xcode,它下面的屏幕是 iOS 模拟器。其他屏幕分配了其他应用/用途(邮件/iTunes/聊天等),具体我不太记得了,但好处是显而易见的:**我可以不假思索地从一块屏幕移动到另一块,就像我在看真正的独立物理显示器一样,这变成了肌肉记忆**。
我觉得这个网格布局非常有用,以至于我把它用到了我构建的其他应用中,我开发的鼓机 EasyBeats 里那 16 个可导航的排序屏幕的网格,直接受到了 Apple 屏幕的启发。
## 2011 macOS Lion
随着 macOS Lion 的发布,Apple 引入了 Mission Control,这是它对虚拟桌面的新诠释,但令人费解的是,它**只允许它们排成水平一行**。我记得当时我一开始想,我肯定没在哪看到过设置,Apple 不会*完全改变我使用电脑的方式*吧?对吧?
## 错。大错特错。
**单行布局是/简直是一个巨大的倒退。** 如果我想通过键盘到达某个特定屏幕,现在我必须忍受水平滑动一整条路。如果我能记住直接的键盘快捷键,我可以直接跳转,但我的浏览器是在屏幕 7 还是屏幕 8 上?这种新布局彻底摧毁了我保持空间记忆的所有希望。
不是我一个人这么沮丧。也出现了一些替代解决方案,但其中最好的 *Total Spaces* 给我带来了奇怪的卡顿,而且依赖于修改系统 Dock,一旦后来需要绕过系统完整性保护,这就行不通了。
随着时间的推移,我放弃了,学会了凑合着用。作为一名 iOS 开发者,我没什么选择余地,后来当我转到当前雇主的新篇章时,我已经买了额外的物理屏幕,于是……就凑合着用了 :sadface:。
## 但是但是,窗口管理器……
我知道现在有些读者正对着屏幕喊:“去学 Yabai/Aerospace 之类的啊!” 我全都试过,然后意识到它们不适合我。我想是因为我并不特别喜欢“桌面上的窗口”这个概念。感觉就像在桌面上翻来翻去地找文件,文件当然可以整理得井井有条,但我真的只想要不同的工作区,每个工作区里的一切都保持原样。我喜欢 macOS 的“全屏”应用,有时我会把它们放在分屏模式下,但我真的很喜欢一个区域只做一件事的概念。
## 解决方案出现了
总之,就像我说的,我已经学会了忍受,只是偶尔跟同事抱怨说下次工作机换 Linux 算了。直到几个月前,我看到有人成功取消了 macOS 从一个空间切换到另一个空间时的动画,而且不需要修改系统文件。这个动画显然让一些人很烦,但以前从没真正困扰过我。然而**当我看到一个空间动画切换时没有动画的那一瞬间,我立刻意识到我可以解决我的抱怨了**。
## 热情还有一席之地吗?
我和那些科技行业的朋友们经常讨论的话题是,在这个大语言模型代码生成的新时代,优秀的软件还有价值吗?如果任何人都可以通过简单描述来创建软件,那现在(或者说将来)尝试做付费软件还有意义吗?我觉得有。**我认为,当有人真正把某样东西打磨到最好,做出关于它应该如何运行的设计决策时,这仍然有真正的价值。** 我不再以独立开发者谋生,但我曾经做了很久,我不确定当初让一款好应用脱颖而出的那些因素有多大改变。
看看那些充斥在应用商店里的山寨游戏吧。大多数时候,它们的问题不在于不够原创或过于简单,**问题在于创建它们的人或团队并不在乎**。在乎,才会让创作者“浪费”时间去追查那些感觉不太对劲的地方,或者担心大多数用户永远不会注意到的性能问题。
不管怎样,我*真的*很在乎基于网格的虚拟桌面导航。
## 控制不容易
我喜欢在原生 Spaces 之上做一个轻量封装的想法,支持桌面或全屏应用,只要有一个网格来导航。但是,几乎所有控制原生 Spaces 的解决方案都消亡了,这是有原因的。macOS 的大部分 Mission Control 接口都被锁住了。并不是简单地调用一个文档化的 API 就能添加一个新桌面或重新排列它们。但是,能够瞬间移动到一个空间,意味着我可以创建一个模型,把原本单行排列的原生 Spaces 当作网格来展示。
于是,在大语言模型的帮助下,我在一天之内就有了一个丑陋但能用的原型。它起作用了,我欣喜若狂,就在几天前我还愿意为这个功能付钱呢。但用了几天后,**我意识到我想要一个精致得多的工具**。
## 构建一个真正的东西
我决定用我极其有限的空闲时间来开发它。大约一个月后,我把它做到了我自己相当满意的程度。我决定给它取名 GridLion,没什么特别的理由,就是因为它是网格,而且我之前提到了我在 macOS Lion 上遇到的问题。有些人反馈说这个名字很糟糕,可能确实如此,但我也觉得*人们太看重名字了*😂 不管怎样,我不会花太多时间讨论实现了哪些功能等等,因为这些在你可以在应用页面上找到。相反,我认为讲讲遇到的障碍和一些意外情况会更有趣。
## 权限障碍
有趣的是,只有在你试图让别人更容易的时候,你才会注意到有些东西是多么落后。
为了让这个应用能够捕获全局键盘快捷键并导航空间,它需要 macOS 的“辅助功能”权限。这完全合理,我不想让软件在我不知情的情况下捕获按键。但批准这个权限的流程本可以做得更好,就像 iOS 那样。在 iOS 上,如果你请求一个权限,会弹出一个提示框要求授权,如果你同意,权限就启用了。搞定,很简单。但在 macOS 上,这是一整套复杂的流程。请求权限 → 用户看到一个提示框,要么打开辅助功能设置,要么拒绝。如果同意,设置会打开,然后用户必须找到那个特定的开关并启用它。然后再弹出一个安全提示才能完成。为什么不能最多两步搞定呢?
但如果你想要空间的小预览图(我想要,而且我猜大多数人都会想要),事情会更糟。这需要启用“屏幕和系统音频录制”权限。和之前一样,会弹出一个对话框请求权限,批准后又进入另一个设置界面,你又要找到正确的开关,打开它,然后再批准另一个对话框,这次还会退出并重新打开应用。*叹气*最糟糕的是,如果用户成功闯过了所有这些关卡,因为 GridLion 需要创建*不可见窗口/屏幕*的预览,你会看到最吓人的对话框:
1234 截屏时的吓人对话框
最后一个对话框相当吓人。就连我自己写这个应用都犹豫要不要点它 😬。对于小小的空间预览快照来说,这有点过了,但这就是当你试图做本应集成在操作系统里的功能时得到的待遇。**除了确保应用通过从不主动访问网络(除非用户请求——比如检查更新和验证许可证密钥)来建立信任之外,也没太多办法。**
没有预览和有预览对比
没有预览带预览
## 别想上 App Store 了!
我只在 iOS App Store 上卖过软件。我刚开始做的时候太久远了,都不记得设置时遇到的障碍了。但由于 GridLion 调用了私有 API 来获取空间信息,它不允许上架 App Store。所以我快速看了一下潜在的解决方案。
我的第一反应就是建一个用 Stripe API 的网站,并为澳大利亚用户包含 GST。我是澳大利亚人,以前为几个 SAAS 项目这样做过,但被各种 App Store 完全不管事的模式惯坏了之后,我对那种服务更感兴趣。
## 轻松搞定?
显然,我需要的是一种“记录商户”的服务,由他们处理购买、税收和退款。似乎有三家主要公司提供这种服务:Paddle、GumRoad 和 Lemon Squeezy。我被 Lemon Squeezy 吸引是因为他们的许可证代码 API。购买后,他们会给客户一个许可证密钥,并提供激活/停用/验证的方法。
我天真地以为我只需要创建一个账户,关联我的 Stripe(我认为 Stripe 收购/购买了/他们什么关系),就能在几分钟内开始销售了。**然而这个过程比那要拖沓得多。** 你需要向 Lemon Squeezy 证明你是有信誉的,*卖的是有实际价值/用途的东西*。需要发送一些录屏和一些社交媒体账号验证。对我来说这不是问题,但我能预见到刚开始做的人可能会在这里遇到一些障碍。
事后回想,我完全理解这类要求。心怀好意的人很容易忘记世界上还有心怀恶意的人,而且既然实际上是 Lemon Squeezy 在与客户打交道(至少在支付方面),他们采取保护自己声誉的措施是正确的。
话虽如此,即使在批准之前,你也能完全访问一个测试账户,这使得在应用中集成设置和测试非常容易。对我来说,这是一次风险很低的实验,但我必须承认,我很期待看看这是否是除了 App Store 之外销售软件的可行方式(是的是的,我知道几十年来一直是这样 😅)。
## 大语言模型不在乎用户体验
我在日常工作中经常使用大语言模型。我把它们当作编码助手,并围绕它们的服务构建产品,但这是我第一次在个人原生应用项目中使用它们,我发现这次经历……很有趣。**大语言模型就像超快的船,你设定一个方向出发,但如果没有良好的反馈回路,它们就会偏离航线。你为威尼斯设定了 GPS,最后却到了威尼斯人酒店**——看起来像,但不是你想要的地方。
反馈回路取决于项目。在我日常工作中,我通常处理具体的目标、正确的 API 结果或大型数据集查询。如果计划定义得好,大语言模型往往能立即看出结果是否不符合期望,然后迭代。我的大部分时间都花在了审查上。
这个项目则完全不同。**用户界面很大程度上关乎“感觉”,所以任何面向用户的东西,都必须有人参与循环。** 这让我质疑实际收益。一方面,因为我近 10 年没有真正做过原生 Mac/iOS 开发,大语言模型确实帮了我,但另一方面,我觉得 10 年前的我能在同样的时间内做出同样的应用,同时获得更多见解。
## 它***几乎***做到了我想要的一切
我是头号用户,所以我尝试添加了所有我想要的。
- 轻松导航和重新排列空间的网格
- 快速/稳定,没有卡顿
- 特定显示器的设置(网格大小、热键等)
但有些东西仍然做不到。如果你想把一个空间从一个显示器移到另一个显示器,或者把一个窗口从一个空间移到另一个空间,没有可靠的 API。幸运的是,由于 GridLion 与 Mission Control 配合使用,你可以直接用 Mission Control 来完成这类任务,但这还是让我有点不爽,因为我不能自己直接做。
最后,能够让某些应用在加载时总是出现在网格的特定位置。这是原始 macOS Spaces 的一个功能,但对我现在来说可能甚至都没用了。设置/重新排列很快,我很少重启。而且,如果你看上面的截图,你会看到我经常打开很多个 VSCode 窗口,我不确定这要怎么处理。无论如何,我将来可能会继续研究解决方案。
## macOS 原生
说了这么多,如果下一次 macOS 更新宣布网格空间回归,我会非常高兴。**这应该再次成为一个操作系统功能。** 在那之前,尽管试试 GridLion。
相似文章
MacBook Neo 与 iPad 应有的模样
Craig Mod 认为 iPad 应是一款激进的纯触控设备,无需键盘和窗口管理;同时他也惋惜 Apple 从未推出将 iPad 硬件与 macOS 融合的“MacBook Neo”。
在 2026 年使用 SwiftUI 构建纯正的 Mac 应用
这篇文章讲述了作者完全使用 SwiftUI 构建 macOS 应用的经验,讨论了在实现原生 Mac 体验时遇到的挑战和限制,例如选中状态和非活动窗口的行为,并得出结论:SwiftUI 在 Mac 上尚不足以构建‘纯正 Mac’应用。
修复 QuickLook(2023)
一篇技术指南,介绍如何使用 LLDB 对 macOS Finder 进行逆向工程,以解决在升级到 macOS Ventura 后 QuickLook 预览中出现 unwanted 圆角的问题。
GlowIsland
GlowIsland 是一款 macOS 工具,可将 MacBook 的屏幕刘海转变为交互式功能栏。
Lumox
Lumox 是一款允许用户将iOS设备屏幕镜像到Mac电脑的工具。