跨平台编译
Tauri 严重依赖本地库和工具链,因此目前无法进行有意义的交叉编译。下一个最佳选择是利用托管在 GitHub Actions、Azure Pipelines、GitLab 或其他选项上的 CI/CD 管道进行编译。管道可以同时运行每个平台的编译,使编译和发布过程变得更加简单。
为了方便设置,我们目前提供了 Tauri Action,这是一个可在所有支持平台上运行的 GitHub Action,可编译软件、生成必要的工件,并将其上传到新的 GitHub 发布。
Tauri GitHub Action
Tauri Action 利用 GitHub Actions 同时将应用程序构建为适用于 macOS、Linux 和 Windows 的 Tauri 原生二进制文件,并自动创建 GitHub 发布。
该 GitHub Action 也可用作您的 Tauri 应用程序的测试管道,即使您不想创建新版本,也能保证发送的每个拉取请求都能在所有平台上正常编译运行。
要在工作流程中为 Windows 和 macOS 设置代码签名,请遵循每个平台的特定指南:
入门
要设置 Tauri 操作,必须先设置一个 GitHub 仓库。您可以在未配置 Tauri 的版本库中使用此操作,因为它会在构建和配置 Tauri 之前自动初始化 Tauri,以便使用您的工件。
进入 GitHub 项目的 "操作 "选项卡,选择 "新建工作流程",然后选择 "自行设置工作流程"。用 Tauri Action 生产构建工作流程示例替换文件。或者,你也可以根据本页底部的示例设置工作流程
配置
你可以使用 configPath
、distPath
和 iconPath
选项配置Tauri。详见操作自述。
如果应用程序不在软件源的根目录下,请使用 projectPath
输入。
你可以修改工作流程名称,更改触发器,并添加更多步骤,如 npm run lint
或 npm run test
。最重要的是在工作流程末尾保留下面一行,因为这一行会运行构建脚本并发布工件:
- uses: tauri-apps/tauri-action@v0
如何触发
上面链接的 README 示例中的发布工作流程是由 "release "分支上的推送触发的。该操作使用 tauri.config.json
中指定的应用程序版本自动为 GitHub 发布创建标签和标题。
您也可以在推送版本标签(如 "app-v0.7.0")时触发工作流程。为此,您可以更改发布工作流程的起始时间:
name: publish
on:
push:
tags:
- 'app-v*'
workflow_dispatch:
工作流程示例
下面是一个工作流程示例,每次在 git 上创建新版本时都会运行该流程。
此工作流程在 Windows、Ubuntu 和 macOS 最新版本上设置环境。请注意 jobs.release.strategy.matrix
下的平台数组,其中包含 macos-latest
、ubuntu-20.04
和 windows-latest
。
该工作流程的步骤是
- 使用
actions/checkout@v4
检出版本库 - 使用
actions/setup-node@v4
设置 Node LTS 和全局 npm/yarn/pnpm 软件包数据缓存。 - 使用
dtolnay/rust-toolchain@stable
和swatinem/rust-cache@v2
为target/
文件夹设置 Rust 和缓存。 - 安装所有依赖项并运行构建脚本(针对网络应用)。
- 最后,它使用
tauri-apps/tauri-action@v0
运行tauri build
、生成工件并创建 GitHub 发布。
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
release:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
platform: [macos-latest, ubuntu-20.04, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-20.04'
# You can remove libayatana-appindicator3-dev if you don't use the system tray feature.
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev
- name: Rust setup
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Sync node version and setup cache
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'yarn' # Set this to npm, yarn or pnpm.
- name: Install frontend dependencies
# If you don't have `beforeBuildCommand` configured you may want to build your frontend here too.
run: yarn install # Change this to npm, yarn or pnpm.
- name: Build the app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ github.ref_name }} # This only works if your workflow triggers on new tags.
releaseName: 'App Name v__VERSION__' # tauri-action replaces \_\_VERSION\_\_ with the app version.
releaseBody: 'See the assets to download and install this version.'
releaseDraft: true
prerelease: false
GitHub 环境令牌
每次运行工作流时,GitHub 都会自动发放 GitHub 令牌,无需进一步配置,这意味着不会有泄密风险。不过,该令牌默认只有读取权限,运行工作流时可能会出现 "Resource not access by integration"(集成无法访问资源)错误。如果出现这种情况,您可能需要为该令牌添加写入权限。为此,请进入 GitHub 项目设置,然后选择 "操作",向下滚动到 "工作流权限",选中 "读写权限"。
您可以在下面看到 GitHub 令牌被传递到工作流:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
使用说明
请务必查看 GitHub Actions 文档,以便更好地了解该工作流程的工作原理。请仔细阅读 GitHub 动作的使用限制、计费和管理文档。有些项目模板可能已经实现了 GitHub 行动工作流程,例如 tauri-svelte-template。你可以在没有配置Tauri的 repo 上使用该操作。在构建和配置之前,Tauri 会自动初始化,以使用你的网络工件。
实验:在 Linux 和 macOS 上构建 Windows 应用程序
Tauri v1.3 添加了一种基于 NSIS 安装程序框架的新 Windows 安装程序类型。与 WiX 不同的是,NSIS 本身也可以在 Linux 和 macOS 上运行,这使得在非 Windows 主机上构建许多 Tauri 应用程序成为可能。需要注意的是,这目前被认为是高度实验性的,可能无法在每个系统或每个项目上运行。因此,只有在本地虚拟机或 CI 解决方案(如 GitHub Actions)不适合您的情况下,才可将其作为最后手段使用。请注意,目前还不支持签署跨平台构建。
由于 Tauri 官方只支持 MSVC Windows 目标机,因此设置工作比较繁琐。
首先,确保所有 Tauri 依赖项都至少是 1.3 版本,如果不确定如何更新,请查看依赖项更新指南。
安装NSIS
有些 Linux 发行版的软件源中有 NSIS,例如在 Ubuntu 上,运行此命令即可安装 NSIS:
sudo apt install nsis
但在许多其他发行版上,你必须自己编译 NSIS 或手动下载未包含在发行版二进制包中的存根和插件。例如,Fedora 只提供二进制包,而不提供存根和插件:
sudo dnf in mingw64-nsis
wget https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zip
unzip nsis-3.zip
sudo cp nsis-3.08/Stubs/* /usr/share/nsis/Stubs/
sudo cp -r nsis-3.08/Plugins/** /usr/share/nsis/Plugins/
在 macOS 上,您需要使用 Homebrew 来安装 NSIS:
brew install nsis
安装 LLVM 和 LLD 链接器
由于默认的微软链接器仅适用于 Windows,因此我们还需要安装一个新的链接器。要编译用于设置应用程序图标等的 Windows 资源文件,我们还需要 LLVM 项目中的 llvm-rc
二进制文件。
sudo apt install lld llvm
brew install llvm
在 macOS 上,还必须按照安装输出中的建议,将 /opt/homebrew/opt/llvm/bin
添加到 $PATH
中。
安装 Windows Rust 目标
假设您为 64 位 Windows 系统构建:
rustup target add x86_64-pc-windows-msvc
安装Windows SDKs
为了获取 msvc 目标所需的 Windows SDK,我们将使用 xwin 项目:
cargo install xwin
然后,你可以使用 xwin
CLI 将所需文件安装到你选择的位置。记住这个位置,下一步我们就需要它了。在本指南中,我们将在主目录下创建一个 .xwin
目录。
xwin splat --output ~/.xwin
如果失败,会出现类似这样的错误信息:
Error: failed to splat Microsoft.VC.14.29.16.10.CRT.x64.Desktop.base.vsix
Caused by:
0: unable to symlink from .xwin/crt/lib/x86_64/LIBCMT.lib to libcmt.lib
1: File exists (os error 17)
你可以尝试在命令中添加 --disable-symlinks
标记:
xwin splat --output ~/.xwin --disable-symlinks
现在,要让 Rust 编译器使用这些文件,首先要在项目中创建一个 .cargo
目录,并在其中创建一个 config.toml
文件,内容如下。确保相应更改路径。
[target.x86_64-pc-windows-msvc]
linker = "lld"
rustflags = [
"-Lnative=/home/username/.xwin/crt/lib/x86_64",
"-Lnative=/home/username/.xwin/sdk/lib/um/x86_64",
"-Lnative=/home/username/.xwin/sdk/lib/ucrt/x86_64"
]
请注意,该文件只针对您的机器,因此如果您的项目是公共项目或将与他人共享,我们不建议将其检入 git。
构建应用程序
如果您的应用程序依赖于 ring
或 libsqlite3-sys
等 C 语言库,跨平台构建应用程序就会变得有点棘手,因为您还需要设置适当的环境变量和软件包,以便在系统上交叉编译这些 C 语言库。这可能包括设置 CC
、CXX
、AR
和其他环境变量,不过这在很大程度上取决于构建环境的设置。有关交叉编译所需的其他配置的详细信息,请参阅所用库的文档。
现在,只需将目标添加到 tauri 编译命令即可:
- npm
- Yarn
- pnpm
- Cargo
npm run tauri build -- --target x86_64-pc-windows-msvc
yarn tauri build --target x86_64-pc-windows-msvc
pnpm tauri build --target x86_64-pc-windows-msvc
cargo tauri build --target x86_64-pc-windows-msvc
然后,编译输出将位于 target/x86_64-pc-windows-msvc/release/bundle/nsis/
中。