Opting into dark mode does not get picked up by app update

Our app has previously not supported dark mode and we had the "Appearance" entry in our Info.plist set to "Light".

We are now about to release an update that enables dark mode support. To enable this we have:

  • Added a preference to our app's settings screen that lets users choose between System, Light and Dark options.
  • Based on the user's preference, we set the entire app's preferred color scheme using the SwiftUI .preferedColorScheme modifier on our root view.
  • Removed the "Appearance" entry from our Info.plist

This is all tested and working in our local development builds. We are now testing out the app for release using an internal TestFlight build and we've run into a problem - after initially updating the app, it does not seem to detect the change to the Info.plist and the app remains in light mode even if you change the preferred colour scheme.

If you force quite the app from the app switched and re-launch it, the colour scheme preference starts working as expected.

This is going to be an issue for our users because when they update the app it is going to look like the new color scheme setting does not work. Having to ask customers to force quit the app from the app switcher is not really an acceptable workaround.

I'm not sure this is specifically tied to the app process being killed because I would expect that to happen anyway when the app is updated. I'm wondering if this is related to the system caching the UISceneSession for the app and the act of force killing it from the app switcher is what causes the cached session to be created.

Is this a known issue and is there any way to solve this?

A few things I've tried and a few more observations:

  • Re-adding Appearance to the Info.plist with a value of "Automatic" does not fix the issue.
  • Updating from previous version to new version doesn't work. Downgrading back to previous version and then updating to new version again does cause the change to be picked up.
  • Updating from one build of the new version to another build of the new version also seems to cause the change to be picked up.
  • Giving WindowGroup an explicit id to see if that causes the session to be rebuilt - this does not work either.
Opting into dark mode does not get picked up by app update
 
 
Q