diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index e302307..da38798 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -464,10 +464,13 @@ class AppState: ObservableObject { }) let identicalBuilds: [Version] - let availableXcodesWithIdenticalBuildIdentifiers = availableXcodes - .filter({ $0.version.buildMetadataIdentifiers == availableXcode.version.buildMetadataIdentifiers }) - if availableXcodesWithIdenticalBuildIdentifiers.count > 1, availableXcode.version.prereleaseIdentifiers.isEmpty { - identicalBuilds = availableXcodesWithIdenticalBuildIdentifiers.map(\.version) + let prereleaseAvailableXcodesWithIdenticalBuildIdentifiers = availableXcodes + .filter { + $0.version.buildMetadataIdentifiers == availableXcode.version.buildMetadataIdentifiers && !$0.version.prereleaseIdentifiers.isEmpty + } + // If this is the release version, add the identical builds to it + if !prereleaseAvailableXcodesWithIdenticalBuildIdentifiers.isEmpty, availableXcode.version.prereleaseIdentifiers.isEmpty { + identicalBuilds = [availableXcode.version] + prereleaseAvailableXcodesWithIdenticalBuildIdentifiers.map(\.version) } else { identicalBuilds = [] } diff --git a/XcodesTests/AppStateUpdateTests.swift b/XcodesTests/AppStateUpdateTests.swift index 0d95edb..616e460 100644 --- a/XcodesTests/AppStateUpdateTests.swift +++ b/XcodesTests/AppStateUpdateTests.swift @@ -148,6 +148,32 @@ class AppStateUpdateTests: XCTestCase { XCTAssertEqual(subject.allXcodes.map(\.identicalBuilds), [[Version("12.4.0+12D4e")!, Version("12.4.0-RC+12D4e")!]]) } + func testIdenticalBuilds_DoNotMergeReleaseVersions() { + Current.defaults.string = { key in + if key == "dataSource" { + return "xcodeReleases" + } else { + return nil + } + } + + subject.allXcodes = [ + ] + + subject.updateAllXcodes( + availableXcodes: [ + AvailableXcode(version: Version("3.2.3+10M2262")!, url: URL(string: "https://apple.com/xcode.xip")!, filename: "mock.xip", releaseDate: nil), + AvailableXcode(version: Version("3.2.3+10M2262")!, url: URL(string: "https://apple.com/xcode.xip")!, filename: "mock.xip", releaseDate: nil), + ], + installedXcodes: [ + ], + selectedXcodePath: nil + ) + + XCTAssertEqual(subject.allXcodes.map(\.version), [Version("3.2.3+10M2262")!, Version("3.2.3+10M2262")!]) + XCTAssertEqual(subject.allXcodes.map(\.identicalBuilds), [[], []]) + } + func testIdenticalBuilds_KeepsReleaseVersion_WithPrereleaseInstalled() { Current.defaults.string = { key in if key == "dataSource" {