ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Swiftパッケージとしてバイナリフレームワークを配布する
Appにサードパーティのフレームワークを追加し、XcodeでSwiftパッケージを使い、それらを最新の状態に保つ方法をお伝えします。フレームワークを参照するパッケージの作成方法、バイナリターゲットおよびパッケージのマニフェストファイルでそれらを指定する方法をご説明します。また、正確なバイナリをクライアントが常に得られるようにチェックサムを計算する方法もお伝えします。 フレームワークは、XCFrameworkフォーマットで配付されます。XCFrameworkの作成とバージョニングの詳細は、WWDC19の"Binary Frameworks in Swift”をご覧ください。
リソース
関連ビデオ
WWDC20
WWDC19
-
ダウンロード
こんにちは WWDCへようこそ
“Swiftパッケージとして バイナリフレームワークを配布する” こんにちは ボリスです 今日のトークは― Swiftパッケージとしてのバイナリ フレームワークの配布についてです Xcode 11でSwiftパッケージへの サポートを紹介しました ソースコードとしてライブラリを配布するための 簡単なアプローチを提供しています XCFrameworkも紹介しました クローズドソースバイナリフレームワークと ライブラリを配布するために より良い方法を提供しています Xcode 12では― ライブラリ配布用Swiftパッケージの利点を バイナリ依存関係のサポートを得て クローズドソースライブラリにも もたらしています このビデオでカバーするのは まずアプリケーションでの バイナリ依存性の使い方です 次にバイナリフレームワークの Swiftパッケージとしての― 配布方法をお話しします そして最後に Xcodeで バイナリフレームワークの作り方を見てみます ソースコードフォームには 多くのライブラリがあります 中には ライブラリのソースコードを使用可能に しないことを選択するデベロッパもいます その代わりに バイナリフォームに配布するのです このようなバイナリ依存性を利用するのは― ソースベース依存性を 追加するようなものです デモで見てみましょう
シンプルなiOSアプリケーションから始めます “File”“Swift Packages” “Add Package Dependency”を選択します
“BinaryEmoji”パッケージを選びます
バージョン 1.0 です
バイナリをアプリケーションにリンクします
ここでプロジェクトナビゲーターを見てみると 新しいグループ “Referenced Binaries”があります XCFrameworkが含まれています
Finderで見てみましょう
たくさんのサブディレクトリがあり それぞれがターゲットトリプルで 表されるプラットフォームや― ターゲット環境に対応しています
さらにその特定のトリプルのために 対応するフレームワークがあります
Xcodeに戻りましょう
これで絵文字モジュールが インポートできます
私たちのアプリケーションの コードに入れます
“定義”までジャンプすると―
どのAPIがそれを提供するかが分かります アプリケーションで使いたい “EmojiView”タイプがあります
プレビューをリフレッシュすると―
EmojiViewが使用されているのが分かります バイナリ依存性を使うのは ソースベース依存性と同じくらい役に立ちます Xcode 11からのXCFrameworkは もうよくご存じとか思いますが これらは同じ方法で効果的に まるで― アプリケーションに 直接追加されたかのように処理されます
同じライブラリをパッケージ依存性として 使いたい場合― すでに慣れている方法で使えます パッケージマニフェストには 依存関係の配列にエントリを追加できます それはパッケージが使用する リポジトリを指し示しています そしてこの依存性のために選択した バージョン制限を定義します
他の誰かが書いたバイナリ依存性の 使用方法を見てきました 次にパッケージの 作り方を見てみましょう 自らバイナリフレームワークを 配布するパッケージです Xcode 12は新パッケージマニフェストAPIを持つ 新しいtools-version:5.3を提供します 新しいターゲットタイプを追加します “binaryTarget”です 名前はXCFrameworkの モジュール名に応答します
またはHTTPS URL そして チェックサムのモジュール名です そのためダウンロードされた アーカイブを検証できます
その他にXCFrameworkを パスで指し示すオプションもあります これは開発用です ただし大きなXCFrameworkは やはり大きなバイナリファイルのように― Gitリポジトリにコミットすべきではないことに ご注意ください チェックアウトが遅くなるからです
製品はバイナリターゲットを参照して クライアントに― 通常のターゲットのように販売できます 先ほど見たようにバイナリターゲットは XCFrameworkを使います Appleプラットフォームでのみサポートされ パスがパッケージ内の― ファイルを指し示す事ができるHTTPS またはパスベースにすることができます HTTPSが選択された場合 ご自身のパッケージのGitチェックアウトから バイナリアーティファクトは― 別々にダウンロードされます つまり大きなバイナリで リポジトリ履歴を汚染しません そして同じダウンロード場所を 他の用途にも使用できます 例えばフレームワークを 手動でダウンロードするような場合です
名前はモジュール名に対応します 名前はグラフ全体で一意なため― 他の人のバイナリフレームワークを バンドルしないでください バイナリフレームワークごとに 1つの正規パッケージが必要です パッケージのバイナリターゲットを 展開する時には― セマンティックバージョニングに 従う必要があります ソースベースターゲットと同じように 例えば メソッドやタイプの名称変更など XCFrameworkに変更を加えると― パッケージのメジャーバージョン増加に つながります 同様に自分のフレームワークに バージョンをつけたい場合 フレームワークのInfo.plistにある バンドルバージョンの文字列設定を使用します バイナリフレームワークの 進化についての詳細は― WWDC 2019のセッション“Binary Frameworks in Swift”でカバーしています ご視聴いただくことをお勧めします それではもう1つのデモでバイナリ依存性の 作り方を見てみましょう
今回は“File”“New”“Swift Package”を用い 新しいパッケージで始めます
“Emoji”と名づけます
テンプレートが追加した ターゲットを除去し―
その代わりにバイナリターゲットを挿入します
名前はこちらも“Emoji”です XCFrameworkがあるローカルサーバーを 指し示すURLを使用します
次はチェックサムが必要です どうやって作るのでしょう?
バイナリフレームワークの チェックサムを計算するには― “swift package compute-checksum” コマンドを使います これは末端に チェックサムを出力します そこでコピーしてご自分の パッケージマニフェストに貼り付けます パッケージが使用されている時 Xcodeはダウンロードされたファイルの チェックサムを計算し マニフェストに一致しなかった場合は それを拒否します これによりクライアントは ご希望の正しいバイナリを使用できます それではそのチェックサムを挿入し パッケージを作ります
それによってXCFrameworkを Swiftパッケージにバンドルし― 配布することができます 最後にバイナリフレームワーク自身の 作り方を見てみましょう XCFrameworkはXcode 11で紹介されました 異なるプラットフォーム用フレームワークの 複数のバリアントをまとめました そして動的および静的ライブラリ同様 フレームワークをサポートし― 各XCFrameworkは 単一のモジュールを含みます XCFrameworkを作成するには― “Build Libraries for Distribution”構築設定を セットします 現存するフレームワーク またはライブラリターゲットにします “xcodebuild archive”コマンドを使用して 各バリアントをアーカイブします “xcodebuild -create-xcframework” コマンドを使ってひとまとめにします
より詳しく知りたい方は― WWDC 2019のセッション“Binary Frameworks in Swift”をご視聴ください Xcodeでバイナリフレームワークを 作成する前に見ることをお勧めします さて最後を締めくくる前に― バイナリ依存関係を使用した トレードオフについてお話します 毎回必ず考えていただきたいのは どのサードパーティコンポーネントを― ご自分のプロジェクトに追加するかです 特にバイナリは デバッグがより難しくなり― 独自で修正を加えることは 不可能になります
またプラットフォームも 作成者がサポートするものに限定されます バイナリ依存性の再構築ができないためです 新しいバイナリ依存関係を加える前に これらのことをよく考えましょう 最後になりますが 現存するXCFrameworkを Swiftパッケージとして配布できます それらに応じてソースベースパッケージと 同じように機能します ご視聴 ありがとうございました
-
-
2:37 - Adding a Package Dependency to the Package Manifest
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "package", products: [ .library( name: "package", targets: ["package"]), ], dependencies: [ .package(url: "https://github.com/JohnnyAppleseed2020/BinaryEmoji", from: "1.0.0"), ], targets: [ .target( name: "package", dependencies: ["Emoji"]), ] )
-
3:04 - Distributing Binary Frameworks as a Swift Package
// 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" ) ] )
-
5:43 - Computing the Checksum
swift package compute-checksum Emoji-1.0.0.xcframework.zip
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。