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

What's new in Xcode 27

观看原视频

Highlight

Xcode 27 将 Coding Agent 嵌入编辑器主视图,支持 /plan 命令先规划后执行;新增 Device Hub 统一管理模拟器与真机调试;Organizer 引入 Metric Goals 和 Agent 驱动的性能修复建议;Instruments 新增 Top Functions 视图快速定位性能瓶颈。

核心内容

工作区重塑:从千篇一律到千人千面

以前打开 Xcode,工具栏的布局是固定的。Scheme 选择器、运行按钮、编辑器模式切换挤在 jump bar 里,长分支名被截断,想调整顺序?没门。

Xcode 27 把工具栏完全交给了开发者。(01:14)历史导航、编辑器控件从 jump bar 移到了顶部工具栏,构建进度显示在窗口标题下方,分支选择器则挪到了底部状态栏——长分支名终于可以完整显示了。最关键的是,工具栏现在支持拖拽增删和重排,你可以把最常用的控件放在最顺手的位置。

主题系统也迎来了大改。(02:23)Appearance 面板里有两个滑块:一个控制文字颜色强度,一个控制背景强度。把背景强度拉满,编辑器背景会变成鲜艳的渐变。不满意预设?可以自定义基础色调,所有派生颜色自动跟随。更妙的是,每个 workspace 可以独立设置主题——给公司的项目配冷色调,给自己的 side project 配 Neon Noir,靠窗口颜色就能一眼分清当前在改哪个代码库。

代码编辑时的视觉干扰也减少了。(01:07)Xcode 27 的 inline issues(实时问题提示)采用了更淡的样式,与构建后的警告/错误区分开来。你在打字时看到的预测性问题提示是淡色的,构建后确认的问题才会显示全强度颜色,或者被自动消除。

打开即写:独立 Swift 文件与无标题项目

以前想快速验证一个 SwiftUI 组件,你得先创建一个完整的 App 项目,等 Xcode 索引完才能开始写代码。这个过程可能要等几十秒,灵感早跑了。

Xcode 27 打破了”必须有项目才能写代码”的束缚。(06:08)从 File 菜单可以直接创建无标题项目(Untitled Project),没有保存对话框打断你,先写代码、后命名保存。不满意?直接丢弃,不留痕迹。

更轻量的是独立 Swift 文件。(07:13)双击打开一个 .swift 文件,即使它不属于任何项目,Xcode 27 也能在 Canvas 中显示 Playground 结果和 UI 预览。同事发你一个算法实现或者 UI 原型,打开就能看效果,不需要把整个项目 clone 下来。

Coding Agent:从代码补全到工程协作

Xcode 27 的 Coding Agent 不再是侧边栏里的聊天窗口,而是编辑器里的一等公民。(07:50)对话记录移到了编辑器面板中,你可以像管理普通代码文件一样用 Tab 和分屏来组织 Agent 对话。工具栏中央新增了 Agent 入口按钮,一键发起新对话或任务。

/plan 命令是这次更新的重头戏。(08:31)在让 Agent 动手改代码之前,你可以先用 /plan 让它先制定实施计划。Agent 会收集必要的上下文,甚至可以派生子 Agent 并行工作。计划生成后,你可以逐条审阅、添加内联反馈,确认无误后再让 Agent 执行。执行过程中,所有代码变更实时显示在右侧面板,生成的文件、截图等产物也一目了然。

Coding Assistant 侧边栏则是一个任务看板。(09:28)所有并行的 Agent 对话和任务列在这里,未读消息和需要输入的状态清晰可见,方便你在多个任务间切换。

Device Hub:模拟器与真机的统一控制台

