Skip to content

chore: upgrade the apps to React Native 0.88.0-rc.2 and adopt the scene lifecycle - #10650

Merged
pawicao merged 3 commits into
mainfrom
@pawicao/scene-delegate-example
Sep 22, 2026
Merged

pawicao merged 3 commits into
mainfrom
@pawicao/scene-delegate-example

Conversation

@pawicao

@pawicao pawicao commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Note

This pull request was authored by AI on behalf of @pawicao.

Summary

React Native 0.88.0-rc.2 is out, and it moves the app startup from the app delegate to a scene delegate. I bumped react-native and every pinned @react-native/* package from 0.88.0-rc.1 to 0.88.0-rc.2 in the root workspace, in both library packages and in the common-app, fabric-example, next-example and web-example apps, then refreshed yarn.lock and the fabric-example Podfile.lock. I moved the React Native startup of fabric-example out of AppDelegate.swift into a new SceneDelegate.swift and declared the scene in Info.plist, as the upgrade helper and the template pull request show. The new scene delegate keeps three parts of the old app delegate that the template does not have: the RUNTIME_TESTS module name and bundle URL, the experimental release level, and the sourceURL(for:) override that the old app delegate also had.

The second commit raises the fabric-example deployment target from 13.4 to 15.1. That change is not in the upgrade diff, so it is a commit of its own: Xcode 27 does not accept 13.4, and the template already uses 15.1.

The third commit moves the Bundle Mode Metro patches from Metro 0.87.0 to 0.87.1, because rc.2 raises the minimum Metro version to 0.87.1 (release notes). Metro 0.87.1 rewrote DependencyGraph.js, so I re-applied the metro patch by hand; the metro-runtime patch applied unchanged. I added copies of both patches to packages/react-native-worklets/bundleMode/patches next to the older versions.

macos-example and tvos-example keep their pins, because they follow react-native-macos and react-native-tvos. Their Podfile.lock files also changed when I ran yarn build-apps, but only in the RNReanimated, RNWorklets and hermes-engine checksums. Those checksums follow the IS_REANIMATED_PROFILING, IS_WORKLETS_PROFILING and RCT_HERMES_V1_ENABLED environment variables, so the change comes from my shell and not from this upgrade. I reverted both files.

Test plan

  • yarn build-packages, yarn workspace react-native-reanimated type:check, yarn workspace react-native-reanimated lint:js, yarn workspace react-native-worklets type:check, yarn workspace react-native-reanimated validate-peers and yarn format:md all pass.
  • With a fresh --reset-cache Metro 0.87.1, both apps load in Bundle Mode, the .worklets chunks are regenerated, and a Fast Refresh replaces a screen's text on Android without a reload.
  • fabric-example builds with Xcode 27.1 and with Gradle, and starts on an iPhone Duo simulator and on a Pixel 9 Pro Fold emulator. The examples list shows, an example screen opens, and the iOS device log has no exception, no Terminating and no unrecognized selector.

Changelog

  • I added an entry to the Unpublished section of each changed package's CHANGELOG.md, or this PR does not change react-native-reanimated or react-native-worklets.

@coderabbitai

coderabbitai Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: 9abbc5b8-c255-43d3-a5ad-63bff4ecd23a

📥 Commits

Reviewing files that changed from the base of the PR and between 2c6b844 and 7145d90.

⛔ Files ignored due to path filters (4)
  • .yarn/patches/metro-npm-0.87.1-4800af9fce.patch is excluded by !**/.yarn/**
  • .yarn/patches/metro-runtime-npm-0.87.1-bd2143c917.patch is excluded by !**/.yarn/**
  • apps/fabric-example/ios/Podfile.lock is excluded by !**/*.lock
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (2)
  • packages/react-native-reanimated/CHANGELOG.md
  • packages/react-native-worklets/CHANGELOG.md

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: 82263058-7085-4a64-abc4-90283dfed409

📥 Commits

Reviewing files that changed from the base of the PR and between 6e05742 and 40b3d8e.

⛔ Files ignored due to path filters (4)
  • .yarn/patches/metro-npm-0.87.1-4800af9fce.patch is excluded by !**/.yarn/**
  • .yarn/patches/metro-runtime-npm-0.87.1-bd2143c917.patch is excluded by !**/.yarn/**
  • apps/fabric-example/ios/Podfile.lock is excluded by !**/*.lock
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (1)
  • scripts/patches/resolutions.patch

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The FabricExample iOS app now uses SceneDelegate for React Native startup, runtime-test selection, bundle resolution, and URL or user-activity forwarding. AppDelegate retains only launch success handling. Info.plist registers the scene delegate and disables multiple scenes. The Xcode project compiles the new file and raises the deployment target to iOS 15.1. React Native dependencies move from 0.88.0-rc.1 to 0.88.0-rc.2. Metro 0.87.1 Bundle Mode patches are added. Changelogs record these updates.

Priority: ➖ Normal

Change: Other

Merge Risk: 🟠 High · up to 40b3d

