Xcode 27 的新功能
What’s new in Xcode 27
2026年6月10日
一句话判断
✅ “Coding Agent 终于从侧边栏玩具变成了编辑器里的一等公民,甚至包揽了多语言本地化和 Organizer 性能修复的脏活。“
这场 Session 讲了什么
以前用 Xcode 写代码,AI 辅助总像是个外挂插件,切个窗口、看个建议挺割裂的。Xcode 27 直接把 Coding Agent(编码智能体)塞进了编辑器主视图,支持 Tab 和分屏,还加了 /plan 命令让它先规划再动手。
Xcode 终于放下了“必须建个工程才能写代码”的架子。现在你可以直接双击打开一个独立的 Swift 文件,自带 Canvas 预览和 Playground 结果,写个原型或者测试个算法再也不用先等 Xcode 索引半个地球了。Device Hub(设备中心)也整合了模拟器和真机的调试,连 iPhone Mirroring(iPhone 镜像)的窗口缩放测试都给你做好了。
这对每天在 Xcode 里泡 8 小时以上的开发者影响最大。UI 定制、主题切换这些是锦上添花,但 Agent 接管 String Catalogs(字符串目录)翻译和 Organizer(组织器)里的性能崩溃修复,实打实地能帮你省下周末加班的时间。
值得深挖的点
Coding Agent 从“代码补全”到“工程代办”
Apple 这次对 Coding Agent 的定位非常清晰:不只是帮你补全两行代码,而是让它干那些“必须做但极其烦人”的工程脏活。最典型的就是本地化和 Organizer 修复。
以前搞多语言,你要提取字符串、建 String Catalogs、找翻译、填表格。现在 Agent 可以直接扫描代码,自动创建 Catalog 并生成多语言翻译。在 Organizer 里,面对线上报上来的 Animation hitches(动画卡顿)或 OOM,Agent 能直接分析堆栈并给出修复建议。
这种设计的 trade-off 很明显:Apple 在赌开发者愿意把“理解项目上下文”的权限交给 AI。把 Agent 放在编辑器里并支持 /plan 命令,就是为了缓解这种不信任感——你可以先审查它的计划,再让它改代码。相比 Cursor 或 GitHub Copilot 的纯文本对话,Xcode 27 的 Agent 深度绑定了 Xcode 的构建系统和诊断数据(比如 Instruments 的 Top Functions),这是第三方插件做不到的护城河。坑在于,如果项目历史包袱太重、代码规范太差,Agent 生成的翻译或修复建议可能会带来灾难性的“幻觉”,审查 /plan 的成本可能会超过自己手写的成本。
独立 Swift 文件与 Device Hub:回归纯粹的编码体验
Xcode 长期被吐槽“太重”,很大一部分原因是它强迫你用 Project/Workspace 的思维来管理一切。Xcode 27 允许直接打开独立 Swift 文件并支持 #Preview,这是对 Swift Playgrounds 和轻量级脚本需求的一次巨大妥协与修正。
你不需要建一个 App 靶标(Target)就能跑 UI 预览,这对于开发独立 UI 组件库、写算法题或者做技术预研(Spike)来说体验极佳。配合重新设计的 Device Hub,你可以在一个统一窗口里把这段代码扔到模拟器、真机甚至 iPhone Mirroring 环境里看效果。
Apple 做这个是为了降低 Swift 的学习和试用门槛,同时对标 VS Code 那种“打开即写”的轻量感。优势在于启动速度飞快,没有索引地狱;潜在的坑是,独立文件缺乏完整的包管理(SwiftPM)上下文,如果你在这个文件里 import 了复杂的第三方库,预览可能会直接失败。它更适合“单文件闭环”的场景,而不是替代正规的工程开发。
代码片段
1. 独立 Swift 文件的极速 UI 预览
场景:不建工程,直接新建一个 .swift 文件测试 SwiftUI 组件。
import SwiftUI
// 定义一个独立的卡片组件
struct FlightCard: View {
let destination: String
var body: some View {
VStack(alignment: .leading) {
Text("飞往 \(destination)")
.font(.headline)
Text("登机口: A12")
.foregroundStyle(.secondary)
}
.padding()
.background(.thinMaterial, in: .rect(cornerRadius: 12))
}
}
// 直接在独立文件中使用 #Preview 宏
#Preview("东京航班") {
FlightCard(destination: "东京")
}
#Preview("纽约航班", traits: .landscapeLeft) {
FlightCard(destination: "纽约")
}
坑:独立文件没有 Target 上下文,不要在这里 import 非系统自带的第三方库,否则 Preview 会一直转圈报错。
2. 使用 String Catalog 宏进行本地化
场景:配合 Coding Agent 自动生成的 String Catalog,在代码中使用类型安全的本地化字符串。
import Foundation
// Xcode 27 中,String Catalog 会自动生成类型安全的访问器
// 假设 Agent 已经帮你生成了 Localizable.xcstrings 并翻译了多语言
func getBoardingMessage(gate: String) -> String {
// 使用自动生成的 String Catalog 宏,避免硬编码字符串 key
// 如果 key 不存在,编译期就会报错,而不是运行时显示 key 本身
return String(localized: "BOARDING_MESSAGE_\(gate)")
}
// 更好的做法:让 Agent 将带参数的字符串提取为带变量的 Catalog 条目
func getBoardingMessageV2(gate: String) -> String {
// 推荐:使用字符串插值,String Catalog 会自动识别并生成带占位符的翻译
return String(localized: "Please proceed to gate \(gate) for boarding.")
}
坑:千万别用字符串拼接(如 "Hello " + name)来做本地化,一定要用字符串插值,否则 String Catalog 无法正确提取上下文,翻译人员也会骂人。
最佳实践
- 已有项目的迁移策略:不要一上来就全局开启 Agent 自动修复。先在 Organizer 里挑几个低优先级的 Animation hitches 或 Metric Goals(指标目标)未达标的问题,让 Agent 生成
/plan,人工 Review 它的思路后再 Apply。本地化方面,先让 Agent 跑一遍 String Catalogs 生成,重点人工校对带有上下文歧义的 UI 文案。 - 新项目的采用建议:习惯使用独立 Swift 文件做 UI 预研。在写核心业务逻辑前,先建一个
.swift文件,用#Preview把各种边界情况(如超长文本、暗黑模式、动态字体)跑通,再移入主工程。这能大幅减少后期的 UI 调整时间。 - 实战中容易踩的坑:Xcode 27 的 Inline Issues(内联问题)在打字时变淡了,这虽然减少了视觉干扰,但容易让你忽略潜在的语法错误。建议保持
Cmd + B的肌肉记忆,不要完全依赖编辑器里变淡的预测提示,以免在长代码块末尾积累一堆编译错误。
还有什么值得关注
- Toolbar 完全自定义:Xcode 27 的顶部工具栏终于支持拖拽重排和增删控件了,你可以把 Scheme 选择器或者特定的运行按钮放到最顺手的位置。
- Instruments 新增 Top Functions 视图:查性能瓶颈时不用再大海捞针了,这个新视图直接按耗时列出最昂贵的代码路径,抓卡顿效率翻倍。
- 项目专属主题(Per-project Themes):你可以给不同的项目设置不同的 Xcode 主题配色(比如公司项目用冷色调,个人 Side Project 用 Neon Noir),靠窗口颜色就能瞬间分清当前在改哪个代码库。