产品文档 / 历史记录与验收范围以文中日期为准
压缩解压缩 iOS App 产品需求文档
文档版本:v1.0
状态:最终产品定义
目标平台:iPhone、iPad
产品形态:本地优先的压缩包创建、解压和文件管理工具
1. 产品定义
产品帮助用户在 iPhone 和 iPad 上可靠地打开、查看、创建、解压和分享压缩文件。产品围绕压缩包任务设计,与 iOS Files、系统分享面板、照片选择器和云端 File Provider 集成。
产品承诺:
- 用户从任何 App 收到压缩包后,可以快速查看内容并保存到明确的位置。
- 用户可以批量选择文件或文件夹创建压缩包,也可以只解压压缩包内需要的内容。
- 文件处理默认在设备本地完成,不上传用户文件,不需要注册账号。
- 常见 ZIP、RAR、7z 场景稳定可用,错误提示能够指导用户解决问题。
- iPhone 和 iPad 都遵循原生文件管理习惯,支持深色模式、动态字体、VoiceOver、拖拽和键盘操作。
2. 背景与用户问题
Apple Files 已经支持基础 ZIP 创建和解压,但无法覆盖完整的 RAR、7z、加密压缩包和批量处理场景。现有第三方产品虽然格式多,但公开评论中重复出现以下问题:
- 广告遮挡解压按钮、弹窗频繁、出现不适宜内容。
- 多选、文件夹压缩、密码设置等基础能力被付费墙阻断。
- 文件被解压到 App 私有目录,用户找不到或无法保存回原来的云盘位置。
- 大文件、RAR、7z 解压失败,错误只显示“未知错误”。
- 购买后反复要求 Restore Purchase,试用和续费说明不清晰。
- iPad 横屏、分屏、键盘、拖拽支持不足。
- 综合工具加入 OCR、PDF、视频转换等功能后,导航复杂、核心任务不突出。
因此,本产品保持功能边界:只做压缩包和压缩包相关的文件交接,不扩展成文档编辑器、视频转换器、浏览器或云盘客户端。
3. 目标用户与场景
| 用户 | 典型需求 | 成功结果 |
|---|---|---|
| 普通 iPhone 用户 | 打开邮件或聊天中收到的 ZIP/RAR | 找到并使用其中的文件 |
| 学生和教师 | 解压课程资料、电子书、作业素材 | 批量导出到 Files 或云盘 |
| 设计师、开发者、创作者 | 处理素材包、插件包、项目文件 | 查看目录、选择性解压、重新打包 |
| 摄影和内容用户 | 批量压缩照片和视频 | 生成较小的 ZIP 并分享 |
| iPad 办公用户 | 用键盘、拖拽和分屏处理文件 | 不离开 iPad 完成归档和交付 |
核心任务
任务 A:打开并解压收到的压缩包
分享面板 → 选择本 App → 查看目录 → 输入密码(如需要)→ 选择文件 → 选择目标位置 → 解压 → 打开或分享结果。
任务 B:压缩照片或文件夹
文件或照片选择 → 创建压缩包 → 输入名称 → 设置密码(可选)→ 生成 → 保存到 Files 或分享。
任务 C:处理云端压缩包
从 Files 选择云端文件 → 下载并显示进度 → 查看目录 → 选择性解压 → 保存回原 File Provider 或其他位置。
任务 D:处理失败任务
查看失败原因 → 重新输入密码、补齐分卷、释放空间或选择其他目标位置 → 重试,已完成的文件不重复处理。
4. 产品边界
必须包含
- 本地文件和 Files 文件提供商导入、导出。
- ZIP 创建和解压。
- RAR、7z、TAR、GZIP、BZ2、TGZ、ZIPX 等常见格式解压。
- 密码和 AES 加密压缩包的解压;ZIP AES 加密创建。
- 创建标准 7z 和 ZIP AES-256 加密归档;7z 密码创建需等待底层写入库支持,RAR5 加密归档读取能力依赖底层解码支持。
- ZIP 多卷输入(.z01/.zip、.zip.001)与常见 RAR 分卷(.partNN.rar / .r00)按卷组导入并解压。
- 以 ZIP 64 KiB 切片生成分卷归档,所有分卷可在 Files 中保存和分享。
- 文件夹和多文件批量选择。
- 选择性解压、批量任务、进度、暂停、取消、重试。
- 文件列表搜索、排序、预览、重命名、移动、复制、删除、分享。
- 图片、PDF、文本、常见音频和视频的只读预览。
- iPhone、iPad、深色模式、动态字体、VoiceOver、键盘和拖拽。
- 路径穿越、解压炸弹、空间不足、损坏文件等安全和异常处理。
- 本地隐私、无广告、无强制登录。
明确不包含
- OCR、PDF 编辑、电子签名。
- 视频剪辑、视频转码、音频编辑。
- 内置浏览器和下载器。
- 自建网盘、账号体系和服务端文件存储。
- 社交分享、协作评论。
- 不必要的“手机清理”“病毒扫描”等营销功能。
5. 功能需求
本表列出的需求全部属于首个正式版本的完整交付范围,不拆分为多个产品阶段。交付要求列统一标记为“本版”,以避免将完整能力误解为后续版本。
5.1 文件导入和来源
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-001 | Files 导入 | 支持 iCloud Drive、On My iPhone、第三方 File Provider | 本版 |
| FR-002 | 分享面板导入 | 支持邮件、Safari、微信、AirDrop、信息等 App 的“打开方式” | 本版 |
| FR-003 | 照片选择 | 使用系统照片选择器批量选择照片和视频,不要求完整相册权限 | 本版 |
| FR-004 | 拖拽导入 | iPad 支持从 Files、邮件和其他 App 拖入文件 | 本版 |
| FR-005 | 云端占位文件 | 需要下载时显示下载进度、网络失败和重试 | 本版 |
| FR-006 | 最近文件 | 展示最近打开或生成的压缩包,记录来源位置和最后操作 | 本版 |
| FR-007 | 收藏和标签 | 用户可收藏常用压缩包或文件夹,标签只保存在本地 | 本版 |
| FR-008 | 常用方案 | 保存可复用的压缩/解压设置,如格式、压缩级别、目标位置和冲突策略;密码默认不保存 | 本版 |
| FR-009 | 系统快捷操作 | 通过 App Intents/Shortcuts 暴露创建 ZIP、打开压缩包和查看任务等核心动作 | 本版 |
5.2 格式识别与查看
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-101 | 内容识别 | 通过文件头和容器结构识别格式,不只依赖扩展名 | 本版 |
| FR-102 | 目录浏览 | 显示层级、文件名、大小、修改时间、压缩率、加密状态 | 本版 |
| FR-103 | 搜索和排序 | 支持按名称、大小、时间、类型排序和目录内搜索 | 本版 |
| FR-104 | 选择性解压 | 支持选择单个、多个、目录或全部内容 | 本版 |
| FR-105 | 预览 | 图片、PDF、文本、常见音频和视频使用只读预览 | 本版 |
| FR-106 | 虚拟化列表 | 大压缩包目录采用分页或虚拟列表,不一次性加载全部行 | 本版 |
| FR-107 | 压缩包信息 | 显示压缩包大小、展开后估算大小、条目数量、格式和加密方式 | 本版 |
| FR-108 | 归档内操作 | 支持查看条目、复制名称、分享条目;追加、删除、重命名归档内条目 | 本版 |
5.3 解压
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-201 | 格式支持 | ZIP、RAR、7z、TAR、GZIP、BZ2、TGZ、ZIPX 等常见格式 | 本版 |
| FR-202 | 密码解压 | 支持传统 ZIP、ZIP AES;RAR 和 7z 密码读取以底层库实际能力为准,错误密码可重试或给出不支持提示 | 本版 |
| FR-203 | 多卷解压 | 识别 ZIP .z01/.zip、ZIP .zip.001 以及常见 RAR 分卷文件并要求选择完整卷组;缺失时提示缺少文件 | 本版 |
| FR-204 | 目标选择 | 默认提供“原文件所在位置”,也可选择 App、本机、iCloud 和其他 Provider | 本版 |
| FR-205 | 重名策略 | 替换、保留两份、跳过、逐个询问;记住本次任务选择 | 本版 |
| FR-206 | 保留目录 | 默认保留压缩包内相对目录结构,用户可选择扁平化输出 | 本版 |
| FR-207 | 进度控制 | 显示已处理数量、总数、字节数、速度、剩余时间;支持暂停和取消 | 本版 |
| FR-208 | 部分成功 | 个别条目失败时保留成功结果,展示失败清单和重试入口 | 本版 |
| FR-209 | 完成动作 | 解压完成后支持打开目标文件夹、预览、分享或继续处理 | 本版 |
| FR-210 | 解压校验 | 完成后校验文件大小和校验和;损坏时标记为失败 | 本版 |
5.4 创建压缩包
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-301 | 多选创建 | 多个文件、多个文件夹和照片/视频一次创建压缩包 | 本版 |
| FR-302 | ZIP 创建 | 创建标准 ZIP,兼容 Windows、macOS、Linux 和常见移动端工具 | 本版 |
| FR-303 | 密码和 AES | 支持无密码、密码 ZIP、AES-256 ZIP;密码不进入日志 | 本版 |
| FR-304 | 名称和位置 | 自定义压缩包名称,选择保存位置 | 本版 |
| FR-305 | 压缩级别 | 提供“平衡”和“更小体积”两个易懂选项;默认平衡 | 本版 |
| FR-306 | 文件结构预览 | 生成前展示选中文件、预计大小和目录结构 | 本版 |
| FR-307 | 生成进度 | 显示进度、速度、剩余时间、暂停、取消和错误 | 本版 |
| FR-308 | 7z 创建 | 创建普通 7z;密码保护创建暂不纳入,使用 ZIP AES 满足加密创建需求 | 本版 |
| FR-309 | 分卷压缩 | 按用户设置的分卷大小创建 ZIP 切片分卷,并一次性分享卷组 | 本版 |
5.5 文件管理
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-401 | 文件夹 | 创建、重命名、移动、复制、删除文件夹 | 本版 |
| FR-402 | 文件操作 | 重命名、移动、复制、删除、分享和保存到其他 App | 本版 |
| FR-403 | 冲突处理 | 文件操作和解压统一使用冲突处理组件 | 本版 |
| FR-404 | 回收站 | 删除进入可恢复回收站,支持恢复和清空;清空前二次确认 | 本版 |
| FR-405 | 位置说明 | 明确显示文件位于本机、iCloud 或其他 Provider | 本版 |
| FR-406 | 文件排序 | 按名称、大小、类型、修改时间排序,支持列表和紧凑网格 | 本版 |
5.6 任务中心
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-501 | 任务队列 | 多个压缩和解压任务排队执行,默认限制并发数 | 本版 |
| FR-502 | 任务详情 | 显示来源、目标、格式、进度、速度和剩余时间 | 本版 |
| FR-503 | 暂停恢复 | 对可恢复任务保存检查点,恢复后不重复已完成内容 | 本版 |
| FR-504 | 取消清理 | 取消后清理临时文件,不删除源文件和已完成输出 | 本版 |
| FR-505 | 通知 | 任务完成、失败或需要密码时使用本地通知;可在设置关闭 | 本版 |
| FR-506 | 历史记录 | 保留最近任务结果,支持删除历史,不保存文件内容 | 本版 |
5.7 隐私和设置
| ID | 需求 | 说明 | 交付要求 |
|---|---|---|---|
| FR-601 | 本地优先 | 核心压缩、解压、预览不依赖服务器 | 本版 |
| FR-602 | 无账号 | 基本功能无需注册和登录 | 本版 |
| FR-603 | 无广告 | 不显示广告,不使用广告 SDK | 本版 |
| FR-604 | 应用锁 | 支持 Face ID、Touch ID 或设备密码保护 App | 本版 |
| FR-605 | 密码保存 | 用户明确开启后才保存密码,使用 Keychain | 本版 |
| FR-606 | 权限说明 | 在需要照片或通知权限前解释用途,拒绝后仍可完成 Files 任务 | 本版 |
| FR-607 | 数据清除 | 提供清除最近记录、临时文件、已保存密码和回收站的入口 | 本版 |
6. 关键业务规则
- 永远保留源压缩包,解压和重打包不会覆盖源文件。
- 默认保留压缩包内目录结构,不默认把大量文件铺平到一个目录。
- 对不安全路径进行规范化,拒绝写入目标目录以外的位置。
- 解压前检查可用空间,至少预留预计输出大小加安全余量。
- 单个文件失败不影响其他安全文件,但必须在结果页显示失败原因。
- 密码错误不把密码写入日志、崩溃报告、通知或分析事件。
- 云端文件未下载完成时不能开始解压;网络断开提供重试。
- 用户取消任务后,已生成的完整文件可以保留,未完成临时文件必须清理。
- 归档内同名文件按目录路径区分;输出时才执行冲突策略。
- 压缩包扩展名与内容不一致时,以内容识别结果为准,并向用户说明。
- ZipHarbor 创建的 ZIP 分卷使用
name.zip.001,name.zip.002序列化切片;此方案保证本 App 可识别和组卷,但第三方工具兼容性需以用户所用工具为准。
7. 非功能需求
性能
- 本地 100 MB ZIP 在普通支持设备上 5 秒内显示目录。
- 100 张照片批量创建压缩包时界面保持可操作。
- 目录超过 10,000 条时使用虚拟列表,不出现明显滚动卡顿。
- 大任务使用流式读写,不能一次性把整个文件读入内存。
稳定性
- 有效 ZIP 样本解压成功率不低于 99%。
- 常见 RAR、7z 样本成功率不低于 98%。
- 任务取消、应用被系统挂起、磁盘空间不足后不损坏源文件。
- 不因畸形压缩包导致应用崩溃。
可访问性和国际化
- 支持 Dynamic Type、VoiceOver、Reduce Motion 和高对比度。
- 所有颜色状态都有文字或图标辅助,不只依赖颜色。
- 支持中英文,文件名和路径支持 Unicode、emoji、CJK 和 RTL 文本。
8. 验收指标
- 新用户无需教程,在 60 秒内完成“打开 ZIP 并保存一个文件”。
- 90% 的测试用户能在首次操作中找到输出文件。
- 90% 的测试用户能完成“选择多张照片并生成 ZIP”。
- 任务失败时,用户能从错误页判断下一步动作。
- 测试数据中不发生 Zip Slip、越权写入或源文件覆盖。
- 崩溃率低于 0.5%,任务级失败率持续监测并按格式分类。
- 不采集文件名、路径、密码、文件内容或完整云盘结构。
9. 关键验收场景
| 场景 | 验收结果 |
|---|---|
| 从分享面板打开加密 ZIP | 直接进入归档详情;输入错误密码时保留当前上下文并允许重试;正确后能选择条目和目标位置 |
| 只解压指定文件 | 只生成选中的条目;默认保留其相对目录;成功和失败条目分别列出 |
| 解压到云端文件夹 | 先等待 File Provider 准备好源文件;输出期间显示同步/保存状态;失败时可重试 |
| 遇到同名文件 | 默认不覆盖;用户可应用一次策略到本次任务全部冲突 |
| 压缩大量照片 | 只请求用户选中的照片;处理时 UI 可操作;取消后清理未完成临时文件 |
| 文件名包含 Unicode 或路径穿越内容 | 正常显示 Unicode 名称;危险路径不写出目标目录并明确报告 |
| 磁盘不足或文件损坏 | 不破坏源文件;显示可理解原因、受影响条目和可执行的下一步 |
| App 在任务中被系统挂起 | 保存可用检查点;返回 App 后恢复或明确提示重试,不静默丢失任务 |
| 重复进行相同压缩任务 | 用户可从常用方案选择上次设置;密码不会因复用方案自动填充 |
10. 产品体验指标
- 首次成功率:新用户第一次打开或创建压缩包后成功完成任务的比例。
- 任务完成率:按格式和来源拆分的创建/解压成功任务比例。
- 找到文件率:任务完成后用户在一次操作内打开或定位输出文件的比例。
- 失败恢复率:用户根据失败提示重试后成功完成的比例。
- 重复使用率:使用最近记录、收藏、常用方案或快捷操作再次完成任务的比例。
- 信任指标:权限拒绝率、删除安装反馈和因广告/收费误导引起的差评应持续监测;产品不采集文件名或内容。