Tauri Skill
🤖 AI 接入指南:将本页链接发送给 AI,自动完成接入指导
快速信息
- 应用类型: Tauri
- Skill 版本: 2.0.0
- 接入难度: ⭐⭐ (简单)
- 预计时间: 10-30 分钟
📖 接入场景说明
根据项目类型,选择合适的接入方式:
| 场景 | 适用项目 | 特点 | 预计时间 |
|---|---|---|---|
| 场景一 | 非开源项目、私有项目 | 手动构建上传,数据上报 | 10 分钟 |
| 场景二 | 开源项目 | GitHub Actions 自动化构建发布 | 30 分钟 |
场景一:非开源项目接入
适用于私有项目或不需要 GitHub Actions 自动化部署的项目。
1. 安装插件
使用 Tauri 官方推荐的命令安装 updater 插件:
npm run tauri add updater此命令会自动:
- 安装
@tauri-apps/plugin-updater依赖 - 安装
@tauri-apps/plugin-process依赖(用于重启应用) - 配置必要的权限
如需手动安装,可分别执行:
npm install @tauri-apps/plugin-updater
npm install @tauri-apps/plugin-process2. 生成签名密钥
Tauri 更新需要使用签名密钥来验证更新包的完整性。您需要生成一对密钥(公钥和私钥)。
生成密钥
在项目根目录执行以下命令:
npm run tauri signer generate -- -w ./.tauri/tauri.key执行后会提示您输入密码(用于保护私钥),并生成两个文件:
.tauri/tauri.key- 私钥(用于签名更新包,请妥善保管,不要提交到代码仓库).tauri/tauri.key.pub- 公钥(用于配置到应用中验证更新包)
查看公钥内容
cat .tauri/tauri.key.pub输出类似:
dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDY4QjBGNEM4NjUyMUNGRjAKUldUd3p5Rmx5UFN3YUN1UkFMK05DdWR4VjA1eDRybkxJNzMreURNbHZ4VFhtSk54UTVMWVg4NnAK配置环境变量
在构建更新包时,需要设置以下环境变量:
# Mac/Linux
export TAURI_SIGNING_PRIVATE_KEY=$(cat .tauri/tauri.key)
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=您设置的密码
# Windows (PowerShell)
$env:TAURI_SIGNING_PRIVATE_KEY = Get-Content .tauri/tauri.key -Raw
$env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = "您设置的密码"⚠️ 安全提示:
- 私钥文件
.tauri/tauri.key请添加到.gitignore,不要提交到代码仓库 - 在 CI/CD 中使用环境变量或密钥管理服务存储私钥
- 公钥可以公开,用于配置到应用中
3. 配置 tauri.conf.json
在 src-tauri/tauri.conf.json 中配置更新插件:
{
"bundle": {
"createUpdaterArtifacts": true
},
"plugins": {
"updater": {
"pubkey": "您生成的公钥内容",
"endpoints": [
"https://api.upgrade.toolsetlink.com/v1/tauri/upgrade?tauriKey=YOUR_TAURI_KEY&versionName={{current_version}}&appointVersionName=&devModelKey=&devKey=&target={{target}}&arch={{arch}}"
],
"windows": {
"installMode": "passive"
}
}
}
}配置说明:
| 字段 | 说明 |
|---|---|
createUpdaterArtifacts | 设置为 true 告诉 Tauri 创建更新包 |
pubkey | 步骤 2 生成的公钥内容(不是文件路径) |
endpoints | UpgradeLink 提供的升级检测 API 地址 |
windows.installMode | Windows 安装模式:passive(推荐)、basicUi、quiet |
endpoints 参数说明:
| 参数 | 说明 | 来源 |
|---|---|---|
tauriKey | UpgradeLink 平台的应用标识 | UpgradeLink 后台获取 |
versionName | 当前应用版本 | 自动填充 |
target | 操作系统 | 自动填充 |
arch | 系统架构 | 自动填充 |
⚠️ 注意:
- 将
您生成的公钥内容替换为步骤 2 中生成的公钥 - 将
YOUR_TAURI_KEY替换为您的实际 Tauri Key
4. 添加检查更新代码
在您的 Tauri 应用中添加以下代码:
import { check } from '@tauri-apps/plugin-updater';
import { relaunch } from '@tauri-apps/plugin-process';
async function checkForUpdates() {
try {
const update = await check({
timeout: 5000,
headers: {
'X-AccessKey': 'YOUR_ACCESS_KEY',
},
});
if (update) {
console.log(`发现新版本 ${update.version},发布于 ${update.date}`);
console.log(`更新说明: ${update.body}`);
let downloaded = 0;
let contentLength = 0;
await update.downloadAndInstall((event) => {
switch (event.event) {
case 'Started':
contentLength = event.data.contentLength;
console.log(`开始下载,总大小: ${contentLength} bytes`);
break;
case 'Progress':
downloaded += event.data.chunkLength;
console.log(`下载进度: ${downloaded} / ${contentLength}`);
break;
case 'Finished':
console.log('下载完成');
break;
}
});
console.log('安装完成,即将重启应用');
await relaunch();
} else {
console.log('当前已是最新版本');
}
} catch (error) {
console.error('检查更新失败:', error);
}
}⚠️ 注意:将 YOUR_ACCESS_KEY 替换为您的实际 Access Key
5. 设置权限
在 src-tauri/capabilities/default.json 中添加权限:
{
"permissions": [
"updater:default",
"process:default"
]
}权限说明:
| 权限 | 说明 |
|---|---|
updater:default | 允许检查、下载、安装更新 |
process:default | 允许重启应用 |
6. 数据上报集成
在升级流程中,调用数据上报接口记录升级状态,以便进行数据统计和分析。
上报工具函数
import crypto from 'crypto';
function generateSignature(timestamp: string, nonce: string, body: string, accessSecret: string): string {
const signStr = `timestamp=${timestamp}&nonce=${nonce}&body=${body}&accessSecret=${accessSecret}`;
return crypto.createHash('md5').update(signStr).digest('hex');
}
function generateNonce(length: number = 16): string {
return crypto.randomBytes(Math.ceil(length / 2)).toString('hex').slice(0, length);
}
async function reportEvent(
eventType: string,
appKey: string,
eventData: Record<string, any>,
accessKey: string,
accessSecret: string
): Promise<void> {
const timestamp = new Date().toISOString();
const nonce = generateNonce();
const body = JSON.stringify({
eventType,
timestamp,
appKey,
eventData,
});
const signature = generateSignature(timestamp, nonce, body, accessSecret);
try {
const response = await fetch('https://api.upgrade.toolsetlink.com/v1/app/report', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Timestamp': timestamp,
'X-Nonce': nonce,
'X-AccessKey': accessKey,
'X-Signature': signature,
},
body,
});
const result = await response.json();
console.log('上报结果:', result);
} catch (error) {
console.error('上报失败:', error);
}
}完整升级流程示例(含数据上报)
import { check } from '@tauri-apps/plugin-updater';
import { relaunch } from '@tauri-apps/plugin-process';
import { getVersion } from '@tauri-apps/api/app';
import { platform, arch } from '@tauri-apps/plugin-os';
let upgradeVersionCode = 0;
async function checkAndInstallUpdate() {
try {
const update = await check({
timeout: 5000,
headers: {
'X-AccessKey': 'YOUR_ACCESS_KEY',
},
});
if (update) {
console.log('发现新版本:', update.version);
upgradeVersionCode = parseInt(update.version.split('.').join(''));
let downloaded = 0;
let contentLength = 0;
await update.downloadAndInstall((event) => {
switch (event.event) {
case 'Started':
contentLength = event.data.contentLength || 0;
console.log(`开始下载,总大小: ${contentLength} bytes`);
break;
case 'Progress':
downloaded += event.data.chunkLength;
const percent = contentLength > 0 ? (downloaded / contentLength * 100).toFixed(1) : '未知';
console.log(`下载进度: ${percent}%`);
break;
case 'Finished':
console.log('下载完成');
reportDownload(upgradeVersionCode, 0);
break;
}
});
console.log('安装完成,即将重启应用');
await reportUpgrade(upgradeVersionCode, 0);
await relaunch();
}
} catch (error) {
console.error('更新失败:', error);
if (upgradeVersionCode > 0) {
await reportDownload(upgradeVersionCode, 1);
await reportUpgrade(upgradeVersionCode, 1);
}
}
}
async function reportDownload(downloadVersionCode: number, code: number) {
const currentVersion = await getVersion();
const currentPlatform = await platform();
const currentArch = await arch();
await reportEvent(
'app_upgrade_download',
'YOUR_TAURI_KEY',
{
versionCode: parseInt(currentVersion.split('.').join('')),
downloadVersionCode,
code,
target: currentPlatform,
arch: currentArch,
},
'YOUR_ACCESS_KEY',
'YOUR_ACCESS_SECRET'
);
}
async function reportUpgrade(upgradeVersionCode: number, code: number) {
const currentVersion = await getVersion();
const currentPlatform = await platform();
const currentArch = await arch();
await reportEvent(
'app_upgrade_upgrade',
'YOUR_TAURI_KEY',
{
versionCode: parseInt(currentVersion.split('.').join('')),
upgradeVersionCode,
code,
target: currentPlatform,
arch: currentArch,
},
'YOUR_ACCESS_KEY',
'YOUR_ACCESS_SECRET'
);
}
async function reportAppStart() {
const currentVersion = await getVersion();
const currentPlatform = await platform();
const currentArch = await arch();
await reportEvent(
'app_start',
'YOUR_TAURI_KEY',
{
versionCode: parseInt(currentVersion.split('.').join('')),
launchTime: new Date().toISOString(),
target: currentPlatform,
arch: currentArch,
},
'YOUR_ACCESS_KEY',
'YOUR_ACCESS_SECRET'
);
}状态码说明
下载事件 code:
| 状态码 | 说明 |
|---|---|
| 0 | 下载成功 |
| 1 | 下载失败(泛用) |
| 1001 | HTTP 错误 |
| 1002 | 空间不足 |
| 1003 | 文件操作错误 |
| 1004 | MD5 校验失败 |
升级事件 code:
| 状态码 | 说明 |
|---|---|
| 0 | 升级成功 |
| 1 | 升级失败 |
📖 详细接口文档:事件上报接口
7. 手动构建与上传
构建更新包
设置环境变量后,执行构建命令:
npm run tauri build生成的文件
构建完成后,会在以下目录生成更新包:
| 平台 | 目录 | 文件 |
|---|---|---|
| Linux | target/release/bundle/appimage/ | myapp.AppImage、myapp.AppImage.sig |
| macOS | target/release/bundle/macos/ | myapp.app.tar.gz、myapp.app.tar.gz.sig |
| Windows | target/release/bundle/msi/ | myapp.msi、myapp.msi.sig |
| Windows | target/release/bundle/nsis/ | myapp-setup.exe、myapp-setup.exe.sig |
上传到 UpgradeLink
- 登录 UpgradeLink 后台
- 进入应用管理页面
- 创建新版本,上传对应的安装包和签名文件
- 配置升级策略
场景二:开源项目接入
适用于开源项目,需要 GitHub Actions 自动化构建、发布和更新。
1. 完成基础接入
首先完成 场景一 的所有步骤(1-6)。
2. 配置 GitHub Secrets
在 GitHub 仓库的 Settings > Security > Secrets and variables > Actions 中添加以下加密环境变量:
| Secret 名称 | 说明 | 获取方式 |
|---|---|---|
UPGRADE_LINK_ACCESS_KEY | UpgradeLink 访问密钥 | UpgradeLink 后台 > 密钥管理 |
UPGRADE_LINK_ACCESS_SECRET | UpgradeLink 访问密钥密文 | UpgradeLink 后台 > 密钥管理 |
UPGRADE_LINK_TAURI_KEY | Tauri 应用唯一标识 | UpgradeLink 后台 > 应用信息 |
TAURI_SIGNING_PRIVATE_KEY | Tauri 签名私钥 | 步骤 2 生成的私钥内容 |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD | 签名私钥密码 | 步骤 2 设置的密码 |
3. 配置 GitHub Actions 工作流
在项目根目录创建 .github/workflows/publish.yml:
name: 'publish'
on:
push:
branches:
- main
jobs:
publish-tauri:
permissions:
contents: write
outputs:
appVersion: ${{ steps.set-job-output.outputs.appVersion }}
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest'
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest'
args: '--target x86_64-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
- platform: 'ubuntu-22.04-arm'
args: ''
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: install dependencies (ubuntu only)
if: startsWith(matrix.platform, 'ubuntu-')
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils
- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'yarn'
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
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
run: yarn install
- uses: tauri-apps/tauri-action@v0
id: tauri-action
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
tagName: ${{ github.event.repository.name }}-v__VERSION__
releaseName: '${{ github.event.repository.name }} v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: false
prerelease: false
args: ${{ matrix.args }}
- name: Set job output
id: set-job-output
if: matrix.platform == 'ubuntu-22.04'
run: |
echo "appVersion=${{ steps.tauri-action.outputs.appVersion }}" >> $GITHUB_OUTPUT
upgradeLink-upload:
needs: publish-tauri
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Send a request to UpgradeLink
uses: toolsetlink/upgradelink-action@3.0.2
with:
access_key: ${{ secrets.UPGRADE_LINK_ACCESS_KEY }}
access_secret: ${{ secrets.UPGRADE_LINK_ACCESS_SECRET }}
config: |
{
"app_type": "tauri",
"request": {
"app_key": "${{ secrets.UPGRADE_LINK_TAURI_KEY }}",
"latest_json_url": "https://github.com/${{ github.repository }}/releases/download/${{ github.event.repository.name }}-v${{ needs.publish-tauri.outputs.appVersion }}/latest.json"
}
}4. 工作流详解
publish-tauri 作业
功能:跨平台构建并发布到 GitHub Releases
| 步骤 | 说明 |
|---|---|
| 检出代码 | actions/checkout@v4 |
| 安装依赖 | Linux 系统依赖、Node.js、Rust |
| 构建缓存 | Rust 编译缓存加速构建 |
| 前端依赖 | 安装 npm/yarn 依赖 |
| Tauri 构建 | 使用 tauri-apps/tauri-action@v0 构建 |
| 提取版本号 | 输出 appVersion 供后续使用 |
多平台构建策略:
| 平台 | Runner | 目标架构 |
|---|---|---|
| macOS (M1+) | macos-latest | aarch64-apple-darwin |
| macOS (Intel) | macos-latest | x86_64-apple-darwin |
| Linux (x64) | ubuntu-22.04 | - |
| Linux (ARM) | ubuntu-22.04-arm | - |
| Windows | windows-latest | - |
upgradeLink-upload 作业
功能:将更新信息同步到 UpgradeLink 平台
| 步骤 | 说明 |
|---|---|
| 等待构建 | 依赖 publish-tauri 完成 |
| 获取版本号 | 从 publish-tauri 输出获取 |
| 上传信息 | 使用 upgradelink-action 同步 |
UpgradeLink Action 参数:
| 参数 | 说明 |
|---|---|
access_key | UpgradeLink 访问密钥 |
access_secret | UpgradeLink 访问密钥密文 |
app_type | 应用类型,固定为 tauri |
app_key | Tauri 应用唯一标识 |
latest_json_url | GitHub Releases 中的 latest.json 地址 |
5. UpgradeLink 平台配置
在 UpgradeLink 后台配置 GitHub 仓库地址:
- 登录 UpgradeLink 后台
- 进入应用管理 > Tauri 应用详情
- 在「GitHub 仓库地址」字段填入仓库地址,如:
https://github.com/username/repo-name - 保存配置
配置后,UpgradeLink 会自动读取 GitHub Releases 中的 latest.json 文件。
6. 自动化流程说明
当代码推送到 main 分支时,自动化流程如下:
代码推送
│
▼
┌─────────────────────────────────────────┐
│ publish-tauri 作业 │
│ ┌─────────────────────────────────┐ │
│ │ 并行构建 5 个平台 │ │
│ │ - macOS (M1) │ │
│ │ - macOS (Intel) │ │
│ │ - Linux (x64) │ │
│ │ - Linux (ARM) │ │
│ │ - Windows │ │
│ └─────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ 创建 GitHub Release │ │
│ │ 上传安装包和 latest.json │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ upgradeLink-upload 作业 │
│ ┌─────────────────────────────────┐ │
│ │ 读取 latest.json 地址 │ │
│ │ 调用 UpgradeLink API │ │
│ │ 自动创建版本和升级策略 │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
│
▼
用户收到更新通知🤖 AI 接入
将本页链接发送给 AI,例如:
请帮我接入应用升级,这是 Skill 链接:
https://www.toolsetlink.com/upgrade/skill/tauriAI 将自动:
- 识别应用类型为 Tauri
- 判断项目类型(开源/非开源)
- 获取配置信息和示例代码
- 指导您替换占位符(YOUR_TAURI_KEY 等)
- 验证配置正确性
- 完成接入测试
📋 完整示例
查看完整示例项目:tauri-demo
❓ 常见问题
Q: 如何获取 Tauri Key?
A: 登录 UpgradeLink 后台,创建 Tauri 应用后获取。
Q: 如何获取 Access Key 和 Access Secret?
A: 登录 UpgradeLink 后台,在密钥管理页面获取。
Q: 更新失败怎么办?
A: 检查网络连接、配置是否正确,或联系 AI 获取帮助。
Q: 数据上报失败会影响升级流程吗?
A: 不会。数据上报是异步操作,失败不会影响正常的升级流程。建议在业务低峰期重试。
Q: GitHub Actions 构建失败怎么办?
A:
- 检查 GitHub Actions 日志,查看具体错误信息
- 确认所有依赖已正确安装,特别是 Linux 平台的系统依赖
- 确保 Rust 和 Node.js 版本兼容
- 检查 GitHub Secrets 是否配置正确
Q: 如何测试更新流程?
A:
- 构建并上传一个低版本
- 修改代码版本号,构建上传高版本
- 运行低版本应用,检查是否能检测到更新
Q: 可以回滚到旧版本吗?
A: 可以。在 UpgradeLink 后台修改升级策略,指定目标版本即可。