
在 weekly.fatbobman.com 订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本 查看更多的文章。加入 Discord 社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。
Blender 正在开发 iPad 版本
几天前,Blender 基金会宣布正在开发用于 iPad Pro 运行的原生版本,并针对 Apple Pencil 进行了专门优化。初版将专注于基础对象操作和雕刻功能,后续版本会加入 Grease Pencil 和故事板功能。特别值得注意的是,这并非某些专业软件那样的 iPadOS 功能阉割版,而是一个具备完整功能的 Blender iPadOS 原生应用。
项目目前仍处于早期开发阶段,想要尝鲜的开发者可以在 Xcode 中自行编译当前代码并提前体验。Megabits 也在 YouTube 上分享了详细的安装教程视频。
无论是正在开发中的 Blender iPad 版本,还是几个月前已登陆 App Store 的 Xogot(Godot 游戏编辑器 iPad 版),这些功能强大且在桌面端都拥有复杂 UI 的专业应用纷纷登陆 iPad,说明 iPad 现在的硬件性能已经完全能够满足这些应用的运行需求。开发团队显然认为,为这项艰巨的移植工作付出努力将会得到应有的回报。
几年前,苹果就希望 iPad 能够进入更多专业领域,但受限于专业软件的匮乏,"你的下一台电脑,何必是电脑"的愿景推广并不算顺利。今年 iPadOS 26 大幅改善了多窗口能力,在系统层面提供了与 macOS 相似的观感和体验,这或许能促使更多专业应用开发团队有兴趣为 iPad 提供原生版本。
此前,除了个别专业领域外,iPad 更多时候被专业用户用来解决使用 MacBook 不便时的一些边缘场景需求。随着 iPad 软硬件能力的不断提升和生态系统的日趋完善,它或许将不再仅仅是桌面设备的补充,而会在专业领域走出属于自己的独特生态之路。
原创
Core Data 迁移事故复盘:那些被忽视的隐藏陷阱
相比一些开源框架,Core Data 和 SwiftData 虽然有苹果的官方背书,但它们的"黑盒"特性在出现异常时常令开发者束手无策,难以及时定位问题并找到有效解决方案。本文记录了一次因 Core Data 数据模型迁移导致的应用启动超时事件,分享解决方案,并深入剖析背后的成因。
本期推荐
不确定类型 (Uncertain⟨T⟩)
在编程中我们习惯了追求确定性,尤其是在 Swift 这类强类型语言里。但现实世界往往充满不确定性,例如 GPS 偏移、网络延迟或传感器噪声等。这些模糊但又可信的数据,传统的布尔逻辑难以准确表达。在本文中,Mattt 介绍了他构建的 Uncertain 类型,支持开发者以类型安全的方式建模与推理不确定性信息,为 Swift 带来了更贴近现实的表达能力。
SwiftUI 视图组合技巧 (How to Create and Combine SwiftUI Views Without Getting Lost in Deep Nesting and Complex Layouts)
随着 SwiftUI 项目的不断扩展,UI 组件日益复杂,嵌套层级也随之加深,许多视图逐渐演变成"胖视图"。那么该如何解构这些视图,让它们更优雅、安全、易维护且高效?在本文中,Matteo Manferdini 通过实际示例,逐步演示了如何借助 SwiftUI 提供的内建布局组件、View 样式机制与 ViewBuilder 参数,构建可读性强且高度可配置的 UI 组件。
调试思路分享 (A Peek into My Debugging Process)
调试不仅是"修 bug",更是理解代码、掌握系统行为、构建稳健应用的核心能力。在这篇文章中,Pol Piella 分享了他处理三个真实线上问题的全过程,涵盖 SwiftUI 崩溃、性能回退,以及系统权限弹窗误触发的完整排查链路。Pol 强调:"调试的关键是定位",只有掌握合适的工具,建立系统性的排查流程,才能真正高效地解决问题、节省时间。
SwiftUI 与 Core Animation 中的 Group 全解析 (SwiftUI + Core Animation: Demystify All Sorts of Groups)
drawingGroup()
、compositingGroup()
、geometryGroup()
是 SwiftUI 中常见但易混淆的修饰器,尽管名字相近,其底层行为却大不相同。本文中,Weichao Deng 从 Core Animation 的视角出发,结合 Xcode 的视图调试工具,逐一剖析这些修饰器的实现机制与使用注意事项,帮助你更准确地理解它们在渲染管线中的作用。
掌握底层原理,不只是为了"用得更好",更是为了解决问题时能够有的放矢。
SwiftData 启动失败的常见原因与排查方法 (All the Ways SwiftData's ModelContainer Can Error on Creation)
相较于 Core Data,SwiftData 在加载数据库失败时提供的信息更为有限。Scott Driggers 通过自定义 loggedFatalError
替代 fatalError
,并配合日志收集与上传机制,成功获取了更详细的错误上下文。在这篇文章中,他总结了多个真实的崩溃案例,深入分析了 SwiftData 初始化失败的几种常见原因,并逐一提供了解决方案:包括模型版本不匹配、磁盘空间不足、多进程并发迁移等问题。
迁移至 Swift Actors
自 Swift 5.5 引入以来,actor 已逐渐成为 Swift 并发模型的重要组成部分。但不少开发者仍对其用途和特性理解不深。Saafo 在本文中首先回顾了 actor 相较于传统锁、队列方案的优势,随后结合实际项目经验,详解如何将现有类重构为 actor,以及如何在异步与同步世界之间桥接,使其能够逐步集成进当前代码库。
Swift 6.2 并发模型实战全指南 (Mastering Swift 6.2 Concurrency: A Complete Tutorial)
Swift 6.2 在并发模型上持续推进,新增多个有助于开发者迁移与调试的工具。Mathis Gaignet 在本文中系统梳理了 6.2 中与并发相关的重要更新,包括:默认主线程隔离、nonisolated(nonsending) 与 @concurrent 的使用语义、严格并发与 Sendable 推理机制、SwiftUI 实战陷阱解析,以及结构化并发的典型应用场景。文中还介绍了如何借助 Instruments 工具发现主线程阻塞问题。
工具
TrackWeight - 用触摸板来称重
一个脑洞大开的 macOS 应用:将你的 MacBook 触控板变成一个精确的数字称重秤!由 Krish Shah 开发的这个开源项目,在短短几天内便获得了数千颗 Star。
macOS 触控板只有在检测到电容接触时,才会触发压力事件------这意味着称重时,你的手指(或其他导电物体)必须始终与触控板保持接触。
Xcode Project Renamer
重命名 Xcode 项目一向麻烦,稍有不慎就可能导致项目无法编译。但使用 Marko Tadić 开发的 Xcode Project Renamer 工具,整个流程可以简化为一条命令:
bash
./rename.swift "$OLD_PROJECT_NAME" "$NEW_PROJECT_NAME"
脚本会自动遍历项目目录中所有文件和文件夹,将旧项目名替换为新名称------无论是在文件名还是文件内容中。
Stewart Lynch 在这支视频中演示了使用方式,还介绍了通过 Homebrew 安装优化版命令行工具 xp-rename 的方法:
bash
brew install stewartlynch/formulae/xp-renamer
⚠️ 唯一不会被自动重命名的是项目的根目录,需要手动更改。
iOS 后端选型速查图
你需要云服务吗?是否该自建服务器?该用 CloudKit、Firebase,还是其他方案?Leo G Dion 制作的这份 cheat sheet,通过图文方式系统梳理了 iOS 后端选型的关键路径,涵盖适用场景、技术要求与成本考量,适合作为项目立项阶段的决策参考。图中还特别标注了哪些方案可运行 Swift 服务器端代码。
想了解这张速查图背后的分析思路?可以阅读这篇配套文章:Choosing the Best Backend for your iOS App。
往期内容
- F1:电影很好看,赛事很挣钱 - #094
- 变暗的 Liquid Glass 和消失的 Apple Intelligence - #093
- 高温与奇怪的天象 - #092
- Swift 的多平台策略,需要我们大家一起来建设 - #091
THANK YOU
如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞 并将其 转发 给更多的朋友。
在 weekly.fatbobman.com 订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本 查看更多的文章。加入 Discord 社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。