From 8cb4230ea1458e35780a2f8911468dffb8d8e448 Mon Sep 17 00:00:00 2001 From: Anders Ha Date: Fri, 8 Nov 2024 20:05:05 +0000 Subject: [PATCH] VIT-7771: Fix deprioritized resources not making forward progress in some environments --- Sources/VitalHealthKit/HealthKit/AppStateTracker.swift | 9 ++++++--- .../VitalHealthKit/HealthKit/VitalHealthKitClient.swift | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Sources/VitalHealthKit/HealthKit/AppStateTracker.swift b/Sources/VitalHealthKit/HealthKit/AppStateTracker.swift index a2ef556d..285d2f5e 100644 --- a/Sources/VitalHealthKit/HealthKit/AppStateTracker.swift +++ b/Sources/VitalHealthKit/HealthKit/AppStateTracker.swift @@ -57,8 +57,10 @@ final class AppStateTracker { @objc func appDidFinishLaunching() { - if UIApplication.shared.applicationState == .background { - transition(to: .background) + // UIApplication.applicationState is always `.background` in this moment. + // Schedule a check on the next runloop iteration. + DispatchQueue.main.async { + self.powerStateDidChange() } } @@ -74,7 +76,8 @@ final class AppStateTracker { @objc func powerStateDidChange() { - transition(to: UIApplication.shared.applicationState == .background ? .background : .foreground) + let state = UIApplication.shared.applicationState + transition(to: state == .background ? .background : .foreground) } func transition(to newStatus: AppState.Status) { diff --git a/Sources/VitalHealthKit/HealthKit/VitalHealthKitClient.swift b/Sources/VitalHealthKit/HealthKit/VitalHealthKitClient.swift index cb84d33e..0bdd4873 100644 --- a/Sources/VitalHealthKit/HealthKit/VitalHealthKitClient.swift +++ b/Sources/VitalHealthKit/HealthKit/VitalHealthKitClient.swift @@ -474,7 +474,9 @@ extension VitalHealthKitClient { // OR has no sync attempt // OR has errored let lastStatus = resourceProgress.latestSync?.lastStatus - return lastStatus == nil || lastStatus == .error || lastStatus == .cancelled || lastStatus == .timedOut + + return lastStatus == nil || lastStatus == .error || lastStatus == .cancelled + || lastStatus == .timedOut || lastStatus == .started || lastStatus == .deprioritized } // Rescue these resources