ハイライト
Xcode 13 では Swift Package コレクションが導入されており、開発者は共有可能な JSON マニフェストを使用して Swift パッケージを検出、フィルタリング、署名、インポートし、パッケージのメタデータを Xcode および SwiftPM ワークフローに直接取り込むことができます。
主要内容
ブログから Swift コードの一部をコピーして Xcode に貼り付けると、最初によく起こるのはコンパイルの失敗です。モジュールがプロジェクトに追加されていません。次に、記事に戻って GitHub アドレスを見つけ、パッケージ名を確認し、バージョン ルールを選択してから、Xcode に戻って依存関係を追加する必要があります。
パッケージの数が増えると、検索が問題になります。チームは、監査済みパッケージの使用のみを許可されます。コース作成者は、学生がサポートされている依存関係を直接取得できることを望んでいます。ブロガーは読者の一歩を減らすことを望んでいます。 GitHub リンクだけでは、ライセンス、README、リリース履歴、製品リストを伝えることはできません。
Xcode 13 の Swift Package コレクションは、このエントリの問題を解決します。コレクションは、パッケージ URL とメタデータのセットをリストした JSON ファイルであり、通常は HTTPS 経由で取得されます。 Xcode と Swift Package Manager (SwiftPM) の両方がこのコレクションを読み取ることができます。
Apple は Xcode 13 にもデフォルトのコレクションを組み込みました。デモでは、開発者はimport Numerics不足しているモジュールが見つかると、Xcode は直接 fix-it を実行し、新しいパッケージの追加プロセスを開きます。このフローでは、最新バージョン、作成者、ライセンス、README、およびリリース履歴が表示されます。追加されると、依存関係がプロジェクトの [Swift Packages] タブに表示され、製品はターゲットの Frameworks、Libraries、および Embedded Content ステージにリンクされます。
コレクションは自分で維持することもできます。教育者はコレクションをコースに公開できます。企業はレビューされたコレクションを社内チームにリリースできます。コミュニティの作成者はコレクションを記事に割り当てることができ、読者が同じ依存関係のセットに基づいて実験を再現できるようになります。
詳細
コレクションはメタデータを含む JSON です
(04:28)
Swift パッケージ コレクションの基本形式は JSON です。これには、コレクション レベル名、概要、キーワード、作成者が含まれており、パッケージ リストも含まれています。各パッケージには少なくとも URL が必要です。生成ツールは、より多くの情報を自動的に取得します。
{
"name": "WWDC21 Demo Collection",
"overview": "Packages to be used in our demo app",
"keywords": ["wwdc21"],
"author": {
"name": "Boris Buegling"
},
"packages": [
{ "url": "https://github.com/apple/swift-format" },
{ "url": "https://github.com/Alamofire/Alamofire" }
]
}
キーポイント:
nameXcode に表示されるコレクションの名前です。overviewこのコレクションの目的について説明します。コレクションを追加するときに表示されます。keywordsコレクションのテーマを説明するために使用されます。author.nameコレクションの作成者を識別します。packagesこれは、Xcode と SwiftPM が引き続きパッケージ情報を読み取るパッケージ URL のリストです。
(07:17)
コレクションは、個々のパッケージのメタデータの補足もサポートします。デモンストレーションでは、swift-formatパッケージには、概要、キーワード、バージョン制限、除外される製品、および README URL が追加されます。
{
"name": "WWDC21 Demo Collection",
"overview": "Packages to be used in our demo app",
"keywords": ["wwdc21"],
"packages": [
{
"url": "https://github.com/apple/swift-format",
"summary": "Formatting technology for Swift source code.",
"keywords": ["formatting", "swift"],
"versions": ["0.50400.0", "0.50300.0"],
"excludedProducts": ["SwiftFormatConfiguration"],
"readmeURL": "https://github.com/apple/swift-format/blob/main/README.md"
},
{ "url": "https://github.com/Alamofire/Alamofire" }
],
"author": {
"name": "Boris Buegling"
}
}
キーポイント:
urlSwift パッケージ リポジトリを指します。summaryXcode でのプレゼンテーションと検索結果が改善されます。keywords個々のパッケージに検索キーワードを追加します。versionsコレクションによって表されるバージョン範囲を制限します。excludedProducts読者に選んでほしくない商品を非表示にすることができます。readmeURLREADME アドレスを指定することで、Xcode はパッケージの詳細に README を表示できます。
ジェネレーターを使用してコレクション ファイルを作成する
(08:46)
Apple が Swift Package Collection Generator をリリースしました。入力は、パッケージ URL とオプションのメタデータで構成される JSON です。出力は共有可能なコレクション JSON です。ジェネレーターはパッケージ情報を自動的に収集し、最新の形式でファイルを出力します。
package-collection-generate --verbose input.json collection.json --auth-token
キーポイント:
package-collection-generateコレクションを生成するコマンドです。--verboseさらに多くのプロセス情報を出力し、それをデモンストレーションで使用して、ジェネレーターがパッケージのバージョンを取得するプロセスを表示します。input.jsonは、パッケージ URL とオプションのメタデータを含む手書きの入力ファイルです。collection.jsonこれは生成されたコレクション ファイルであり、署名を続行したり、直接配布したりできます。--auth-tokenツールが GitHub API 経由でより多くのメタデータをクエリできるようにするために使用されます。
署名の収集、作成者と完全性の確認
(09:30)
署名はオプションの手順です。これにより、SwiftPM はコレクションの作成者を検証し、コレクションのコンテンツを変更から保護することができます。このデモでは、別の署名ツールを使用して、生成された JSON、秘密キー、証明書を署名セットに結合します。
package-collection-sign collection.json collection-signed.json developer-key.pem developer-cert.cer
キーポイント:
package-collection-signは署名コマンドです。collection.json前の段階で生成されたコレクションです。collection-signed.json署名された出力ファイルです。developer-key.pem署名に使用される秘密鍵です。developer-cert.cer対応する証明書です。- SwiftPM のドキュメントには、署名に使用できる証明書の要件が記載されています。証明書は有効であり、期限切れではなく、取り消されていない必要があります。
SwiftPM を使用したコレクションの追加と検査
(10:15)
SwiftPM が提供するのはpackage-collectionサブコマンド。コレクションを追加すると、ローカル キャッシュに保存され、Xcode で使用できるようになります。 SwiftPM のコレクション機能は、Xcode のパッケージ機能も提供する libSwiftPM (SwiftPM ライブラリ) から提供されます。
swift package-collection add https://example.com/collection-signed.json
キーポイント:
swiftSwiftPM コマンド ライン ツールを呼び出します。package-collectionコレクション管理サブコマンドを入力します。addリモート コレクションを現在のマシンの構成に追加します。- URL は、署名されたコレクションである可能性がある、公開されたコレクション JSON を指します。
(10:34)
追加すると、コレクション全体を検査できます。デモでは、出力にはコレクションのメタデータ、パッケージ リスト、署名情報が含まれます。
swift package-collection describe
キーポイント:
describeパッケージ URL を使用せずに、構成されたコレクションの全体的な情報を表示します。- 出力には、以前に書き込まれたコレクションのメタデータが表示されます。
- 出力には、コレクション内のパッケージがリストされます。
- コレクションが署名されている場合、出力には署名者と SwiftPM の検証の結果が表示されます。
(11:11)
コレクション内の個々のパッケージの詳細を表示することもできます。デモ使用swift-formatリポジトリ URL、出力には、利用可能なバージョン、作成者、スター、README URL、Swift ツールのバージョン、モジュール、製品が含まれます。
swift package-collection describe https://github.com/apple/swift-format
キーポイント:
describeパッケージ URL を続けると、個々のパッケージのメタデータが表示されます。https://github.com/apple/swift-formatチェックするパッケージです。- 出力には、コレクション内のキャッシュされたパケット情報が表示されます。
- この情報は、豊富な詳細を表示するための Xcode パッケージ追加プロセスの基礎にもなります。
Xcode でコレクションのパッケージを使用する
(12:01)
Xcode ではカスタム コレクションを追加することもできます。パスは [ファイル] > [パッケージの追加] で、クリックします。+をクリックし、コレクションの URL を貼り付けて、「ロード」をクリックします。 Xcode は、コレクションに含まれるパッケージの数と、コレクションがいつ更新されたかを表示します。コレクションが追加されると、パッケージのリストが [パッケージの追加] パネルに表示されます。
(13:07)
デモ アプリはコレクションから Alamofire を追加し、SwiftUI ビューで README リクエストを作成します。
import SwiftUI
import Alamofire
struct ContentView: View {
let readMeURL = "https://raw.githubusercontent.com/apple/swift/main/README.md"
var body: some View {
Button("Click me!") {
AF.request(readMeURL).response { response in
debugPrint(response)
}
}
}
}
キーポイント:
import SwiftUI供給View、Buttonそしてbody。import Alamofireプロジェクトに追加したネットワーク ライブラリを紹介します。readMeURLSwift リポジトリの README の元のファイル アドレスを保存します。Button("Click me!")ボタンを作成します。AF.request(readMeURL)Alamofire を使用してネットワーク リクエストを作成します。.responseリクエスト結果を受信します。debugPrint(response)デバッグ コンソールへの応答を出力して、依存関係がリンクされており利用可能であることを確認します。
重要ポイント
-
内容: チームのために「許可された Swift パッケージ」のコレクションを維持します。 実行する価値がある理由: コレクションは選択の範囲を狭めることができ、エンタープライズ シナリオでは開発者をレビュー済みのパッケージに導くことができます。 開始方法: 作成する
input.json、内部で承認されたパッケージの URL をpackages、使用package-collection-generateコレクションを構築し、内部 HTTPS アドレス経由で公開します。 -
対処方法: 依存関係セットを技術記事またはコースに割り当てます。 実行する価値がある理由: 読者は Xcode を開いた後、記事で使用されているパッケージを直接確認できるため、ウェアハウスのアドレスをコピーして製品を選択する手順が軽減されます。 開始方法: 記事のサンプルの依存関係をコレクション (Alamofire、swift 形式など) として記述し、記事の先頭にコレクションの URL を指定します。
-
何をすべきか: オープンソース プロジェクト用の「推奨拡張パック」エントリを確立します。 実行する価値がある理由: コレクションは、要約、キーワード、README URL、およびバージョン制限をサポートし、サポート ツールとサンプルの依存関係をグループに編成できます。 始め方: 1パックごとに詰め替えてください
summary、keywords、readmeURL、必要に応じて使用しますexcludedProducts関係のない商品を非表示にします。 -
対処方法: CI でコレクションを定期的に再構築します。 実行する価値がある理由: ジェネレーターはコレクションを最新の形式で出力し、パッケージのメタデータを取得します。コレクションの発行者は、すべてのバージョンの詳細を手動で管理する必要はありません。 開始方法: 自動化タスクで実行する
package-collection-generate --verbose input.json collection.json --auth-token、生成後に固定URLにアップロードします。 -
内容: 署名コレクションを外部開発者に公開します。 実行する価値がある理由: SwiftPM は署名者と検証結果を表示し、ユーザーがコレクションのソースとコンテンツの整合性を確認できるようにします。 開始方法: 有効なコード署名証明書を準備して実行します。
package-collection-sign collection.json collection-signed.json developer-key.pem developer-cert.cer、署名された JSON を配布します。
関連セッション
- Xcode で DocC ドキュメントに出会う — DocC を使用して、Swift パッケージとフレームワークの閲覧可能なドキュメントを生成します。
- DocC ドキュメントをホストして自動化する — Swift パッケージのドキュメントをオンラインでホストし、自動化されたプロセスに接続します。
- Swift アルゴリズムとコレクション パッケージの紹介 — Apple のオープンソース Swift パッケージ エコシステムのアルゴリズムとコレクションについて学びます。
- Swift の新機能 — Swift 5.5 言語、ツールチェーン、エコシステムのアップデートについて学びます。
コメント
GitHub Issues · utterances