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

2.7 KiB
Raw Permalink Blame History

MEMORY.md

项目状态与关键决策记录,供跨会话参考。

当前状态

  • 版本v0.2.0macOS 原生版 MVP
  • 阶段:已废弃 Web 版,macOS SwiftUI 原生版可构建运行
  • 最后更新2026-06-30

已完成的里程碑

v0.1.0Web 版,已废弃)

  • React + Express 前后端项目
  • JWT 登录、SQLite 持久化
  • VOD 账号配置与 API 代理
  • 视频列表、批量下载/删除

v0.2.0macOS 原生版)

  • SwiftUI macOS 项目结构
  • 自实现阿里云 POP 签名(CryptoKit HMAC-SHA1
  • 直接调用 VOD OpenAPI,无需 Node 后端
  • SwiftData 持久化(Account / OperationLog / DownloadTask
  • 视频列表、搜索
  • 批量下载到用户选择目录
  • 下载文件自动重命名(清理非法字符)
  • 浏览器下载与下载工具(aria2 / wget)两种方式
  • 下载任务历史
  • 操作日志
  • 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/webapps/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 中的配置。
  • 用户选择下载目录后,应用才拥有该目录的写入权限。