Files
William e8c3e4644e
CI / lint-and-build (push) Has been cancelled
feat: 新增 macOS 原生 SwiftUI 客户端
- Swift 6 + SwiftUI + SwiftData 直接调用阿里云 VOD API

- 自实现 POP 签名,无需 Node 后端

- 视频列表、搜索、批量下载到用户选择目录

- 下载文件自动使用视频标题重命名

- 浏览器下载与下载工具(aria2/wget)两种方式

- Web 版标记为废弃,README/AGENTS/MEMORY 更新
2026-06-30 08:38:43 +06:00

79 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MEMORY.md
> 项目状态与关键决策记录,供跨会话参考。
## 当前状态
- **版本**v0.2.0macOS 原生版 MVP
- **阶段**:已废弃 Web 版,macOS SwiftUI 原生版可构建运行
- **最后更新**2026-06-30
## 已完成的里程碑
### v0.1.0Web 版,已废弃)
- [x] React + Express 前后端项目
- [x] JWT 登录、SQLite 持久化
- [x] VOD 账号配置与 API 代理
- [x] 视频列表、批量下载/删除
### v0.2.0macOS 原生版)
- [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` 中的配置。
- 用户选择下载目录后,应用才拥有该目录的写入权限。