Skip to content

Commit 8af71a9

Browse files
authored
Fix use of XCTest minimum deployment target (#6504)
If the computed XCTest minimum deployment target is lower than the oldest supported version of a platform, we should not use it as the basis for deployment targets of test targets. This issue was actually also present in the tests which were written to expect the incorrect behavior of always preferring the XCTest minimum deployment target. rdar://108462045
1 parent 6905e30 commit 8af71a9

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

Sources/PackageGraph/PackageGraph+Loading.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ private func computePlatforms(
737737
let platform = platformRegistry.platformByName[platformName]!
738738

739739
let minimumSupportedVersion: PlatformVersion
740-
if usingXCTest, let xcTestMinimumDeploymentTarget = xcTestMinimumDeploymentTargets[platform] {
740+
if usingXCTest, let xcTestMinimumDeploymentTarget = xcTestMinimumDeploymentTargets[platform], xcTestMinimumDeploymentTarget > platform.oldestSupportedVersion {
741741
minimumSupportedVersion = xcTestMinimumDeploymentTarget
742742
} else {
743743
minimumSupportedVersion = platform.oldestSupportedVersion

Tests/PackageGraphTests/PackageGraphTests.swift

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2162,10 +2162,18 @@ class PackageGraphTests: XCTestCase {
21622162
let customXCTestMinimumDeploymentTargets = [
21632163
PackageModel.Platform.macOS: PlatformVersion("10.15"),
21642164
PackageModel.Platform.iOS: PlatformVersion("11.0"),
2165-
PackageModel.Platform.tvOS: PlatformVersion("11.0"),
2165+
PackageModel.Platform.tvOS: PlatformVersion("10.0"),
21662166
PackageModel.Platform.watchOS: PlatformVersion("4.0"),
21672167
]
21682168

2169+
let expectedPlatformsForTests = customXCTestMinimumDeploymentTargets.reduce(into: [Platform : PlatformVersion]()) { partialResult, entry in
2170+
if entry.value > entry.key.oldestSupportedVersion {
2171+
partialResult[entry.key] = entry.value
2172+
} else {
2173+
partialResult[entry.key] = entry.key.oldestSupportedVersion
2174+
}
2175+
}
2176+
21692177
do {
21702178
// One platform with an override.
21712179
let manifest = Manifest.createRootManifest(
@@ -2226,7 +2234,7 @@ class PackageGraphTests: XCTestCase {
22262234
result.checkTarget("test") { target in
22272235
var expected = expectedDerivedPlatforms
22282236
[PackageModel.Platform.macOS, .iOS, .tvOS, .watchOS].forEach {
2229-
expected[$0.name] = customXCTestMinimumDeploymentTargets[$0]?.versionString
2237+
expected[$0.name] = expectedPlatformsForTests[$0]?.versionString
22302238
}
22312239
target.checkDerivedPlatforms(expected)
22322240
target.checkDerivedPlatformOptions(.macOS, options: ["option1"])
@@ -2254,7 +2262,7 @@ class PackageGraphTests: XCTestCase {
22542262
result.checkProduct("multi-target") { product in
22552263
var expected = expectedDerivedPlatforms
22562264
[PackageModel.Platform.macOS, .iOS, .tvOS, .watchOS].forEach {
2257-
expected[$0.name] = customXCTestMinimumDeploymentTargets[$0]?.versionString
2265+
expected[$0.name] = expectedPlatformsForTests[$0]?.versionString
22582266
}
22592267
product.checkDerivedPlatforms(expected)
22602268
product.checkDerivedPlatformOptions(.macOS, options: ["option1"])
@@ -2358,7 +2366,7 @@ class PackageGraphTests: XCTestCase {
23582366
]
23592367

23602368
var expectedDerivedPlatforms = defaultDerivedPlatforms.merging(expectedDeclaredPlatforms, uniquingKeysWith: { lhs, rhs in rhs })
2361-
var expectedDerivedPlatformsForTests = defaultDerivedPlatforms.merging(customXCTestMinimumDeploymentTargets.map { ($0.name, $1.versionString) }, uniquingKeysWith: { lhs, rhs in rhs })
2369+
var expectedDerivedPlatformsForTests = defaultDerivedPlatforms.merging(expectedPlatformsForTests.map { ($0.name, $1.versionString) }, uniquingKeysWith: { lhs, rhs in rhs })
23622370
expectedDerivedPlatformsForTests["ios"] = expectedDeclaredPlatforms["ios"]
23632371

23642372
// Gets derived to be the same as the declared iOS deployment target.

0 commit comments

Comments
 (0)