Log Entry

Device Hub 入门

了解 Xcode 27 全新的 Device Hub,学习如何统一管理设备、配置运行环境、收集诊断信息,并快速复现真机问题。

前言

让你的产品在所有的地方都呈现完美是非常重要的
在每一台设备,每一种外观,每一种文字大小,以及更多可能的情景中
这需要考虑很多因素
而众所周知,Xcode 自带的模拟器不能说是好用,只能说是一垃圾...
本机设备的断线重连问题,模拟器的运行问题,深色模式切换复杂问题...

在新的WWDC26中,苹果重构了整个Xcode,其中就有模拟器相关内容
这篇博客基于 WWDC26: 充分利用 Device Hub | Apple 所撰写,
将简单介绍Device Hub的使用方法,
原视频链接将在下文给出

介绍Device Hub


这是Device Hub,目前来说,你可以通过下载Xcode27 beta版本来获得
但是你不需要启动Xcode就可以使用
不管你使用的是虚拟机还是实机演示,它都能提供一套统一的工具来帮助你使用
(但是需要注意,在实机演示的情况下,若实机的版本号没有达到 27,你是无法通过Device Hub来进行实时查看屏幕的)

对于开发者来说,在Xcode中构建并运行到模拟器的时候,它会自动启动
与之前的模拟器一样,它会呈现一个带有屏幕实时交互视图的窗口
这是Device Hub的精凑模式,他只显示窗口和一些基本的操作
底部是设备控件

之前熟悉模拟器的同学会知道
这些按钮包括,主页按钮(咱也不知道为什么主页按钮是9 宫格,咱也不敢问),截图按钮,和旋转设备

这些空间是上下文关联的,会随着你的设备不同而变化,
比如Apple TV,Apple Watch等
当你觉得这些功能不够用的时候,点击顶部的展开按钮可以切换到完整的窗口

接下来让我们来看看它完整的功能

功能演示


它分为三个部分
控制,整理和配置你的设备

在开发过程中,你的设备可能散落各处,
通过屏幕来操控设备有助于你专注工作,而不会因为拿了一个手机然后研究了 2 个小时字节跳动的优秀App

画布

首先是屏幕的交互部分,
同之前一样,Device Hub提供了设备的窗口,你可以直接与之交互
点击,拖动,滚动,甚至是自然的触控板手势
不管是虚拟机还是真机都是一样的(真机还是必须27系统)

底部仍然有之前提到的控件,会随设备变化而变化
画布上方有一些没在精凑窗口中出现的控件

这些控件允许你自由的缩放画布,或者对齐到 1:1的物理尺寸,以实际的尺寸来查看你的应用
在键盘按钮旁边,你可以发现一个布局按钮,
这允许你自由的变换应用的尺寸(为折叠屏做好准备)

设备列表

在你的家财过于多(拥有很多实机)和虚拟财产过于多(拥有更多的虚拟机)的时候
管理你的设备变得非常难
在之前,你很难找到之前使用过这个软件虚拟机
但是在现在,你可以在侧边栏里看到完整的库存
每一台设备和虚拟机都显示在这里

你可以使用顶部的筛选菜单来改变显示的内容,
或者用他来通过不同的选项来对库存进行排序和分组
右键设备可以打开菜单,对设备进行操作
例如重启设备,配对Apple Watch

为了快速访问,你还可以同时查看任意数量的设备
可以使用标签页,也可以使用独立的紧凑窗口
全选,并在侧边栏双击,
这样可以方便你跨屏幕尺寸比较应用的显示效果

设备配制

在之前,你要是想对某个设备进行配置的调整是非常恐怖的

设备设置

第一个按钮叫做设备设置
在这里你可以更改设备的外观和行为,包括一些外观设置

这些更改会立刻生效,如同你使用LookinSever 一样
对于开发者来说,这种原生的切换比LookinSever多了一些内容,比如系统整体字体大小或者深浅色模式的切换,甚至是切换位置
你不需要再深入虚拟机设置切换外观设置

诊断报告

第二个按钮是诊断报告
在没有崩溃的时候,它应该显示为:
当你的应用出现卡顿或崩溃的时候,这里就是开始调查的地方

设备

第三个面板有三个信息

  • 设备信息
  • 应用
  • 配置文件
    信息面板包括存储,型号,序列号等内容
    应用面板允许你安装,卸载和管理应用,包括下载和替换的应用的数据容器
    配置文件面板中,你可以管理配置和预置描述文件
    到这里我们就完成了Device Hub的功能演示

接下来一个环节,我将把WWDC中提到的案例整理出来
不得不说Apple讲座的含金量还是太高了
一个错误就可以用到所有的功能,缺一不可

在实际应用中

在视频的案例中,Hassan 和 Matt 正在为一款健身应用开发恢复建议功能。
应用会根据用户所在位置的海拔给出建议,但是在真机横屏时,一部分文字被截断了。

看起来只是一个简单的 UI 问题,实际复现它却需要同时满足多个条件。

在真机上保留现场

Hassan 首先通过 Device Hub 将 iPhone 和 Apple Watch 无线配对到 Mac。
由于问题和位置有关,他又在配置文件面板中拖入 Core Location 日志配置文件,并重启 iPhone,让设备记录足够的定位日志。

接下来,他在 Device Hub 中运行应用并旋转设备,成功触发文字截断。
为了把尽可能完整的现场交给负责 UI 的 Matt,他做了几件事:

  • 截图,记录问题发生时的界面
  • 启动 sysdiagnose,收集系统级诊断信息
  • 直接从真机画面中复制被截断的文字
  • 从应用面板下载 App 的数据容器

数据容器非常重要。
它保存了应用当时的数据状态,另一位开发者可以检查它,也可以把它替换到自己的设备或模拟器中。
这样就不需要依靠口述,或者手动重新制造一份相似的数据。

在模拟器中复现问题

收到这些资料后,Matt 开始在模拟器中复现问题。

首先,他在侧边栏中选择与真机相同型号的 iPhone 17e 模拟器。
然后在应用面板中,用 Hassan 发来的数据容器替换模拟器中原本空白的数据。
重新启动 App 后,模拟器里便出现了和真机一致的运动记录。

最后需要匹配设备配置。
Matt 根据截图依次调整了几个条件:

  1. 将模拟器旋转为横屏
  2. 将模拟位置设置为约翰内斯堡,使应用显示高海拔对应的较长建议
  3. 将系统文字大小调到最大

只设置位置和横屏时,问题并没有出现。
直到文字大小也被调大,截断问题才终于在模拟器中复现。

这个 Bug 需要特定位置、横屏和最大文字大小同时出现。
如果没有 Device Hub,很可能要在模拟器设置、定位工具、真机和文件管理器之间来回切换,还不一定能准确还原现场。
而 Device Hub 把设备控制、配置、诊断和应用数据管理放在了同一个地方,让发现问题的人能够完整保存现场,也让修复问题的人能够快速复现并验证修复。

使用 devicectl 自动化

除了图形界面,Device Hub 底层的能力也可以通过命令行工具 devicectl 使用。
它可以列出和管理设备、安装应用、更改深浅色模式等设备设置,以及收集诊断信息。

当你需要把这些操作接入脚本或 CI 工作流时,可以使用 JSON 输出,将 Device Hub 中的设备管理能力自动化。

相关资料