Skip to content

feat: migrate to SceneDelegate#53744

Draft
artus9033 wants to merge 51 commits into
react:mainfrom
artus9033:feat/scene-delegate
Draft

feat: migrate to SceneDelegate#53744
artus9033 wants to merge 51 commits into
react:mainfrom
artus9033:feat/scene-delegate

Conversation

@artus9033

@artus9033 artus9033 commented Sep 11, 2025

Copy link
Copy Markdown
Contributor

Summary:

This PR introduces a migration from the now-deprecated iOS AppDelegate to SceneDelegate, as well as the changes to React Native code that will migrate to APIs allowing it to work fine with the SceneDelegate approach. There are two primary goals of this API:

  • feature: ability for users to leverage resizable windows feature on iPadOS in RN apps
  • stay ahead of the incoming changes, since AppDelegate is scheduled to be deleted in future releases of iOS

The changes are additive to RN and maintain backwards compatibility, but require user-space modifications to RN apps that want to migrate from AppDelegate to the scene lifecycle.

The RFC documenting the details is available here.

Follow-ups:

After merging this PR, the AppDelegate will be deprecated, but still available. After a future de-integration of AppDelegate, packages/react-native/Libraries/AppDelegate and contained files should be renamed.

Additional information

One capability that can be leveraged with the SceneDelegate on iPadOS is multi-window (multi-instance) support, which would cause all sorts of problems in the current React Native core and 3p libraries' designs. Therefore, enabling this capability is currently unsupported by React Native and to enforce this, a warning message like the one below would be printed provided this capability had been enabled:

image

Changelog:

[IOS] [ADDED] - SceneDelegate support with backwards compatibility to AppDelegate-only approaches
[IOS] [ADDED] - DeviceInfo to update the value returned by getConstants upon frame change
[IOS] [ADDED] - additional scheme: RNTester (AppDelegate), allowing to run RNTester with AppDelegate infrastructure
[IOS] [ADDED] - print warning from RCTReactNativeFactory if UIApplicationSceneManifest.UIApplicationSupportsMultipleScenes in Info.plist is set to true, which is unsupported by RN to prevent bugs due to simultaneously running multiple instances of an app

Test Plan:

  • Evaluate that RNTester works properly

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Sep 11, 2025
@artus9033 artus9033 changed the title Feat/scene delegate feat: migrate to SceneDelegate Sep 11, 2025
@react-native-bot

react-native-bot commented Nov 5, 2025

Copy link
Copy Markdown
Collaborator

Warnings
⚠️ ❗ JavaScript API change detected - This PR commits an update to ReactNativeApi.d.ts, indicating a change to React Native's public JavaScript API. Please include a clear changelog message. This change will be subject to extra review.

This change was flagged as: BREAKING

Generated by 🚫 dangerJS against 5aac7cd

@artus9033 artus9033 force-pushed the feat/scene-delegate branch 3 times, most recently from 40c091e to 5b4208c Compare November 13, 2025 11:54
@cipolleschi cipolleschi marked this pull request as ready for review February 4, 2026 11:10
@cipolleschi cipolleschi marked this pull request as draft February 4, 2026 11:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants