e8c3e4644e
CI / lint-and-build (push) Has been cancelled
- Swift 6 + SwiftUI + SwiftData 直接调用阿里云 VOD API - 自实现 POP 签名,无需 Node 后端 - 视频列表、搜索、批量下载到用户选择目录 - 下载文件自动使用视频标题重命名 - 浏览器下载与下载工具(aria2/wget)两种方式 - Web 版标记为废弃,README/AGENTS/MEMORY 更新
2.7 KiB
2.7 KiB
MEMORY.md
项目状态与关键决策记录,供跨会话参考。
当前状态
- 版本:v0.2.0(macOS 原生版 MVP)
- 阶段:已废弃 Web 版,macOS SwiftUI 原生版可构建运行
- 最后更新:2026-06-30
已完成的里程碑
v0.1.0(Web 版,已废弃)
- React + Express 前后端项目
- JWT 登录、SQLite 持久化
- VOD 账号配置与 API 代理
- 视频列表、批量下载/删除
v0.2.0(macOS 原生版)
- SwiftUI macOS 项目结构
- 自实现阿里云 POP 签名(CryptoKit HMAC-SHA1)
- 直接调用 VOD OpenAPI,无需 Node 后端
- SwiftData 持久化(Account / OperationLog / DownloadTask)
- 视频列表、搜索
- 批量下载到用户选择目录
- 下载文件自动重命名(清理非法字符)
- 浏览器下载与下载工具(aria2 / wget)两种方式
- 下载任务历史
- 操作日志
- App Sandbox entitlements 配置
架构决策
- 原生 macOS 应用:使用 SwiftUI + SwiftData,目标上架 Mac App Store。
- 直接调用阿里云 API:不依赖后端服务,VODClient actor 直接发起 HTTPS 请求并自实现签名。
- 本地持久化:SwiftData 存储账号、日志、下载任务。
- 下载目录:由用户通过 NSOpenPanel 选择,符合 App Sandbox 要求。
- 文件名处理:使用视频标题 + 清晰度组合命名,自动替换非法字符,避免乱码。
- Web 版废弃:
apps/web与apps/server保留作为历史参考,不再维护。
已知问题 / 待优化
- 当前
swift run可编译但 GUI 需在真实 macOS 桌面会话运行。 - 下载进度目前只有开始/完成两种状态,未实现实时百分比(URLSessionDownloadTask 进度回调未接入)。
- 尚未接入真实阿里云账号进行端到端验证。
- 缺少单元测试。
- AccessKey Secret 目前明文存储在 SwiftData,后续应迁移到 Keychain。
- 需要创建正式的 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中的配置。 - 用户选择下载目录后,应用才拥有该目录的写入权限。