日期:2026-09-16 · 证据:E2 构建与静态契约 · 状态:implemented · partial
在历史版本中,截图采集每秒通过新建 pymobiledevice3 developer dvt screenshot 短命子进程完成,存在三重严峻瓶颈:每秒进程创建与 DVT 握手开销大;即使未勾选 Screenshot 指标也会持续落盘巨量 PNG,消耗数十 GiB 空间;截图采集与性能采集缺乏物理隔离。Build 59 正式实施三项冻结规则并彻底重构:
capture <seq> 获取 1 张,Session 结束统一回收。ScreenShot:保存每秒截图序列至 screenshots/shot-xxxxxx.png 并记入时间轴与 Review。ScreenShot:不落盘任何 PNG 文件,不创建 screenshots/ 目录,磁盘新增占用精确为 0 字节。latestScreenshotData),不进入 events 数组,杜绝内存与缓存泄漏。[4B uint32 BE headerLen][Header JSON][4B uint32 BE pngLen][PNG Bytes],消除大对象 JSON 序列化与 Base64 膨胀。| 验证项 | 指标 / 结果 | 状态 |
|---|---|---|
| Python Sidecar 测试套件 | 411/411 通过(新增 4 项 screenshot worker 专项单测,覆盖封包解包、单连接多次连续 capture、重连退避容错与 CLI stdin/stdout 协议) | 通过 |
| Swift 客户端测试套件 | 153/153 通过(新增 4 项 PersistentScreenshotWorkerTests 单测,覆盖 Rule 0 隔离、Review 四态语义、持久化开关写盘审计与 MockWorker 驱动,3 项显式基准跳过,0 失败) | 通过 |
| 冻结 Sidecar Core 探针 | ready=true,63 Metric Contracts,9 Source Families,pymobiledevice3 11.3.1 | 通过 |
| 站点知识库门禁与构建 | 63 项 Registry 契约校验通过,VitePress 0 报错 0 死链 | 通过 |
| 序号 | 测试用例 | 验证要点 | 耗时 |
|---|---|---|---|
| 1 | test_pack_and_unpack_frame | 大端定长二进制封包与解包完整性、空图片边界安全 | <0.01s |
| 2 | test_screenshot_worker_captures_multiple_frames_over_single_connection | 长连接多帧采集保持同一 DVT 实例,连接次数始终为 1 | <0.01s |
| 3 | test_screenshot_worker_handles_connection_error_and_reconnects | 单帧异常退避降级,重连成功后恢复正常,不影响整体状态 | <0.02s |
| 4 | test_cli_loop_and_status_handshake | stdin/stdout 握手协议与 status/frame 事件流解析 | <0.05s |
| 5 | testStoragePolicyRule0Isolation | Rule 0 验证:persistScreenshotSequence 变更绝不影响 CapturePlan.hash | <0.01s |
| 6 | testSessionScreenshotSequenceStatusSemantics | Review 四态语义(notRequested, available, partial, requestedButFailed) | <0.01s |
| 7 | testMockWorkerCapturesFramesAndUpdatesStoreMetadata | 未勾选保存:正常获取最新帧,screenshots 目录不存在,persistedCount=0 | <0.05s |
| 8 | testMockWorkerPersistedScreenshotsWhenEnabled | 勾选保存:物理文件正确落盘,Manifest 审计计数精确匹配 | <0.05s |
Build 59 测试安装包已完成生成与严格校验:
/Users/itreenewbee/工作/代码/perfowl/MacApp/dist/Perfowl.app(CFBundleVersion=59,Developer ID Application: Jiacheng Li (76J692XB5C) 签名,Hardened Runtime 开启,时间戳有效,codesign --verify --deep --strict 通过)。/Users/itreenewbee/工作/代码/perfowl/MacApp/dist/Perfowl-internal-test-Build59-x86_64.zip160b1c545704db0942c5569193fc8641f930b46eeca3cd51c048dbc9daacd0f2codesign --verify --deep --strict 通过。
/Users/itreenewbee/工作/代码/perfowl/MacApp/dist/Perfowl-internal-test-Build59-x86_64.dmg894c80f5135fb346e8473e482fa0ea606a971bce3feeb093fff038dbe564228ehdiutil verify 通过,独立挂载卷内 App 严格签名校验通过。
2ae9731a87af5b16c68e630c5a83b790598618da4e9f73811ced5f20c73611b3。本机未配置 Apple Notary Service Keychain Profile,公证与 ticket stapling 门禁仍开放;GPL-3.0 法务评估门禁仍开放;当前测试包仅供内部联调与真机长测复测,交付状态标记为 partial。