WWDC Quick Look 💓 By SwiftGGTeam
Run your iPad and iPhone apps in the Shared Space

Run your iPad and iPhone apps in the Shared Space

观看原视频

Highlight

绝大多数 iPad 和 iPhone 应用无需任何修改即可在 visionOS 上运行。系统优先展示 iPad 版本(横屏),自动处理窗口缩放、旋转、手势映射和 Optic ID 认证。开发者只需确认 Info.plist 中的方向和能力声明准确即可。

核心内容

开箱即用的系统支持

00:29)visionOS 建立在 iOS 基础之上。iPad 和 iPhone 应用以窗口形式显示,使用浅色模式风格。系统优先选择 iPad 版本,以横屏方向呈现。如果应用仅支持 iPhone,则以竖屏比例显示。

窗口交互由系统管理:

  • 支持多方向时,窗口右上角显示旋转按钮
  • 拖拽角落缩放,系统保持宽高比
  • 到达最小/最大尺寸时,角落会弹性反馈

03:05)用户通过自然输入与内容交互:凝视+手指轻触选择、直接伸手触摸、蓝牙触控板或游戏手柄。所有这些系统定义的交互方式都会转换为应用已有的事件类型,开发者可以继续使用熟悉的事件处理技术。

系统自动适配的功能

03:34

  • 系统视图:文档管理器、照片选择器等系统视图自动匹配平台外观
  • 生物识别:Touch ID / Face ID 自动通过 LocalAuthentication 转发到 Optic ID,无需额外工作
  • Look to Dictate:搜索栏中的新输入方式,用户凝视麦克风图标后语音输入。默认对 iPad/iPhone 应用禁用,需要显式开启

平台差异与应对

04:02

方向控制:visionOS 没有设备旋转概念。应用方向不再由设备方向决定。新增 UIPreferredDefaultInterfaceOrientation Info.plist 键来表达方向偏好。这个键仅对 visionOS 有效,不影响其他平台。

// Info.plist 键
UIPreferredDefaultInterfaceOrientation

其他关键 Info.plist 键

  • UISupportedInterfaceOrientations:系统用它决定是否需要显示旋转按钮
  • UIRequiredDeviceCapabilities:App Store Connect 用它判断应用是否与设备兼容

05:49手势差异:最多支持两个同时输入(每只手一个触摸)。系统手势(两指及以下)无缝工作。自定义手势识别器也受支持,但可能需要调整以适应自然输入。

ARKit 变化:现有 ARViewARSession 在 visionOS 上不可用。需要基于新 API 重建 AR 体验。

摄像头:设备有多个摄像头,需要先验证可用性再使用。

Look to Dictate 启用

07:59

// SwiftUI
@State private var searchText = ""

var body: some View {
    NavigationStack {
        Text("Query: \(searchText)")
    }
    .searchable(text: $searchText)
    .searchDictationBehavior(.inline(activation: .onLook))
}

// UIKit
let searchController = UISearchController()
searchController.searchBar.isLookToDictateEnabled = true

关键点:

  • SwiftUI 使用 .searchDictationBehavior(.inline(activation: .onLook)) 修饰符
  • UIKit 设置 searchBar.isLookToDictateEnabled = true
  • 默认对 iPad/iPhone 应用禁用,允许开发者先验证行为再开启
  • 在 iOS 和 iPadOS 上是 no-op,无需条件编译

部署流程

09:30)安装 xrOS SDK 后,Xcode 自动为使用 iOS SDK 的项目添加 “xrOS Device (Designed for iPad)” 运行目标。如果 scheme 设置了不同的平台或 auto SDK,可以手动添加 Designed for iPad 目标。选择该目标后直接 build and run。

所有兼容的应用会自动出现在 App Store 上。如果应用依赖不可用的功能,可以在 App Store Connect 中管理可用性。

详细内容

使用 availability 检查处理平台差异

08:12)处理平台差异的最佳方式是一直以来的方法:使用 availability 检查。

if #available(xrOS 1.0, *) {
    // visionOS 特定代码
}

// 或使用框架提供的检查方法
if AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) != nil {
    // 摄像头可用
}

关键点:

  • 调用框架前先确认支持
  • 许多框架内置了便利的检查函数
  • 访问依赖特定硬件的配置时也要做检查
  • 这些做法让每个设备上的应用都更健壮

Designed for iPad vs Designed for visionOS

10:24)两种 SDK 选择:

iOS SDK(Designed for iPad)

  • 应用以窗口形式显示,像 iPad 一样使用浅色模式
  • 保留现有外观和体验
  • 支持 SpriteKit 和 Storyboard
  • 无法使用 Volume、Immersive Space、Ornament 等新特性

xrOS SDK(Designed for visionOS)

  • 使用系统外观:玻璃材质背景,动态调整色彩平衡和对比度
  • 支持 Volume 展示 3D 对象
  • 支持 Immersive Space 创建沉浸式体验
  • 支持 Ornament API 创建侧边工具栏
  • ARKit 和 RealityKit 的完整功能

选择建议:

  • 想创建沉浸式体验、采用新框架功能、匹配系统外观 → xrOS SDK
  • 想保留现有体验 → iOS SDK

框架可用性注意事项

10:34)仅 iOS SDK 支持的两个重要技术:

  • SpriteKit
  • Storyboard

如果应用依赖这些技术,需要继续使用 iOS SDK。

ARKit、RealityKit 等框架在 xrOS SDK 中有进化后的功能,仅在 Designed for visionOS 应用中可用。

核心启发

1. 零改动上架 visionOS App Store

  • 做什么:确认现有 iOS 应用的兼容性后直接上架
  • 为什么值得做:大多数应用无需任何代码修改。系统自动处理窗口管理、手势映射、认证转发。这是获取新平台用户的最快方式
  • 怎么开始:检查 Info.plist 中的 UISupportedInterfaceOrientationsUIRequiredDeviceCapabilities,在 Xcode 中选择 xrOS Device (Designed for iPad) 目标运行测试,确认无崩溃后提交

2. 为现有应用添加 Look to Dictate

  • 做什么:在搜索功能中启用 Look to Dictate,让用户用眼睛和语音快速输入
  • 为什么值得做:这是 visionOS 独有的交互方式,对 iOS/iPadOS 无影响。提升无障碍体验,让用户在不方便打字时快速搜索
  • 怎么开始:SwiftUI 添加 .searchDictationBehavior(.inline(activation: .onLook)),UIKit 设置 isLookToDictateEnabled = true

3. 评估从 Designed for iPad 迁移到 Designed for visionOS

  • 做什么:分析应用是否值得用 xrOS SDK 重建
  • 为什么值得做:xrOS SDK 解锁 Volume、Immersive Space、Ornament 等能力。玻璃材质背景让应用融入平台风格
  • 怎么开始:检查是否依赖 SpriteKit 或 Storyboard(这两个仅 iOS SDK 支持)。如果不依赖,从 “Meet SwiftUI for spatial computing” 和 “Meet UIKit for spatial computing” 开始学习

4. 处理 ARKit 应用的迁移决策

  • 做什么:评估 ARKit 应用是继续做 Designed for iPad 还是完全重建
  • 为什么值得做:旧 ARKit API 在 visionOS 上不可用,但新平台提供了更强大的空间计算能力。系统持续持久化 World Map,手部追踪成为原生能力
  • 怎么开始:观看 “Re-imagine your ARKit app for spatial experiences” 了解新能力,评估重建成本与收益

关联 Session

评论

GitHub Issues · utterances