第一阶段已完成2026-09-02

Implementation Result · Phase 1

Perfowl Mac 第一阶段:设备基座与原生客户端

按已批准方案与四张参考界面,实现“连接 iOS USB 设备 → 选择设备 → 读取 User App → 选择测试应用”的第一条真实产品链。性能图表仍是明确的后续占位,本阶段不宣称已经采集 FPS、CPU 或网络数据。

原生 SwiftUI真机 USB 验证34 个 User App8 项单元测试无侵入

Delivered scope

本阶段交付了什么

能力实现结果
USB 设备感知/var/run/usbmuxd 事件流、Attached/Detached、断线重连、4 MB 帧保护已实现
设备目录pymobiledevice3 只读设备快照,仅保留 USB,按 UDID 去重真机通过
应用目录读取 User App,按名称排序,支持搜索、刷新、选择和 60 秒缓存真机通过
状态一致性设备/App 异步请求 generation 隔离、任务取消、旧结果写回防护测试通过
Mac 客户端PerfDog 式设备/App 选择链、左侧上下文栏、共享时间轴工作区、状态与日志运行通过
本地 AppPerfowl.app、Info.plist、内置 sidecar/runtime、本地 ad-hoc 签名构建通过

Product design

UI 与交互设计结果

产品设计先完成 IA、Design Plan、Anti-Slop 和三个 page.ui.yaml,再进入 SwiftUI 落地。参考界面中保留的是核心工作模式,而不是照搬账号、多平台、工具箱等第一阶段无关区域。

保留的交互骨架

  • 设备选择位于首要入口。
  • 设备选定后才开放测试应用。
  • 设备信息持续显示在左侧。
  • 右侧使用共享时间轴图表工作区。
  • 服务初始化和加载状态可见。

Perfowl 差异化

  • 猫头鹰观测眼与性能曲线作为唯一品牌记忆点。
  • 明确显示 USB、Lockdown 和基座状态。
  • 未采集指标统一标注“待采集”。
  • 首阶段只呈现 iOS USB,不展示空壳平台。
  • 状态栏和日志便于现场排障。
Anti-Slop:PASS。
设计未采用通用后台卡片堆叠,而是围绕“设备 → App → 测试工作区”单一任务链组织信息。当前环境未提供 Figma MCP,因此本阶段保留可追踪 Spec 并直接实现为原生 SwiftUI。

Runtime evidence

实际运行界面

设备选择弹层

打包后的 App 实际识别到一台 iOS USB 设备,并在弹层中显示机型、系统版本与 USB 路由。

Perfowl 设备选择弹层实际运行截图

设备已连接与应用目录就绪

选择设备后,设备信息写入左侧上下文区,User App 数量为 34,应用选择入口开放。

Perfowl 设备已连接和应用列表已读取的实际运行截图

隐私说明:证据仅保留用户已在当前本机界面可见的设备名称;未在文档中记录设备标识、应用名称清单或其他唯一标识。

Verification ledger

验证结果按证据层分开记录

层级检查结果边界
代码测试usbmux 分帧与 reducer、设备去重、App 解析、选择链、刷新竞态和取消8/8 通过Fixture,不等同真机
Release 构建Swift release、Info.plist、App Bundle、本地严格签名校验通过当前为 ad-hoc
产物结构主程序与 pymobiledevice3 sidecar/runtime完整当前主机 x86_64
真机设备iPhone14,5、iOS 16.6.1、USB1 台识别成功只读发现
真机应用User App 目录34 个读取成功未启动 App
UI 运行首屏、设备弹层、选择设备、状态与应用数量通过本机实际窗口

Codesign4QC extraction

为什么是剥离而不是复制整个项目

第一阶段已经从 Codesign4QC 剥离了可复用的底层思想和窄能力:usbmuxd 事件监控、pymobiledevice3 设备/App 读取、超时取消和状态隔离。没有把大型 AppModel、签名、注入、Probe 与原产品 UI 一起复制。

直接复用的正确粒度。
复用稳定协议和经过验证的边界,重新命名并建立 Perfowl 自有模块;这样避免把 Codesign4QC 的签名业务、侵入链路、视图状态和历史兼容包袱带入无侵入性能产品。

Known limits

当前明确未完成

  • FPS、CPU、Memory、GPU、Network 等性能采集与指标校准。
  • 开始/暂停/继续/结束、Marker、Session 落盘与恢复。
  • xctrace 增强、云端上传、后端 Run 与 Web 报告。
  • iOS 17+ tunnel/provider 路由和更多设备矩阵。
  • 通用发行所需的 arm64/universal2、Developer ID、公证与最终 GPL-3.0 交付审查。

Next phase

建议第二阶段

  1. 将 Codesign4QC 的性能采集能力按 Sidecar 协议剥离,先接入目标进程绑定与基础 CPU/Memory/FPS 原始流。
  2. 建立 SessionOrchestrator、Metric Registry、质量字段和 append-only 本地事件包。
  3. 把真实样本接入当前共享时间轴,开放开始/停止,但未校准指标继续标记 Experimental。
  4. 在同一设备上完成 pymobiledevice3、xctrace 与 PerfDog 对照,再决定指标命名和误差门槛。
下一阶段仍需单独批准。
本次本地提交只覆盖第一阶段基座、UI 与文档,不启动性能采集开发。