Open12

Tauri2.0プラグイン開発メモ

takecchitakecchi

以下のコマンドで雛形の作成が可能

npx @tauri-apps/cli plugin new [アプリ名]

※Android/iOS向けに作る場合は以下のように指定可能

npx @tauri-apps/cli plugin new [アプリ名] --android --ios
takecchitakecchi

後から追加する場合

npx @tauri-apps/cli plugin ios init
npx @tauri-apps/cli plugin android init
takecchitakecchi

examples/tauri-appが動かない

Svelteのバージョンが合っていないのかそのままでは動かなかった為、vite.config.tsでコンポーネントAPI4を使用する旨を記述してやる必要がある
[2025/07/30追記] 現在解消済み!

export default defineConfig({
  plugins: [svelte({
    compilerOptions:{
      compatibility:{
        componentApi: 4
      }
    }
  })],
...
});
takecchitakecchi

ただ@sveltejs/vite-plugin-svelteviteのバージョンの都合でnpm run tauri dev実行時に以下のエラーが発生する状態。

error when starting dev server:
TypeError: crypto.hash is not a function

自分の環境だとNode.jsのバージョンをv22.17.1まで上げても解消しなかったので、以下のようにバージョンを下げて対応。
examples/tauri-app/package.json

  "devDependencies": {
    "@sveltejs/vite-plugin-svelte": "^5.0.0",
    "svelte": "^5.0.0",
    "vite": "^6.0.0",
    "@tauri-apps/cli": "^2.0.0"
  }
takecchitakecchi

app.tauri.plugin配下のパッケージ参照が解決できない

androidプラグイン作成前に以下のコマンドで.tauri配下にモジュールをビルドしておく必要がある。
android配下で実行。

cargo build --target aarch64-linux-android

※うまくいかない場合はcargo cleanでキャッシュをクリアしておくと良い

実行後もエラーが残る場合は

./gradlew clean

でGradleのキャッシュを削除したり、
Android Studioで「File」→「Sync Project with Gradle Files」を選択しGradleの再同期を行う必要がある。

takecchitakecchi

examples/tauri-appをandroidで起動

事前準備が必要
tauri-app配下で以下を実行

npm run tauri android init
takecchitakecchi

examples/tauri-appをiosで起動

事前準備が必要
tauri-app配下で以下を実行

npm run tauri ios init
takecchitakecchi

iOSで動かす前に一度コミットを行う。
project.pbxprojに個人の設定が入る可能性があるため

その後XCodeでexamples/tauri-app/src-tauri/gen/appleを開き、
「Signing & Capabilities」よりTeamを設定

takecchitakecchi

Configについて

iOS/Androidどこで使うにせよRustで型定義が必要。
型定義をしていない場合デシリアライズが出来ないため、npm run tauriで以下のようなエラーになる。

Error deserializing 'plugins.plugin-name' within your Tauri configuration:
takecchitakecchi

tauri.config.jsonでpluginの設定を行う場合、アプリケーション側でserde_jsonを依存関係に追加する必要がある。
追加しない場合は以下のようなエラーになる。

error[E0433]: failed to resolve: could not find `serde_json` in the list of imported crates

Cargo.toml

[dependencies]
tauri = { version = "2.7.0", features = [] }
tauri-plugin-safe-area = { path = "../../../" }
serde_json = "1"