mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2026-03-25 08:55:46 +00:00
Fix bug where adjusted versions weren't used to look up AvailableXcodes
This commit is contained in:
parent
baa8491786
commit
faad4c2ab7
2 changed files with 30 additions and 8 deletions
|
|
@ -384,16 +384,15 @@ class AppState: ObservableObject {
|
|||
}
|
||||
|
||||
// Map all of the available versions into Xcode values that join available and installed Xcode data for display.
|
||||
allXcodes = allAvailableXcodeVersions
|
||||
.sorted(by: >)
|
||||
.map { availableXcodeVersion in
|
||||
allXcodes = zip(allAvailableXcodeVersions, availableXcodes)
|
||||
.sorted(by: { $0.0 > $1.0 })
|
||||
.map { availableXcodeVersion, availableXcode in
|
||||
let installedXcode = installedXcodes.first(where: { installedXcode in
|
||||
// Checking equality for Xcode Releases version
|
||||
availableXcodeVersion == installedXcode.version ||
|
||||
// Check more carefully for Apple version
|
||||
availableXcodeVersion.isEquivalentForDeterminingIfInstalled(toInstalled: installedXcode.version)
|
||||
})
|
||||
let availableXcode = availableXcodes.first { $0.version == availableXcodeVersion }
|
||||
|
||||
// If the existing install state is "installing", keep it
|
||||
let existingXcodeInstallState = allXcodes.first { $0.version == availableXcodeVersion && $0.installing }?.installState
|
||||
|
|
@ -406,10 +405,10 @@ class AppState: ObservableObject {
|
|||
selected: installedXcode != nil && selectedXcodePath?.hasPrefix(installedXcode!.path.string) == true,
|
||||
path: installedXcode?.path.string,
|
||||
icon: (installedXcode?.path.string).map(NSWorkspace.shared.icon(forFile:)),
|
||||
requiredMacOSVersion: availableXcode?.requiredMacOSVersion,
|
||||
releaseNotesURL: availableXcode?.releaseNotesURL,
|
||||
sdks: availableXcode?.sdks,
|
||||
compilers: availableXcode?.compilers
|
||||
requiredMacOSVersion: availableXcode.requiredMacOSVersion,
|
||||
releaseNotesURL: availableXcode.releaseNotesURL,
|
||||
sdks: availableXcode.sdks,
|
||||
compilers: availableXcode.compilers
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,4 +65,27 @@ class AppStateUpdateTests: XCTestCase {
|
|||
XCTAssertEqual(subject.allXcodes[0].selected, false)
|
||||
XCTAssertEqual(subject.allXcodes[0].path, "/Applications/Xcode-0.0.0.app")
|
||||
}
|
||||
|
||||
func testAdjustedVersionsAreUsedToLookupAvailableXcode() throws {
|
||||
subject.allXcodes = [
|
||||
]
|
||||
|
||||
subject.updateAllXcodes(
|
||||
availableXcodes: [
|
||||
// Note "GM" prerelease identifier
|
||||
AvailableXcode(version: Version("0.0.0-GM+ABC123")!, url: URL(string: "https://apple.com/xcode.xip")!, filename: "mock.xip", releaseDate: nil, sdks: .init(iOS: .init("14.3")))
|
||||
],
|
||||
installedXcodes: [
|
||||
InstalledXcode(path: Path("/Applications/Xcode-0.0.0.app")!)!
|
||||
],
|
||||
selectedXcodePath: nil
|
||||
)
|
||||
|
||||
XCTAssertEqual(subject.allXcodes[0].version, Version("0.0.0+ABC123")!)
|
||||
XCTAssertEqual(subject.allXcodes[0].installState, .installed)
|
||||
XCTAssertEqual(subject.allXcodes[0].selected, false)
|
||||
XCTAssertEqual(subject.allXcodes[0].path, "/Applications/Xcode-0.0.0.app")
|
||||
// XCModel types aren't equatable, so just check for non-nil for now
|
||||
XCTAssertNotNil(subject.allXcodes[0].sdks)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue