本页目录

产品文档 / 历史记录与验收范围以文中日期为准

ZipHarbor 新工程最终验收报告

日期:2026-10-01。交付入口:ZipHarbor/ZipHarbor.xcodeproj,scheme ZipHarbor,独立 Bundle ID com.xiaolongxu.zipharbor.app。旧 app/ 工程、旧应用及其数据保留;新工程不读取旧数据库。

交付与结论

迁移实现已完成,功能映射与技术架构分别见 05、06。界面按 HTML 原型重建,对照结果见 08 和 截图对照页。

新工程完成模拟器与 iPhone 14 真机核心、UI 工作流验收。真机最新 21 项单元/集成/性能测试全部通过;最终 UI suite 为 13 项通过、1 项媒体用例按设计跳过、0 失败;其中包含冲突处理工作流,系统 Files 导入另有独立 1/1 复测通过。最新版 Release 已签名构建、校验并安装。真实云盘、本人 Face ID 与真人 VoiceOver 的人工验收仍单独列为未验证范围,不据此宣称所有环境与无障碍场景均已通过。完整本轮真机结果见 iPhone 14 真机验收。

环境与实际结果

环境 执行内容 实际结果
iPhone 14 模拟器 / iOS 26.5 最终单元、集成、性能、UI 回归 34 项全部通过:21 项单元/集成/性能 + 13 项 UI
iPhone 14 模拟器 / iOS 26.5 最后视觉间距及选中内容密码判断调整后的针对性复测 3 项视觉 UI 通过;21 项引擎 + 2 项密码/目录 UI 共 23 项通过
iPad mini A17 Pro 模拟器 / iOS 26.5 两步 AES 创建→打开→密码解压;英文与深色 2 项通过
iPhone 14 真机 / iOS 27.0 最新核心格式、密码、分卷、安全、任务、性能回归 21 项全部通过,包含新增混合加密 ZIP 场景
iPhone 14 真机 / iOS 27.0 最终完整界面测试 13 项通过、1 项合成媒体用例跳过、0 失败
iPhone 14 真机及模拟器 重复解压冲突→取消→重试→对全部冲突保留两者 两个环境各 1 项通过;结果已纳入最终真机 UI suite
Release / generic iOS device Xcode 自动签名构建、codesign 校验、设备安装与启动命令 成功;测试后设备锁屏,未取得 Release 前台截图

历史 UI runner 初始化失败为 com.apple.LocalAuthentication Code=-1,底层 com.apple.sharing.authentication Code=12 / Timed out waiting for response。用户解锁后 passcodeRequired: false,CLI 与 Xcode 菜单启动仍曾认证超时,因此不能把历史错误仅归因于锁屏。退出 iPhone 镜像、通过 Apple Device Hub 建立真机屏幕连接后,runner 正常初始化,完整 suite 执行通过。未关闭设备密码、开发安全检查或修改配对凭据。复现遇到相同错误时先确认解锁并使用 Device Hub 的 View Screen 建立屏幕会话。

自动化验收使用 Debug 构建;发布构建不包含 QA 初始化入口。最后的 Release 安装与进程启动命令成功,但屏幕捕获返回全黑,重新连接后 Device Hub 显示锁屏,因此该图保留为 device/release-screen-unavailable.png,不作为 Release UI 通过证明。界面结论依据实际执行的真机 XCTest 截图。

验证范围

引擎、任务与完整性

测试覆盖 ZIP、AES ZIP、7z 往返;独立 TAR、tar.gz、tar.bz2、原始 gzip/bzip2、RAR5 读取;中文文件名、空目录、目录展开和同名去重;选中目录及后代解压;缺少/错误密码;分卷重组和缺卷;全部冲突策略及询问选择;穿越路径、已有符号链接逃逸;暂停/恢复、启动前取消及写入中取消;清记录/30 天保留不删除文件与收藏;进程重启后任务标为中断;密码续接不重复创建历史记录;偏好与路径持久化。

新增混合普通/加密 ZIP 测试验证:缺少或错误密码时输出目录保持为空;正确密码后两个条目可直接解压,不因为之前已写文件再次询问重名。

单元测试验证真实 libarchive、真实文件与输出内容,UI 测试验证用户入口和结果。两种证据不能互相替代。引擎暂停/恢复与写入中取消已验证;长任务运行时的真机暂停/恢复触控仍无专门 UI 用例。

UI 工作流

最终模拟器 suite 包含 13 项:中英文/深色、大字体、两步 AES 创建往返并保留返回选择、密码自动继续与“完成”关闭、错误密码重试、密码取消与清记录保留文件、目录浏览与 Quick Look、系统 Files/分享面板、默认目标和目录开关实际生效、收藏和选中目录解压、实际 Files 导入、合成照片/视频导入并打包、取消外部目录选择保持原目标。

追加的第 14 项 UI 用例验证重复解压出现真实重名询问、取消后在失败筛选中重试、开启“应用到全部冲突”后保留两者、输出中同时存在原文件及 课堂笔记 (2).txt。该用例在真机与模拟器均通过。

