北京时间 6 月 9 日凌晨,WWDC26 就要开场了。
如果你也做 Apple 平台开发,大概率已经熟悉这个节奏:Keynote 看个热闹,Platforms State of the Union 标出今年的大方向,接下来几天 Session 一场接一场发布。刚开始每个话题都想看,过一周收藏夹里堆满视频,等真正遇到问题时,又得重新搜索:这个 API 是哪一年讲的?SwiftUI 的推荐写法变过几次?Swift 6 的并发迁移到底应该从哪里下手?
人读的时候,需要一个能按年份、主题和关键词慢慢翻的中文入口。Agent 回答问题时,需要的是另一种东西:能把建议落回具体 Session 的来源。wwdc-notes 做了这两件事:一个给人浏览的网站,一个给 Codex 等 Agent 调用的 WWDC Skill。
面向人的 WWDC 中文知识库
wwdc-notes 当前收录 1032 场 Session,覆盖 2020 到 2025 这六届 WWDC:

整体网页风格仿照 Apple 设计,左侧是年份和分类,右侧是具体 Session。想补 WWDC 特定年份内容,从年份进入;想系统看 Developer Tools 或 Machine Learning,从分类进入;已经知道关键词,直接搜索。
一篇 Session 笔记的结构设计
单篇笔记的提纲,没有按视频时间线来排。WWDC Session 往往会先铺背景、再演示 API、最后补一些边界条件;但读者打开文章时,最先想知道的通常是另一件事:这场 Session 里最值得关注的变化是什么,它为什么重要,放到项目里应该怎么用。
所以每篇文章基本都按这个顺序组织:先给一句话判断,再讲 Session 主线,然后挑 1-2 个值得深挖的点展开,最后补代码片段、最佳实践和一些容易忽略的细节。以 WWDC 2025 的 What’s new in SwiftUI 为例。
- 一句话判断:
SwiftUI 这次最值得关注的不是 Liquid Glass 的视觉变化,而是
TextEditor终于支持了AttributedString——用纯 SwiftUI 构建富文本编辑器第一次成为现实。
- Session 主线:
过去五年里,任何需要富文本编辑的 SwiftUI 应用都不得不桥接
UITextView,写一堆UIViewRepresentable样板代码。现在TextEditor原生支持AttributedString、选区管理和查找导航,这条桥接层终于可以拆了。
- 值得深挖的点:
TextEditor 的富文本支持:为什么等了这么久
@Animatable 宏:编译器替你写代码
- 代码片段:
// @Animatable 宏:一行代码替代过去 20 行的 Animatable 协议实现。
@Animatable
struct PulseRing: View {
var scale: CGFloat // 自动获得动画能力
var body: some View {
Circle()
.stroke(.blue, lineWidth: 3)
.scaleEffect(scale)
}
}
// 坑:如果属性类型不支持 VectorArithmetic,编译器会报错,
// 但错误信息不一定能直接告诉你哪个属性有问题
- 最佳实践:
已有项目:xxx
新项目:xxx
visionOS 开发者:xxx
- 还有什么值得关注:
scrollEdgeEffectStyle() 为滚动视图带来边缘视觉效果,和 Liquid Glass 配合效果很好
完整文章内容:SwiftUI 新特性。
面向 Agent 的 Skill
浏览网站适合“我想了解一个领域”。当你已经卡在一个具体问题上,比如迁移 Swift 6、定位 SwiftUI 卡顿、选择 visionOS 场景形态,再去网页里一篇篇翻就慢了。这时候更自然的入口,是直接问 Agent。为了方便 Agent 理解这些 wwdc 知识,我把视频内容「蒸馏」成了一个 Skill。
wwdc-notes Skill 做的事很简单:先判断问题属于 SwiftUI、Swift Concurrency、Xcode、Machine Learning、Spatial Computing 等哪个领域,再从 1032 场 Session 中找证据。
一次对照实验
让两个独立的 Codex subagent 回答同一个问题:
- 模型和 reasoning effort 相同;
- 问题、字数限制和输出语言相同;
- 都不使用网络;
- 唯一区别是其中一个加载了
wwdc-notesSkill。
问题是:
我正在将一个已有 SwiftUI 项目迁移到 Swift 6。
Sendable、Actor isolation 和@MainActor应该如何逐步处理?请说明迁移顺序、常见误区和依据。
不使用 Skill
未使用 Skill 的回答并不差。它给出了清楚的五步迁移顺序:
先升级编译环境,再确定 Actor isolation 边界,然后处理跨隔离边界的数据、旧回调和
@Sendable闭包,最后启用 Swift 6 严格检查。
它也准确指出了多个常见误区,包括:
- 不要给整个项目都加
@MainActor; - 不要把
Sendable当作共享状态的保护机制; - 不要随意使用
@unchecked Sendable; - 不要把
Task.detached当作普通后台线程工具。
这已经是一个能拿去开工的回答。但它停在“经验建议”这一层:没有来源,也没有说明这些建议分别来自 Swift 并发哪几年的演进。你要继续确认,还是得自己回去搜。
使用 WWDC Notes Skill
加载 Skill 后,回答并没有变得更“花”,但明显更像一份可以追溯的技术建议。差异主要体现在三处。
- 它把“逐步迁移”拆成了 Apple 在 WWDC24 里推荐的具体路径:
先为最底层 framework/package 开启
Strict Concurrency Checking = Complete,保持 Swift 5 模式,把警告清零后再切到 Swift 6;最后迁移 App、Widget、Extension 等上层 target。[WWDC24-10169]
-
它把 Actor 和 Sendable 放回了 Swift 并发的演进线里。Actor 保护共享可变状态来自 2021 年的 Swift Concurrency 系列,Sendable 和数据隔离检查在 2022 年被系统化解释,Swift 6 迁移则是 2024 年正式落地的工程路径。这样你看到的不是一组孤立建议,而是一条从语言模型到迁移实践的时间线。
-
它补上了一个非常 SwiftUI 的坑:
不要认为所有 SwiftUI 代码都只在主线程运行。
View.body和多数 UI 状态受@MainActor保护,但Shape.path(in:)、Layout、visualEffect、部分几何回调可能通过@Sendable闭包在后台执行。[WWDC25-266]
这条信息很关键,因为很多 SwiftUI 迁移问题不是出在普通业务 actor,而是出在这些看起来“还在 UI 里”的闭包。没有 Skill 的回答主要讨论 UI 状态应该放在 @MainActor,这是对的;但它没有提醒你 SwiftUI 里还有一批会被后台调用的 @Sendable 场景。
这份回答最后落到了四场相关 Session:
[WWDC21-10133]:用 Swift Actor 保护可变状态;[WWDC22-110351]:使用 Swift Concurrency 消除数据竞争;[WWDC24-10169]:将 App 迁移到 Swift 6;[WWDC25-266]:探索 SwiftUI 中的并发。
如果把两份回答放在一起看,差别大概是这样:
| 维度 | 不使用 Skill | 使用 WWDC Notes Skill |
|---|---|---|
| 迁移步骤 | “逐模块启用严格检查” | 明确到 target 顺序、Complete Checking、Swift 5 到 Swift 6 的切换 |
| 概念关系 | Actor / Sendable / MainActor 都讲到了 | 把 Actor、Sendable、Swift 6 迁移分别关联到对应 WWDC Session |
| SwiftUI 细节 | 主要强调 UI 状态应在 @MainActor | 补充 Shape.path(in:)、Layout、visualEffect 等后台 @Sendable 场景 |
| 可追溯性 | 没有来源,读者需要重新搜索 | 每个关键判断后面都有 Session ID,可以继续读原文 |
| 适合场景 | 快速得到通用迁移建议 | 需要判断建议来源、技术演进和后续学习路径 |
使用 WWDC Notes
如果你只是想浏览,可以直接打开网站:wwdc.zhangferry.com。它更适合慢慢翻:看某一年 WWDC 的重点,或者沿着 SwiftUI、Developer Tools、Machine Learning 这类主题补课。
如果你已经在 Agent 里写代码,想让 Agent 带着 WWDC 上下文回答问题,可以安装 Skill:
npx skills@latest add zhangferry/wwdc --skill wwdc-notes
装好之后,可以直接问这类问题:
Swift 6 迁移怎么做?
NavigationStack 相比旧导航方案解决了什么问题?
SwiftUI 状态管理这几年怎么演变的?
Instruments 里怎么定位 SwiftUI 卡顿?
它不是 Apple 官方文档的替代品,最低系统版本、API 弃用状态、最新签名这些信息,还是应该回到 Apple Developer 文档确认。wwdc-notes 更适合做另一件事:帮你找到某个问题在 WWDC 里是怎么被讲清楚的,它从哪一年开始出现,后来又怎样演进。
WWDC26 马上开始,新的 Session 很快又会涌进来。每年看 WWDC 时,最容易丢掉的不是热情,而是上下文。希望下一次你想找一个 Apple 平台问题的来龙去脉时,不必从一堆收藏夹和搜索结果里重新开始。
项目仓库:zhangferry/wwdc。