@@ -144,7 +144,13 @@ extension PackageGraph {
144144 rootManifests: root. manifests,
145145 unsafeAllowedPackages: unsafeAllowedPackages,
146146 platformRegistry: customPlatformsRegistry ?? . default,
147- xcTestMinimumDeploymentTargets: customXCTestMinimumDeploymentTargets ?? MinimumDeploymentTarget . default. xcTestMinimumDeploymentTargets,
147+ derivedXCTestPlatformProvider: { declared in
148+ if let customXCTestMinimumDeploymentTargets {
149+ return customXCTestMinimumDeploymentTargets [ declared]
150+ } else {
151+ return MinimumDeploymentTarget . default. computeXCTestMinimumDeploymentTarget ( for: declared)
152+ }
153+ } ,
148154 fileSystem: fileSystem,
149155 observabilityScope: observabilityScope
150156 )
@@ -225,7 +231,7 @@ private func createResolvedPackages(
225231 rootManifests: [ PackageIdentity : Manifest ] ,
226232 unsafeAllowedPackages: Set < PackageReference > ,
227233 platformRegistry: PlatformRegistry ,
228- xcTestMinimumDeploymentTargets : [ PackageModel . Platform : PlatformVersion ] ,
234+ derivedXCTestPlatformProvider : @escaping ( _ declared : PackageModel . Platform ) -> PlatformVersion ? ,
229235 fileSystem: FileSystem ,
230236 observabilityScope: ObservabilityScope
231237) throws -> [ ResolvedPackage ] {
@@ -348,16 +354,8 @@ private func createResolvedPackages(
348354
349355 packageBuilder. platforms = computePlatforms (
350356 package : package ,
351- usingXCTest: false ,
352- platformRegistry: platformRegistry,
353- xcTestMinimumDeploymentTargets: xcTestMinimumDeploymentTargets
354- )
355-
356- let testPlatforms = computePlatforms (
357- package : package ,
358- usingXCTest: true ,
359357 platformRegistry: platformRegistry,
360- xcTestMinimumDeploymentTargets : xcTestMinimumDeploymentTargets
358+ derivedXCTestPlatformProvider : derivedXCTestPlatformProvider
361359 )
362360
363361 // Create target builders for each target in the package.
@@ -379,7 +377,7 @@ private func createResolvedPackages(
379377 }
380378 }
381379 targetBuilder. defaultLocalization = packageBuilder. defaultLocalization
382- targetBuilder. platforms = targetBuilder . target . type == . test ? testPlatforms : packageBuilder. platforms
380+ targetBuilder. platforms = packageBuilder. platforms
383381 }
384382
385383 // Create product builders for each product in the package. A product can only contain a target present in the same package.
@@ -686,9 +684,8 @@ private class DuplicateProductsChecker {
686684
687685private func computePlatforms(
688686 package : Package ,
689- usingXCTest: Bool ,
690687 platformRegistry: PlatformRegistry ,
691- xcTestMinimumDeploymentTargets : [ PackageModel . Platform : PlatformVersion ]
688+ derivedXCTestPlatformProvider : @escaping ( _ declared : PackageModel . Platform ) -> PlatformVersion ?
692689) -> SupportedPlatforms {
693690
694691 // the supported platforms as declared in the manifest
@@ -702,67 +699,9 @@ private func computePlatforms(
702699 )
703700 }
704701
705- // the derived platforms based on known minimum deployment target logic
706- var derivedPlatforms = [ SupportedPlatform] ( )
707-
708- /// Add each declared platform to the supported platforms list.
709- for platform in package . manifest. platforms {
710- let declaredPlatform = platformRegistry. platformByName [ platform. platformName]
711- ?? PackageModel . Platform. custom ( name: platform. platformName, oldestSupportedVersion: platform. version)
712- var version = PlatformVersion ( platform. version)
713-
714- if usingXCTest, let xcTestMinimumDeploymentTarget = xcTestMinimumDeploymentTargets [ declaredPlatform] , version < xcTestMinimumDeploymentTarget {
715- version = xcTestMinimumDeploymentTarget
716- }
717-
718- // If the declared version is smaller than the oldest supported one, we raise the derived version to that.
719- if version < declaredPlatform. oldestSupportedVersion {
720- version = declaredPlatform. oldestSupportedVersion
721- }
722-
723- let supportedPlatform = SupportedPlatform (
724- platform: declaredPlatform,
725- version: version,
726- options: platform. options
727- )
728-
729- derivedPlatforms. append ( supportedPlatform)
730- }
731-
732- // Find the undeclared platforms.
733- let remainingPlatforms = Set ( platformRegistry. platformByName. keys) . subtracting ( derivedPlatforms. map ( { $0. platform. name } ) )
734-
735- /// Start synthesizing for each undeclared platform.
736- for platformName in remainingPlatforms. sorted ( ) {
737- let platform = platformRegistry. platformByName [ platformName] !
738-
739- let minimumSupportedVersion : PlatformVersion
740- if usingXCTest, let xcTestMinimumDeploymentTarget = xcTestMinimumDeploymentTargets [ platform] , xcTestMinimumDeploymentTarget > platform. oldestSupportedVersion {
741- minimumSupportedVersion = xcTestMinimumDeploymentTarget
742- } else {
743- minimumSupportedVersion = platform. oldestSupportedVersion
744- }
745-
746- let oldestSupportedVersion : PlatformVersion
747- if platform == . macCatalyst, let iOS = derivedPlatforms. first ( where: { $0. platform == . iOS } ) {
748- // If there was no deployment target specified for Mac Catalyst, fall back to the iOS deployment target.
749- oldestSupportedVersion = max ( minimumSupportedVersion, iOS. version)
750- } else {
751- oldestSupportedVersion = minimumSupportedVersion
752- }
753-
754- let supportedPlatform = SupportedPlatform (
755- platform: platform,
756- version: oldestSupportedVersion,
757- options: [ ]
758- )
759-
760- derivedPlatforms. append ( supportedPlatform)
761- }
762-
763702 return SupportedPlatforms (
764703 declared: declaredPlatforms. sorted ( by: { $0. platform. name < $1. platform. name } ) ,
765- derived : derivedPlatforms . sorted ( by : { $0 . platform . name < $1 . platform . name } )
704+ derivedXCTestPlatformProvider : derivedXCTestPlatformProvider
766705 )
767706}
768707
@@ -886,7 +825,7 @@ private final class ResolvedTargetBuilder: ResolvedBuilder<ResolvedTarget> {
886825 var defaultLocalization : String ? = nil
887826
888827 /// The platforms supported by this package.
889- var platforms : SupportedPlatforms = . init( declared: [ ] , derived : [ ] )
828+ var platforms : SupportedPlatforms = . init( declared: [ ] , derivedXCTestPlatformProvider : . none )
890829
891830 init (
892831 target: Target ,
@@ -978,7 +917,7 @@ private final class ResolvedPackageBuilder: ResolvedBuilder<ResolvedPackage> {
978917 var defaultLocalization : String ? = nil
979918
980919 /// The platforms supported by this package.
981- var platforms : SupportedPlatforms = . init( declared: [ ] , derived : [ ] )
920+ var platforms : SupportedPlatforms = . init( declared: [ ] , derivedXCTestPlatformProvider : . none )
982921
983922 /// If the given package's source is a registry release, this provides additional metadata and signature information.
984923 var registryMetadata : RegistryReleaseMetadata ?
0 commit comments