Build59 Screenshot 独立长连接轻量化与按需保存分级验收

日期:2026-09-16 · 证据:E2 构建与静态契约 · 状态:implemented · partial

背景与核心设计(FTI-005)

在历史版本中,截图采集每秒通过新建 pymobiledevice3 developer dvt screenshot 短命子进程完成,存在三重严峻瓶颈:每秒进程创建与 DVT 握手开销大;即使未勾选 Screenshot 指标也会持续落盘巨量 PNG,消耗数十 GiB 空间;截图采集与性能采集缺乏物理隔离。Build 59 正式实施三项冻结规则并彻底重构:

  1. 截图采集使用独立长连接(Persistent Connection):
  2. 截图序列按需保存(On-Demand Persistence):
  3. 主页面顶部截图始终展示(Decoupled Live Preview):
  4. 零 Base64 二进制 IPC 与异常物理隔离:

E2 验证结果

验证项指标 / 结果状态
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 死链通过

专项测试矩阵(test_screenshot_worker.py & PersistentScreenshotWorkerTests.swift)

序号测试用例验证要点耗时
1test_pack_and_unpack_frame大端定长二进制封包与解包完整性、空图片边界安全<0.01s
2test_screenshot_worker_captures_multiple_frames_over_single_connection长连接多帧采集保持同一 DVT 实例,连接次数始终为 1<0.01s
3test_screenshot_worker_handles_connection_error_and_reconnects单帧异常退避降级,重连成功后恢复正常,不影响整体状态<0.02s
4test_cli_loop_and_status_handshakestdin/stdout 握手协议与 status/frame 事件流解析<0.05s
5testStoragePolicyRule0IsolationRule 0 验证:persistScreenshotSequence 变更绝不影响 CapturePlan.hash<0.01s
6testSessionScreenshotSequenceStatusSemanticsReview 四态语义(notRequested, available, partial, requestedButFailed)<0.01s
7testMockWorkerCapturesFramesAndUpdatesStoreMetadata未勾选保存:正常获取最新帧,screenshots 目录不存在,persistedCount=0<0.05s
8testMockWorkerPersistedScreenshotsWhenEnabled勾选保存:物理文件正确落盘,Manifest 审计计数精确匹配<0.05s

测试分发包与签名校验

Build 59 测试安装包已完成生成与严格校验:

证据边界与未关门门禁

本机未配置 Apple Notary Service Keychain Profile,公证与 ticket stapling 门禁仍开放;GPL-3.0 法务评估门禁仍开放;当前测试包仅供内部联调与真机长测复测,交付状态标记为 partial。