From 63428fb2a26bba83c353df0d0929e5eff6f5e827 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Mon, 2 Dec 2019 14:44:52 -0600 Subject: [PATCH] Change to ensure that the app gets suspended when running too long during a background refresh. --- iOS/AppDelegate.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/iOS/AppDelegate.swift b/iOS/AppDelegate.swift index 11a941a3f..ac62fb6d0 100644 --- a/iOS/AppDelegate.swift +++ b/iOS/AppDelegate.swift @@ -301,12 +301,15 @@ private extension AppDelegate { } func suspendApplication() { + guard !isAnySceneInForeground else { return } + CoalescingQueue.standard.performCallsImmediately() for scene in UIApplication.shared.connectedScenes { if let sceneDelegate = scene.delegate as? SceneDelegate { sceneDelegate.suspend() } } + AccountManager.shared.saveAll() AccountManager.shared.suspendAll() } @@ -354,7 +357,6 @@ private extension AppDelegate { AccountManager.shared.resumeAll() } AccountManager.shared.refreshAll(errorHandler: ErrorHandler.log) { [unowned self] in - AccountManager.shared.saveAll() self.suspendApplication() os_log("Account refresh operation completed.", log: self.log, type: .info) task?.setTaskCompleted(success: true) @@ -363,6 +365,7 @@ private extension AppDelegate { // set expiration handler task.expirationHandler = { [weak task] in + self.suspendApplication() os_log("Accounts refresh processing terminated for running too long.", log: self.log, type: .info) task?.setTaskCompleted(success: false) }