What's New In Xcode16

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

  1. 在构建适配 macOS Sequoia 或 iOS 18 的项目时,默认调试符号格式为 DWARF5这使得 dSYM 捆绑包更小,符号查找速度更快
  2. 在 Xcode 16 中调试代码时,线程性能检查器更加强大。 主线程卡顿时,我们可以在调试 工具栏 中启用统一的回溯视图。这将有助于可视化调用堆栈并找出卡顿问题。

通过在调试 工具栏 中启用回溯图, 可以很形象的看出程序调用堆栈,只需要往下滑动,即可看到每一堆栈信息以及数据信息

  1. 磁盘写入诊断:我们可以看到问题对不同应用版本的影响已经发生了变化。

现在,在管理器中,您可以看到问题的影响在应用程序的不同版本中是如何变化的。当您进入磁盘权限视图时,您可以看到某些签名旁边有向上的箭头。这些箭头是帮助您开始优先处理对用户影响最大的问题的好地方。

  1. 启动诊断:在组织者中将新增一个分类,用于检查应用的启动诊断日志。Xcode 将展示导致应用启动耗时的最慢代码段。

如果您的应用在客户设备上启动需要很长时间,xcode会向您显示最慢的的代码路径,签名。以便您可以优先解决影响最大的问题。

  1. 通过新的 RealityKit 调试器,我们可以捕获运行中应用的实体层次结构,并直接在 Xcode 中探索 3D 环境。

    1. Break into the RealityKit debugger - WWDC24 - Videos - Apple Developer
    2. Run, Break, Inspect: Explore effective debugging in LLDB - WWDC24 - Videos - Apple Developer

Test

使用 SwiftTesting 框架,我们可以通过展开结果来检查测试失败的详细描述。

  1. Meet Swift Testing - WWDC24 - Videos - Apple Developer
  2. 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 提供FaceTimeSharePlay支持。

Localization Enhancements

  • Xcode 16 为字符串目录提供了新功能,例如内联诊断和将字符串标记为不翻译的功能。

Reference document:

  1. developer.apple.com/cn/videos/p...
相关推荐
k4m7v2pz7 天前
Swift Package Manager 在 macOS 26 上的三个编译错误排查指南
macos·spm·ai编程·xcode·swift·命令行工具
牛哇网络工作室9 天前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
IS68313 天前
视频文案提取技术全景:ASR vs OCR,哪种方案更适合你?
ide·macos·xcode
大熊猫侯佩14 天前
Xcode 预览新升级:arguments 让界面调试井井有条
swiftui·xcode·swift
大熊猫侯佩15 天前
别再把大模型供在云端了,WWDC26 CoreAI 大模型下凡实战
ai编程·swift·wwdc
User_芊芊君子16 天前
STT + LLM + TTS:用一条流水线搓了个中英双向翻译助手
ide·macos·xcode
星辰即远方18 天前
计算器仿写总结
学习·ui·ios·cocoa·xcode
2501_9159184119 天前
免 Xcode 开发 iOS,工具链替代方案与编译、签名、安装
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
2501_9160088920 天前
移动安全之 APP 加固,保障移动应用安全的重要手段
安全·macos·ios·小程序·uni-app·iphone·xcode
MoSTChillax21 天前
数字人竞品分析(中):核心功能、产品使用与技术能力对比
ide·macos·xcode