@@ -1102,6 +1102,52 @@ final class XcodesKitTests: XCTestCase {
11021102 ] )
11031103 }
11041104
1105+ func testXcodeListServiceFiltersIdenticalBuildsToMatchingArchitectureVariant( ) throws {
1106+ let universalRelease = AvailableXcode (
1107+ version: try XCTUnwrap ( Version ( " 26.5.0+17F42 " ) ) ,
1108+ url: try XCTUnwrap ( URL ( string: " https://apple.com/xcode-universal.xip " ) ) ,
1109+ filename: " mock-universal.xip " ,
1110+ releaseDate: nil ,
1111+ architectures: [ . arm64, . x86_64]
1112+ )
1113+ let appleSiliconRelease = AvailableXcode (
1114+ version: try XCTUnwrap ( Version ( " 26.5.0+17F42 " ) ) ,
1115+ url: try XCTUnwrap ( URL ( string: " https://apple.com/xcode-arm64.xip " ) ) ,
1116+ filename: " mock-arm64.xip " ,
1117+ releaseDate: nil ,
1118+ architectures: [ . arm64]
1119+ )
1120+ let universalPrerelease = AvailableXcode (
1121+ version: try XCTUnwrap ( Version ( " 26.5.0-Release.Candidate+17F42 " ) ) ,
1122+ url: try XCTUnwrap ( URL ( string: " https://apple.com/xcode-rc-universal.xip " ) ) ,
1123+ filename: " mock-rc-universal.xip " ,
1124+ releaseDate: nil ,
1125+ architectures: [ . arm64, . x86_64]
1126+ )
1127+ let appleSiliconPrerelease = AvailableXcode (
1128+ version: try XCTUnwrap ( Version ( " 26.5.0-Release.Candidate+17F42 " ) ) ,
1129+ url: try XCTUnwrap ( URL ( string: " https://apple.com/xcode-rc-arm64.xip " ) ) ,
1130+ filename: " mock-rc-arm64.xip " ,
1131+ releaseDate: nil ,
1132+ architectures: [ . arm64]
1133+ )
1134+ let xcodes = [
1135+ universalRelease,
1136+ appleSiliconRelease,
1137+ universalPrerelease,
1138+ appleSiliconPrerelease
1139+ ]
1140+
1141+ XCTAssertEqual ( XcodeListService . identicalBuildIDs ( for: universalRelease, in: xcodes) , [
1142+ universalRelease. xcodeID,
1143+ universalPrerelease. xcodeID
1144+ ] )
1145+ XCTAssertEqual ( XcodeListService . identicalBuildIDs ( for: appleSiliconRelease, in: xcodes) , [
1146+ appleSiliconRelease. xcodeID,
1147+ appleSiliconPrerelease. xcodeID
1148+ ] )
1149+ }
1150+
11051151 func testXcodeListServiceValidatesDeveloperDownloads( ) async throws {
11061152 let downloads = Downloads (
11071153 resultCode: 0 ,
0 commit comments