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 做了这几件事:
- 无线配对 Apple Watch 到 Mac
- 安装 CoreLocation 的日志描述文件
- 截图记录 Bug 现象
- 触发 sysdiagnose 收集系统诊断
- 下载 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
- Modernize your UIKit app — Device Hub 的 Resize mode 是调试 UIKit 自适应布局的最佳伴侣
- Getting the Most Out of Simulator (WWDC 2019) — 了解 Simulator 的历史功能,对比 Device Hub 的改进
- Xcode 27 — Device Hub 随 Xcode 27 发布,了解 Xcode 本身的更新
- SwiftUI — SwiftUI 的跨设备自适应布局同样需要 Device Hub 的多尺寸测试能力
评论
GitHub Issues · utterances