@@ -48,7 +48,7 @@ class AppState: ObservableObject {
4848 }
4949 updateAllXcodes (
5050 availableXcodes: newValue,
51- installedXcodes: Current . files . installedXcodes ( Path . installDirectory ) ,
51+ installedXcodes: installedXcodes,
5252 selectedXcodePath: selectedXcodePath
5353 )
5454 }
@@ -61,11 +61,12 @@ class AppState: ObservableObject {
6161 willSet {
6262 updateAllXcodes (
6363 availableXcodes: availableXcodes,
64- installedXcodes: Current . files . installedXcodes ( Path . installDirectory ) ,
64+ installedXcodes: installedXcodes,
6565 selectedXcodePath: newValue
6666 )
6767 }
6868 }
69+ private var installedXcodes : [ InstalledXcode ] = [ ]
6970 @Published var updateTask : Task < Void , Never > ?
7071 var updateTaskID : UUID ?
7172 var isUpdating : Bool { updateTask != nil }
@@ -228,6 +229,9 @@ class AppState: ObservableObject {
228229 guard !isTesting else { return }
229230 try ? loadCachedAvailableXcodes ( )
230231 try ? loadCacheDownloadableRuntimes ( )
232+ Task { @MainActor in
233+ await updateInstalledXcodesAsync ( )
234+ }
231235 helperStatusTask = Task { @MainActor in
232236 await checkIfHelperIsInstalled ( )
233237 helperStatusTask = nil
@@ -855,6 +859,24 @@ class AppState: ObservableObject {
855859 }
856860 }
857861
862+ @discardableResult
863+ func updateInstalledXcodesAsync( recomposeAllXcodes: Bool = true ) async -> [ InstalledXcode ] {
864+ let installDirectory = Path . installDirectory
865+ let files = Current . files
866+ let installedXcodes = await Task . detached ( priority: . userInitiated) {
867+ files. installedXcodes ( installDirectory)
868+ } . value
869+
870+ self . installedXcodes = installedXcodes
871+ if recomposeAllXcodes {
872+ updateAllXcodes (
873+ availableXcodes: availableXcodes,
874+ installedXcodes: installedXcodes,
875+ selectedXcodePath: selectedXcodePath
876+ )
877+ }
878+ return installedXcodes
879+ }
858880
859881 // MARK: - Private
860882
0 commit comments