2.0 的新 alpha 版本已发布。此版本包括即将发布的 Tauri 1.3 版本的所有更改、HTTP 客户端的重要重大更改以及 Tauri 插件的原生移动功能。
更新依赖项
确保将 NPM 和 Cargo 依赖项更新到最新的 alpha 版本。你可以使用以下命令更新 NPM 依赖项
- npm
- Yarn Classic
- Yarn Berry
- pnpm
npm install @tauri-apps/cli@next @tauri-apps/api@next
yarn upgrade @tauri-apps/cli@next @tauri-apps/api@next
yarn up @tauri-apps/cli@next @tauri-apps/api@next
pnpm update @tauri-apps/cli@next @tauri-apps/api@next
若要更新 Cargo 依赖项,请在 src-tauri
文件夹中运行以下命令
cargo add [email protected]
cargo add [email protected] --build
cargo install tauri-cli --version "^2.0.0-alpha"
重新创建移动项目以使用新功能
rm -r src-tauri/gen
tauri android init
tauri ios init
HTTP 客户端重大更改
由于 Windows 上的开发服务器代理存在问题,已移除使用 attohttpc
的默认 HTTP 客户端。所有 reqwest-*
功能标志已移除,因为 reqwest
现在是我们使用的客户端。
Tauri 插件的原生移动功能
现在,Tauri 插件可以通过 Swift 访问 iOS,通过 Kotlin 或 Java 代码访问 Android API,从而简化了相机或地理位置等平台界面的使用。要在现有插件上引导 iOS 和 Android 项目,请运行 tauri plugin ios add
和 tauri plugin android add
。新插件会自动包含编写原生移动代码所需的所有配置。
下面是一个获取字符串值并解析对象的插件示例
Android 插件
ExamplePlugin.kt
package com.plugin.example
import android.app.Activity
import app.tauri.annotation.Command
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke
@TauriPlugin
class ExamplePlugin(private val activity: Activity): Plugin(activity) {
@Command
fun ping(invoke: Invoke) {
val value = invoke.getString("value") ?: ""
val ret = JSObject()
ret.put("value", value)
invoke.resolve(ret)
}
}
iOS 插件
ExamplePlugin.swift
import UIKit
import WebKit
import Tauri
class ExamplePlugin: Plugin {
@objc public func ping(_ invoke: Invoke) throws {
let value = invoke.getString("value")
invoke.resolve(["value": value as Any])
}
}
@_cdecl("init_plugin_example")
func initPlugin(name: SRString, webview: WKWebView?) {
Tauri.registerPlugin(webview: webview, name: name.toString(), plugin: ExamplePlugin())
}
用于初始化插件的 Rust 代码
use tauri::{
plugin::{Builder, TauriPlugin},
Manager, Runtime,
};
#[cfg(target_os = "ios")]
tauri::ios_plugin_binding!(init_plugin_example);
pub fn init<R: Runtime>() -> TauriPlugin<R> {
Builder::new("example")
.setup(|app, api| {
#[cfg(target_os = "android")]
api.register_android_plugin("com.plugin.example", "ExamplePlugin")?;
#[cfg(target_os = "ios")]
api.register_ios_plugin(init_plugin_example)?;
Ok(())
})
.build()
}
用于调用插件命令的前端代码
import { invoke } from '@tauri-apps/api/tauri'
invoke('plugin:example|ping', { value: 'Tauri' })
.then(({ value }) => console.log('Response', value))