首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Swift 新设计、新案例、新体验 | 肘子的 Swift 周报 #087

Swift 新设计、新案例、新体验 | 肘子的 Swift 周报 #087

作者头像
东坡肘子
发布2025-06-09 13:07:37
发布2025-06-09 13:07:37
1570
举报

在 weekly.fatbobman.com[1]订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本[2]查看更多的文章。加入 Discord[3]社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

图片
图片

Swift 新设计、新案例、新体验

在 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 做好了充分预热。那么,苹果下一步又将为开发者带来哪些惊喜呢?让我们共同期待这场年度盛会的到来。

原创

Notepad.exe:轻巧的 Swift 代码编辑器[5]

如今,Xcode Playground 似乎已经偏离了最初的设计初衷,而 VSCode 的配置对初学者来说又显得颇为复杂。在这样的背景下,如何轻松地搭建一个适合学习和测试 Swift 语言的开发环境?也许本文介绍的 Notepad.exe 能为你提供满意的答案。

  • 【Tip】使用 Swift-Syntax 的预构建版本,加快编译速度[6]

近期推荐

WWDC 2025 愿望清单汇总[7]

你希望苹果在今年带来什么新特性,能否为开发生态注入新的活力?Michael Tsai[8]整理了众多活跃开发者近期在博客、社交平台上的 WWDC 2025 心愿,包括 Xcode 稳定性改进、SwiftUI 性能优化、插件系统开放、AI 能力引入,以及 TestFlight 审核流程简化、iCloud 免费空间提升等。看看这些愿望中,有哪些会在接下来的 WWDC 2025 发布会上成为现实?

在 iOS App 中集成 Godot 游戏不再困难 (Embedding Godot Games in iOS Apps is Easy Now)[9]

在 SwiftUI 中,开发者长期以来可以借助 SpriteView嵌入 SpriteKit 场景,为 App 增添丰富的互动体验。现在,同样的事情也可以用 Godot[10]实现了。

在这篇文章中,Christian Selig[11]详细介绍了如何将 Godot 开发的游戏场景像普通 SwiftUI 视图一样嵌入到 iOS 应用中。更重要的是,这种整合不仅仅是“把游戏塞进 App”,而是让你能够自由选择开发方式——用 Godot 构建复杂、跨平台的游戏逻辑,用 Swift 构建原生 UI、订阅管理、iCloud 同步等系统集成功能,实现两种开发范式的有机融合

目前该方案需要在真机运行(模拟器不支持),打包 Godot 游戏会使二进制增大约 30MB。

macOS 版本号的前世今生 (A Brief History of Mac OS Version Numbers)[12]

你有没有想过,为什么 Ventura 是 13,而 Sonoma 是 14?历史上 10.16 与 11 又是如何“共存”的?在 WWDC 2025 即将到来之际,不妨跟随 Howard Oakley[13]的这篇文章,回顾 macOS 从 System 1 到 macOS 15 的版本号演化历程,一窥 Apple 在 UI 展示与系统内核之间如何平衡命名逻辑。

老实说,我始终记不住这些系统版本的别名 🙃

iOS 生命周期中前台切换的处理方式 (iOS Lifecycle: Handling willEnterForeground in AppDelegate and SceneDelegate)[14]

自 iOS 18.4 起,UIKit 对未采用 Scene 生命周期的 App 输出警告日志,并将在未来版本中升级为启动断言[15],意味着 AppDelegate 生命周期即将被彻底废弃Ashish Kakkad[16]在本文中对比了 applicationWillEnterForeground与 sceneWillEnterForeground的具体差异,指出它们在冷启动、调用时机与多窗口场景下的行为并不一致,为开发者迁移提供了参考。

