# 压缩解压缩 iOS App 产品需求文档

**文档版本**：v1.0  
**状态**：最终产品定义  
**目标平台**：iPhone、iPad  
**产品形态**：本地优先的压缩包创建、解压和文件管理工具

## 1. 产品定义

产品帮助用户在 iPhone 和 iPad 上可靠地打开、查看、创建、解压和分享压缩文件。产品围绕压缩包任务设计，与 iOS Files、系统分享面板、照片选择器和云端 File Provider 集成。

产品承诺：

1. 用户从任何 App 收到压缩包后，可以快速查看内容并保存到明确的位置。
2. 用户可以批量选择文件或文件夹创建压缩包，也可以只解压压缩包内需要的内容。
3. 文件处理默认在设备本地完成，不上传用户文件，不需要注册账号。
4. 常见 ZIP、RAR、7z 场景稳定可用，错误提示能够指导用户解决问题。
5. 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. 关键业务规则

1. 永远保留源压缩包，解压和重打包不会覆盖源文件。
2. 默认保留压缩包内目录结构，不默认把大量文件铺平到一个目录。
3. 对不安全路径进行规范化，拒绝写入目标目录以外的位置。
4. 解压前检查可用空间，至少预留预计输出大小加安全余量。
5. 单个文件失败不影响其他安全文件，但必须在结果页显示失败原因。
6. 密码错误不把密码写入日志、崩溃报告、通知或分析事件。
7. 云端文件未下载完成时不能开始解压；网络断开提供重试。
8. 用户取消任务后，已生成的完整文件可以保留，未完成临时文件必须清理。
9. 归档内同名文件按目录路径区分；输出时才执行冲突策略。
10. 压缩包扩展名与内容不一致时，以内容识别结果为准，并向用户说明。
11. 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. 验收指标

1. 新用户无需教程，在 60 秒内完成“打开 ZIP 并保存一个文件”。
2. 90% 的测试用户能在首次操作中找到输出文件。
3. 90% 的测试用户能完成“选择多张照片并生成 ZIP”。
4. 任务失败时，用户能从错误页判断下一步动作。
5. 测试数据中不发生 Zip Slip、越权写入或源文件覆盖。
6. 崩溃率低于 0.5%，任务级失败率持续监测并按格式分类。
7. 不采集文件名、路径、密码、文件内容或完整云盘结构。

## 9. 关键验收场景

| 场景 | 验收结果 |
|---|---|
| 从分享面板打开加密 ZIP | 直接进入归档详情；输入错误密码时保留当前上下文并允许重试；正确后能选择条目和目标位置 |
| 只解压指定文件 | 只生成选中的条目；默认保留其相对目录；成功和失败条目分别列出 |
| 解压到云端文件夹 | 先等待 File Provider 准备好源文件；输出期间显示同步/保存状态；失败时可重试 |
| 遇到同名文件 | 默认不覆盖；用户可应用一次策略到本次任务全部冲突 |
| 压缩大量照片 | 只请求用户选中的照片；处理时 UI 可操作；取消后清理未完成临时文件 |
| 文件名包含 Unicode 或路径穿越内容 | 正常显示 Unicode 名称；危险路径不写出目标目录并明确报告 |
| 磁盘不足或文件损坏 | 不破坏源文件；显示可理解原因、受影响条目和可执行的下一步 |
| App 在任务中被系统挂起 | 保存可用检查点；返回 App 后恢复或明确提示重试，不静默丢失任务 |
| 重复进行相同压缩任务 | 用户可从常用方案选择上次设置；密码不会因复用方案自动填充 |

## 10. 产品体验指标

- 首次成功率：新用户第一次打开或创建压缩包后成功完成任务的比例。
- 任务完成率：按格式和来源拆分的创建/解压成功任务比例。
- 找到文件率：任务完成后用户在一次操作内打开或定位输出文件的比例。
- 失败恢复率：用户根据失败提示重试后成功完成的比例。
- 重复使用率：使用最近记录、收藏、常用方案或快捷操作再次完成任务的比例。
- 信任指标：权限拒绝率、删除安装反馈和因广告/收费误导引起的差评应持续监测；产品不采集文件名或内容。

## 11. 研究依据

- [iZip App Store](https://apps.apple.com/us/app/izip-zip-unzip-unrar/id413971331)
- [Unzip App Store](https://apps.apple.com/us/app/unzip-zip-rar-7z-file-opener/id1281374098)
- [Zip & RAR File Extractor App Store](https://apps.apple.com/us/app/zip-rar-file-extractor/id769409043)
- [Documents App Store](https://apps.apple.com/us/app/documents-file-manager/id364901807)
- [WinZip App Store](https://apps.apple.com/us/app/winzip-1-zip-unzip-tool/id500637987)
- [iTunes Search API](https://itunes.apple.com/search)
- [Apple iPhone User Guide](https://support.apple.com/guide/iphone/welcome/ios)
