What's new in Xcode 26
Design 进阶 0m

Xcode 26 新特性详解

What's new in Xcode 26

2025年6月9日

在 Apple 官方观看视频

一句话判断

Xcode 26 最大的卖点是 LLM 驱动的 Coding Assistant 正式落地,但更实在的进步是 build 加速、debugger 改善、以及 UI testing 的代码生成革命。

这场 Session 讲了什么

Xcode 26 的更新面非常广,从体感上可以分成三个层次。第一层是”更轻更快”:下载体积缩小 24%(比 2014 年的 Xcode 6 还小),workspace 加载速度提升 40%,某些复杂表达式的输入延迟降低 50%。Simulator runtime 默认不再包含 Intel 支持,Metal toolchain 按需下载。

第二层是编辑器和调试器的实质增强。编辑器 tab 行为改为类似 Safari 的逻辑,新增 pin tab 功能。搜索引入了”多词搜索”模式,用搜索引擎技术找项目中邻近出现的多个关键词。Voice Control 支持 Swift 语法模式,可以用自然语音读写代码。新增 #Playground 宏可以在任意代码文件中内联调试逻辑,结果实时显示在 canvas 中。Icon Composer 作为独立工具随 Xcode 26 附带,统一管理多平台多模式的 app 图标。String Catalog 增加了类型安全的 Swift symbol 生成和基于 on-device model 的自动注释。

第三层是 Coding Assistant 的正式登场。Xcode 可以接入 ChatGPT、Anthropic Claude(支持 Opus 和 Sonnet)、以及本地模型(Ollama、LM Studio),提供项目感知的代码问答、修改、playground 生成、fix 生成。Coding Tools 菜单提供对选中代码的快捷操作。修改历史可以时间线上回溯和回滚。调试器现在能跟随 Swift concurrency 的线程切换,显示 task ID 和并发类型变量的可读表示。Instruments 新增 Processor Trace(M4+ 设备)和 Power Profiler。UI testing 的代码生成系统完全重写,Automation Explorer 可以在失败报告中检查元素属性并生成修正代码。

值得深挖的点

LLM Coding Assistant 的定位与局限

Xcode 26 的 Coding Assistant 支持多家 LLM provider,这是一个务实的选择。ChatGPT 集成开箱即用,有每日免费额度;Anthropic Claude 需要自带 API key;本地模型通过 Ollama/LM Studio 接入,适合对数据隐私敏感的场景。

assistant 的核心能力是项目感知:它能读取你的项目上下文、通过 @ 符号引用具体 symbol 或文件、甚至从 UI 草图生成代码。修改默认自动应用,但 Xcode 会在每次修改前保存 snapshot,可以通过 modification history 回滚。这个设计很聪明——降低了”AI 改坏了代码”的风险感知。

但 trade-off 很明显。首先,自动上下文注入虽然方便,但大型项目的 context window 可能不够用,导致模型只看到局部代码而做出不一致的修改。其次,自动应用修改的默认行为对不信任 AI 的开发者来说是个心理负担——虽然可以回滚,但”先改了再说”的工作流需要适应。最后,Coding Assistant 对 Swift 代码的理解明显优于对 Objective-C 或 C++ 的理解,混合语言项目的体验可能打折。

实际建议:把 Coding Assistant 当作加速器而非替代品。用它探索不熟悉的代码库、生成 boilerplate、批量修复 deprecation warning。但对于核心业务逻辑和架构决策,仍然需要人工 review。

UI Testing 代码生成的质变

Xcode 26 的 UI 测试录制系统完全重写,这可能是这次更新中最被低估的变化。以前的录制系统生成的代码要么过于脆弱(硬编码坐标),要么过于冗长(每个操作都是一长串 query)。新系统生成的代码更简洁,会自动选择最佳的元素识别方式,并提供多个 identifier 选项让你挑选。

Automation Explorer 在测试失败报告中引入了完整的元素属性检查。当测试因为元素类型不匹配(比如期望 TextField 但实际是 Text View)而失败时,Explorer 会直接显示正确的识别代码,一键复制替换。这解决了 UI 测试维护中最大的痛点——“测试又挂了,到底是 bug 还是 UI 改了”。

XCTHitchMetric 的加入让 UI 测试不仅能验证功能,还能验证滚动动画的流畅度。Hitch Time Ratio 直接量化了卡顿的时间占比,可以在 CI 中作为性能回归的 gate。

Trade-off:录制生成的代码质量虽然提高了,但仍然不能替代手动设计的 page object 模式。录制适合快速生成初始测试骨架,但长期维护还是需要人工重构。

代码片段

1. #Playground 内联调试

场景:在代码文件中直接调试一个正则表达式的匹配结果。

import Playgrounds

#Playground {
    let pattern = /(-?\d+\.\d+)/
    let input = "36.0669,-112.1074"
    let match = input.firstMatch(of: pattern)
    // Canvas 实时显示匹配结果和高亮范围
}

坑:Playground 的表达式会在每次编辑时重新执行,如果表达式有副作用(如网络请求),会产生意外的重复调用。

2. Coding Tools 快捷操作

场景:用 Coding Assistant 给选中的代码生成一个 playground。

// 选中这段代码,然后调出 Coding Tools 菜单选择 "Generate Playground"
struct Landmark: Identifiable {
    let id: String
    var name: String
    var coordinate: CLLocationCoordinate2D
}

坑:Coding Assistant 的修改默认自动应用。如果你想要先 review 再 apply,需要在 conversation 面板中关闭自动应用 toggle。

3. UI 测试录制生成代码

场景:录制一个编辑 collection 的 UI 测试。

func testEditCollection() throws {
    let app = XCUIApplication()
    app.launch()

    app.tabBars.buttons["Collections"].tap()
    app.buttons["Add Collection"].tap()

    let titleField = app.textFields["Collection Title"]
    titleField.tap()
    titleField.typeText("My Favorites")

    app.buttons["Save"].tap()
}

坑:录制生成的元素 identifier 可能有多个选项(accessibility label、accessibility identifier、placeholder 等)。优先选择 accessibility identifier,因为它最稳定。

最佳实践

  • 用 Coding Assistant 探索不熟悉的代码库时关闭自动应用修改,先理解模型的建议再决定是否采纳。
  • 在 Signing & Capabilities 编辑器中统一管理 usage description,避免手动修改 Info.plist 导致的遗漏。
  • 新项目开启 Explicitly Built Modules(Xcode 26 默认启用),享受 debugger 响应速度的显著提升。
  • 用 UI 测试录制快速生成初始测试骨架,然后重构为 page object 模式以降低维护成本。
  • 对有显著攻击面的 app(社交、消息、浏览器)启用 Enhanced Security capability。
  • 使用 Xcode Organizer 的 Metric Recommendations 对照同类 app 评估自己的 launch time 等关键指标。

还有什么值得关注

  • Swift Build 已开源并在 GitHub 上接受社区贡献,正在被集成到 SwiftPM 中以统一 Xcode 和开源工具链的 build 引擎。
  • String Catalog 现在能用 on-device model 自动生成 localized string 的上下文注释,对翻译团队非常有价值。
  • Processor Trace(M4+ 设备)是 profiling 的范式转变——从采样近似变为捕获每一条分支和函数调用,包括 ARC 内存管理。
Design Swift SwiftUI 开发工具