以前调试 iOS 应用,模拟器是一个独立的窗口,真机调试又要另开一套流程。Xcode 27 用 Device Hub 把两者统一了。(09:57

在 iPhone 17 Pro 模拟器上运行应用,Device Hub 会打开一个紧凑的窗口,尺寸刚好匹配设备。窗口可以展开,展开后获得 Inspector 和更多控件。(10:26)你可以直接在 Device Hub 里切换高对比度、调整动态字体大小、测试深色模式——这些辅助功能测试以前需要在模拟器设置里翻好几层菜单。

iPhone Mirroring 的测试也集成进来了。(11:02)macOS 27 上的 iPhone Mirroring 窗口支持缩放,Device Hub 让你可以测试不同宽高比和内容尺寸下的表现。如果你的 SwiftUI 视图已经支持了 iPad 和 Mac 上的可调整窗口,这里基本不用额外改动。

最实用的是真机支持。(11:52)侧边栏里模拟器和真机并列显示,配对好的 iPad Pro 上运行的应用可以直接在 Device Hub 里查看和控制。一台 Mac 上就能同时测试多种形态的设备。

本地化:Agent 包办翻译全流程

多语言本地化一直是体力活。提取字符串、创建 String Catalog、逐条翻译、测试布局,每一步都耗时。

Xcode 27 让 Agent 接管了大部分工作。(13:35)在 Agent 对话中请求”为项目设置本地化”,Agent 会扫描代码、确保字符串字面量可被本地化引用、创建 String Catalog 并填充所有 UI 字符串的翻译。整个过程只需要几次对话往返。

String Catalog 本身也有更新。(15:22)选中一种语言后,点击 Generate Translations 按钮,Agent 在后台批量生成翻译。你可以随时在 Agent 对话或 String Catalog 中查看进度。翻译完成后立即运行应用,检查布局截断和文本溢出。

TestFlight 用户也能参与翻译审校。(15:52)母语用户像反馈普通功能一样提交翻译建议,形成闭环。

Organizer:从看数据到解决问题

Organizer 在 Xcode 27 里不再只是数据的陈列柜,而是能主动帮你解决问题的助手。(17:16

Overview 页面重新设计,诊断信息和指标图表放在同一个视图里。(17:58)顶部指标图表的 spike 告诉你哪里出了问题,下方的诊断信息直接指向代码位置,不需要在两个页面间跳来跳去。

新增了两个指标:Storage(存储占用)和 Hitches(动画卡顿)。(18:21)Storage 指标把文档、数据和二进制包大小分开统计,帮你找到减包的最佳切入点。Hitches 指标则超越了原来的滚动卡顿检测,覆盖了 Liquid Glass 和 SwiftUI 视图的动画场景——那些以前检测不到的动画问题现在无所遁形。

Metric Goals(指标目标)替代了原来的 Recommendations。(19:38)目标基于你的应用类型和技术栈,与同类型应用对比校准,同时参考你自己的历史基线。覆盖的指标更多了:hang rate(卡顿率)、disk writes(磁盘写入)、battery(电量消耗)、storage 和 hitches。

最实用的是 Generate Recommendations 功能。(20:32)在 Organizer 里选中一个性能问题,点击 Generate Recommendations,Agent 会分析诊断数据并给出修复建议。你可以迭代尝试不同的修复角度,直到找到适合代码库的解决方案。

Instruments:Top Functions 直击性能要害

性能调试最怕大海捞针。Instruments 的调用树深不见底,找到真正的瓶颈要花大量时间。

Xcode 27 新增了 Top Functions 视图。(22:02)选中一个时间范围,点击 Top Functions 按钮,Instruments 直接按耗时列出最昂贵的函数。那些因为被频繁调用而累积大量时间的操作,在这个视图里会立刻暴露出来。

演讲中的例子很典型:(22:51paperPhysics 函数霸占了 Top Functions 列表,原因是循环迭代次数设得太高——这是调试时留下的代码,忘记改回去了。把迭代次数从调试值降到 5,动画卡顿立即消失。修复后再跑一次 Instruments,Top Functions 里已经没有应用自己的方法了,证明问题确实解决了。

Xcode Cloud:一键开启 CI/CD

Xcode Cloud 的设置流程在 Xcode 27 里大幅简化。(25:28)点击 Get Started,确认应用和开发团队,连接远程代码仓库,点击 Start First Build——三步搞定。之后每次提交到 main 或 feature 分支,Xcode Cloud 都会自动构建和测试。构建结果与 TestFlight 和 App Store 无缝集成。

详细内容

工具栏自定义与编辑器模式切换

Xcode 27 工具栏的右侧有一个三向选择器,控制编辑器模式:(01:46

  • 第一项:在 Canvas 中显示预览和 Playground
  • 第二项:在 Assistant Editor 中显示相关内容
  • 第三项:进入 Source Control 变更审查模式
// 在独立 Swift 文件中使用 #Preview 宏测试 UI
import SwiftUI

struct AirplaneStatsView: View {
    let designName: String
    let glideRatio: Double
    
    var body: some View {
        VStack(alignment: .leading) {
            Text(designName)
                .font(.headline)
            Text("滑翔比: \(glideRatio, specifier: "%.2f")")
                .foregroundStyle(.secondary)
        }
        .padding()
    }
}

#Preview("经典设计") {
    AirplaneStatsView(designName: "Dart", glideRatio: 3.5)
}

#Preview("高性能设计") {
    AirplaneStatsView(designName: "Nakamura Lock", glideRatio: 5.2)
}

关键点:

  • #Preview 宏在独立 Swift 文件中也能工作,不需要项目上下文
  • 可以给预览命名,方便在 Canvas 中区分不同场景
  • 适合快速验证 UI 组件、测试算法原型、分享代码片段

使用 /plan 命令与 Agent 协作

/plan 是 Xcode 27 Agent 工作流的核心入口:(08:31

/plan
为纸飞机应用添加统计功能,显示不同设计的滑翔比、
飞行距离和滞空时间。需要考虑 SwiftUI 布局和动态类型支持。

Agent 执行流程:

  1. 收集项目上下文(代码结构、依赖关系)
  2. 分析需求并制定实施计划
  3. 派生子 Agent 并行探索不同方案
  4. 生成结构化计划文档,包含步骤清单
  5. 开发者审阅计划,添加内联反馈
  6. 确认后 Agent 开始实施,变更实时显示

关键点:

  • /plan 让 Agent 先思考再动手,避免盲目修改代码
  • 计划阶段可以反复迭代,不触碰实际代码
  • 实施阶段的变更在右侧面板实时可见,随时可中断

Agent 驱动的本地化工作流

Xcode 27 的本地化流程分两步:初始设置和增量添加语言。

初始设置(Agent 对话中执行):(13:35

请为项目设置本地化,从西班牙语开始。

Agent 自动完成:

  1. 扫描代码中的字符串字面量
  2. 将硬编码字符串替换为 String(localized:) 调用
  3. 创建 Localizable.xcstrings 文件
  4. 生成西班牙语翻译

增量添加语言(String Catalog 界面操作):(15:22

// 代码中使用字符串插值,Agent 能正确提取带占位符的翻译
func boardingMessage(gate: String, time: String) -> String {
    String(localized: "Please proceed to gate \(gate) for boarding at \(time).")
}

关键点:

  • 使用字符串插值而非拼接,String Catalog 才能正确识别变量占位符
  • Agent 翻译时结合项目上下文和 Xcode 的语言风格指南
  • 翻译完成后立即运行应用,检查布局截断

Organizer Metric Goals 解读

Metric Goals 的对比维度:(19:38

对比维度说明
同类型应用基于应用功能和技术栈的相似应用群体
历史基线应用自身过往版本的表现数据
目标阈值Apple 根据上述数据校准的合理目标

Storage 指标细分:(18:26

  • Documents:用户文档和数据
  • Data:应用缓存和数据库
  • Binary:应用包体大小(影响蜂窝下载和启动时间)

Hitches 指标覆盖场景:(19:11

  • 滚动动画卡顿(原有)
  • Liquid Glass 效果渲染
  • SwiftUI 视图过渡动画
  • 非滚动触发的 UI 动画

Instruments Top Functions 使用步骤

定位性能瓶颈的标准流程:(22:02

  1. 在 Xcode 中运行应用(模拟器或真机均可)
  2. 打开 Instruments,选择 Time Profiler
  3. 录制应用运行,复现卡顿场景
  4. 在时间轴上选中卡顿发生的时间段
  5. 点击 Top Functions 按钮
  6. 查看按耗时排序的函数列表
  7. 用 Cmd+Shift+O 在 Xcode 中定位到对应代码
  8. 修复后重新录制,确认问题函数从 Top Functions 中消失
// 修复前:调试代码遗留的高频计算
func paperPhysics() {
    // 错误:迭代次数过高,导致每帧耗时过长
    for _ in 0..<10000 {
        simulateAirflow()
    }
}

// 修复后:降低精度要求
func paperPhysics() {
    for _ in 0..<5 {
        simulateAirflow()
    }
}

关键点:

  • Top Functions 擅长发现”单次不耗时但调用次数极多”的问题
  • 修复后 Top Functions 中不再出现应用方法,是性能改善的有力证据
  • 可以对比修复前后的 Instruments 录制,量化改进效果

核心启发

1. 用独立 Swift 文件做 UI 组件预研

  • 做什么:在正式接入项目前,用独立 .swift 文件 + #Preview 快速验证复杂 UI 组件的各种状态
  • 为什么值得做:不需要等待项目索引,不需要处理 Target 依赖,修改-预览循环极快
  • 怎么开始:File > New > Swift File,写好组件代码后加上 #Preview 宏,Canvas 自动显示预览

2. 让 Agent 接管 String Catalog 维护

  • 做什么:每次新增 UI 文案后,让 Agent 自动提取、翻译并更新 String Catalog
  • 为什么值得做:避免手动维护字符串 key 的繁琐和出错,Agent 能结合上下文给出更准确的翻译
  • 怎么开始:在 Agent 对话中请求”更新本地化”,或在 String Catalog 中点击 Generate Translations

3. 用 Device Hub 做辅助功能回归测试

  • 做什么:每次发版前,在 Device Hub 里快速过一遍高对比度、大字体、深色模式三种辅助功能场景
  • 为什么值得做:Device Hub 把这些切换做成了快捷按钮,测试成本从几分钟降到几秒
  • 怎么开始:在 Device Hub 窗口中点击展开,找到 Inspector 中的辅助功能控件

4. 用 Organizer Metric Goals 监控版本质量

  • 做什么:每次发版后查看 Organizer 的 Metric Goals,关注 Storage、Hitches、Hang Rate 是否达标
  • 为什么值得做:Goals 基于同类型应用对比和历史基线,能提前发现用户还没投诉的性能退化
  • 怎么开始:Window > Organizer > 选择应用 > Overview 页面查看指标趋势

5. 用 Top Functions 替代猜测式性能优化

  • 做什么:遇到动画卡顿或响应迟缓时,先用 Instruments Top Functions 定位真正的热点
  • 为什么值得做:避免凭直觉修改代码、反复测试的低效循环,一次录制就能找到症结
  • 怎么开始:Product > Profile,选择 Time Profiler,复现问题后选中时间范围点击 Top Functions

关联 Session

评论

GitHub Issues · utterances