swift-corelibs-xctestはなぜXCTestライブラリをdynamic linkingで配布するのか?
code:swift
.library(
name: "XCTest",
type: .dynamic,
)
The optional type of the library that’s used to determine how to link to the library. Leave this parameter so Swift Package Manager can choose between static or dynamic linking (recommended). If you don’t support both linkage types, use Product.Library.LibraryType.static or Product.Library.LibraryType.dynamic for this parameter.
なんでdynamic linkingがrecommendedなの?
A library’s product can be either statically or dynamically linked. It’s recommended that you don’t explicitly declare the type of library, so Swift Package Manager can choose between static or dynamic linking based on the preference of the package’s consumer.
利用側でstatic linking or dynamic linkingを選択しないように明示的に指定しないことが勧められている
swift-corelibs-xctestはなぜXCTestライブラリをdynamic linkingで配布するのか?
これなんでだろうと思って考えた
もしstatic linkiingでリンクさせた場合、例えばSwiftPMを使ったマルチモジュールでプロジェクトを構成している時に、個々のモジュールでリンクされてしまうので、以下の問題/話題がある
ビルドの成果物にXCTest絡みのものが重複して含まれるため、容量が増える
モジュールごとにXCTestのバージョンがずれる可能性があってテストの一貫性が無くなる
GitHubでapple org配下のリポジトリで type: .dynamic を指定している箇所
量は多くない