Estoy migrando una biblioteca creada y probada como un proyecto Xcode a Swift Package Manager. El proyecto contiene 3 objetivos: la propia biblioteca, la misma biblioteca pero con diferente dependencia y el objetivo de prueba (aplicación).
Hasta ahora, migrar la biblioteca fue fácil.
Ahora estoy interesado en construir la misma biblioteca con una dependencia diferente (simulacros) que podría probarse.
En la práctica, el archivo Package.swift se ve así:
// swift-tools-version:5.4 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "TargetLibrary", platforms: [ .iOS(.v14), .macOS(.v10_15) ], products: [ .library( name: "TargetLibrary", targets: ["TargetLibrary"]), ], dependencies: [ .package( url: "ssh://git@github.com/DependentLib", .upToNextMinor(from: "1.3.18") ), ], targets: [ .target( name: "TargetLibrary", dependencies: [ // Using the "main" dependency for the "TargetLibrary" .product(name: "DependentLib", package: "DependentLib"), ], path: "src", exclude: [ ], sources: [ "sourcefiles" ], publicHeadersPath: "SwiftPackage/include", cxxSettings: [ .headerSearchPath("lib"), ]), // This target is virtually identical, to the previous one, // the only difference is that it is using a different dependency library // from the same package .target( name: "TargetLibraryWithMock", dependencies: [ // Using the "mock" dependency for this library .product(name: "DependentLibMock", package: "DependentLib"), ], path: "src", exclude: [ ], sources: [ "sourcefiles" ], publicHeadersPath: "SwiftPackage/include", cxxSettings: [ .headerSearchPath("lib"), ]), // Now testing the "TargetLibraryWithMock" .testTarget().... ], cxxLanguageStandard: .cxx14 )Ahora, por supuesto, si solo duplico dos objetivos, obtendré un error de fuentes superpuestas de objetivos
Entonces, la pregunta es: ¿Cómo puedo construir dos objetivos diferentes solo por las dependencias que incluyen?
Parece que la condición de dependencia de destino podría haber ayudado aquí
dependencies: [ .target(name: "DependentLib", condition: .when(configuration: .build)), .target(name: "DependentLibMock", condition: .when(configuration: .test)), ]pero ahora solo existen condicionales específicos de la plataforma. ¿Cuáles podrían ser las soluciones a este problema?
Representación gráfica del resultado deseado: