本文记录了我在使用 Tauri 构建桌面端应用时遇到的一些坑和解决方案,包括配置文件管理、macOS 编译、GitHub Actions 自动构建等内容。
一、配置文件的独立处理
由于 Tauri 项目同时包含前端(Web)和后端(Rust),不同平台和开发者可能有各自的本地路径配置,需要将配置文件与代码分离。
1. 前端配置(config.js)
- 使用
config.js统一保存前端默认路径配置。在项目build阶段,如果没有这个配置文件,打包过程会失败。 - 为避免这种问题,我在
vite.config.js中自定义了一个插件,用于在打包前生成一个默认的配置文件。 - ⚠️ 避免使用动态
import处理配置文件路径——AI 建议我去写额外的脚本处理import,事实是import错误是属于无法处理的类型。
2. 后端配置(config.toml)
- Rust 后端通过
config.toml统一保存脚本路径、参数设置、数据库地址等。 - 专门写了一个脚本模块和一个数据库模块来负责读取配置,并在
main.rs中加载配置并注册到tauri::State。 - macOS 下 release 模式运行正常:只需将
config.toml放入app/Resources/目录即可。 - Windows 下暂时无法通过此方式生效,仍需进一步处理资源路径。
- 将 MongoDB 的 collection 名称也提取为配置项,不再硬编码于逻辑中。
3. Git 提交管理
- 在
.gitignore中忽略本地配置文件(如config.js、config.toml)和所有build产物。
二、macOS 本地编译问题
1. App 无法打开
- 使用
otool -L查看动态库依赖,发现缺少libiconv.2。- 尽管 macOS 系统自带
/usr/lib/libiconv.2.dylib,但这个库是只读的,不能用于打包 release。 - 解决办法:通过 Homebrew 安装并指定使用自定义版本。
- 尽管 macOS 系统自带
2. 程序签名问题
- 使用命令检查签名有效性:
codesign --verify --deep --strict --verbose=2 YourApp.app - 如果没有注册 Apple Developer,macOS 默认会阻止启动未签名的应用。无法解决.
- 暂时解决方案:使用
xattr命令移除安全隔离标记:sudo xattr -r -d com.apple.quarantine YourApp.app
- 暂时解决方案:使用
三、Release 打包与自动发布
1. GitHub Actions 自动发布
- 使用 tauri-action 提供的 GitHub Action 来自动构建并发布 release。
- 几乎无需修改配置,开箱即用,非常适合桌面端分发。
2. Linux 版本的处理
- 原本打算支持 Ubuntu 构建,但桌面依赖繁杂、反正也没人用, 直接放弃构建 Linux 版本。
3. 权限与 Token 设置
- GitHub Action 发布 Release 时,需要为该 Action 赋予
write权限。 - 必须使用一个具备
repo和release权限的 GitHub Token,并配置为项目的 Secret。- ⚠️ 注意:GitHub Token 只能生成一次,请妥善保管。我就因为保存不当,只能重新生成😿。