当我在 1984 年发现类型和创建者代码1以及资源分支如何为我的原始 Macintosh 上出色的用户界面做出贡献时,我对文件系统产生了兴趣。在 20 世纪 90 年代末,当 Apple看起来可能会收购Be Inc.来解决其操作系统问题时, Be 文件系统是我最兴奋的部分。当 Apple 收购 NeXT 并(最终)创建 Mac OS X 时,我对 ZFS 成为 Mac 新文件系统的可能性感到非常热衷。但那也没有发生。
最后,在 WWDC 2017 上,Apple 宣布推出适用于 macOS 的Apple 文件系统(APFS)(在秘密测试将每个人的 iPhone 转换为 APFS,然后将其恢复为 HFS+,作为早期 iOS 10.x 更新的一部分,这是历史上最大胆的技术策略之一)。
APFS 不是 ZFS,但它仍然比HFS+有了巨大的飞跃。它最重要的两个功能是时间点快照和写时复制克隆。快照可实现更可靠、更高效的Time Machine备份。写时复制克隆基于支持快照的相同底层架构功能:目录条目及其相应文件内容之间的灵活安排。
如今,大多数 Mac 用户甚至没有注意到使用 Finder 中的“复制”命令来复制文件实际上并没有复制文件的内容。相反,它会创建一个“克隆”文件,与原始文件共享其数据。这就是为什么在 Finder 中复制文件几乎是即时的,无论文件有多大。
尽管自从近八年前推出 APFS 以来我就了解了克隆文件,但除了知道在 Finder 中复制大文件时没有占用更多磁盘空间这一小小的兴奋之外,我并没有对它们进行太多思考。但去年年底,随着我的 Mac 磁盘慢慢变满,我开始思考如何才能恢复一些磁盘空间。
如果我能找到具有相同内容但不是彼此克隆的文件,我可以将它们转换为全部共享磁盘上数据的单个实例的克隆。我花了一个下午的时间编写了一个 Perl 脚本(调用一个用 C 编写的命令行工具和另一个用 Swift 编写的命令行工具)在我的磁盘上运行,看看这样做可以节省多少空间。结果是很多:几十GB。
事已至此,已经没有回头路了。我必须把它做成一个应用程序。有很多 Mac 应用程序可以通过查找重复文件然后删除重复项来节省磁盘空间。使用 APFS 克隆,我的应用程序可以回收磁盘空间,而无需删除任何文件!作为一名数字包装狂,这对我来说非常有吸引力。
到那周末,我已经编写了一个准系统的 Mac 应用程序来完成与我的 Perl 脚本所做的相同的事情。在接下来的几个月里,我完善并测试了该应用程序,并将其命名为Hyperspace 。我很高兴地宣布 Hyperspace 现已在 Mac App Store 上架。
Hyperspace 可以免费下载,并且可以免费扫描以查看可以节省多少空间。要真正回收任何空间,您必须为应用程序付费。
像我所有的应用程序一样,超空间有点难以解释。我已在超空间文档中详细尝试这样做。我希望它对足够多的人来说有足够的意义,它将成为 Mac 生态系统的一个有用的补充。
对于可能好奇的开发人员同事来说,这是我的第二个使用 SwiftUI 的 Mac 应用程序,也是我的第一个使用SwiftUI 生命周期的应用程序。这也是我使用 Swift 6 的第二个应用程序,也是我从开发初期就使用的第一个应用程序。我发现从(几乎)一开始就使用 Swift 6 比将现有的、已发布的应用程序转换为 Swift 6 容易得多。即便如此,Swift 6 仍然存在许多粗糙的边缘,我期待在未来几年中事情会变得更加平滑。
在ATP 最近的一集中,我将当时未命名的超空间描述为“一个极其危险的应用程序”。与从 HFS+ 转换为 APFS 的过程类似,Hyperspace 会修改并非由其创建且不拥有的文件。到目前为止,这是我创建的风险最高的应用程序。 (回收磁盘空间并不像给农作物撒粉……)但我也认为这可能对大多数人来说是最有用的。我希望你喜欢它。
-
请注意,类型和创建者代码不存储在资源分支中。 ↩