Files
ttree/docs/development.md

69 lines
4.6 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.
# 开发指南
## 一次修改,两个平台
`apps/macos` 和 `apps/windows` 各自拥有独立 Cargo package,只维护原生界面与交互。共享能力统一位于 `crates`,使用一个根 Cargo.lock 和工作区版本号。
| 需要修改的内容 | 位置 | 联动范围 |
| --- | --- | --- |
| 语言、提示词输入、布局数据、消息校验 | `crates/ttree-core` | 两端 |
| 免费翻译、分流、回退 | `crates/ttree-translate` | 两端 |
| 流式 AI、HY-MT、本地服务 | `crates/ttree-ai` | 两端;Candle/Metal 实现限 Mac |
| 版本检查、更新下载、校验与安装 | `crates/ttree-updater` | 两端;安装器按平台隔离 |
| 配置和历史 | `crates/ttree-storage` | 两端;保持旧格式 |
| 快捷键、自启和划词入口 | `crates/ttree-platform` | 两端,系统划词实现分目录 |
| OCR 公共处理/结果类型 | `crates/ttree-ocr/src` | 两端 |
| AppKit / Win32 控件 | `apps/macos` / `apps/windows` | 对应平台 |
| 平台截图/OCR | `crates/ttree-ocr/src/macos` / `windows` | 对应平台 |
![目录与依赖示意图](images/workspace.svg)
不要复制两份配置模型或翻译策略。改变公共接口后同步更新两个调用端,保持平台专用依赖受 `cfg(target_os)` 保护。
## 环境与运行
Mac 需要 Rust stable、Xcode Command Line Tools,以及 Metal 编译工具。打 Universal 包还需 `rustup target add aarch64-apple-darwin x86_64-apple-darwin`。如果 `xcrun -f metal` 失败,在完整 Xcode 环境安装 Metal Toolchain。
Windows 需要 Rust stable MSVC、Visual Studio C++ Build Tools 和 Windows SDK。平台包使用 `x86_64-pc-windows-msvc`。CI 的 Windows 2022 runner 已具备这些条件。
```sh
# 在对应系统任选一个入口;--show 显式显示默认隐藏的窗口
cargo run -p ttree-macos -- --show
cargo run -p ttree-windows -- --show
# Mac 签名 App 的原生截图 / Vision 验证(应用未运行时)
open -n /Applications/TTREE.app --args --ocr
# 编译和单元测试(workspace 成员在非对应平台使用空入口)
cargo check --workspace --locked
cargo test --workspace --locked
# 发布脚本、签名失败场景和发布策略合约
bash scripts/tests/run-release-tests.sh
# Mac 上只做 Windows 类型检查
cargo check -p ttree-windows --target x86_64-pc-windows-msvc --locked
```
不需要 Node 前端工具链。发布阶段使用固定版本的 Tauri 独立 signer,用于兼容旧客户端的更新附件签名及双平台更新清单签名。
## 验证边界
共享代码修改需检查两端。Mac 本地测试与 Windows 交叉检查通过后,仍需 Windows runner 的原生构建、单元测试、便携 ZIP 校验与启动验证。CI 保存 Windows 启动结果和截图作为 artifact;这只是启动检查,不能代替完整桌面交互回归。
Windows 重绘问题可按需运行 `apps/windows/tests/repaint-regression.py`(需 unlocked desktop、Pillow、pywinauto);输出放到 `target/repaint-regression`。Mac 签名和录屏权限的跨升级实测是不同证据,见[发布指南](releasing.md)。
## 工作区整洁
源码在 `apps/` 与 `crates/`;文档在 `docs/`;脚本按 `macos`、`windows`、`release` 分类。日志、截图测试证据和中间构建放 `target/`,对外附件放 `dist/`,均不提交。
README 图片放 `docs/images/`,只能提交确认可公开的界面。API Key 当前保存在用户配置目录 JSON 内,Mac 文件权限设为 0600;不要把它描述成 Keychain 存储,也不要将配置或聊天历史用于测试样本。
## 品牌与渲染图
单色 Logo 源文件为 `assets/icons/icon.svg`。Mac 安装 librsvg 后运行 `python3 scripts/branding/generate-icons.py`,统一生成 PNG、ICO、ICNS。Windows 可生成 PNG/ICO;发布前仍须在 Mac 更新 ICNS。Windows build.rs 将图标及版本编译进 EXE,窗口读取带底板的应用图标;托盘读取无底板的浅色/深色字形,并跟随系统任务栏主题。Mac 菜单栏使用透明字形与 NSImage template 自动适配明暗。
README 产品图源文件为 `docs/design/product.html`,按 1600 × 1080 CSS 像素渲染,导出 `docs/images/product.png`(当前为 2x)。这是基于现有布局的界面示意,不是实机截图;不要用它作为交互验收证据。
应用内安装原生冒烟由 `updater-smoke` opt-in 验证构建执行:`--updater-smoke-install SIGNED_RELEASE_DIR vX.Y.Z`。入口仅在验证构建中存在,使用正式公钥和签名清单,安装器与发行版相同。Windows CI 验证实际 EXE 替换、新 GUI 进程、便携目录文件保留及 helper 清理;不以假程序启动代替。