[SwiftPM] SwiftPM で依存するライブラリのバージョン指定

SwiftPackageManagerEyeCatch

Swift Package を開発しているときに指定できる外部パッケージのバージョン指定の方法を説明します。

セマンティックバージョニング

バージョン番号は、セマンティックバージョニングというコンセプトで付けられることが多いです。

依存関係でのバージョン指定も、このコンセプトで付けられていることを前提にいろいろと指定できるようになっています。

[Foundation] Application バージョン番号、ビルド番号の取得方法

指定に使用される struct

バージョンを表現するための struct として Version が定義されています。

Version

let version123 = Version(1,2,3)

上記は、バージョン 1.2.3 を表します。
それぞれ、メジャーバージョン、マイナーバージョン、パッチバージョンです。

Apple のドキュメントは、こちら

なお、文字列を使って初期化することもできます。(Apple のサンプルの多くは、文字列を使って初期化しています)

Version を文字列で初期化

let version123 = Version(”1.2.3")

指定方法概要

大きく、3種類の方法があります。

Range 指定
バージョンの範囲を指定
from 指定
特定のバージョン以降という指定
Requirement 指定
メジャーバージョンや特定のブランチ等の指定

Range 指定

バージョン 1.2.3 から 1.3.5 までの間というような指定ができます。

通常の Swift での Range と同様に、範囲を指定できます。

1.2.3 以上 1.2.6 未満を指定

.package(url: "https://example.com/example-package.git",
         Version(1,2,3)..
1.2.3 以上 1.2.6 以下を指定

.package(url: "https://example.com/example-package.git",
         Version(1,2,3)...Version(1,2,6)),

from 指定

特定のバージョン以降という指定ができます。

1.2.3 以上を指定

.package(url: "https://example.com/example-package.git",
         from: Version(1,2,3)),

Requirement 指定

セマンティクスバージョニングを想定して、その意味に沿った指定ができます。

例えば、同一メジャーバージョンを指定することで、互換性を持つバージョンを指定することができます。

Requirement 指定を使うことで、特定のブランチ・特定のコミットを指定することもできます。

upToNextMajor

メジャーバージョンは同じままで、特定のバージョン以降

1.2.3 以上 メジャーバージョンは、1

.package(url: "https://example.com/example-package.git",
         .upToNextMajor(from:Version(1,2,3))),

upToNextMinor

マイナーバージョンは同じままで、特定のバージョン以降

1.2.3 以上 マイナーバージョンは、2

.package(url: "https://example.com/example-package.git",
         .upToNextMinor(from:Version(1,2,3))),

exact

特定のバージョンを直接指定

1.2.3 を指定

.package(url: "https://example.com/example-package.git",
        .exact(Version(1,2,3))),

branch

特定のブランチを指定

hotfix ブランチを指定

.package(url: "https://example.com/example-package.git",
         .branch("hotfix")),

revision

ハッシュ値を指定することで特定の commit を指定

ハッシュ値を持つ commit を指定

.package(url: "https://example.com/example-package.git",
         .revision("b3f94882ac")),

まとめ

SwiftPM で外部依存するライブラリには、様々なバージョンの制約を設定することができます。

バージョン指定方法
  • 特定バージョン以降を指定
  • メジャーバージョンを指定
  • マイナーバージョンを指定
  • 特定のバージョンを指定
  • ブランチを指定
  • コミットを指定

メジャーバージョン指定等は、ライブラリが、セマンティクスバージョニングを使用していることが前提です。

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。



コメントを残す

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