I'm finding it extraordinarily difficult to categorize and account for what events I get (or don't get) when the user swipes my app up in the app switcher on iOS 13. This seems to be because of changes caused by the multiple scene support. What are the events that I get in that situation?
Apple has warned that swiping the apps on your iPhone closed could actually be damaging to its battery. The tech giant commented on recent reports that closing all your apps in this way can impact the function of your iPhone, confirming that this is actually true.
Follow these steps if your iPhone has a physical Home button with Touch ID: Double-click the Home button to access the App Switcher. Swipe side to side to find the apps you want to close. To close multiple apps, use multiple fingers to tap and hold several app previews.
Multitask. Swipe up from the bottom of the screen and pause. If you're in an app, swipe right along the bottom edge of the screen to switch to another app.
To open Control Center, swipe up from the bottom edge of any screen. To close Control Center, tap the top of the screen or press the Home button.
Let's assume that your app supports window scenes. So what the user is swiping up in the app switcher is really a scene, not your app as a whole. Then the possibilities appear to be as follows.
If the scene was frontmost:
sceneDidEnterBackground
applicationWillTerminate(_:)
But if the scene was not frontmost, you'll get nothing; you already received sceneDidEnterBackground
, and you won't get applicationWillTerminate(_:)
now because the app isn't running.
If the scene was frontmost:
sceneDidDisconnect(_:)
application(_:didDiscardSceneSessions:)
applicationWillTerminate(_:)
But if the scene was not frontmost, you'll get nothing; you already received sceneDidEnterBackground
, and you won't get applicationWillTerminate(_:)
now because the app isn't running.
If the scene was frontmost:
sceneDidEnterBackground
applicationWillTerminate(_:)
(perhaps)But if the scene was not frontmost, you'll get nothing; you already received sceneDidEnterBackground
, and you won't get applicationWillTerminate(_:)
now because either the app isn't running or the app isn't terminating (if there's another window). If the app is still running, you might get sceneDidDisconnect(_:)
and possibly application(_:didDiscardSceneSessions:)
later.
What's the odd-man-out here? It's the case where we're running on an iPad and we support scenes but not multiple windows. We don't get sceneDidEnterBackground
! I regard that as incoherent. Since we don't support multiple windows, this is basically an iPhone app and it should behave like an iPhone app. I shouldn't have to double up my code just because my app runs on both iPhone and iPad.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With