返回 2026-06-19
🛠 工具 / 开源

NetNewsWire 现状NetNewsWire Status

daringfireball.net·2026-06-18

老牌 RSS 阅读器 NetNewsWire 在开发者 Brent Simmons 退休后迎来了大规模的现代化改造。过去一年间,团队通过 2188 次代码提交重点偿还了技术债、修复了 Bug 并升级了底层架构。在稳固基础之后,该应用终于能够顺畅地进行新功能的开发与扩展。这些底层重构工作让这款备受推崇的必备工具变得比以往任何时候都更加出色。

15 Jun 2026

退休已经一年了——我的最后一个工作日是 2025 年 6 月 6 日——我很高兴能说,这一年来我没有为股东价值增加任何东西,哪怕一分钱都没有。🌴

* * *

我对退休的期望是能在 NetNewsWire 上完成大量工作。

一年前,它急需现代化改造、偿还技术债务和修复 Bug。用户一直希望能添加新功能,但基础架构需要大量工作,然后我才能继续去“添砖加瓦”。

在过去的一年里,我们提交了 2,188 次代码,以下是其中的一些亮点:

  • 采用了 Swift 结构化并发和 async/await
  • 采用了 Liquid Glass UI,同时仍支持较新的操作系统
  • 将我们的 XML、HTML 和日期解析器从 Objective-C 移植到了 Swift
  • 修复了大量 Bug,包括导致崩溃的 Bug
  • 降低了电池消耗、内存占用、卡死率、滚动卡顿率以及磁盘写入量
  • 进行了大量性能优化,包括(尤其是)找出那些可以让应用程序少做无用功的地方
  • 做了许多代码维护工作——重新启用了 GitHub CI,开始使用 SwiftLint,开启了 treat-warnings-as-errors(将警告视为错误),着手改善本地化支持,切换到了 Logger,并添加了测试
  • 简化并重构了代码、删除了冗余代码、对变量等进行了重命名等——让许多地方的代码逻辑变得更加清晰
  • 为 feed 增加了对 Cache-Control 头的支持,这样发布者就可以调整 NetNewsWire 检查其 feed 的频率
  • 优化了 iCloud 同步(这方面还有很多工作要做)
  • 处理了弃用的 API(例如,切换到了 NWPathMonitor)
  • 在 UI 中增加了诊断和错误报告功能——iCloud Storage Stats 和 Error Log 已经正式发布,此外还有更多类似功能目前正处于测试阶段:Dinosaurs、Current Activity、Activity Log 和 Account Stats。
  • 仅仅列出亮点,意味着我对一些很想告诉大家的东西一笔带过——甚至根本没提!

    举个例子,之前我对于处理 Mac 崩溃日志的方式感到非常头疼,于是我写了一个小系统,可以从我的服务器上下载这些日志并进行符号化(symbolication)。它虽然简单,但作用很大——这也意味着我不必为此迁移到某个商业系统,也不用非得在应用里植入它们的 SDK。

    * * *

    上面最后一点(包含诸多链接的那一点),主要是为了让用户能够洞察应用内部的运行情况,这样当应用的表现与预期不符时,他们就能知道到底发生了什么。

    哪怕他们自己无法解决问题,至少也能把信息复制粘贴发给我,告诉我具体情况,这样我就不用靠猜了。有了这些功能,再加上各种 Bug 修复和改进,我得以减少花在技术支持上的时间,这意味着我有更多的时间去写代码——最终也就有更多的时间去开发大家想要的新功能。

    * * *

    基础架构的工作还没有彻底完成,但已接近尾声。现在开发这款应用的体验比一年前要好太多了,我非常庆幸我们用这一年时间做了这些事。

    我在这里特意用了“我们”——我也许是贡献最多的人,但我们还有许多其他的代码贡献者,我非常感谢他们鼎力相助。除了我之外,最高产的贡献者是 Stuart Breckenridge,他完成了 Liquid Glass 的相关工作(还有其他贡献)——他还推出了一款新的基于浏览器的 RSS 阅读器 Gobbler,大家一定要去看看!

    * * *

    附言:在过去的一年里,我们还把交流平台从 Slack 换成了 Discourse 论坛,这样技术支持和相关讨论就能直接在网页上进行,而不会被隐藏起来了。😀

    需要完整排版与评论请前往来源站点阅读。