Is a scene always connected when a UIScene app is launched in the background (silent push, BGTask, background URLSession)?

Hello,

We are migrating a large UIKit app from the app-delegate lifecycle to the UIScene lifecycle. (Building with Xcode 27 / iOS 27 SDK, our non-scene app crashes at launch with EXC_BREAKPOINT in _UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption.) Our startup work runs from application(_:didFinishLaunchingWithOptions:), and we need to know what is guaranteed for background launches.

Observed (iPhone 15 Pro, iOS 27.2, app built with Xcode 26.3; also iOS 17.5 simulator):

  1. Non-scene build, launched by a content-available push: launchOptions contained UIApplicationLaunchOptionsRemoteNotificationKey. applicationDidEnterBackground was not called during the background run.
  2. Non-scene build, launched by a BGProcessingTask: launchOptions empty. applicationDidEnterBackground was not called; the first lifecycle callback was applicationWillEnterForeground when the user opened the app 8 minutes later.
  3. Scene build, launched by a BGProcessingTask and by a content-available push: scene(_:willConnectTo:options:) was called 0.15-0.2 s after didFinishLaunching while applicationState == .background (activationState .unattached). connectionOptions had no notificationResponse, URL or shortcut item. In the push launch, scene(_:willConnectTo:options:) was called 37 ms before application(_:didReceiveRemoteNotification:fetchCompletionHandler:). sceneWillEnterForeground / sceneDidEnterBackground were not called before the process was suspended.
  4. Scene build, background URLSession relaunch (simulator): the scene also connected right after didFinishLaunching in the background, 6 ms before application(_:handleEventsForBackgroundURLSession:completionHandler:).

Question: For a UIScene-based app that the system launches directly into the background (content-available push, BGTaskScheduler task, background URLSession events), is it guaranteed that UIKit connects a scene session (scene(_:willConnectTo:options:)) before the user opens the app, or can a background launch run with no connected scene until the app comes to the foreground? In the same launches, can sceneDidEnterBackground (or applicationDidEnterBackground in a non-scene app) be called for a process that never entered the foreground?

Please point us to documentation that describes the guaranteed callbacks and their order for background launches.

Thank you.