忙しい人向けの Distribute binary frameworks as Swift packages - #WWDC20
冒頭
Xcode 11 ではソースコードベースのライブラリを配布するために Swift Package がサポートされた。また、バイナリベースのライブラリを配布する良い手段として XCFramework を導入した。
Swift Package でバイナリベースのライブラリを配布できるようになった。
利用する
バイナリのライブラリでも、ソースコードのライブラリと同様に Xcode プロジェクトに追加できる。
Project Navigator に「Referenced Binaries」というグループが作成され、その中に XCFramework が格納されている。Finder で表示すると、各プラットフォームとターゲット毎に Framework が用意されているのが分かる。
エディタから定義位置に移動(Jump to definition)すれば、利用可能な API を確認することができる。
なお、マニフェストファイルで依存関係を指定する場合も、ソースコードのライブラリの場合と変わらない。
提供する
Xcode 12 から Swift Tools Version の 5.3 がサポートされ、binaryTarget が追加された。name は XCTFramework の名前、url はダウンロードURL、そして checksum にはダウンロードされたアーカイブを検証するためのチェックサムを指定する。
バイナリターゲットでは XCFramework が利用され、Apple プラットフォームのみがサポートされる。HTTP またはパスで指定され、Git でのチェックアウトとは別にダウンロードされる。
ソースコードのライブラリと同様にセマンティックバージョンに従うこと。去年の WWDC セッションである Binary Frameworks in Swift も参考に。
Xcode の File > New > Swift Package... から作成できる。
.binaryTaget の項目として checksum を指定する必要があるが、
$ swift package compute-checksum コマンドで生成できるので、それをコピーすればよい。なお、ダウンロード時のアーカイブとチェックサムが異なっていた場合は拒否される。
バイナリフレームワークの作成方法
XCFramework は Xcode 11 で導入され、プラットフォーム毎のバリアントを持つ。フレームワークは dynamic でも static でもよく、単一のモジュールを含め。
ビルド設定の Build Libraries for Distribution を設定し、xcodebuild-archive コマンドを利用して各バリアント毎にビルドし、xcodebuild -create-xcframework コマンドを使ってバンドルすることができる。先ほど紹介した Binary Frameworks in Swift のセッションも参考のこと。
トレードオフも存在する。バイナリはデバッグを難しくし、独自の修正も行えなくなる。また、作者がサポートするプラットフォームに限定されてしまう。
まとめ
・Swift Package を利用して XCFramework を提供できるようになった
・依存として扱う際はソースコードベースの Package と同じ。
免責
・本記事は公開情報のみに基づいて作成されています。
・要約(意訳)のみなので、詳細はセッション動画をご確認ください。
関連記事
役に立った記事などありましたらサポート頂けると嬉しいです。