WWDC Quick Look 💓 By SwiftGGTeam
What's new in Xcode

What's new in Xcode

观看原视频

Highlight

Xcode 14 体积缩小 30%,构建速度提升最高 25%,链接器速度提升最高 2 倍;SwiftUI 预览默认可交互并支持多变体并排对比;代码补全更智能;Organizer 新增 TestFlight 反馈和 Hangs 报告;支持单 Target 多平台应用开发。

核心内容

安装和启动更快

Xcode 14 的下载包体积缩小了 30%,安装时间显著缩短。额外的平台和模拟器可以按需下载——你可以立即获取需要的组件,也可以等到首次使用时再自动下载。

SwiftUI 预览增强

00:58

SwiftUI 预览画布现在默认就是交互式的。你修改代码时,预览会实时更新,无需手动刷新。

更实用的是新增的预览变体(Preview Variants)功能。点击画布上的变体按钮,可以不写任何代码就创建多个预览变体,并排对比不同场景下的 UI 表现:

  • 深色/浅色模式
  • 不同 Dynamic Type 字号
  • 横屏/竖屏方向

01:24

在 Food Truck 示例中,开发者并排展示了三个不同 Dynamic Type 尺寸下的卡片视图,立刻发现大号字体下第一个图标过宽导致文字换行不自然。这种视觉反馈在 Xcode 13 中需要手动切换设置才能看到,现在一目了然。

更智能的代码补全

02:53

Xcode 14 的代码补全有几个关键改进:

Initializer 自动补全:当你开始输入初始化器时,Xcode 会提供完整的初始化器模板,包含所有参数和默认值。

Codable 方法补全init(from:)encode(to:) 方法现在也能自动补全。

默认值参数标注:有默认值的参数在补全列表中用斜体显示。如果你直接接受补全,这些参数会被省略,使用默认值;如果你想覆盖,可以手动输入参数名加入。

SF Symbols 集成:组件库现在包含所有 SF Symbols,可以直接搜索并插入对应的 SwiftUI 代码。

Frame 等复杂 modifier 的智能补全frame() 这种有大量可选参数的 modifier,补全时会根据你已输入的内容动态推荐最相关的参数。

导航和错误展示改进

06:01

Jump to Definition 重新设计:当方法来自协议且有多个实现时,定义列表会高亮每个结果的差异,显示具体的类型信息,帮助你快速选择正确的实现。

Callers 列表:Command-click 方法名选择 Callers,可以看到所有调用位置及上下文预览,直接跳转到具体的调用代码。

错误变灰机制:当你修改代码后,Xcode 会先让旧的错误信息变灰,表示正在重新评估。长构建过程中也能清楚区分最新构建的问题和之前遗留的问题。

悬浮定义面包屑:编辑器顶部显示当前可见代码所在的定义层级,即使已经滚动到定义之外也能看到上下文。测试方法旁的菱形按钮可以直接运行单个测试。

Swift 5.7 正则表达式字面量

06:36

Swift 5.7 引入了正则表达式字面量,Xcode 提供编译期检查:

// 正则表达式字面量支持编译期验证
let regex = /\d+ records/

关键点:

  • 正则表达式语法会高亮显示
  • 拼写错误会在编译时报错,而不是运行时才发现
  • 修改表达式后,错误会先变灰,确认修复后消失

构建性能提升

10:05

Xcode 14 通过三个层面的优化提升构建速度:

Swift Module 提前生成:传统构建流程中,编译框架源码 → 生成模块 → 编译应用源码 → 链接应用。Xcode 14 会尽早生成 Swift 模块,解除后续任务的依赖阻塞,让更多任务并行执行。

链接器并行化:链接器速度提升最高 2 倍。

整体效果:项目构建速度提升最高 25%,核心数越多的机器提升越明显。

Build Timeline:构建日志中新增了可视化时间线,可以直观看到每个任务耗时和依赖关系。示例中一个 script phase 把构建限制在单核运行,问题一目了然。

测试和分发加速

12:10

  • 并行测试消除了 Target 和测试类之间的调度依赖,测试执行时间提升最高 30%
  • macOS 应用公证(notarization)速度提升 4 倍
  • Interface Builder 文档加载速度提升 50%,设备栏切换速度提升 30%

单 Target 多平台应用

13:41

Xcode 14 支持用单个 Target 定义多平台应用。你在 Target 中列出支持的平台,Xcode 会自动处理平台差异,你只需要描述每个平台上独特的部分。这消除了多 Target 之间同步设置和文件的麻烦。

