外观
P4 设备发现与准备状态机修复结果
结论
设备选择器不再把 Network/Wi-Fi 记录标成 USB,物理 USB 设备与 Wi-Fi 拓扑按真实路由分类。已 Ready 设备在后台 usbmuxd 刷新后继续保持 Ready,不再被过期 discovering 状态长期遮挡。
Network 列表改为快速拓扑发现,用户选中后再做最长 10 秒的 Lockdown 身份验证。不可达记录会进入明确失败态并停止加载,不再拖慢物理 USB 设备列表。
产品行为
| 场景 | 修复后行为 |
|---|---|
| 物理 USB | 显示 USB 与线缆图标,排在列表前部 |
| Network 拓扑 | 显示 Wi-Fi 与 Wi-Fi 图标,未验证时标注“选择后验证” |
| 不可达 Wi-Fi | 10 秒上限内返回可诊断失败,准备遮罩停止 |
| 后台设备刷新 | 所选设备未变更时保留 App/DVT Ready |
| 状态点 | 只有性能服务 Ready 后为绿色,仅发现设备时为等待色 |
| USB Toast | 仅响应 USB 路由变化,Network 变化不冒充 USB 插拔 |
实现要点
usbmux list --usb读取 USB 详细身份,usbmux list --network --simple并行读取 Network 拓扑;USB 优先排序且两路去重。resolveDevice只在选中未解析 Network 记录后执行,以lockdown info --udid DEVICE补全身份。- 后台发现快照保留已解析的同路由 Network 身份,不降级为匿名占位行。
- 阻塞遮罩改由
appListState.isLoading || connectionPhase.isBusy驱动,与全局发现状态解耦。
验收证据
| 项目 | 结果 | 证据 |
|---|---|---|
| Swift 全量回归 | 88/88 | E2 |
| Python Collector 回归 | 冻结 CPython 3.12 / pymobiledevice3 11.3.1,194/194 | E2 |
| Mac App | 1.0.0 (31),x86_64,Foundation collector-foundation.2.1-beta | E2 |
| 签名 | ad-hoc codesign --verify --deep --strict 通过 | E2 |
| 混合路由 Fixture | USB 优先、Network 标识、去重、Ready 保留、不可达失败全部通过 | E2 |
| 最终 App 内置工具匿名真机拓扑 | USB 3 条,1.44 s;Network 4 条,1.12 s | E4(命令级) |
证据边界
- E4 只证明最终 App 内置工具可在当前真机环境有界区分 USB 和 Network 拓扑;不包含修复后原生 UI 点击录屏。
- 当前 4 条 Network 拓扑在本批前置诊断中均不可达;列表中存在拓扑记录不代表 Wi-Fi 路由已 Ready。
- 设备名、设备标识、序列号、应用标识和进程信息均未写入报告。
未关门与下一阶段
- P4 原生 UI 验收:用户在 build 31 中复测“打开选择器 → 识别 USB/Wi-Fi → 选择 USB → 读取 App → Ready”,并对不可达 Wi-Fi 的有界错误做点击确认。
- P3 长窗数值校准:iOS 17/18 四场景×三轮×600 秒真机验收仍是当前指标质量主门禁。
- 整体进度:P0/P1 完成;P2 Startup 官方链完成;P3 产品链完成、长窗校准待真机;P4 本批修复已 E2/E4 部分验收、原生 UI 待用户关门;P5 放电/ThermalStatus、P6 其余 xctrace 增强、P7 云端仍待推进。