Have You Registered for WWDC 2025 Group Labs Yet?
Three months ago, during my communication with a certain Apple department, I reiterated my expectation for Apple to continue hosting group Q&A activities like Lounges or Ask Apple. I'm delighted to see that WWDC 2025 brings back this new group interaction initiative in the form of Group Labs.
From the information currently disclosed, besides switching the participation platform from Slack to Webex, there have been some adjustments to the group categorization. The persistence frameworks and iCloud services that I personally follow closely don't have corresponding Labs, which perhaps suggests to some extent that these areas won't see major changes this year. Meanwhile, SwiftUI continues to maintain its dedicated Lab rather than being integrated into a comprehensive UI framework Lab, an arrangement that also highlights SwiftUI's significance.
Due to time zone differences, the scheduling of these activities isn't particularly friendly for me (mostly happening during midnight or early morning hours). However, I still greatly enjoy the process of carefully browsing through the Q&A content after the live sessions, always learning quite a bit and staying updated with the latest developments. I'm just slightly concerned that with the platform switch to Webex, whether these valuable interactive contents will still be available for review for some time after the live sessions.
Compared to the intensive interactions during WWDC, I'm more looking forward to Apple continuing to host Ask Apple-like activities in the months following WWDC. By that time, developers will have gained some practical experience with the new APIs, making their questions more targeted and helping them better understand Apple engineers' responses, thereby fostering deeper technical discussions.
Regardless, being able to continue this group Q&A tradition is worthy of recognition. If you haven't registered yet, I'd suggest not hesitating. You can register to participate in the activity here.
Previous Issue|Newsletter Archive
If you appreciate my work and want to promote your product to the Swift and iOS developer community, sponsoring my blog & newsletter could be an excellent opportunity for you.
Original
Experience the Charm of Swift: One-Click DataFrame Export
The more I work with Swift, the more captivated I am by its elegance. Swift allows me to express programming ideas with clarity, precision, safety, modernity, and grace. While these traits are easy to appreciate in theory, I recently built a small feature—just over a hundred lines—that beautifully brought them all together.
By combining Swift’s generics, KeyPath
, protocol extensions, and ResultBuilder
, we’ll build a type-safe DataFrame export utility that integrates seamlessly with TabularData. Let’s explore column mapping, conditional logic, and a concise DSL syntax to experience the unique charm of Swift.
Recent Recommendations
Exploring Concurrency Changes in Swift 6.2
Many developers have found themselves puzzled by the evolution of concurrency in Swift 6. In this article, Donny Wals highlights several important updates in Swift 6.2: nonisolated(nonsending)
, the @concurrent
attribute, and the NonisolatedNonsendingByDefault
feature flag. While these changes may seem subtle, they can significantly alter execution context and default behavior—understanding and applying them well takes time and practice.
Learning (or wrestling with) concurrency might just become part of the daily rhythm throughout the Swift 6 cycle.
Creating Xcode Source Editor Extensions
Is Xcode missing a feature? Maybe we can build it ourselves. In this article, Moritz Philip Recke walks through creating, debugging, and distributing a Source Editor Extension in Xcode 16.2. From adding a new target, configuring Info.plist
, implementing XCSourceEditorCommand
, to testing with a second instance of Xcode and finalizing code signing—the entire development process is covered.
Xcode's plugin ecosystem still lags behind other IDEs, largely due to Apple's conservative APIs. Let's hope for more openness in Xcode 17.
Apple Developer Relations
Everyone has a WWDC wish list. For troz, improving developer relations may be more urgent than flashy new features. In this post, he proposes three constructive ideas: open up iOS like macOS, make Feedback Assistant more transparent, and fix the long-criticized App Review process.
Once lost, trust is harder to regain than to build. Developers care more about Apple’s everyday attitude than the enthusiastic WWDC keynotes.
Mesh Gradients in SwiftUI
SwiftUI in iOS 18 and macOS 15 introduces MeshGradient
, a powerful new way to define complex, multi-directional gradients via control points. Unlike linear or radial gradients, mesh gradients enable nuanced and non-linear color transitions. Natalia Panferova walks through its basic usage (defining mesh size and color grid), advanced control via BezierPoint
, and dynamic animation using TimelineView
.
As iOS 19 nears, this "new" feature might finally find its way into more real-world products.
Reading Piped Input in Swift Executables
Swift isn’t just for iOS. It shines in CLI development too. In this article, Natan Rolnik demonstrates how to handle piped input using Swift—a common requirement for command-line tools. Through building a JSON beautifier, he shows how to check for piped input, read from standard input asynchronously, and process data efficiently.
Understanding LLDB Print Commands for iOS Debugging with Xcode
LLDB provides several print commands for inspecting variables at breakpoints. Natascha Fadeeva explains three of the most useful ones: v
, p
, and po
. She recommends using p
or po
for general-purpose debugging due to their flexibility, and v
when dealing with time-sensitive code, such as concurrency issues, where evaluating expressions may cause side effects.
Tools
ImmutableData
Co-Created by Rick Van Voorden and Bill Fisher, ImmutableData
is a SwiftUI state management architecture inspired by Flux and Redux. Tailored for modern Apple platforms, it emphasizes:
✅ Unidirectional data flow
✅ Immutable values
✅ Functional programming principles
✅ Strict separation of concerns and modular design
At its core, the framework encourages declarative UI with immutable state. All state transitions are triggered via Actions and processed in a centralized State layer, with the View layer reacting to state changes via subscriptions—strictly following the Action → State → View flow.
Want to see how this can be adopted incrementally? Check out the official migration tutorial: ImmutableData-FoodTruck
ObservableDefaults - Elegant Persistence in SwiftUI
ObservableDefaults
is a Swift library I created to provide two practical macros that seamlessly integrate UserDefaults and NSUbiquitousKeyValueStore (iCloud KVS) into SwiftUI’s Observation system. By simply declaring properties, you can automatically bind them to local or cloud-based storage. SwiftUI views will automatically react to value changes—whether triggered from within the app, via iCloud sync, or from external sources. It enables persistent data to flow naturally within SwiftUI’s reactive architecture.
注册 WWDC 2025 的 Group Labs 了没?
三个月前,在与苹果某部门的交流中,我重申了对苹果继续举办 Lounges 或 Ask Apple 这类群体问答活动的期待。令人欣喜的是,WWDC 2025 中,全新的群体互动项目以 Group Labs 的形式回归了。
从目前披露的信息来看,除了将参与平台从 Slack 切换至 Webex 外,群组的分类设置也有了一些调整。我个人比较关注的持久化框架和 iCloud 服务并未设立对应的 Lab,这或许在一定程度上暗示着这些领域今年不会有太大的变动。而 SwiftUI 继续保有了独立的 Lab,而非整合在综合 UI 框架的 Lab 中,这一安排也凸显出 SwiftUI 的重要性。
受时差影响,这些活动的举办时间对我而言并不友好(基本都在半夜或凌晨时段)。不过,我依然很享受在直播结束后细细浏览互动问答内容的过程,从中总能学到不少知识,也能了解到许多最新动态。只是平台切换至 Webex 后,我略有些担心这些宝贵的互动内容是否还能在直播后继续保留一段时间供我们回顾。
相比 WWDC 期间的密集互动,我更期待苹果能在 WWDC 结束后的几个月里继续举办类似 Ask Apple 的活动。彼时,开发者们对新 API 已有了一定的实践经验,提出的问题会更有针对性,也更容易理解苹果工程师的解答,从而促成更加深入的技术探讨。
无论如何,能够延续这样的群体问答传统就值得肯定。如果你还未注册,建议不要犹豫。你可以在 此处 注册参与该活动。
如果您发现这份周报或我的博客对您有所帮助,可以考虑通过 爱发电,Buy Me a Coffee 支持我的创作。
原创
感受 Swift 的魅力:一键导出 DataFrame
随着对 Swift 理解的不断深入,我愈发被它的魅力所吸引。Swift 让我能以清晰、准确、安全、现代且优雅的方式表达编程思想。当我想要细数这些特质时,却发现难以言喻。直到最近在项目中实现了一个百余行的功能模块,才将这些吸引我的特性完美串联起来。通过 Swift 的泛型、KeyPath、协议扩展与 ResultBuilder,我们将打造一款类型安全的 DataFrame 导出工具,与 TabularData 完美结合。一起来探索列映射、条件逻辑以及简洁的 DSL 语法,感受 Swift 的独特魅力。
近期推荐
Swift 6.2 并发新特性 (Exploring Concurrency Changes in Swift 6.2)
相信不少开发者在 Swift 6 的演进过程中,都曾被并发系统的新特性“困住”过。这篇文章中,Donny Wals 着重介绍了 Swift 6.2 中的几个关键更新:nonisolated(nonsending)
、@concurrent
以及 NonisolatedNonsendingByDefault
编译标志。这些变化看似细节,但实际影响代码运行的上下文与默认行为,理解并灵活运用它们仍需要一定时间的消化和实践。
或许,沉浸(挣扎)于并发特性的学习,将成为 Swift 6 全周期的“开发日常”。
创建 Xcode 插件 (Creating Xcode Source Editor Extensions)
Xcode 缺少某些能力?没关系,也许我们自己可以补上这一块。Moritz Philip Recke 以 Xcode 16.2 为基础,详细介绍了如何从零开始创建、调试并发布一个 Source Editor Extension。从添加扩展 Target、配置 Info.plist、实现 XCSourceEditorCommand
协议,到使用独立 Xcode 实例调试、完成打包与签名,文章覆盖了整个开发与分发流程。
Xcode 插件生态远不如其他 IDE/编辑器繁荣,其中一个重要原因是苹果开放的权限过于保守,开发者能进行的增强操作非常有限。希望在不远的 Xcode 17 上能看到一些改变。
苹果开发者关系 (Apple Developer Relations)
每个人都有自己的 WWDC 愿望清单,而对 troz 来说,或许“修复与开发者的关系”比新增功能更为迫切。在这篇文章中,他提出了三点颇具建设性的建议:开放 iOS,效仿 macOS 的灵活性;提升反馈系统的透明度;改进长期为人诟病的 App 审核流程。
信任一旦流失,重建远比建立初始信任更为艰难。相比 WWDC 台上的热情发言,开发者更在意 Apple 是否在日常真正视他们为伙伴。
Mesh Gradients in SwiftUI
在 iOS 18 和 macOS 15 中,SwiftUI 引入了全新的 MeshGradient
,让我们可以通过一组控制点定义复杂而自然的多方向渐变。相比线性或径向渐变,Mesh Gradient 支持更细腻、非线性的色彩过渡,非常适合用于背景、图形填充甚至动画效果。Natalia Panferova 从基本使用方法(定义点阵大小、颜色数组),到高级技巧(使用 BezierPoint
控制色彩延展方向),再到动画示例(通过 TimelineView
动态更新点位置),全面介绍了该 API 的能力边界。
随着 iOS 19 的临近,这个“新特性“,或许将开始在更多产品中焕发光彩。
使用 Swift 处理管道输入 (Reading Piped Input in Swift Executables)
Swift 并不只是 iOS 的专属语言。在 CLI 工具开发领域,它同样能够优雅高效地处理数据流。在这篇文章中,Natan Rolnik 详细介绍了如何使用 Swift 处理管道(piped)输入 —— 这是构建命令行工具时的常见需求。文章以一个将 JSON 美化输出的小工具为例,从检测标准输入到异步读取数据,完整展示了实现流程与关键细节。
LLDB 打印命令 (Understanding LLDB Print Commands for iOS Debugging with Xcode)
LLDB 提供了多种打印命令,用于在断点处高效检查变量状态。Natascha Fadeeva 在本文中详细介绍了三种常用命令:v
、p
和 po
。她建议在日常调试中优先使用 p
或 po
,因为它们支持计算属性和方法调用,灵活性更高;而在处理并发或竞态等时序敏感问题时,使用不会执行代码的 v
命令则更加稳妥,能有效避免运行时副作用。
工具
ImmutableData
由 Rick Van Voorden 和 Bill Fisher 创建的 ImmutableData
是一个受 Flux / Redux 架构启发而构建的 SwiftUI 状态管理框架,专为现代 Apple 平台量身定制。该架构强调:
✅ 单向数据流(Unidirectional Data Flow)
✅ 不可变数据(Immutable Values)
✅ 函数式编程思维
✅ 严格的关注点分离与模块化设计
其核心主张是:摒弃传统 MVC/MVVM 架构中对“可变状态”的依赖,转而构建一个声明式、可组合、可测试的状态管理系统。所有状态更新都通过 Action 触发,状态层响应更新,视图层自动订阅变更并重新渲染 —— 严格遵循数据从 Action → State → View 的单向流动。
如果你想了解如何将这个框架逐步引入现有项目,可以参考官方的迁移教程项目:ImmutableData-FoodTruck
ObservableDefaults - 让持久化数据优雅地融入 SwiftUI
ObservableDefaults
是我创建的一个 Swift 库,提供两个实用的宏,用于将 UserDefaults 和 NSUbiquitousKeyValueStore(iCloud KVS)无缝集成到 SwiftUI 的 Observation 系统中。你可以通过声明属性的方式,自动将其与本地或云端存储关联,SwiftUI 视图将自动响应这些值的变更 —— 无论变更来自应用内部、iCloud 同步,还是系统外部。让持久化数据优雅地融入 SwiftUI 的响应式架构。
Thanks, great issue.
It made me discover the trick with TimelineView to animate a MeshGradient. I’ll add it in the app I’m currently building!