The Metro 0.87.1 Worklets patch may prevent affected apps from bundling because it references an undefined path helper. Correct the patch before merging.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the two main changes: upgrading the apps to React Native 0.88.0-rc.2 and adopting the iOS scene lifecycle.
Description check ✅ Passed The description directly explains the React Native upgrade, iOS scene lifecycle migration, Metro patch updates, deployment target change, and reported validation results.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pawicao
pawicao force-pushed the @pawicao/scene-delegate-example branch from 96b7e25 to c2e6591 Compare September 22, 2026 11:08
@pawicao pawicao changed the title chore: migrate fabric-example iOS to the scene lifecycle chore: upgrade the apps to React Native 0.88.0-rc.2 and adopt the scene lifecycle Sep 22, 2026
@pawicao
pawicao added this pull request to stack #10660 September 22, 2026 11:36
@pawicao
pawicao force-pushed the @pawicao/scene-delegate-example branch from 6e05742 to 40b3d8e Compare September 22, 2026 13:08
@pawicao
pawicao marked this pull request as ready for review September 22, 2026 13:09
@pawicao
pawicao requested review from tjzel and tomekzaw September 22, 2026 13:09
@pawicao
pawicao force-pushed the @pawicao/scene-delegate-example branch from 40b3d8e to 2c6b844 Compare September 22, 2026 13:42
Mirrors the 0.88.0-rc.1 to 0.88.0-rc.2 upgrade diff: the dependency
pins, the lockfiles, and the move of the React Native startup from the
app delegate to a scene delegate.
Xcode 27 does not accept iOS 13.4. The React Native template already
uses 15.1.
React Native 0.88.0-rc.2 raises the minimum Metro version to 0.87.1. The
DependencyGraph hook moved with the file's rewrite in 0.87.1; the
metro-runtime patch applied unchanged.
@pawicao
pawicao force-pushed the @pawicao/scene-delegate-example branch from 2c6b844 to 7145d90 Compare September 22, 2026 13:46
@pawicao
pawicao merged commit bd31388 into main Sep 22, 2026
7 of 8 checks passed
@pawicao
pawicao deleted the @pawicao/scene-delegate-example branch September 22, 2026 13:47
pawicao added a commit that referenced this pull request Sep 22, 2026
#10642)

> [!NOTE]
> This pull request was authored by AI on behalf of @pawicao.

## Summary

Every pull request that changed a package edited the same `##
Unpublished` section, so pull requests conflicted with each other. I
moved unreleased entries into one file per pull request in
`packages/<pkg>/changelog/` and left `CHANGELOG.md` with released
versions only. A fragment holds only the entry text, because the release
script reads the pull request number from the squash commit that added
the file and asks GitHub for the author. I added `changelog:add` and
`changelog:squash` to both package workspaces, the first to write a
fragment and the second to move the fragments into `CHANGELOG.md`, and I
rewrote `changelog-check` to validate fragments. I added fragments for
#10584, #10632, #10587, #10629 and #10650, which merged to `main` after
the 4.7.0 cut, and removed their lines from `CHANGELOG.md`.

## How we use the changelog from now on

- **In a pull request:** run `yarn workspace <pkg> changelog:add --type
<breaking|feature|fix|other> --message '<One sentence>'`, or write
`packages/<pkg>/changelog/<slug>.<type>.md` by hand. The script writes
into the package of the workspace, and the slug defaults to the branch
name. Do not write the pull request link or the author, and do not edit
`CHANGELOG.md`.
- **To read the unpublished entries:** `yarn workspace <pkg>
changelog:squash` prints them and changes no file.
- **In a release pull request on the stable branch:** `yarn workspace
<pkg> changelog:squash x.y.z` writes the `## x.y.z — <date>` section and
deletes the fragments.
- **In the post-release pull request on `main`:** `yarn workspace <pkg>
changelog:squash x.y.0 --date <release date> --cut origin/x.y-stable`
does the same, but leaves the fragments that came to `main` after the
stable branch was cut.
- **Cherry-picks:** the fragment comes with the cherry-pick, and the
first `(#N)` in the commit subject still points to the original pull
request.
- **When the script cannot resolve an entry:** add a `pr: <number>` or a
`by: @user1, @user2` line to the fragment. `by:` always takes
precedence.
- `changelog-check` needs a new fragment for each changed package. It
rejects edits of `CHANGELOG.md` and deleted fragments, unless the pull
request changes the package `version`, which marks a release or
post-release pull request.

## Test plan

`yarn test:scripts` passes. I also ran the three scripts in scratch
repositories with real squash merges, and the author lookup against
GitHub.

`changelog-check` fails on this pull request, because it removes the `##
Unpublished` section from both `CHANGELOG.md` files and does not change
a `version`. This is expected and happens only for this migration.

## Changelog

- [x] I added a changelog fragment with `yarn changelog:add` for each
changed package, or this PR does not change `react-native-reanimated` or
`react-native-worklets`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants