本文记录了我在使用 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.jsconfig.toml)和所有build产物。

二、macOS 本地编译问题

1. App 无法打开

  • 使用 otool -L 查看动态库依赖,发现缺少 libiconv.2
    • 尽管 macOS 系统自带 /usr/lib/libiconv.2.dylib,但这个库是只读的,不能用于打包 release
    • 解决办法:通过 Homebrew 安装并指定使用自定义版本。

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 权限。
  • 必须使用一个具备 reporelease 权限的 GitHub Token,并配置为项目的 Secret。
    • ⚠️ 注意:GitHub Token 只能生成一次,请妥善保管。我就因为保存不当,只能重新生成😿。

四、项目代码和效果

👉 quantnight-frontend GitHub 仓库