Xcode 15 新特性:智能补全、宏与 String Catalog
What's new in Xcode 15
2023年6月5日
一句话判断
Xcode 15 的代码补全变聪明了——它能根据文件名建议类型名、根据上下文排序常用修饰符、展示所有默认参数组合——加上资产目录的 Swift 符号和 String Catalog,日常开发效率会明显提升。
这场 Session 讲了什么
Session 全面介绍了 Xcode 15 的改进,涵盖编辑器、资产管理、本地化、文档、Swift Macros 集成和开发工具链。
智能代码补全。补全现在利用多种信息源:新建文件时根据文件名建议类型名;函数调用时展示所有默认参数排列组合,用方向键选择需要的版本;上下文感知排序——在 VStack 后建议 padding(最常用修饰符),在 Text 后建议 font;已使用的修饰符会降权,避免重复建议;成对属性智能关联(输入 latitude 后自动建议 longitude)。
资产目录的 Swift 符号。颜色和图片资产现在有自动生成的 Swift 符号,代码中直接引用无需字符串。如果重命名资产,构建时报错并可通过代码补全快速修正。这彻底消除了”运行时才发现图片名拼错”的问题。
String Catalog。通过 Edit > Convert to String Catalog 将项目迁移。所有本地化字符串集中在一个编辑器中,左侧边栏显示各语言的翻译进度,构建时自动检测新增/删除的字符串并标注受影响的语言。
文档预览。Editor > Assistant > Documentation Preview 提供实时文档预览。边写文档边看效果,支持代码示例和截图。文档 Catalog 可以包含图片资源。
Swift Macros 集成。Xcode 完整支持宏的开发和调试:Quick Actions(Command-Shift-A)中可以展开宏查看生成代码、在宏代码中设断点、逐步调试。宏的包模板自带示例。
模拟器下载。现在所有模拟器(包括 iOS 和 visionOS)都是可选下载,Xcode 初始安装包更小。
值得深挖的点
补全的上下文感知深度:不只是简单的”最近使用排序”,而是结合了代码位置(VStack vs Text)、已有修饰符(避免重复)和属性关联(latitude-latitude 对)。这些微妙的改进累积起来显著减少了查找文档和输入错误。
String Catalog 的构建时检测:每次构建都会扫描源码中的字符串变化,在编辑器中标注受影响的语言。这比”翻译人员事后发现遗漏”的工作流要好得多——本地化问题在开发阶段就能被发现。
资产符号的类型安全:Color.customRed 和 Image.multipleClouds 是编译时检查的符号,不是字符串。这把资源引用从”约定式”变成了”编译式”,与 Swift 的安全理念一致。
代码片段
资产目录的 Swift 符号引用:
// 以前:字符串引用,拼错只有运行时才知道
Image("MultipleClouds")
Color("CustomRed")
// Xcode 15:类型安全的符号引用
Image(.multipleClouds) // 编译时检查
Color(.customRed) // 自动补全
// 如果重命名资产,构建时报错:
// "Cannot find 'multipleClouds' in scope"
// 用代码补全快速修正为新名称
使用 String Catalog 管理本地化:
// 源码中使用 String(localized:) 标记可本地化字符串
Text(String(localized: "welcome_message",
defaultValue: "Welcome to Backyard Birds"))
// 或者使用 Text 的本地化初始化器
Text("Welcome to Backyard Birds") // 自动进入 String Catalog
// String Catalog 编辑器中:
// - 左侧显示所有语言的翻译进度
// - 新增字符串自动标注
// - 删除字符串在对应语言中标记
// - 支持复数形式和字符串变体
最佳实践
- 迁移到资产目录的 Swift 符号引用,逐步替换字符串引用
- 使用 Edit > Convert to String Catalog 迁移本地化到统一管理
- 在文档注释中利用 Documentation Preview 实时检查排版效果
- 遇到宏时用 Quick Actions(Command-Shift-A)展开查看生成代码
- 利用方向键在函数补全中切换不同的默认参数组合
还有什么值得关注
- Swift Macros 的创建和分发最佳实践
- String Catalog 与现有 .strings / .stringsdict 文件的迁移细节
- Xcode 15 在构建速度和内存使用方面的改进
- 测试导航器和测试报告的 UI 改进