WWDC Quick Look 💓 By SwiftGGTeam
Get the most out of Device Hub

Get the most out of Device Hub

观看原视频

Highlight

Apple 推出 Device Hub,一个独立于 Xcode 的 App,统一管理真机和模拟器,并配套 devicectl 命令行工具,让设备控制、诊断收集和 CI 脚本集成不再需要多套工具拼接。

核心内容

以前的问题:设备管理分散在多个工具里

做 iOS 开发的人都有过这种经历:测试真机要打开 Xcode 的 Devices and Simulators 窗口,调试模拟器要开 Simulator.app,写 CI 脚本时又要用 xcrun simctl 和第三方真机工具各管各的。设备一多,窗口切来切去,配置改起来更是麻烦——调个暗黑模式、改个字体大小、模拟个地理位置,每一步都要在设备设置里翻半天。

Device Hub 做了什么

Apple 把 Simulator.app 的功能和真机管理合并成了一个独立的 App:Device Hub。它随 Xcode 27 安装,不需要打开 Xcode 就能直接用。

Device Hub 的界面分三块:

  • 侧边栏(Sidebar):列出所有设备和模拟器,支持过滤、排序、分组,右键可以重启设备或一键配对 iPhone 和 Apple Watch
  • 画布(Canvas):实时显示设备屏幕,可以直接点击、拖拽、滚动操作,也支持捕获 Mac 键盘输入
  • 检查器(Inspector):五个面板,覆盖外观设置、位置模拟、音频选项、诊断报告、应用管理和描述文件

真机和模拟器在这三个区域里的操作完全一致。你不需要记住两套流程。

一个实际的工作流

Session 里演示了一个完整的 Bug 复现流程:

Hassan 在 Apple Watch 上发现一个 UI Bug——横屏时文字被截断。他用 Device Hub 做了这几件事:

  1. 无线配对 Apple Watch 到 Mac
  2. 安装 CoreLocation 的日志描述文件
  3. 截图记录 Bug 现象
  4. 触发 sysdiagnose 收集系统诊断
  5. 下载 App 的数据容器发给同事

Matt 收到材料后,在 Device Hub 里打开对应的 iPhone 17e 模拟器,替换数据容器,把模拟器旋转到横屏,设置地理位置到约翰内斯堡(高海拔地区),再把字体调到最大——Bug 复现了。三个条件同时满足才会触发:横屏 + 特定地理位置 + 最大字体。

这个流程以前需要 Xcode、Simulator.app、命令行工具、Finder 来回切换。现在全部在 Device Hub 里完成。

详细内容

Compact 模式与 Full 模式

01:45)在 Xcode 里 build & run 到模拟器时,Device Hub 会自动以 Compact 模式启动。窗口只显示设备屏幕和底部几个控制按钮(Home 键、截图、旋转)。这些按钮是上下文相关的:Apple TV 会显示播放/暂停和导航键,Apple Vision Pro 会显示环境切换和相机移动,Apple Watch 会显示侧边按钮和 Digital Crown。

02:32)点击顶部的展开按钮进入 Full 模式,解锁全部功能:缩放、1:1 物理尺寸显示、Resize mode、键盘捕获、侧边栏设备列表、检查器面板。

画布交互

03:20)画布支持直接交互:点击、拖拽、滚动、自然触控板手势。真机和模拟器的交互方式完全相同。

画布上方的控制栏提供几个实用功能:

  • 缩放:放大缩小屏幕显示
  • 1:1 物理尺寸:按真实设备尺寸显示,检查 UI 在实际大小下的表现
  • Resize mode:自由调整 App 尺寸,配合 UIKit 的自适应布局调试
  • Capture keyboard:把 Mac 键盘输入直接路由到设备,测试快捷键和硬件键盘支持

侧边栏组织设备

04:55)侧边栏显示完整的设备和模拟器清单。顶部过滤菜单可以控制显示哪些设备,也支持按多种条件排序和分组。右键设备有快捷操作,比如重启或配对 iPhone 和 Apple Watch 模拟器。

05:22)可以同时打开多个设备的视图:选中多个设备,双击侧边栏,每个设备会打开一个独立的 Compact 窗口。测试不同屏幕尺寸的 UI 适配时,并排对比很方便。

