跳至主要内容

跨平台编译

Tauri 严重依赖于本地库和工具链,因此目前无法实现有意义的跨平台编译。最佳替代方案是利用 CI/CD 管道(例如 GitHub Actions、Azure Pipelines、GitLab 或其他选项)进行编译。该管道可以同时为每个平台运行编译,从而大大简化编译和发布流程。

为了方便设置,我们目前提供 Tauri Action,这是一个在所有受支持平台上运行的 GitHub Action,它可以编译您的软件,生成必要的工件,并将它们上传到新的 GitHub 版本。

Tauri GitHub Action

Tauri Action 利用 GitHub Actions 同时构建您的应用程序作为 macOS、Linux 和 Windows 的 Tauri 原生二进制文件,并自动创建 GitHub 版本。

此 GitHub Action 也可用于作为 Tauri 应用的测试管道,即使您不希望创建新版本,也可以保证编译在每个发送的拉取请求的所有平台上都能正常运行。

代码签名

要在您的工作流程中为 Windows 和 macOS 设置代码签名,请遵循每个平台的具体指南

入门

要设置 Tauri Action,您必须首先设置一个 GitHub 仓库。您可以在未配置 Tauri 的仓库上使用此 Action,因为它会在构建之前自动初始化 Tauri,并将其配置为使用您的工件。

转到您的 GitHub 项目的 Actions 选项卡,然后选择“新建工作流程”,然后选择“自己设置工作流程”。使用 Tauri Action 生产构建工作流程示例 替换文件。或者,您可以根据 本页底部的示例 设置工作流程

配置

您可以使用configPathdistPathiconPath 选项配置 Tauri。有关详细信息,请参阅 Actions 自述文件。

当您的应用不在仓库的根目录时,请使用projectPath 输入。

您可以修改工作流程名称,更改触发器,并添加更多步骤,例如npm run lintnpm run test。重要的是,您需要在工作流程的末尾保留以下行,因为这将运行构建脚本并发布工件

- uses: tauri-apps/tauri-action@v0

如何触发

上面链接的自述文件中的版本工作流程由对“release”分支的推送触发。Action 使用在tauri.config.json中指定的应用程序版本自动创建 GitHub 版本的标签和标题。

您也可以在推送版本标签(例如“app-v0.7.0”)时触发工作流程。为此,您可以更改版本工作流程的开头

name: publish
on:
push:
tags:
- 'app-v*'
workflow_dispatch:

工作流程示例

以下是一个工作流程示例,该示例已设置为在每次您推送到release分支时运行。

此工作流程将为 Linux x64、Windows x64、macOS x64 和 macOS Arm64(M1 及更高版本)构建和发布您的应用程序。

此工作流程执行的步骤是

  1. 使用actions/checkout@v4检出仓库。
  2. 安装构建应用所需的 Linux 系统依赖项。
  3. 使用actions/setup-node@v4设置 Node LTS 和全局 npm/yarn/pnpm 包数据的缓存。
  4. 使用dtolnay/rust-toolchain@stableswatinem/rust-cache@v2设置 Rust 和target/文件夹的缓存。
  5. 安装前端依赖项,如果未配置为beforeBuildCommand,则运行 Web 应用的构建脚本。
  6. 最后,它使用tauri-apps/tauri-action@v0运行tauri build,生成工件并创建 GitHub 版本。
name: 'publish'

on:
push:
branches:
- release

jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest' # for Arm based macs (M1 and above).
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest' # for Intel based macs.
args: '--target x86_64-apple-darwin'
- platform: 'ubuntu-22.04' # for Tauri v1 you could replace this with ubuntu-20.04.
args: ''
- platform: 'windows-latest'
args: ''

runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4

- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above.
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
# webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2.
# You can remove the one that doesn't apply to your app to speed up the workflow a bit.

- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'yarn' # Set this to npm, yarn or pnpm.

- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'

- 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 or pnpm depending on which one you use.

- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version.
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}

GitHub 环境令牌

GitHub 令牌由 GitHub 为每次工作流程运行自动颁发,无需进一步配置,这意味着没有秘密泄露的风险。但是,此令牌默认情况下只有读取权限,在运行工作流程时,您可能会收到“集成无法访问资源”错误。如果发生这种情况,您可能需要向此令牌添加写入权限。为此,请转到您的 GitHub 项目设置,然后选择 Actions,向下滚动到“工作流程权限”,然后选中“读取和写入权限”。

您可以在下面的工作流程中看到传递给工作流程的 GitHub 令牌

env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

使用说明

请务必查看 GitHub Actions 文档 以更好地了解此工作流程的工作原理。请注意阅读 GitHub Actions 的使用限制、计费和管理 文档。某些项目模板可能已经实现了此 GitHub Action 工作流程,例如 tauri-svelte-template。您可以在未配置 Tauri 的仓库上使用此 Action。Tauri 会在构建之前自动初始化,并将其配置为使用您的 Web 工件。

实验性:在 Linux 和 macOS 上构建 Windows 应用

Tauri v1.3 添加了一种基于 NSIS 安装程序框架的新 Windows 安装程序类型。与 WiX 相反,NSIS 本身也可以在 Linux 和 macOS 上运行,这使得在非 Windows 主机上构建许多 Tauri 应用程序成为可能。请注意,这目前被认为是高度实验性的,可能无法在每个系统或每个项目上运行。因此,只有在本地 VM 或 CI 解决方案(如 GitHub Actions)对您不起作用时,才应将其作为最后手段使用。请注意,目前不支持跨平台构建的签名。

由于 Tauri 官方仅支持 MSVC Windows 目标,因此设置稍微复杂一些。

首先,确保所有 Tauri 依赖项至少为 1.3 版,如果您不确定如何操作,请查看 依赖项更新指南

安装 NSIS

某些 Linux 发行版在其存储库中提供了 NSIS,例如,在 Ubuntu 上,您可以通过运行以下命令安装 NSIS

Ubuntu
sudo apt install nsis

但在许多其他发行版上,您必须自己编译 NSIS 或手动下载发行版的二进制包中未包含的存根和插件。例如,Fedora 只提供二进制文件,而不提供存根和插件

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

macOS
brew install nsis

安装 LLVM 和 LLD 链接器

由于默认的 Microsoft 链接器仅适用于 Windows,因此我们还需要安装一个新的链接器。为了编译用于设置应用程序图标(以及其他内容)的 Windows 资源文件,我们还需要llvm-rc二进制文件,它是 LLVM 项目的一部分。

Ubuntu
sudo apt install lld llvm

在 Linux 上,如果您添加了依赖项,这些依赖项在其构建脚本中编译 C/C++ 依赖项,则还需要安装clang包。默认的 Tauri 应用不需要这个。

macOS
brew install llvm

在 macOS 上,您还必须根据安装输出中的建议,将/opt/homebrew/opt/llvm/bin添加到您的$PATH中。

安装 Windows Rust 目标

假设您正在为 64 位 Windows 系统构建

rustup target add x86_64-pc-windows-msvc

安装cargo-xwin

我们不会手动设置 Windows SDK,而是使用[cargo-xwin]作为 Tauri 的“运行器”

cargo install --locked cargo-xwin

默认情况下,cargo-xwin会将 Windows SDK 下载到项目本地文件夹。如果您有多个项目并希望共享这些文件,则可以使用XWIN_CACHE_DIR环境变量设置首选位置的路径。

构建应用

现在,只需将运行器和目标添加到tauri build命令即可

npm run tauri build -- --runner cargo-xwin --target x86_64-pc-windows-msvc

然后,构建输出将位于target/x86_64-pc-windows-msvc/release/bundle/nsis/中。