在 weekly.fatbobman.com[1]订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本[2]查看更多的文章。加入 Discord[3]社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。
在 WWDC 2025 开幕前夕,Swift 官网迎来了全新改版。新设计致力于提升亲和力,突出 Swift 的技术优势,让初学者更容易上手。作为一门与苹果生态紧密关联的编程语言,新网站的视觉风格也自然融入了浓郁的苹果元素。
我将新版 Swift.org 与其他主流编程语言的网站进行对比后发现,新首页的外观确实更加现代化,有效减少了以往过于技术化的冰冷印象,为初学者营造出友好的第一观感。作为一名热爱 Swift 的开发者,我非常欣赏社区此次所传递的信息,并期望 Swift 能持续保持其流畅优雅且富有创造力的特质。
除了网站的改版,Swift 社区还带来了其他振奋人心的消息。Apple 和 Swift 社区的工程师分享了一则重量级的实战案例[4]:苹果将每天处理数十亿请求的 Password Monitoring 服务后端从 Java 完全迁移至 Swift(基于 Vapor 框架)。迁移后的系统性能提升了约 40%,内存占用从数十 GB 降至数百 MB,同时释放了约一半的服务器资源,在并发处理、代码可维护性和资源效率等方面实现了质的飞跃。
尽管 Vapor 一直是 Swift 生态中最重要的服务端框架,但由于此前缺乏具备标志性意义的大规模生产案例,其在企业级应用中的推广一直相对缓慢。苹果此次在核心业务中正式采用 Vapor,不仅标志着 Swift 服务端开发的一个重要里程碑,更为希望构建高性能后端系统的团队提供了极具参考价值的实践范例。
此外,一个长期困扰 Swift Macro 开发者与使用者的编译时间过长问题,近日也得到了有效解决。Swift 社区通过采用编译器预构建 Swift-Syntax 库的方式,显著减轻了编译时的性能负担。这一改进无疑将进一步推动 Swift Macro 的普及与应用。
总之,Swift 社区已为即将召开的 WWDC 2025 做好了充分预热。那么,苹果下一步又将为开发者带来哪些惊喜呢?让我们共同期待这场年度盛会的到来。
如今,Xcode Playground 似乎已经偏离了最初的设计初衷,而 VSCode 的配置对初学者来说又显得颇为复杂。在这样的背景下,如何轻松地搭建一个适合学习和测试 Swift 语言的开发环境?也许本文介绍的 Notepad.exe 能为你提供满意的答案。
你希望苹果在今年带来什么新特性,能否为开发生态注入新的活力?Michael Tsai[8]整理了众多活跃开发者近期在博客、社交平台上的 WWDC 2025 心愿,包括 Xcode 稳定性改进、SwiftUI 性能优化、插件系统开放、AI 能力引入,以及 TestFlight 审核流程简化、iCloud 免费空间提升等。看看这些愿望中,有哪些会在接下来的 WWDC 2025 发布会上成为现实?
在 SwiftUI 中,开发者长期以来可以借助 SpriteView
嵌入 SpriteKit 场景,为 App 增添丰富的互动体验。现在,同样的事情也可以用 Godot[10]实现了。
在这篇文章中,Christian Selig[11]详细介绍了如何将 Godot 开发的游戏场景像普通 SwiftUI 视图一样嵌入到 iOS 应用中。更重要的是,这种整合不仅仅是“把游戏塞进 App”,而是让你能够自由选择开发方式——用 Godot 构建复杂、跨平台的游戏逻辑,用 Swift 构建原生 UI、订阅管理、iCloud 同步等系统集成功能,实现两种开发范式的有机融合。
目前该方案需要在真机运行(模拟器不支持),打包 Godot 游戏会使二进制增大约 30MB。
你有没有想过,为什么 Ventura 是 13,而 Sonoma 是 14?历史上 10.16 与 11 又是如何“共存”的?在 WWDC 2025 即将到来之际,不妨跟随 Howard Oakley[13]的这篇文章,回顾 macOS 从 System 1 到 macOS 15 的版本号演化历程,一窥 Apple 在 UI 展示与系统内核之间如何平衡命名逻辑。
老实说,我始终记不住这些系统版本的别名 🙃
自 iOS 18.4 起,UIKit 对未采用 Scene 生命周期的 App 输出警告日志,并将在未来版本中升级为启动断言[15],意味着 AppDelegate 生命周期即将被彻底废弃。Ashish Kakkad[16]在本文中对比了 applicationWillEnterForeground
与 sceneWillEnterForeground
的具体差异,指出它们在冷启动、调用时机与多窗口场景下的行为并不一致,为开发者迁移提供了参考。
0xdead10cc
是让许多 iOS 开发者头痛的异常,通常源于 App 在挂起前仍持有文件锁,尤其常见于多进程共享 Core Data / SwiftData 数据库文件的场景。在 第 84 期周报[18]中,我们曾分享过一篇文章,其建议“避免共享 Core Data 数据库”。但 Scott Driggers[19]并不打算就此妥协。
在这篇文章中,他详细分析了 0xdead10cc
的定位与诊断流程,并分享了基于 beginBackgroundTask(withName:expirationHandler:)
的修复思路 —— 在执行数据库操作前,主动向系统申请额外的时间:“请先别挂起,让我先做完这件事”。
“Don't Repeat Yourself”(DRY)是许多开发者耳熟能详的编码原则,却在日常开发中常被忽略。Saif[21]在这篇文章中通过多个实用的 Swift 示例,演示了如何利用 函数、扩展、计算属性、泛型、协议扩展等语言特性,让代码更简洁、可读、可维护。
DRY 能有效提升代码质量,但面对“看似相似、实则不同”的逻辑,适当重复往往更清晰。
DataScout[23]是由 Oleksii Oliinyk[24]开发的 macOS 工具,用于调试 SwiftData 和 Core Data 数据库。相较于其它数据库查看工具,DataScout 具备两个显著特点:
#Predicate
宏方式进行筛选查询,无需掌握 SQL 指令。Oleksii 在 这篇文章[25]中详细介绍了该工具的设计理念与背后实现细节。此外,他还提供了开源辅助工具 DataScoutCompanion[26],便于开发者在调试阶段快速检查 SwiftData/Core Data 存储内容。
由 Thomas Ricouard[28]开发的 AppRouter
是一款专为 SwiftUI 打造的轻量级导航路由工具。开发者只需定义 Destination
、Sheet
和 Tab
三种类型并实现对应协议,即可优雅地实现跳转、弹窗、路径控制等导航功能。
对于导航结构不复杂、且主要依赖 SwiftUI 原生组件的应用来说,AppRouter
提供了一个简洁、直观的路由解决方案,值得一试。
暴裂果实是一家成立于 2024 年的新公司,旗下主打产品为 AI 陪伴 App「独响」。独响拥有健康的商业模式,并已获得外部投资。目前我们正在寻找 Flutter 全栈工程师加入团队。岗位要求如下:
我们同时也在招聘内容运营、后端工程师、设计师、产品经理等多个岗位,查看 完整职位信息[30]。
如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞、赞赏,并将其 转发给更多的朋友。
参考资料
[1]
weekly.fatbobman.com: https://weekly.fatbobman.com
[2]
肘子的 Swift 记事本: https://fatbobman.com
[3]
Discord: https://t.ly/gzxeh
[4]
案例: https://www.swift.org/blog/swift-at-apple-migrating-the-password-monitoring-service-from-java/?utm_source=fatbobman%20weekly%20issue%2087&utm_medium=web
[5]
Notepad.exe:轻巧的 Swift 代码编辑器: https://fatbobman.com/zh/posts/notepad-exe-a-lightweight-swift-code-editor/?utm_source=fatbobman%20weekly%20issue%2087&utm_medium=web
[6]
【Tip】使用 Swift-Syntax 的预构建版本,加快编译速度: https://fatbobman.com/zh/snippet/speed-up-compilation-with-prebuilt-swift-syntax/?utm_source=fatbobman%20weekly%20issue%2087&utm_medium=web
[7]
WWDC 2025 愿望清单汇总: https://l.fatbobman.com/w087-01
[8]
Michael Tsai: https://x.com/mjtsai
[9]
在 iOS App 中集成 Godot 游戏不再困难 (Embedding Godot Games in iOS Apps is Easy Now): https://l.fatbobman.com/w087-02
[10]
Godot: https://godotengine.org/?utm_source=fatbobman%20weekly%20issue%2087&utm_medium=web
[11]
Christian Selig: https://x.com/christianselig
[12]
macOS 版本号的前世今生 (A Brief History of Mac OS Version Numbers): https://l.fatbobman.com/w087-03
[13]
Howard Oakley: https://x.com/howardnoakley
[14]
iOS 生命周期中前台切换的处理方式 (iOS Lifecycle: Handling willEnterForeground in AppDelegate and SceneDelegate): https://l.fatbobman.com/w087-04
[15]
启动断言: https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle
[16]
Ashish Kakkad: https://x.com/ashishkakkad8
[17]
SwiftData 中的 0xdead10cc 崩溃排查实录 (Dealing with 0xdead10cc's in SwiftData): https://l.fatbobman.com/w087-05
[18]
第 84 期周报: https://fatbobman.com/en/weekly/issue-084/#sqlite-databases-in-app-group-containers-just-dont
[19]
Scott Driggers: https://www.linkedin.com/in/martin-driggers-4b2b0817a/
[20]
用 DRY 原则写出更简洁易复用的 Swift 代码 (Clean, Reusable Swift Code Using DRY Principle): https://l.fatbobman.com/w087-06
[21]
Saif: https://x.com/saifcodes
[22]
DataScout for SwiftData: https://l.fatbobman.com/w087-07
[23]
DataScout: https://l.fatbobman.com/w087-07
[24]
Oleksii Oliinyk: https://www.linkedin.com/in/oleksii-oliinyk-83482995/
[25]
这篇文章: https://medium.com/@djalex566/behind-the-scenes-of-datascout-a-swiftdata-debugging-tool-dcfc880f0733
[26]
DataScoutCompanion: https://github.com/alex566/DataScoutCompanion
[27]
AppRouter - 轻巧的 SwiftUI 路由方案: https://l.fatbobman.com/w087-08
[28]
Thomas Ricouard: https://x.com/Dimillian
[29]
Flutter 全栈工程师 (客户端方向): https://l.fatbobman.com/w087-09
[30]
完整职位信息: https://l.fatbobman.com/w087-09
[31]
dk@baolieguoshi.com: mailto:dk@baolieguoshi.com
[32]
dk@niucodata.com: mailto:dk@niucodata.com