UIScene life cycle is required for apps built with this SDK
What it means. Built with the iOS 27 SDK (Xcode 27), an app that has not adopted the UIKit scene life cycle stops right at launch:
Application failed to launch: UIScene life cycle is required for apps built with this SDK.
Apple announced it in TN3187: from the first major release after iOS 26, building with the latest SDK requires the scene life cycle. The check depends on the SDK you build with, not the user's iOS version. The same app built with Xcode 26 still runs on iOS 27, so the problem only shows up when you move to Xcode 27. App Store Connect requires the iOS 27 SDK for uploads from April 2027.
Have you adopted it? You have if your Info.plist has a UIApplicationSceneManifest with scene configurations, or your app delegate implements application(_:configurationForConnecting:options:). A manifest that only sets UIApplicationSupportsMultipleScenes does not count.
React Native. 0.88 is the first release whose template adopts it. Its SceneDelegate.swift starts React Native in the window scene, and Info.plist names it in the scene manifest. React Native 0.87 and earlier have no scene support in the template. Upgrade, then copy both from the Upgrade Helper.
Expo. On SDK 57, opt in with expo 57.0.23+ and expo-build-properties 57.0.20+:
["expo-build-properties", { "ios": { "enableSceneSupport": true } }]
Then run prebuild again. SDK 58 has it by default. SDK 56 and earlier need an upgrade.
Two things break after the move.
- Deep links and universal links stop reaching
AppDelegate. Forwardscene(_:openURLContexts:)andscene(_:continue:)toRCTLinkingManagerinSceneDelegate, and pass the connection options to React Native so links that launch the app arrive too. The 0.88 template does both. - Libraries that read the window from the app delegate crash. The 0.88 template's
AppDelegatehas nowindow. We reproduced-[AppDelegate window]: unrecognized selector sent to instanceon that template with react-native-blob-util and react-native-google-mobile-ads, and the same Objective-C call is in about a dozen popular packages, including @react-native-firebase/messaging at launch. Until they are fixed, keepvar window: UIWindow?inAppDelegateand set it fromSceneDelegate.
How common it is. 583 of the 628 open-source React Native and Expo apps with an iOS target in our scan (11 October 2026) have not adopted it yet. npx nativekeel reports it, the links that still go to AppDelegate, and the installed libraries that read the app delegate's window. A longer walkthrough, with the 15 libraries that crash after the move and the deep-link pitfall, is on dev.to.
npx nativekeel