忙しい人向けの Distribute binary frameworks as Swift packages - #WWDC20

冒頭

Xcode 11 ではソースコードベースのライブラリを配布するために Swift Package がサポートされた。また、バイナリベースのライブラリを配布する良い手段として XCFramework を導入した。

画像1

Swift Package でバイナリベースのライブラリを配布できるようになった。

画像2

利用する

画像3

バイナリのライブラリでも、ソースコードのライブラリと同様に Xcode プロジェクトに追加できる。

画像5

Project Navigator に「Referenced Binaries」というグループが作成され、その中に XCFramework が格納されている。Finder で表示すると、各プラットフォームとターゲット毎に Framework が用意されているのが分かる。

画像5

エディタから定義位置に移動(Jump to definition)すれば、利用可能な API を確認することができる。

画像7

なお、マニフェストファイルで依存関係を指定する場合も、ソースコードのライブラリの場合と変わらない。

画像6

提供する

画像8

Xcode 12 から Swift Tools Version の 5.3 がサポートされ、binaryTarget が追加された。name は XCTFramework の名前、url はダウンロードURL、そして checksum にはダウンロードされたアーカイブを検証するためのチェックサムを指定する。

画像9

バイナリターゲットでは XCFramework が利用され、Apple プラットフォームのみがサポートされる。HTTP またはパスで指定され、Git でのチェックアウトとは別にダウンロードされる。

画像10

ソースコードのライブラリと同様にセマンティックバージョンに従うこと。去年の WWDC セッションである Binary Frameworks in Swift も参考に。

画像11

Xcode の File > New > Swift Package... から作成できる。

画像12

.binaryTaget の項目として checksum を指定する必要があるが、

画像13

$ swift package compute-checksum コマンドで生成できるので、それをコピーすればよい。なお、ダウンロード時のアーカイブとチェックサムが異なっていた場合は拒否される。

画像14

バイナリフレームワークの作成方法

画像15

XCFramework は Xcode 11 で導入され、プラットフォーム毎のバリアントを持つ。フレームワークは dynamic でも static でもよく、単一のモジュールを含め。

画像16

ビルド設定の Build Libraries for Distribution を設定し、xcodebuild-archive コマンドを利用して各バリアント毎にビルドし、xcodebuild -create-xcframework コマンドを使ってバンドルすることができる。先ほど紹介した  Binary Frameworks in Swift のセッションも参考のこと。

画像17

トレードオフも存在する。バイナリはデバッグを難しくし、独自の修正も行えなくなる。また、作者がサポートするプラットフォームに限定されてしまう。

画像18

まとめ

・Swift Package を利用して XCFramework を提供できるようになった
・依存として扱う際はソースコードベースの Package と同じ。

画像19

免責

・本記事は公開情報のみに基づいて作成されています。
・要約(意訳)のみなので、詳細はセッション動画をご確認ください。

関連記事


役に立った記事などありましたらサポート頂けると嬉しいです。