アップデート
以下のリンクを参照してください。
https://xjtu.app/t/topic/14216
はじめに
クロスプラットフォームのデスクトップアプリケーションフレームワーク Tauri を使用して、同じコードを macOS, Windows, Linux, Android, iOS 用のバイナリファイルにコンパイルすることが可能です。
(Electron と比較して、配布サイズが小さく、ソースコードの逆コンパイルが難しいという利点があります)
ブラウザを通じてアクセスする場合と比較して、独立したアプリケーションの形で以下の機能をより便利に実装できます:
- DNS 汚染に対抗する
(参考: tauri のドキュメント) - サーバーへのネットワーク接続の安定性向上(userspace BBR コンジェストコントロール)
(QUIC と、かつて存在したオープンソースプロジェクトを利用)
TODO
以下の機能を実装する可能性があります:
- キャッシュ制御とオフラインブラウジング
- オフラインでトピックを新規作成(オンライン時にサーバーへ同期)
- 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倍ほどです)