[SwiftPM] 自分の Swift Package Collection を作る方法

SwiftPackageManagerEyeCatch

自分のお気に入りの Swift Package をまとめた Package Collection の作り方を説明します

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Monterery beta 5
  • Xcode 13 beta5
  • iOS 15 beta

Swift Package

SwiftPM 登場以前は、ライブラリを Xcode のプロジェクトに追加するためには、CocoaPod や Carthage を使っていました。

Xcode 9 から Swift Package がサポートされ始め、Xcode12, Xcode13 と Xcode 内での Swift Package の扱いやすさが改善されてきました。

非常に便利な Swift Package ですが、Xcode 上でプロジェクトに追加するためには、その Swift Package の URL を指定しなければいけません。

外部のライブラリを使うのであれば当然なのですが、非常に便利に使えることから、いつも使うライブラリの URL 入力すら手間に感じてしまいがちです。

と、思った人は他にもいるようで、Swift5.5/Xcode13 からは、Package Collection というものが導入されます。

Package Collection とは何か?

Package Collection とは、Swift Package をグループ化して情報を持っておいて、そのなかから Package を選択して使うことができるようにするものです。

Web 上では、Swift Package Index 等が有名ですが、この Package Collection を使うことで、自分でよくつかう Package をまとめておくことができるようになります。

Apple は、Apple が提供している外部ライブラリ(swift-collections 等)を Apple Swift Packages と言う名前の Package Collection を提供しています。

この Package Collection を参照すれば、Swift-collections や swift-nio の URL を個別に入力していく必要がなくなります。

Package Collection とは何か?(実装)

実際には、Package Collection は、JSON ファイルとして提供されます。この JSON ファイル中に Package Collection に含まれる Package の情報が記載されています。

この JSON ファイルの場所を URL として、Xcode に登録することで、その Package Collection に含まれる Package を Xcode 上で簡単に扱うことができます。

なお、Xcode には、複数の Package Collection を登録することができます。

自分で Package Collection を作る

Package Collection JSON ファイルの作成

以下の手順で作っていくことが推奨されています。

  1. swift-package-collection-generator を準備する(初回のみ)
  2. package collection に含める package を package ファイル(JSON)で作成
  3. swift-package-collection-generator を使用して、collection ファイル(JSON)を作成
  4. collection ファイルを公開・提供する

swift-package-collection-generator を準備する

Package Collection のためのツールが Github 上で公開されていますので、取得・コンパイル・インストールします。

  1. Github から、ツールのコードを取得します
    
    % cd <適当なディレクトリ>
    % git clone https://github.com/apple/swift-package-collection-generator
    
  2. ビルドします。
    
    % swift build -c release
    

    .build フォルダ中の release フォルダ(実際はリンク)中にツールがビルドされます

  3. パスの通ったフォルダにコピーします
    
    % cd .build/release
    % cp package-collection-generate <パスの通ったフォルダ>
    
  4. package-collection-generate 以外にも、package-collection-diff, package-collection-sign, package-collection-validate がビルドされていますので、コピーしておきます
  5. "which package-collection-generate" として、パスが通っていることを確認して完了です(必要に応じてコマンドライン再起動や rehash を実行してください)

package collection に含める package を package ファイル(JSON)で作成

含めたいパッケージの URL を集めて、JSON ファイルに記述します。

以下は、3つのパッケージを、"SmallDeskSoftware Packages" という package collection にまとめています。


{
    "name": "SmallDeskSoftware Packages",
    "overview": "convenient packages from SmallDeskSoftware.",
    "packages": [
	{
	    "url": "https://github.com/tyagishi/SwiftUIDebugUtil"
	},
	{
	    "url": "https://github.com/tyagishi/SwiftUIColorNames"
	},
	{
	    "url": "https://github.com/tyagishi/SwiftUIPHPicker"
	}
    ],
    "author": {
        "name": "SmallDeskSoftware"
    }
}

publicpackage.json というファイル名をつけました。

package collection ツールを使用して、collection ファイル(JSON)を作成

先に作成した json ファイルを入力として package collection ファイルを作成します。


% package-collection-generate publicpackage.json publiccollection.json
MEMO
--pretty-printed オプションを指定しておくと、出力される JSON ファイルが読みやすく改行等されて生成されます。

collectino ファイルへの sign

作成した Collection ファイルにサインすることで、その整合性を保証することもできます。

package-collection-sign と言うツールで sign することもできます。詳細はツールのヘルプを参照してください。

sign されていない Collection ファイルを Xcode に登録しようとすると、"Sign されていないけど登録するか?”というようなワーニングが表示されます。

NoSignWarning
NoSignWarning

sign されていないファイルを 使用することに起因する制限は発生しません。

Collection ファイルへの変更を防止したい時には、サインしておく良いようです。

ですが、Proposal を読む限りでは、package を追加することはできるようです。(未確認です)

個人の利便性目的で使用するのであれば、sign は不要な気がします。(ということで、ここでは sign していません)

collection ファイルを公開・提供する

生成された JSON ファイルを URL として参照できる場所に配置すれば完了です。

以下は、Collection を登録した Xcode のウィンドウです。

CollectionInXcode
CollectionInXcode

個別にライブラリの URL を入力しなくとも、Collection に含まれるライブラリをクリックするだけで、プロジェクトに追加していくことができます。

まとめ:自分の Swift Package Collection を作る方法

自分の Swift Package Collection を作る方法
  • swift-package-collection-generator をインストールする
  • Collection に追加したい ライブラリの URL の JSON ファイルを作成する
  • package-collection-generator を使って、Package Collection 用の JSON ファイルを作成する

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です