SwiftData 中的 0xdead10cc 崩溃排查实录 (Dealing with 0xdead10cc's in SwiftData)[17]

0xdead10cc是让许多 iOS 开发者头痛的异常,通常源于 App 在挂起前仍持有文件锁,尤其常见于多进程共享 Core Data / SwiftData 数据库文件的场景。在 第 84 期周报[18]中,我们曾分享过一篇文章,其建议“避免共享 Core Data 数据库”。但 Scott Driggers[19]并不打算就此妥协。

在这篇文章中,他详细分析了 0xdead10cc的定位与诊断流程,并分享了基于 beginBackgroundTask(withName:expirationHandler:)的修复思路 —— 在执行数据库操作前,主动向系统申请额外的时间:“请先别挂起,让我先做完这件事”。

用 DRY 原则写出更简洁易复用的 Swift 代码 (Clean, Reusable Swift Code Using DRY Principle)[20]

“Don't Repeat Yourself”(DRY)是许多开发者耳熟能详的编码原则,却在日常开发中常被忽略。Saif[21]在这篇文章中通过多个实用的 Swift 示例,演示了如何利用 函数、扩展、计算属性、泛型、协议扩展等语言特性,让代码更简洁、可读、可维护。

DRY 能有效提升代码质量,但面对“看似相似、实则不同”的逻辑,适当重复往往更清晰。

工具

DataScout for SwiftData[22]

DataScout[23]是由 Oleksii Oliinyk[24]开发的 macOS 工具,用于调试 SwiftData 和 Core Data 数据库。相较于其它数据库查看工具,DataScout 具备两个显著特点:

  • 将数据库结构映射为 SwiftData 中的模型定义,方便 SwiftData 开发者;
  • 支持使用 #Predicate宏方式进行筛选查询,无需掌握 SQL 指令。

Oleksii 在 这篇文章[25]中详细介绍了该工具的设计理念与背后实现细节。此外,他还提供了开源辅助工具 DataScoutCompanion[26],便于开发者在调试阶段快速检查 SwiftData/Core Data 存储内容。

AppRouter - 轻巧的 SwiftUI 路由方案[27]

由 Thomas Ricouard[28]开发的 AppRouter是一款专为 SwiftUI 打造的轻量级导航路由工具。开发者只需定义 DestinationSheet和 Tab三种类型并实现对应协议,即可优雅地实现跳转、弹窗、路径控制等导航功能。

对于导航结构不复杂、且主要依赖 SwiftUI 原生组件的应用来说,AppRouter提供了一个简洁、直观的路由解决方案,值得一试。

诚聘

Flutter 全栈工程师 (客户端方向)[29]

暴裂果实是一家成立于 2024 年的新公司,旗下主打产品为 AI 陪伴 App「独响」。独响拥有健康的商业模式,并已获得外部投资。目前我们正在寻找 Flutter 全栈工程师加入团队。岗位要求如下:

  • 至少 2 年 Flutter 开发经验,熟练掌握 Dart 语言,熟悉 Bloc / Provider 等主流状态管理框架
  • 熟悉 iOS / Android 原生开发生态,具备独立上架应用商店的实际经验
  • 熟练掌握 Node.js / Go / Python 等至少一门后端语言,了解 GraphQL 或 gRPC 协议
  • 有独立开发并上线的个人作品(请附 GitHub 或作品集),具备复杂问题的分析与排查能力

我们同时也在招聘内容运营后端工程师设计师产品经理等多个岗位,查看 完整职位信息[30]

THANK YOU

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞赞赏,并将其 转发给更多的朋友。

参考资料

[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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 肘子的Swift记事本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Swift 新设计、新案例、新体验
  • 原创
    • Notepad.exe:轻巧的 Swift 代码编辑器[5]
  • 近期推荐
    • WWDC 2025 愿望清单汇总[7]
    • 在 iOS App 中集成 Godot 游戏不再困难 (Embedding Godot Games in iOS Apps is Easy Now)[9]
    • macOS 版本号的前世今生 (A Brief History of Mac OS Version Numbers)[12]
    • iOS 生命周期中前台切换的处理方式 (iOS Lifecycle: Handling willEnterForeground in AppDelegate and SceneDelegate)[14]
    • SwiftData 中的 0xdead10cc 崩溃排查实录 (Dealing with 0xdead10cc's in SwiftData)[17]
    • 用 DRY 原则写出更简洁易复用的 Swift 代码 (Clean, Reusable Swift Code Using DRY Principle)[20]
  • 工具
    • DataScout for SwiftData[22]
    • AppRouter - 轻巧的 SwiftUI 路由方案[27]
  • 诚聘
    • Flutter 全栈工程师 (客户端方向)[29]
    • THANK YOU
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档