跳到主要內容

跨平台編譯

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 應用程式的測試管線,確保編譯在每個提交的 pull request 上都能正常執行於所有平台,即使您不希望建立新發行版。

程式碼簽署

若要為工作流程中的 Windows 和 macOS 設定程式碼簽署,請遵循每個平台的特定指南

入門

若要設定 Tauri Action,您必須先設定 GitHub 儲存庫。您可以在尚未設定 Tauri 的儲存庫上使用此動作,因為它會在建置和設定使用您的成品之前自動初始化 Tauri。

前往 GitHub 專案上的動作標籤,選擇「新增工作流程」,然後選擇「自行設定工作流程」。使用 Tauri Action 產出建置工作流程範例 替換檔案。或者,您可以根據 本頁底部的範例 設定工作流程

設定

您可以使用 configPathdistPathiconPath 選項設定 Tauri。詳細資訊請參閱動作自述檔。

當您的應用程式不在儲存庫的根目錄時,請使用 projectPath 輸入。

您可以修改工作流程名稱、變更觸發條件,並新增更多步驟,例如 npm run lintnpm run test。重點是您必須將以下列於工作流程結尾,因為這會執行建置指令碼並釋出成品

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

如何觸發

上述自述檔範例中的釋出工作流程會由「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-latestubuntu-20.04windows-latest

此工作流程執行的步驟如下

  1. 使用 actions/checkout@v4 簽出儲存庫
  2. 使用 actions/setup-node@v4 設定 Node LTS 和全球 npm/yarn/pnpm 套件資料的快取。
  3. 使用 dtolnay/rust-toolchain@stableswatinem/rust-cache@v2 設定 Rust 和 target/ 資料夾的快取。
  4. 安裝所有相依性並執行建置指令碼(適用於網路應用程式)。
  5. 最後,它使用 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 自動發布,無需進一步設定,這表示沒有機密外洩的風險。不過,此權杖預設只有讀取權限,您在執行工作流程時可能會收到「整合無法存取資源」的錯誤訊息。如果發生這種情況,您可能需要新增寫入權限到此權杖。為此,請前往您的 GitHub 專案設定,然後選擇動作,向下捲動到「工作流程權限」並勾選「讀取和寫入權限」。

您可以在下方看到傳遞給工作流程的 GitHub 權杖

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

使用注意事項

請務必查看 GitHub Actions 文件 以更深入了解此工作流程的運作方式。請務必閱讀 使用限制、計費和管理 文件以了解 GitHub Actions。某些專案範本可能已經實作此 GitHub 動作工作流程,例如 tauri-svelte-template。您可以在未設定 Tauri 的存放庫上使用此動作。Tauri 會在建置和設定為使用您的網路成品之前自動初始化。

實驗性質:在 Linux 和 macOS 上建置 Windows 應用程式

Tauri v1.3 新增一種新的 Windows 安裝程式類型,它基於 NSIS 安裝程式架構。與 WiX 相比,NSIS 本身也可以在 Linux 和 macOS 上執行,這使得在非 Windows 主機上建置許多 Tauri 應用程式成為可能。請注意,這目前被認為是高度實驗性質,可能無法在每個系統或每個專案上執行。因此,只有在您無法使用本機 VM 或 GitHub Actions 等 CI 解决方案時,才應將其作為最後的手段。請注意,目前不支援跨平台建置的簽署。

由於 Tauri 官方只支援 MSVC Windows 目標,因此設定會稍微複雜一些。

首先,請確保您的所有 Tauri 相依項至少為版本 1.3,如果您不確定如何執行,請查看 相依項更新指南

安裝 NSIS

某些 Linux 發行版在他們的儲存庫中提供 NSIS,例如在 Ubuntu 中,你可以執行此命令來安裝 NSIS

Ubuntu
sudo apt install nsis

但在許多其他發行版中,你必須自行編譯 NSIS 或手動下載發行套件的二進制套件中未包含的 Stubs 和 Plugins。例如 Fedora 只提供二進制,但不提供 Stubs 和 Plugins

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 專案的一部分 llvm-rc 二進制檔案。

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

我們將使用 [cargo-xwin] 作為 Tauri 的「執行程式」,而不是手動設定 Windows SDK

cargo install 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/ 中。