tauri-v2-dev
Tauri v2 跨平台应用开发指南。用于开发桌面 (macOS/Windows/Linux) 和移动端 (iOS/Android) 应用。包含项目初始化、Rust 后端、React 前端集成、移动端配置等最佳实践。当需要创建 Tauri 项目、配置移动端支持、编写 Rust 命令、或解决 Tauri 相关问题时使用此 skill。
When & Why to Use This Skill
This Claude skill provides a comprehensive development guide and assistant for Tauri v2, enabling developers to build high-performance, cross-platform applications for desktop (macOS, Windows, Linux) and mobile (iOS, Android). It streamlines the development process by providing expert guidance on project initialization, Rust backend implementation, React frontend integration, and complex mobile environment configurations.
Use Cases
- Project Scaffolding: Quickly initialize a new Tauri v2 project with optimized templates for React and TypeScript, ensuring a solid foundation for cross-platform apps.
- Mobile Development Setup: Step-by-step assistance in configuring development environments for iOS and Android, including Rustup targets, CocoaPods, and Android NDK management.
- Rust Backend Logic: Writing and registering secure Rust commands and managing application state to handle heavy lifting outside the webview.
- Native Feature Integration: Implementing system-level functionalities such as file system access, native dialogs, and system tray icons using the Tauri plugin ecosystem.
- Bidirectional Communication: Designing event-based communication and asynchronous data fetching between the Rust core and the frontend UI.
- Troubleshooting & Deployment: Resolving common build errors, mobile signing issues, and optimizing configuration files for production-ready bundles.
| name | tauri-v2-dev |
|---|---|
| description | Tauri v2 跨平台应用开发指南。用于开发桌面 (macOS/Windows/Linux) 和移动端 (iOS/Android) 应用。包含项目初始化、Rust 后端、React 前端集成、移动端配置等最佳实践。当需要创建 Tauri 项目、配置移动端支持、编写 Rust 命令、或解决 Tauri 相关问题时使用此 skill。 |
Tauri v2 开发指南
Tauri v2.2 是 2025年1月最新稳定版,支持桌面 + 移动端跨平台开发。
快速开始
创建项目
# 使用 create-tauri-app 创建项目
npm create tauri-app@latest
# 选择:
# - Project name: your-app-name
# - Package manager: npm/pnpm/yarn
# - UI template: React + TypeScript
项目结构
your-app/
├── src/ # React 前端代码
│ ├── App.tsx
│ └── main.tsx
├── src-tauri/ # Rust 后端代码
│ ├── src/
│ │ ├── main.rs # 入口点
│ │ └── lib.rs # 命令定义
│ ├── Cargo.toml # Rust 依赖
│ ├── tauri.conf.json # Tauri 配置
│ └── capabilities/ # 权限配置
├── package.json
└── vite.config.ts
移动端配置
前置条件
macOS (iOS 开发):
# 安装 Xcode (从 App Store)
# 安装 iOS targets
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
# 安装 Cocoapods
brew install cocoapods
Android 开发:
# 安装 Android Studio
# 设置环境变量
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
export ANDROID_HOME=$HOME/Library/Android/sdk
export NDK_HOME=$ANDROID_HOME/ndk/26.1.10909125
# 安装 Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
初始化移动端
# 初始化 iOS
npm run tauri ios init
# 初始化 Android
npm run tauri android init
运行移动端
# iOS 模拟器
npm run tauri ios dev
# Android 模拟器
npm run tauri android dev
# 真机调试
npm run tauri ios dev --open # 在 Xcode 中打开
Rust 命令开发
定义命令 (src-tauri/src/lib.rs)
use tauri::Manager;
// 简单命令
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
// 异步命令
#[tauri::command]
async fn fetch_data(url: String) -> Result<String, String> {
reqwest::get(&url)
.await
.map_err(|e| e.to_string())?
.text()
.await
.map_err(|e| e.to_string())
}
// 带状态的命令
#[tauri::command]
fn get_count(state: tauri::State<'_, AppState>) -> i32 {
*state.count.lock().unwrap()
}
// 注册命令
pub fn run() {
tauri::Builder::default()
.manage(AppState::default())
.invoke_handler(tauri::generate_handler![
greet,
fetch_data,
get_count
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
前端调用 (TypeScript)
import { invoke } from '@tauri-apps/api/core';
// 调用 Rust 命令
const result = await invoke<string>('greet', { name: 'World' });
// 异步调用
const data = await invoke<string>('fetch_data', { url: 'https://api.example.com' });
事件系统
Rust 端发送事件
use tauri::Emitter;
#[tauri::command]
fn start_process(app: tauri::AppHandle) {
std::thread::spawn(move || {
for i in 0..100 {
app.emit("progress", i).unwrap();
std::thread::sleep(std::time::Duration::from_millis(100));
}
});
}
前端监听事件
import { listen } from '@tauri-apps/api/event';
const unlisten = await listen<number>('progress', (event) => {
console.log('Progress:', event.payload);
});
// 清理
unlisten();
常用插件
# 文件系统
npm run tauri add fs
# 对话框
npm run tauri add dialog
# 剪贴板
npm run tauri add clipboard-manager
# 通知
npm run tauri add notification
# HTTP 客户端
npm run tauri add http
# 全局快捷键
npm run tauri add global-shortcut
# 系统托盘
npm run tauri add tray-icon
插件使用示例
// 文件系统
import { readTextFile, writeTextFile } from '@tauri-apps/plugin-fs';
const content = await readTextFile('path/to/file.txt');
await writeTextFile('path/to/file.txt', 'Hello World');
// 对话框
import { open, save } from '@tauri-apps/plugin-dialog';
const file = await open({
multiple: false,
filters: [{ name: 'Text', extensions: ['txt'] }]
});
// 剪贴板
import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager';
await writeText('Hello');
const text = await readText();
配置文件 (tauri.conf.json)
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Echo",
"version": "0.1.0",
"identifier": "com.echo.app",
"build": {
"beforeDevCommand": "npm run dev",
"devUrl": "http://localhost:5173",
"beforeBuildCommand": "npm run build",
"frontendDist": "../dist"
},
"app": {
"windows": [
{
"title": "Echo",
"width": 1200,
"height": 800,
"resizable": true,
"fullscreen": false
}
],
"security": {
"csp": null
}
},
"bundle": {
"active": true,
"targets": "all",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}
常见问题
1. iOS 签名问题
在 Xcode 中配置 Signing & Capabilities,使用个人开发者账号。
2. Android NDK 版本
确保 NDK 版本与 Cargo.toml 中的配置匹配。
3. 热重载不工作
检查 devUrl 配置是否正确指向前端开发服务器。
4. 权限问题
在 src-tauri/capabilities/ 中配置所需权限。