# MEMORY.md > 项目状态与关键决策记录,供跨会话参考。 ## 当前状态 - **版本**:v0.2.0(macOS 原生版 MVP) - **阶段**:已废弃 Web 版,macOS SwiftUI 原生版可构建运行 - **最后更新**:2026-06-30 ## 已完成的里程碑 ### v0.1.0(Web 版,已废弃) - [x] React + Express 前后端项目 - [x] JWT 登录、SQLite 持久化 - [x] VOD 账号配置与 API 代理 - [x] 视频列表、批量下载/删除 ### v0.2.0(macOS 原生版) - [x] SwiftUI macOS 项目结构 - [x] 自实现阿里云 POP 签名(CryptoKit HMAC-SHA1) - [x] 直接调用 VOD OpenAPI,无需 Node 后端 - [x] SwiftData 持久化(Account / OperationLog / DownloadTask) - [x] 视频列表、搜索 - [x] 批量下载到用户选择目录 - [x] 下载文件自动重命名(清理非法字符) - [x] 浏览器下载与下载工具(aria2 / wget)两种方式 - [x] 下载任务历史 - [x] 操作日志 - [x] App Sandbox entitlements 配置 ## 架构决策 1. **原生 macOS 应用**:使用 SwiftUI + SwiftData,目标上架 Mac App Store。 2. **直接调用阿里云 API**:不依赖后端服务,VODClient actor 直接发起 HTTPS 请求并自实现签名。 3. **本地持久化**:SwiftData 存储账号、日志、下载任务。 4. **下载目录**:由用户通过 NSOpenPanel 选择,符合 App Sandbox 要求。 5. **文件名处理**:使用视频标题 + 清晰度组合命名,自动替换非法字符,避免乱码。 6. **Web 版废弃**:`apps/web` 与 `apps/server` 保留作为历史参考,不再维护。 ## 已知问题 / 待优化 1. 当前 `swift run` 可编译但 GUI 需在真实 macOS 桌面会话运行。 2. 下载进度目前只有开始/完成两种状态,未实现实时百分比(URLSessionDownloadTask 进度回调未接入)。 3. 尚未接入真实阿里云账号进行端到端验证。 4. 缺少单元测试。 5. AccessKey Secret 目前明文存储在 SwiftData,后续应迁移到 Keychain。 6. 需要创建正式的 Xcode 工程以配置 Signing、Bundle ID,满足 App Store 提交要求。 ## 后续规划 ### v0.3.0 - [ ] 接入真实账号联调 - [ ] 下载进度实时显示 - [ ] Keychain 存储 AccessKey Secret - [ ] 分类树展示 ### v0.4.0 - [ ] 批量删除视频 - [ ] 视频详情页面 - [ ] 操作日志写入(目前只展示,下载/删除未写入日志) ### v1.0.0 - [ ] Xcode 工程与签名配置 - [ ] TestFlight / Mac App Store 提交 - [ ] 中英文国际化 - [ ] 完善测试覆盖 ## 部署注意 - macOS 应用默认使用 SwiftData 自动管理的数据库路径(Application Support)。 - App Store 版本必须开启 Sandbox,使用 `VODManager.entitlements` 中的配置。 - 用户选择下载目录后,应用才拥有该目录的写入权限。