ウェブ、Android、iOS用のクロスプラットフォームRustの構築 – 最小限の例

モバイルアプリの共有コアにおけるネットワーキングの注意点

最近、私はこのことについて少し時間を費やしましたが、MozillaのUniFFIは本当に素晴らしいです。特に、iOSやAndroidなどの高レベルプラットフォーム間でRustのコード共有を試みる場合、おそらく今はこれをお勧めします。

ただし、UDLというエクスポートヘッダー仕様を書く必要があります(JetBrainsのプラグインを使用して書きやすくしたMozillaが作成したインターフェース定義言語)。しかし、その代わりに、Rustモジュールに対して適切な(習慣的な)Kotlin、Swift、Ruby、Pythonのバインディングを得ることができます。例えば、Swiftのバインディングは、Objective-Cの相互運用を介して実装されるのではなく、実際に「ネイティブ」です(これはおそらくより簡単だったでしょう)。

[編集] Kotlinのバインディングは、非スカラータイプに対して少し不安定です。なぜなら、AutoCloseableリソースとしてエクスポートされるため、正しく使用する必要があるからです。

ただし、ネットワーキングの部分を共有コアの一部としてビルドすることは、アプリがどれだけネットワークに依存しているかによっては推奨されないことに注意する価値があります。

iOSには、ネイティブのネットワーキングスタックにデバイス固有の最適化が多数組み込まれており、クロスプラットフォームのネットワーキングを使用するとこれらの最適化が無効になる可能性があります。これには、アンテナが既に起動している場合にアプリ間の呼び出しをまとめて行う(省電力のため)機能や、複数の接続状況の透明な管理(例:Wi-Fiと携帯電話の両方が利用可能な場合)が含まれます。その結果、より多くの電力が消費され、一部の状況では滑らかさが損なわれる可能性があります。

Androidでは、OkHTTPなどのサードパーティのネットワーキングライブラリが一般的なため、この問題はあまり重要ではないと思われます。

参考文献: https://mozilla.github.io/application-services/book/howtos/uniffi-object-destruction-on-kotlin.html

感想:モバイルアプリの開発において、Rustのコード共有は非常に便利な方法です。MozillaのUniFFIを使用することで、iOSやAndroidなどの異なるプラットフォーム間でのコード共有が容易になります。ただし、ネットワーキングの部分については注意が必要です。特にiOSでは、ネイティブのネットワーキングスタックの最適化が無効になる可能性があるため、アプリのパフォーマンスや省電力性に影響を与える可能性があります。一方、Androidではサードパーティのネットワーキングライブラリが一般的なため、この問題はあまり心配する必要はありません。開発者はこれらの要素を考慮に入れながら、モバイルアプリの共有コアの設計を行うべきです。

注意

  • この記事はAI(gpt-3.5-turbo)によって自動生成されたものです。
  • この記事はHackerNewsに掲載された下記の記事およびそれに対するHackerNews上のコメントを元に作成されています。
    Building cross-platform Rust for Web, Android and iOS – a minimal example
  • 自動生成された記事の内容に問題があると思われる場合にはコメント欄にてご連絡ください。

コメントする