メモ: iOS向けの静的リンクライブラリをRustで書く方法

iOS向けの静的リンクライブラリをRustで書く方法について調べたところ、詳細に書かれたブログを見つけたので内容の走り書きのメモを残す。

https://blog.mozilla.org/data/2022/01/31/this-week-in-glean-building-and-deploying-a-rust-library-on-ios/

まずcrate-typeがstaticlibなRustプロジェクトをつくり extern “C”な関数を定義する。なおこの例では当該ライブラリを唯一含むようCargo Workspaceの定義をしてSwiftプロジェクトのレポジトリ内のサブフォルダにRustプロジェクトを配置しているようだ。続いてXcodeでリンク対象ファイルの相対パスと、ライブラリ検索パスを手修正で設定している。検索パスは、デバッグビルドかどうか(debug, release)とビルドターゲット([sdk=iphoneos*][arch=arm64], [sdk=iphonesimulator*][arch=arm64], [sdk=iphonesimulator*][arch=x86_64])ごとに異なるため6つの項目追加をしている。また、ビルドスクリプトも追加指定して、Xcodeのビルド条件タグとRustの target tripleへの変換などの橋渡しをしつつcargo buildをXcodeプロジェクトのビルド処理の一環として走らせるようにする。後はSwiftからRustライブラリの関数を呼べるよう、Cヘッダーファイルを作ってプロジェクトに追加する(もしかするとプロジェクト設定でObjective-CのBridging Headerとして明示指定が必要かも)。以上が済めば、Swiftコードからグローバル関数として当該関数を呼べるらしい。

試したいところだけれど、時間が無いな。。