Organizer 新增报告

17:04

TestFlight 反馈:Organizer 窗口新增 Feedback 标签页,直接展示所有 TestFlight 反馈,包括评论和截图。检查器面板显示测试者信息和设备配置,可以直接从 Xcode 发邮件联系测试者。

Hangs 报告:新增 Hangs 标签页展示 App Store 用户遇到的最严重卡顿问题。每个卡顿按影响程度排序,附带加权堆栈追踪。检查器面板显示问题在特定 iOS 版本或设备上的分布情况,可以直接跳转到项目中的对应代码。

内存调试器增强

14:13

内存调试器现在可以显示对象的所有引用路径(而不仅仅是最短路径),帮助你更全面地理解对象为何泄漏。同时新增对象总重量(total weight)指标,评估对象对内存的整体影响。

Swift Package 插件

14:47

Swift Package 现在支持插件:

  • 代码处理插件:linter、formatter 等,可以直接从项目导航器调用
  • 构建工具插件:生成代码、处理资源(如压缩图片、生成 RPC 接口代码)
  • Package 资源支持本地化

应用图标单尺寸模式

19:28

对于不需要像素对齐的简洁图标,Xcode 14 新增了 Single Size 模式。只需提供一张图片,Xcode 会自动生成所有需要的尺寸。在 Asset Catalog 中选择图标,在检查器中把”All Sizes”切换为”Single Size”即可。

详细内容

使用预览变体验证 UI

01:03

在 SwiftUI 视图的预览画布上,点击变体按钮(variants button)即可添加预览变体:

struct CardStack_Previews: PreviewProvider {
    static var previews: some View {
        CardStack()
    }
}

关键点:

  • 变体按钮在画布工具栏中,点击后选择要变化的属性(Color Scheme、Dynamic Type Size、Orientation)
  • 系统会自动生成并排预览,无需修改代码
  • 适合快速验证 UI 在不同辅助功能设置下的表现
  • 发现布局问题后可以立即在代码中修复,预览实时更新

智能代码补全的使用

02:53

以给 CardView 添加带默认值的初始化器为例:

struct CardView: View {
    let image: Image
    let headerIcon: Image  // 新增属性
    let title: String
    let content: String
    
    // Xcode 14 会自动补全整个初始化器
    init(image: Image, headerIcon: Image? = nil, title: String, content: String) {
        self.image = image
        self.headerIcon = headerIcon ?? image  // 默认使用相同图片
        self.title = title
        self.content = content
    }
}

关键点:

  • 开始输入 init 时,Xcode 提供完整的初始化器模板
  • 接受默认值后,可以在此基础上修改
  • 调用时带默认值的参数用斜体显示,直接回车会省略该参数
  • 需要覆盖默认值时,输入参数名的一部分即可 opt-in

使用 Build Timeline 分析瓶颈

11:31

构建完成后,在 Report Navigator 中打开构建日志,点击 Build Timeline 标签:

  • 时间线展示每个构建任务的开始时间、持续时间和依赖关系
  • 长条形任务表示耗时操作,可能是优化目标
  • 串行执行的区域(只有一个任务在运行)通常表示存在依赖瓶颈
  • 示例中发现一个 script phase 独占一条时间线,说明它阻塞了并行构建

核心启发

  • 用预览变体做 UI 回归测试:在开发每个新视图时,添加深色模式、大号字体、横屏三个变体预览。提交代码前快速扫一眼,确保没有布局问题。入口:画布工具栏的变体按钮。

  • 用 Build Timeline 优化 CI/CD:把 Build Timeline 加入 CI 流程,定期分析构建瓶颈。重点关注 script phase 和自定义构建规则,它们往往是并行化的最大阻碍。入口:Report Navigator → 构建日志 → Build Timeline 标签。

  • 用 Swift Package 插件自动化代码规范:在团队中引入 SwiftLint 或 SwiftFormat 作为 Package 插件,开发者可以直接从项目导航器运行,无需额外安装工具。入口:Package.swift 中添加 .plugin target。

  • 用 Organizer Hangs 报告指导性能优化:每周查看 Organizer 中的 Hangs 报告,按影响程度排序,优先修复影响用户最多的卡顿。入口:Window → Organizer → Hangs 标签。

  • 单 Target 管理跨平台代码库:新项目直接用单 Target 支持 iOS 和 macOS,用条件编译和平台特定文件处理差异。减少维护多个 Target 的同步成本。入口:Target 设置 → General → Supported Destinations。

关联 Session

评论

GitHub Issues · utterances