本页目录

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

ZipHarbor 新工程技术架构

组织与依赖方向

SwiftUI Features → Application → Domain protocols/value types
                         ↓
             Infrastructure implementations

App 是 composition root;Application 负责业务编排,Domain 不依赖 SwiftUI/SwiftData。Infrastructure 提供本地持久化、文件授权、归档引擎、系统选择/分享及身份认证。DesignSystem 管理视觉 token 和复用组件。

主要职责

模块 职责
AppSession 导航、导入入口、文件库缓存、错误及系统预览/分享入口
ArchiveViewModel 当前归档目录、过滤、选中路径、按需预览和检查密码
CreateViewModel 两步表单、输入选择、名称清理、设置复用
TaskCoordinator 独立任务状态、串行队列、密码续接、冲突决策、取消重试、历史
AppSettings UserDefaults 持久化偏好;不保存密码
FileAccess NSFileCoordinator、security scope、异步复制及失败清理
FileReference 本机相对路径或外部书签、子路径解析和访问生命周期
LibArchiveEngine 独立工作队列上的流式压缩、读取、提取、分卷与路径检查
ArchiveOperationControl NSCondition 保护的暂停、取消及等待冲突处理;不在主线程阻塞
AppLockService LocalAuthentication,防止重复认证请求

MainActor 仅承担 ViewModel、导航和 SwiftData 更新;归档循环及文件复制在专用 DispatchQueue 执行。ArchiveEngine 可注入实现。OperationControl 用锁保护跨线程状态,所有 C reader/writer 保持在同一工作线程。

协议与数据

ArchiveEngine 提供 inspect、extract、create,执行接口接收 operation control 与结构化进度。进度包含比例、处理字节/总字节、当前文件和项目数。界面更新按约 1% 节流,避免每个缓冲块都写数据库。

JobSpec 保存可重试的请求值:任务类型、输入 FileReference、目标目录、归档名称、路径选择、格式、压缩级别、分卷和目录选项。密码不属于持久化请求。LibraryItem 与 JobRecord 为 SwiftData 模型;UI 和协调器在同一个 MainActor context 中更新,消除旧版共享 activeContext 的问题。

任务状态包括 queued、running、paused、waitingPassword、waitingConflict、completed、failed、cancelled、interrupted。缺少或错误密码保留原任务,暂停队列,待密码后直接重试原请求。遇到重名时,工作线程等待用户选择或取消;替换选择只有在完整新文件写入后生效。失败重试创建新的历史记录,保持失败事实。

文件完整性

输出位置由用户确认,外部书签失效不会静默更换为其他目标。iCloud、第三方文件提供者的下载/写入取决于系统 Files 授权和提供者状态。

工程与签名

iOS/iPadOS 17+,Swift 6,Bundle ID com.xiaolongxu.zipharbor.app,团队 3LSP26D33P,Xcode 自动签名。ArchiveKit 精确版本 1.0.0,Package.resolved 提交其 revision。App 的 Core Data/CloudKit/远程推送模板能力已移除。

Resources 采用 en/zh-Hans .strings,含 InfoPlist 权限本地化。发布构建不处理 --qa-fixtures,测试样例仅在 DEBUG 分支且显式启动参数存在时生成。测试文件不打包到主 App。

测试与运维边界

测试包含引擎多格式往返、独立格式样例、冲突/目录/密码/分卷、任务协调与记录保留、1 GiB 内容校验和大量小文件、UI 全流程及真机运行。xcresult 与截图为证据,不以“安装成功”代替功能验收。

应用不上传文件、不采集后台遥测。跨进程 checkpoint、系统长期后台运行与通知不在交付范围;系统终止后中断任务由用户重试。