Platforms State of the Union (ASL)
Essentials 进阶 20m

平台技术全景:2023 年开发者工具与框架更新

Platforms State of the Union (ASL)

2023年6月5日

在 Apple 官方观看视频

一句话判断

这场 Platforms State of the Union 覆盖面很广——Swift Macros、Swift-C++ 互操作、SwiftUI 新控件、SwiftData 框架、visionOS 技术栈、Xcode 15 全面升级——适合快速了解今年开发者生态的全貌。

这场 Session 讲了什么

Session 以 Darin Adler 的开场白定调——“伟大的平台不仅仅是框架和技术的集合,而是语言、框架、工具和服务的无缝协同”。随后分模块介绍了 2023 年的关键更新。

Swift 语言。最重磅的是 Macros(宏)。宏通过注解生成代码,在编译时执行,Xcode 支持”展开宏”查看生成内容、在宏生成的代码中设断点调试。宏使得 API 感觉像语言原生特性,消除了大量模板代码。另一个重大更新是 Swift-C++ 互操作——两种语言可以在同一项目中使用,无需桥接层,共享类、函数甚至模板特化(如 vector)。

SwiftUI。新增了 ScrollPosition 用于精确控制滚动位置、ScrollView 的安全区域适配、PhotosPicker 的改进等。

SwiftData。全新的数据持久化框架,用 @Model 宏将 Swift 类直接映射为数据模型,替代 Core Data。支持 @Query 在 SwiftUI 视图中查询数据、ModelContainer 管理数据存储。

visionOS 技术栈。ARKit 提供空间感知能力(平面检测、图像跟踪、世界追踪),RealityKit 渲染 3D 内容并处理空间音频,SwiftUI 构建窗口化 UI。三种 App 模式:窗口(Windows)、空间(Spaces,类似沉浸式面板)、全沉浸(Full Space)。

Xcode 15。智能代码补全(考虑上下文和常用模式)、资产目录的 Swift 符号支持(类型安全的颜色和图片引用)、String Catalog 统一管理本地化、文档预览实时渲染。

值得深挖的点

Swift Macros 的调试体验:Xcode 能在断点处展开宏代码、逐步调试生成内容,这种透明度解决了以往元编程工具”黑盒化”的痛点。如果你在考虑使用宏,调试体验不应该成为顾虑。

Swift-C++ 互操作的战略意义:这不仅是技术特性,更是生态扩展。大量游戏引擎、图形库和底层系统代码用 C++ 编写。互操作意味着这些项目可以渐进式引入 Swift,而不需要重写。

SwiftData 的简化程度:对比 Core Data 的 NSManagedObjectModelNSPersistentStoreCoordinatorNSManagedObjectContext 三件套,SwiftData 用 @Model + ModelContainer 就完成了。代价是它目前只支持 Swift,且与 Core Data 的迁移路径尚不明确。

代码片段

使用 Swift Macros 和 SwiftData:

import SwiftData
import SwiftUI

// @Model 宏将类转为数据模型
@Model
class Bird {
    var name: String
    var species: String
    var lastSeen: Date

    init(name: String, species: String) {
        self.name = name
        self.species = species
        self.lastSeen = Date()
    }
}

// 在 App 中配置数据容器
@main
struct BackyardBirdsApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .modelContainer(for: Bird.self)
    }
}

// 在视图中使用 @Query 查询数据
struct BirdListView: View {
    @Query(sort: \Bird.lastSeen, order: .reverse)
    var recentBirds: [Bird]

    var body: some View {
        List(recentBirds) { bird in
            VStack(alignment: .leading) {
                Text(bird.name)
                Text(bird.species)
                    .font(.caption)
                    .foregroundStyle(.secondary)
            }
        }
    }
}

最佳实践

  • 开始用 Swift Macros 替代手写的模板代码,利用 Xcode 的展开功能理解生成内容
  • 现有 Core Data 项目可以继续使用,新项目考虑 SwiftData
  • 为 visionOS 做 App 时,优先使用 SwiftUI 窗口模式,按需引入 ARKit 的空间能力
  • 利用 String Catalog 统一管理本地化,通过 Edit > Convert to String Catalog 迁移
  • Xcode 15 的资产目录符号让你的颜色和图片引用类型安全

还有什么值得关注

  • Swift Macros 的安全模型——宏能访问什么信息、有什么限制
  • SwiftData 与 CloudKit 的同步能力
  • visionOS 上 ARKit 的权限模型和隐私考量
  • Xcode 15 的测试覆盖率报告和性能分析改进
WWDC 2023