构建与分发
构建 01MVP Desktop 安装包,并理解 macOS、Windows、Linux 分发的基本要求
桌面发布比 Web 发布多几个环节:前端 bundle、Rust 编译、安装包、代码签名、平台安全检查和下载分发。先在本机构建成功,再考虑 CI 和自动更新。
正式分发前的凭证清单
AI 或 CI 可以自动执行构建、签名和上传,但前提是账号、证书和 secret 已经准备好。
| 凭证或配置 | 用途 | 没有它会怎样 |
|---|---|---|
| Developer ID Application | macOS 面向用户下载的签名 | 用户打开时会遇到 Gatekeeper 风险提示 |
| Apple notarization 凭据 | 把 macOS app 或 DMG 提交公证 | 只有签名,没有完整公证状态 |
| Windows code signing certificate | Windows 安装包签名 | SmartScreen 和安全软件更容易拦截 |
TAURI_SIGNING_PRIVATE_KEY | 生成 updater 签名产物 | 自动更新无法验证下载包 |
| 发布存储 | 存放 .dmg、.msi、.AppImage 等安装包 | 用户没有稳定下载地址 |
| 更新端点 | 返回版本、下载 URL 和签名 | 应用内“检查更新”不可用 |
| 生产 API / Web 地址 | 桌面应用连接后端 | 安装包可能连到本地或 staging |
这些凭证不提交到仓库。放进本机安全位置、CI secret 或平台后台。AI 可以检查变量是否存在,但不能替用户购买开发者账号、完成双重验证或接受平台协议。
构建前检查
先跑桌面端代码检查:
vpr @01mvp/desktop#type-check
vpr @01mvp/desktop#lint
vpr @01mvp/desktop#test
vpr @01mvp/desktop#build
vpr @01mvp/desktop#tauri:check如果这些命令失败,不要直接跑打包。先修基础问题。
本地打包
运行:
vpr @01mvp/desktop#tauri:buildTauri 会先构建前端,再编译 Rust,最后生成平台安装包。
常见输出位置:
products/01mvp/apps/desktop/src-tauri/target/release/bundletarget 和 dist 都不提交到 git。
targets
模板里配置:
{
"bundle": {
"targets": "all"
}
}开发阶段可以保留 all。发布阶段建议按平台明确构建,避免 CI 产物太散:
| 平台 | 常见产物 |
|---|---|
| macOS | .app、.dmg |
| Windows | .msi、.exe |
| Linux | .AppImage、.deb、.rpm |
不同平台的产物、签名和用户安装习惯都不一样。不要只在 macOS 打过包,就认为 Windows 和 Linux 已经可发布。
版本号
桌面版本号在:
{
"version": "0.1.0"
}发布时要保持:
tauri.conf.json的版本号正确- changelog 和下载页版本一致
- 自动更新 manifest 使用同一个版本号
- 安装包文件名能看出平台和版本
macOS 分发
macOS 正式分发通常需要:
- Developer ID Application 证书
- Tauri 使用证书签名
- notarization
- stapler 把公证票据绑定到应用或 DMG
详细流程看 macOS 签名与权限 和 Tauri macOS signing。
开发阶段可以用 ad-hoc 签名:
{
"bundle": {
"macOS": {
"signingIdentity": "-"
}
}
}ad-hoc 只适合本机开发,不能替代正式分发签名。
Windows 分发
Windows 正式分发通常需要代码签名证书。没有签名的安装包更容易触发 SmartScreen 风险提示。
新产品早期可以先做内部测试包,但面向真实用户下载时,要规划:
- Windows code signing certificate
- 安装包命名和版本
- 下载页校验信息
- 自动更新产物
Linux 分发
Linux 用户常见接受方式包括 AppImage、deb、rpm。你要根据目标用户选择:
- 面向普通用户:AppImage 更简单
- 面向 Debian/Ubuntu 用户:deb 更熟悉
- 面向 Fedora/RHEL 用户:rpm 更熟悉
Linux 桌面环境差异比较大,发布前至少在一个干净环境里安装测试。
CI 发布建议
稳定发布前,把本地流程固化成 CI:
- 安装 Node、Rust 和平台依赖。
- 运行 type-check、lint、test。
- 构建前端和 Tauri app。
- 按平台签名。
- 上传 release assets。
- 生成或更新自动更新 manifest。
- 验证下载链接和更新端点。
不要只验证 git tag。真正的发布验收是安装资产存在、签名有效、下载可用、更新端点返回正确版本。
发布前人工检查
- 安装包能在干净机器上打开
- 应用名、图标、版本号正确
- 登录和受保护 API 可用
- app data 目录正常创建
- 托盘菜单能打开和退出
- 外部链接能打开
- macOS 权限弹窗和签名状态符合预期
- 卸载或覆盖安装后不会破坏用户数据
这篇文档有问题?