Edit
Code Completion
它提供更全面的代码建议,并使用周围的代码上下文,如函数名称和注释。
使用条件: Xcode 16, macOS Sequoia
在中国境内购买的mac 不可用此功能
Swift 6 Updates
Swift 6 新的语言模式提供了针对并发安全的保证。它将数据竞争转换为运行时问题。并提供语言特性的警告。
启用特定特性的警告:
- 在项目设置中,找到 Swift 编译器的设置选项。
- 启用与特定语言特性相关的警告选项。
解决警告:
- 编译代码,并检查编译器发出的警告信息。
- 逐个解决这些警告,以确保代码兼容新特性并符合并发安全要求。
测试和验证:
- 在解决警告后,运行项目的测试用例,验证代码的正确性和稳定性。
- 确保所有并发操作都符合新的安全标准,避免数据竞争问题。
Preview
提供了两个新的 API 用于预览改进
@Previewable Macro
它将像 State 一样附加属性包装器,并允许我们直接在预览块中使用它。无需编写包装器视图。
通过上面代码可以看到:
以前使用 #Preview 宏时,无法定义本地状态变量;而使用Previewable 标记变量即可在 SwiftUI 预览中使用动态属性。
PreviewModifier
previewModifier
的引入让预览的环境或数据共享变得更加简单。这不仅减少了重复代码,还帮助预览系统缓存数据,提高开发效率。通过previewModifier
,我们可以在预览期间应用特定的修改器,这些修改器仅在预览中生效,而不会影响实际运行时的视图。
swift
@Observable
class ModelContainer {
var snacks: [String] = []
}
struct SnackView: View {
@Environment(ModelContainer.self) private var container
var body: some View {
Text(container.snacks.first ?? "no data")
.padding()
.background(Color.yellow)
.cornerRadius(8)
}
}
Old Preview
swift
#Preview("Old") {
SnackView()
.environment(ModelContainer())
}
PreviewModifier
swift
// 实现 PreviewModifier 协议来定义共享的数据环境
struct SampleData: PreviewModifier {
typealias Context = ModelContainer // Context 定义为 ModelContainer
// 创建共享的数据环境
static func makeSharedContext() async throws -> ModelContainer {
let container = ModelContainer()
container.snacks = [
"Potato Chips",
"Chocolate",
"Popcorn"
]
return container
}
// 在预览中应用共享的数据环境到视图
func body(content: Content, context: ModelContainer) -> some View {
content.environment(context)
}
}
extension PreviewTrait where T == Preview.ViewTraits {
@MainActor static var sampleNamer: Self = .modifier(SampleData())
}
#Preview("New in Xcode 16", traits: .sampleNamer, body: {
SnackView()
})
对比结果
Builder
Xcode 16 将提供显式模块,从而改善并行性、优化诊断和加快调试速度。Objective-C 将默认提供显式模块,但在 Swift 中,你需要在构建设置中启用显式构建模块选项。
在 Xcode 16 中,Swift Package 集成有所改进,我们可以在不必等待包解析完成的情况下,排队更新构建。
使用显式模块。Xcode将每个编译单元的处理分为三个独立的阶段。正在扫描,构建模块,最后构建原始代码。
其中前两个阶段在构建日志中显示为扫描依赖项 和编译 clang 模块或编译 Swift 模块命令。以前,这些操作是作为编译源文件的一部分隐式执行的。现在您可以获得更详细的构建细目。如果由于模块问题导致构建失败,错误信息更清晰。
Debug
- 在构建适配 macOS Sequoia 或 iOS 18 的项目时,默认调试符号格式为 DWARF5 。这使得 dSYM 捆绑包更小,符号查找速度更快。
- 在 Xcode 16 中调试代码时,线程性能检查器更加强大。 主线程卡顿时,我们可以在调试 工具栏 中启用统一的回溯视图。这将有助于可视化调用堆栈并找出卡顿问题。
通过在调试 工具栏 中启用回溯图, 可以很形象的看出程序调用堆栈,只需要往下滑动,即可看到每一堆栈信息以及数据信息
- 磁盘写入诊断:我们可以看到问题对不同应用版本的影响已经发生了变化。
现在,在管理器中,您可以看到问题的影响在应用程序的不同版本中是如何变化的。当您进入磁盘权限视图时,您可以看到某些签名旁边有向上的箭头。这些箭头是帮助您开始优先处理对用户影响最大的问题的好地方。
- 启动诊断:在组织者中将新增一个分类,用于检查应用的启动诊断日志。Xcode 将展示导致应用启动耗时的最慢代码段。
如果您的应用在客户设备上启动需要很长时间,xcode会向您显示最慢的的代码路径,签名。以便您可以优先解决影响最大的问题。
-
通过新的 RealityKit 调试器,我们可以捕获运行中应用的实体层次结构,并直接在 Xcode 中探索 3D 环境。
Test
使用 SwiftTesting 框架,我们可以通过展开结果来检查测试失败的详细描述。
- Meet Swift Testing - WWDC24 - Videos - Apple Developer
- Go further with Swift Testing - WWDC24 - Videos - Apple Developer
通过给测试用例添加标签来给测试用例分组
同时可以通过标签来测试某一组测试用例或者排除某一组测试用例
Profile
Instrument 16 新增的火焰图将提供跟踪执行的高级概述。
Other
Asset management
- 在 Xcode 16 中,我们可以为 iOS 添加新的深色和着色的应用程序图标。iOS 和 iPadOS 支持三种样式的应用程序图标:浅色、深色和着色。
Device and simulators
- 升级后的模拟器可以为 Vision OS 提供FaceTime 和SharePlay支持。
Localization Enhancements
- Xcode 16 为字符串目录提供了新功能,例如内联诊断和将字符串标记为不翻译的功能。