照片/视频用例使用专用模拟器中生成的纯色 PNG 和 2 秒 MP4,真机运行此用例时明确跳过,不自动选取用户私人照片。系统分享只验证面板,不向联系人、邮件或第三方服务实际发送文件。

性能与内存

样本 iPhone 14 真机最近已通过结果 最终 iPhone 14 模拟器结果
1 GiB ZIP 创建、解压及 SHA256 验证 约 4.69 秒;基线 72 MiB、采样峰值 90 MiB 约 3.00 秒;基线 60 MiB、采样峰值 73 MiB
2,000 个小文件创建及解压 约 3.22 秒;文件数验证通过 约 1.53 秒;文件数验证通过

计时覆盖创建、解压和大文件输出校验;不包括生成输入样本。1 GiB 输入为重复模式的高可压缩内容,不能将此速度推广到视频、随机数据或远程 iCloud 文件。内存是进度回调中 task_vm_info.phys_footprint 的采样最大值,包含测试宿主开销,不等同于 Instruments 连续追踪的绝对峰值。测试限制 ZIP 处理峰值相对基线增量小于 128 MiB。

本次验收发现并修复的问题

  1. 真机 /var 与 Foundation 解析后的 /private/var 不一致,导致合法解压路径被误判为不安全。已按 iOS 路径别名归一化,同时保留真实符号链接解析与逃逸测试。
  2. 大文件循环中的 Foundation 临时对象累积,早期物理内存采样超过 1 GiB。读写与分卷循环加入每块 autoreleasepool,最新真机采样峰值 88 MiB,SHA256 不变。
  3. 系统文件/照片面板尚未完成呈现时,测试误操作底层页面。改为等待真实系统控件;照片选择器新版按钮的 accessibility ID 为 Add、可见标签为 Done,按实际 ID 操作。
  4. 设置弹层存在两个“完成”,测试定位不明确。为保存按钮增加独立 ID,并验证设置影响实际解压。
  5. 外部目录选择取消后界面目标已切换但引用未变。只在成功选择时提交新目标,取消保持原位置;用例验证通过。
  6. 外部分享/预览可能在任务授权结束后读取失败。预览与分享分别持有授权至呈现结束,父级位置保留原书签授权根。
  7. 超大字体页头被截断。改为可换行布局和垂直操作区,快捷入口在无障碍字号下使用单列。
  8. 英文重名处理选项显示了 ask、keepBoth 等内部枚举键。修正为 Ask each time、Keep both、Skip、Replace,并增加重复解压、取消、重试与保留两者的界面回归。

格式与运行边界

最终结果索引

证据与复现

migration-evidence/ 保存结果摘要、测试列表、截图、来源 manifest 与通过的 xcresult。原型截图在 prototype/,模拟器在 simulator/,iPhone 14 真机在 device/,iPad 在 ipad/,系统选择分享在 system/,媒体在 media/。真机截图包含系统屏幕会话指示标志,这是 iOS 状态栏内容。临时 /tmp 结果不作为唯一交付证据。

从工程根目录运行,目标 ID 可通过 xcrun simctl list devices 或 xcrun devicectl list devices 获取。专用模拟器需先使用 simctl addmedia 加入两份合成测试媒体,媒体用例验证实际导入。

xcodebuild -project ZipHarbor/ZipHarbor.xcodeproj -scheme ZipHarbor \
  -destination 'platform=iOS Simulator,id=1AD6D2D0-A263-4965-9686-A1D292533A48' \
  -derivedDataPath /tmp/ZipHarbor-Migration \
  -parallel-testing-enabled NO test

xcodebuild -project ZipHarbor/ZipHarbor.xcodeproj -scheme ZipHarbor \
  -destination 'platform=iOS,id=IPHONE14_UDID' \
  -derivedDataPath /tmp/ZipHarbor-Device -allowProvisioningUpdates \
  -parallel-testing-enabled NO test -only-testing:ZipHarborTests

xcodebuild -project ZipHarbor/ZipHarbor.xcodeproj -scheme ZipHarbor \
  -destination 'platform=iOS,id=IPHONE14_UDID' \
  -derivedDataPath /tmp/ZipHarbor-Device -allowProvisioningUpdates \
  -parallel-testing-enabled NO test -only-testing:ZipHarborUITests

xcodebuild -project ZipHarbor/ZipHarbor.xcodeproj -scheme ZipHarbor \
  -configuration Release -destination 'generic/platform=iOS' \
  -allowProvisioningUpdates build

Debug UI tests 显式使用 --qa-fixtures --qa-reset,只重置新应用测试库/记录与 Downloads;旧 app 不受影响。发布构建不包含该入口。使用有真实资料的新应用运行这些测试前,应改用专门验收设备/数据,避免测试重置资料。

人工验收边界

核心引擎与上述用户工作流已经在真机实际执行。真实 iCloud/第三方文件提供者下载写入、本人 Face ID 成功/失败/取消与设备密码回退、真人 VoiceOver,以及长任务暂停/恢复的真机触控仍需对应环境和本人参与。照片/视频只对专用模拟器中的合成媒体完成验收。