外观
P4 应用选择列表空态修复与真机验收
交付结论
应用目录不再用全局设备连接状态猜测加载状态。设备选择后的等待、正在读取、成功有数据、成功空结果与失败现在分别表达;读取失败不再伪装成“未读取到 User App”。修复已进入 Mac App 1.0.0 (21) internal beta。
本结论中的 E4 只覆盖当前真机应用目录链:最终 App 内置工具、Swift 解析和 DeviceFoundation 完整调用链均返回非空 User App。P4 的截图、标注、停止、Review、导出原生 UI 全链仍需在 Mac 解锁后另行关门。
修复范围
- 新增独立
DeviceAppListState:idle / pending / loading / loaded / empty / failed。 - 选择设备后立即进入 pending/loading,不在 250 ms 延迟窗口展示成功空态。
- 打开应用选择器时,尚未加载会触发一次有界读取。
- 成功空结果显示“设备未返回 User App”并提供重新读取。
- 失败显示具体错误和重新读取;有缓存时保留旧结果并显示刷新失败提示。
- 设备行、应用行、侧栏、标注输入与提交补充稳定的无隐私自动化标识。
- 快速刷新继续取消旧延迟任务,旧设备请求仍不得覆盖新设备。
验收证据
| 检查 | 结果 | 层级 |
|---|---|---|
| Swift 全量测试 | 72/72;包含 pending、成功空结果、失败不可伪装为空、取消旧请求 | E2 |
| Release App 构建 | x86_64 编译、Info.plist、ad-hoc 深度签名通过 | E2 |
| 当前 USB 设备目录 | 三台匿名设备分别返回 73、38、46 个 User App | E4 |
| Swift JSON 解析 | 三份真实回包分别解析为 73、38、46 条 | E4 |
| DeviceFoundation 主链 | 三台设备分别进入 ready,列表为 38、73、46 条,错误为空 | E4 |
Perfowl.app 主程序 SHA-256 | 82b29d40634200a2d15e4daa751411dc98b4f8fbabfbd18e2e6200afcf71fabf | E2 |
Perfowl-1.0.0-beta21-x86_64.zip SHA-256 | d93d8f6634f5e491249eef0951eab3b73ece961b39b77bd60c805f0651c5b5ac;压缩完整性通过 | E2 |
设备排序与测试次序不同,因此两组数量的顺序不同;集合一致。仓库证据不记录设备名、设备标识、应用名、Bundle ID 或 PID。
P4 剩余门禁
当前 macOS 前台为登录窗口。Perfowl 进程与可见窗口存在,但系统不开放可交互窗口树,因此本批没有用命令级 E4 冒充原生 UI 点击通过。Mac 解锁后继续执行:选择设备与 App → 勾选 ScreenShot → 开始 → 标注 → 停止 → Review → JSONL/CSV 导出。
下一阶段与整体进度
- 下一步:关闭 P4 原生 UI 全链门禁并发布 P4 收口结果。
- 整体:P0、P1 完成;P2、P5 部分完成;P3 主链完成;P4 仅余当前 UI 点击门禁;P6 blocked;P7 未开始。