检查器的五个面板

06:14)右侧检查器有三个标签页,共五个面板:

Settings 标签页

  • Appearance:暗黑模式、字体大小等,修改即时生效,不用进设备设置里翻
  • Conditions:模拟地理位置变化等条件
  • Audio:音量控制和输入输出设置

Diagnostics 标签页

  • 显示设备上的所有诊断日志:崩溃、卡顿(spins)和其他诊断信息。App 出现性能问题或崩溃时,先来这里看。

Info/Apps/Profiles 标签页

  • Info:存储空间、型号、序列号等基本信息
  • Apps:安装、卸载、管理 App,支持下载和替换数据容器
  • Profiles:管理配置描述文件和 Provisioning profiles

数据容器管理

11:46)Device Hub 支持直接操作 App 的数据容器。可以:

  • 在 Finder 中查看已保存的状态
  • 恢复到已知的基准状态
  • 捕获快照供以后使用
  • 下载数据容器发给其他开发者
  • 用收到的数据容器替换当前 App 的数据

这在复现 Bug 时特别有用——直接把用户或同事的设备数据导入模拟器,复现环境就搭建好了。

devicectl 命令行工具

15:52)Device Hub 底层技术对应一个命令行工具:devicectl。它适合脚本和自动化场景,比如 CI/CD 流水线。

几个常用命令示例:

# 列出所有设备
xcrun devicectl list devices

# 安装 App 到设备
xcrun devicectl device install app --device <device-id> ./MyApp.app

# 切换暗黑/亮色模式
xcrun devicectl device info settings --device <device-id>

# 获取设备详细信息
xcrun devicectl device info --device <device-id>

--json-output 选项输出结构化 JSON,方便脚本解析和集成到 CI 工作流。

关键点:

  • list devices:获取所有连接设备的标识符和基本信息
  • device install app:统一安装命令,真机和模拟器语法相同
  • --json-output:输出结构化数据,替代以前对纯文本输出的正则匹配
  • 基于 Device Hub 的同一套底层技术,CLI 和 GUI 的行为一致

核心启发

1. 一键搭建 Bug 复现环境

  • 做什么:收到 Bug 报告后,用 Device Hub 快速复现用户的设备环境
  • 为什么值得做:数据容器 + 地理位置 + 外观设置可以在几分钟内完整还原,不再需要”在我机器上没问题”的扯皮
  • 怎么开始:在 Apps 面板下载数据容器,在 Settings 面板调整地理位置和字体大小,用截图对比确认复现

2. 多设备 UI 适配测试

  • 做什么:同时打开 iPhone SE、iPhone Pro Max、iPad 的 Compact 窗口,并排检查布局
  • 为什么值得做:Device Hub 的 1:1 物理尺寸显示让你看到 UI 在真实设备上的实际大小
  • 怎么开始:在侧边栏选中多个模拟器,双击打开独立窗口,配合 Resize mode 测试不同尺寸

3. CI 流水线设备管理标准化

  • 做什么:用 devicectl 替代 simctl 和第三方真机工具的混合脚本
  • 为什么值得做:一套命令同时管理真机和模拟器,JSON 输出方便解析
  • 怎么开始:把 CI 中的 xcrun simctl 命令逐步替换为 xcrun devicectl,先用 --json-output 验证输出格式

4. 自动化诊断收集

  • 做什么:测试失败时自动触发 sysdiagnose 和日志收集
  • 为什么值得做:Device Hub 的诊断面板和 devicectl 的日志命令让诊断收集标准化
  • 怎么开始:在 UI 测试脚本中加入 sysdiagnose 触发逻辑,失败时自动打包诊断文件

5. 跨设备功能联调

  • 做什么:开发 Apple Watch + iPhone 联动功能时,用 Device Hub 配对两台设备
  • 为什么值得做:右键一键配对模拟器,无线配对真机,通信链路在 Device Hub 里统一管理
  • 怎么开始:右键侧边栏选择”Pair Nearby Device”,按提示完成配对

关联 Session

评论

GitHub Issues · utterances