Hello,
I'm investigating a crash where keyWindow is nil when I don't expect it to be nil.
I would like to understand when this can happen. Indeed,I could make a fix by guarding for nil values, but this would lead to an invalid state.
Context
We want to return quickly from application(didFinishLaunchingWithOptions:), so:
We set a view controller as a splash screen rootViewController => we mark the window with makeKeyAndVisible().
We queue initializations asynchronously on the main queue.
=> Basically, while the app is initializing starting, we're displaying a splash screen view controller.
When the app is done initializing, it needs to present the actual UI. A last asynchronous task on the main queue does this. We get keyWindow from UIApplication to set the new view controller with the actual UI. That's where we assume that it shouldn't be nil and force-unwrap it, but alas, in some instances it's nil.
Misc
This crash only happens when app built with Xcode 13.x, running on iOS 15.
I cannot reproduce this bug, and it has fairly little occurrence. (100s over 100000 of sessions)
I also attached a sample crash
Questions
Given that I made the window "key and visible" in step 1, what could cause the window to stop becoming "key".
What would be the correct way to get the window to set the new root view controller ?
I don't really want to guard against a nil value because then it means that I wouldn't be able to set my new rootViewController and the app would be stuck on the launch screen.
2021-12-01_18-16-29.7629_-0700-9b5855582b13262f154acae64dd3140ad49c84f3.crash
Thanks a lot!
Bruno
4
0
11k