На самом деле, я могу подтвердить 1 в Swift 5.2, что это возможно. SE-0226 определяет «Целевое разрешение зависимостей», что в основном означает, что SPM будет загружать только те зависимости, которые фактически требуются для используемой вами цели (ей).
Например:
// swift-tools-version:5.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "SwiftlySearch",
platforms: [
.iOS(.v13)
],
products: [
.library(
name: "SwiftlySearch",
targets: ["SwiftlySearch"]
),
],
dependencies: [
.package(url: "https://github.com/nalexn/ViewInspector.git", from: "0.4.3")
],
targets: [
.target(
name: "SwiftlySearch",
dependencies: []
),
.testTarget(
name: "SwiftlySearchTests",
dependencies: ["SwiftlySearch", "ViewInspector"]
),
]
)
Будет загружен только ViewInspector для целевой SwiftlySearchTests, а не для выпущенной библиотеки SwiftlySearch.
TL; DR: просто объявите зависимости только от цели, которые их используют, SPM выяснит все остальное.
1 Я только что протестировал это с помощью встроенного диспетчера пакетов в Xcode 11.6, который вел себя так, как ожидалось.