diff --git a/Xcodes/Backend/AppState+Install.swift b/Xcodes/Backend/AppState+Install.swift index 8f3650e..ccf637d 100644 --- a/Xcodes/Backend/AppState+Install.swift +++ b/Xcodes/Backend/AppState+Install.swift @@ -43,7 +43,10 @@ extension AppState { Logger.appState.info("Using \(downloader) downloader") - return self.getXcodeArchive(installationType, downloader: downloader) + return validateSession() + .flatMap { _ in + self.getXcodeArchive(installationType, downloader: downloader) + } .flatMap { xcode, url -> AnyPublisher in self.installArchivedXcode(xcode, at: url) } @@ -93,15 +96,12 @@ extension AppState { } private func downloadXcode(availableXcode: AvailableXcode, downloader: Downloader) -> AnyPublisher<(AvailableXcode, URL), Error> { - return validateADCSession(path: availableXcode.downloadPath) - .flatMap { _ in - return self.downloadOrUseExistingArchive(for: availableXcode, downloader: downloader, progressChanged: { [unowned self] progress in - DispatchQueue.main.async { - self.setInstallationStep(of: availableXcode.version, to: .downloading(progress: progress)) - } - }) - .map { return (availableXcode, $0) } - } + self.downloadOrUseExistingArchive(for: availableXcode, downloader: downloader, progressChanged: { [unowned self] progress in + DispatchQueue.main.async { + self.setInstallationStep(of: availableXcode.version, to: .downloading(progress: progress)) + } + }) + .map { return (availableXcode, $0) } .eraseToAnyPublisher() } diff --git a/Xcodes/Backend/AppState.swift b/Xcodes/Backend/AppState.swift index a098642..bf25352 100644 --- a/Xcodes/Backend/AppState.swift +++ b/Xcodes/Backend/AppState.swift @@ -381,7 +381,7 @@ class AppState: ObservableObject { case .apple: install(id: id) case .xcodeReleases: - installWithoutLogin(id: id) + install(id: id) } } @@ -454,6 +454,7 @@ class AppState: ObservableObject { } /// Skips using the username/password to log in to Apple, and simply gets a Auth Cookie used in downloading + /// As of Nov 2022 this was returning a 403 forbidden func installWithoutLogin(id: Xcode.ID) { guard let availableXcode = availableXcodes.first(where: { $0.version == id }) else { return }