tauri を使って交大門のクロスプラットフォームアプリを作る

アップデート

以下のリンクを参照してください。

https://xjtu.app/t/topic/14216


はじめに

クロスプラットフォームのデスクトップアプリケーションフレームワーク Tauri を使用して、同じコードを macOS, Windows, Linux, Android, iOS 用のバイナリファイルにコンパイルすることが可能です。
Electron と比較して、配布サイズが小さく、ソースコードの逆コンパイルが難しいという利点があります)

ブラウザを通じてアクセスする場合と比較して、独立したアプリケーションの形で以下の機能をより便利に実装できます:

  1. DNS 汚染に対抗する
    参考: tauri のドキュメント
  2. サーバーへのネットワーク接続の安定性向上(userspace BBR コンジェストコントロール)
    QUIC と、かつて存在したオープンソースプロジェクトを利用)

TODO

以下の機能を実装する可能性があります:

  1. キャッシュ制御とオフラインブラウジング
  2. オフラインでトピックを新規作成(オンライン時にサーバーへ同期)
  3. Svelte(Kit) を使用したフロントエンドの作成(現在の Ember.js フロントエンドの全機能をサポートする必要はなく、練習目的)

技術的なノート

  • tauri は今年の2月に v2 beta がリリースされ、Android/iOS のサポートが追加されましたが、ドキュメントは不完全です。私は beta 版を使用しています。

  • tauri のクロスプラットフォームコンパイル(Linux 上で Windows のバイナリをコンパイル)には警告が表示されます:

    Warn [tauri_bundler::bundle] Cross-platform compilation is experimental and does not support all features. Please use a matching host system for full compatibility.
    

    それでもコンパイルを完了させました。必要なパッケージは yay -S nsis です。また、Cargo.toml で tauri-api 依存関係を使用しないように注意してください。
    (途中、Vbox の仮想マシンで開発環境を構築したこともありましたが、Windows の環境は非常に不快で、ターミナルやファイルマネージャーが簡素、システムレベルの広告、Windows Update、予期しないコンパイルエラー、さらにシステム言語が中国語のため、エラー情報を検索すると CSDN、Juejin、腾讯雲、知乎などのゴミサイトが大量に出てきます)

  • gnu target は動作しません。webview2loader.dll が見つからないというエラーが表示されます。代わりに msvc target を使用する必要があります:
    参考1
    参考2

# NO_STRIP は AppImage のビルドのため
NO_STRIP=true pnpm run tauri build
pnpm tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
  • tauri v1 の wry ベースの WebView は socks5 プロキシをサポートしていません。v1 に対して cherry pick/backport を試みたが、wry の依存関係の問題により失敗しました。
  • tauri v2 は現在 Windows で動作に問題があります:白い画面が表示され、リサイズ後でも WebView のサイズが変化しません。理論上、バイナリファイル(sidecar)の埋め込みが可能ですが、v2 のドキュメントは見つかりませんでした。JavaScript からのみ呼び出せるようです。

コードリリース

tauri v2 ベース、Svelte テンプレートを使用:

https://github.com/xjtumen/xjtumen-tauri-svelte

v1 ベース:

https://github.com/xjtumen/xjtumen-tauri1


感想

今日一日に Rust を書いたり調整したりして、多くのことを学びました。

tauri の v1 と v2、Rust + JavaScript は精神的に分裂するような感覚があります。さらに、Rust の関数署名の一貫性のため、動的言語ほど書くのが簡単ではありません。tauri2 が正式リリースされ、スケール時に黒い画面のバグが修正されたら、バイナリファイルの埋め込みについて再度研究したいと思います。

Electron はより成熟していますので、明日(2024-05-02 13:35:13, Asia/Taipei)は Electron を試してみます。欠点はリリースパッケージのサイズが大きいことです。(大きいのは20倍から60倍ほどです)

「いいね!」 4