diff --git a/Brief/Updater.swift b/Brief/Updater.swift index 1d75a09..30cae8e 100644 --- a/Brief/Updater.swift +++ b/Brief/Updater.swift @@ -3,11 +3,11 @@ import Combine public protocol UpdaterProtocol: ObservableObject { - var update: Release? { get } + @MainActor var update: Release? { get } } -public class Updater: ObservableObject, UpdaterProtocol { +@MainActor public class Updater: ObservableObject, UpdaterProtocol { @Published public var update: Release? @@ -19,28 +19,28 @@ public class Updater: ObservableObject, UpdaterProtocol { self.currentVersion = currentVersion if checkOnLaunch { // Don't do a launch check if the user hasn't seen the setup prompt explaining updater yet. - checkForUpdates() + Task { await checkForUpdates() } } let timer = Timer.scheduledTimer(withTimeInterval: 60*60*24, repeats: true) { _ in - self.checkForUpdates() + Task { await self.checkForUpdates() } } timer.tolerance = 60*60 } - public func checkForUpdates() { - URLSession.shared.dataTask(with: Constants.updateURL) { data, _, _ in - guard let data = data else { return } - guard let releases = try? JSONDecoder().decode([Release].self, from: data) else { return } - self.evaluate(releases: releases) - }.resume() + public func checkForUpdates() async { + guard let (data, _) = try? await URLSession.shared.data(from: Constants.updateURL) else { return } + guard let releases = try? JSONDecoder().decode([Release].self, from: data) else { return } + evaluate(releases: releases) } public func ignore(release: Release) { guard !release.critical else { return } defaults.set(true, forKey: release.name) - DispatchQueue.main.async { - self.update = nil - } + update = release + } + + @MainActor private func setRelease(release: Release) { + update = release } } @@ -57,9 +57,7 @@ extension Updater { guard !release.prerelease else { return } let latestVersion = SemVer(release.name) if latestVersion > currentVersion { - DispatchQueue.main.async { - self.update = release - } + setRelease(release: release) } } diff --git a/Secretive.xcodeproj/project.pbxproj b/Secretive.xcodeproj/project.pbxproj index c458f90..dba37d4 100644 --- a/Secretive.xcodeproj/project.pbxproj +++ b/Secretive.xcodeproj/project.pbxproj @@ -1241,7 +1241,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -1296,7 +1296,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -1637,7 +1637,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES;