Session概要
Appにサードパーティのフレームワークを追加し、XcodeでSwiftパッケージを使い、それらを最新の状態に保つ方法について。フレームワークを参照するパッケージの作成方法、バイナリターゲットおよびパッケージのマニフェストファイルでそれらを指定する方法について。
また、正確なバイナリをクライアントが常に得られるようにチェックサムを計算する方法についてもお伝えします。 https://developer.apple.com/videos/play/wwdc2020/10147/
バイナリフレームワークのSwiftパッケージとしての配布方法
- Xcode 12は新パッケージマニフェストAPIを持つ新しいtools-version:5.3を提供します
- productはバイナリターゲットを参照してクライアントに通常のターゲットのように販売できます
- バイナリターゲットはAppleプラットフォームのみ対応
- セマンティックバージョニングに対応する必要がある
- アプリと同様フレームワークのInfo.plistにあるバンドルバージョンを編集する
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "Emoji",
products: [
.library(name: "Emoji", targets: ["Emoji"])
],
dependencies: [
],
targets: [
.binaryTarget(
name: "Emoji",
url: "https://example.com/Emoji/Emoji-1.0.0.xcframework.zip",
checksum: "6d988a1a27418674b4d7c31732f6d60e60734ceb11a0ce9b54d1871918d9c194"
)
]
)
- バイナリターゲットはSwift Packageを作成する手順と同様
- checksumの作成は
swift package compute-checksum
コマンドを使用してchecksumを出力swift package compute-checksum Emoji-1.0.0.xcframework.zip
- checksumの作成は
targets: [
.binaryTarget(name: "Hoge", url: "https://〜", checksum: "02b384c..."
]
Xcodeでバイナリフレームワークの作り方
- XCFrameworksについて
- Xcode 11から導入
- 異なるプラットフォームのためのバリアントを提供
- Dynamic, Static libraryに対応
- 各XCFrameworkは単一のモジュールを含む
- Build Libraries for Distributionをbuild設定にセットします
xcodebuild archive
コマンドを使用して各バリアントをアーカイブしますxcodebuild -create-xcframework
コマンドを使ってひとまとめにします
バイナリフレームワークを使用する際のトレードオフ
- バイナリはデバッグがより難しくなり、独自で修正を加えることは不可能になる
- 対応プラットフォームはバイナリ依存性の再構築ができないためフレームワーク作成者がサポートするものに限定される