前置き
最後にパッケージマネージャについての変更点です。
パッケージマネージャなので開発リーダーや案件管理者の方は知っておいて損はなさそうです。
ここまで長いこと調査(理解)に時間をかけましたが、今回は少ないのでサクッといけそうwww
パッケージ構成ファイルの追加
SwiftPMが追加入力として使用できる依存関係ごとのミラーリング情報を保存するために、「パッケージ構成」ファイルが導入されたとのこと。このファイルはjson形式ですがSwiftPMが操作することを前提としているそうです。
なので勝手に編集することはしない方が良さそうです。
パッケージマネージャープラットフォームの展開設定
SwiftPMは現在、macOSデプロイメントターゲットにハードコードされた値を使用してプラットフォーム展開しています。これにより、プラットフォームがハードコーディングされていたりしているそうで変えたいとのこと。
そこでapiを新たに導入してターゲットを明確化させようと言うことらしいです。
/// Represents a supported platform.
struct SupportedPlatform {
static func macOS(_ version: MacOSVersion) -> SupportedPlatform
static func macOS(_ versionString: String) -> SupportedPlatform
static func tvOS(_ version: TVOSVersion) -> SupportedPlatform
static func tvOS(_ versionString: String) -> SupportedPlatform
static func iOS(_ version: IOSVersion) -> SupportedPlatform
static func iOS(_ versionString: String) -> SupportedPlatform
static func watchOS(_ version: WatchOSVersion) -> SupportedPlatform
static func watchOS(_ versionString: String) -> SupportedPlatform
}
/// List of known versions.
extension SupportedPlatform.MacOSVersion {
static let v10_10: MacOSVersion
static let v10_11: MacOSVersion
static let v10_12: MacOSVersion
...
}
final class Package {
init(
name: String,
platforms: [SupportedPlatform]? = nil,
...
)
}
パッケージマネージャーターゲット固有のビルド設定
SwiftPMは現在、ビルドツール(コンパイラ、リンカ、等)は、ビルド時に呼び出される方法をカスタマイズするための機能でやっていて、ターゲットを構築するためにいくつかの基本的なカスタマイズを行いたいパッケージ作成者にとって色々と面倒なようです。
そこでターゲット・ファクトリメソッドって奴に引数を追加してあげてプロジェクトとライブラリのコンパイルのバージョンを区別しようと言うことらしいです。
これによって**プロジェクトのバージョンとライブラリのswiftバージョンが異なってもビルドできるようになるのか?**これは実際に検証実験が必要なので後日加筆したいと思います。
終わりに
一つづつ調べて行きましたが、途中からswiftを始めた身としてはかなり勉強になりました。
経験が浅くとも調べることによって過去の経緯・今後の展開等把握できるいい機会となると思うので、じっくり調べてみるのも悪くないと思いました。
今後も新しいのが出たら自分なりに解釈して行こうと思います。