From 4346c52f9339870df7d91617cf1bc32ba403ffb2 Mon Sep 17 00:00:00 2001 From: Ray Date: Wed, 20 May 2026 20:42:05 -0400 Subject: [PATCH] feat(react-native): add pr56912 hermes always_out_of_date patches --- README.md | 1 + .../bun/react-native@0.85.3-pr56912.patch | 30 +++++++++++++++++++ .../npm/react-native+0.85.3-pr56912.patch | 30 +++++++++++++++++++ .../pnpm/react-native@0.85.3-pr56912.patch | 30 +++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 packages/react-native/bun/react-native@0.85.3-pr56912.patch create mode 100644 packages/react-native/npm/react-native+0.85.3-pr56912.patch create mode 100644 packages/react-native/pnpm/react-native@0.85.3-pr56912.patch diff --git a/README.md b/README.md index 13dc8ed..824124c 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ PRs still in flight. Every row has a patch in `packages/` you can drop into your | Package | Version | Fix | PR | | :--- | :--- | :--- | :--- | +| [`react-native`](packages/react-native/) | `0.85.3` | Set `:always_out_of_date => "1"` on `hermes-engine.podspec`'s `[Hermes] Replace Hermes for the right configuration, if needed` script_phase. The phase had no declared outputs (overwrites the prebuilt Hermes binary in place per `$CONFIGURATION`), so Xcode 14+ was warning about it on every clean build of every project on the default prebuilt-release-tarball Hermes path. Matches the family pattern from `React-Core-prebuilt.podspec` ([#52133](https://github.com/facebook/react-native/pull/52133)) and `ReactNativeDependencies.podspec` ([#49812](https://github.com/facebook/react-native/pull/49812)). | [facebook/react-native#56912](https://github.com/facebook/react-native/pull/56912) | | [`expo`](packages/expo/) | n/a | Close the fork-safety sweep started by [#45782](https://github.com/expo/expo/pull/45782) and [#45859](https://github.com/expo/expo/pull/45859). Gate 15 more workflows on `github.repository == 'expo/expo'` so fork CI stops red-checking on nightly jobs against org-published artifacts, hourly issue maintenance crons, the GCP publish path in `ios-prebuild-external-xcframeworks`, and Slack-notify steps that reference org-only webhooks. Covers `test-react-native-nightly`, `test-suite-nightly`, `lock`, `issue-stale`, `cli`, `create-expo-app`, `create-expo-module`, `fingerprint`, `sdk`, `ios-static-frameworks`, `ios-prebuild-external-xcframeworks`, `bare-diffs`, `native-component-list`, `test-suite`, `test-suite-macos`. Drops a redundant step-level repo check in `development-client-latest-e2e`. | [expo/expo#46050](https://github.com/expo/expo/pull/46050) | | [`bun`](packages/oven-sh/bun/) | `1.3.14` | Drop the order-dependent peer-dep early-match block from `get_or_put_resolved_package` so `bun.lock` stops varying run to run. The block bound peers to whichever same-name resolution `package_index` held first, and `package_index` fills in thread-pool-completion order. Dedup and the "incorrect peer dependency" warning move into `Tree::hoist_dependency` where placement is deterministic. Rust port of Dylan's [#29804](https://github.com/oven-sh/bun/pull/29804). | [oven-sh/bun#30855](https://github.com/oven-sh/bun/pull/30855) | | [`@react-native/babel-preset`](packages/@react-native/babel-preset/) | `0.85.3` | Three Babel plugins that rewrite source patterns Hermes V1 mishandles: `async ({a}) =>` (await resolves with `undefined` while the body keeps running), `class` inside `finally` (IR-cache contamination), and `super.x` in object-accessor identifier keys (segfaults at IR generation). Port of [@kitten](https://github.com/kitten)'s plugins from `babel-preset-expo` ([expo/expo#45601](https://github.com/expo/expo/pull/45601)) so bare RN consumers escape the bugs without `babel-preset-expo`. Root cause: [facebook/hermes#1761](https://github.com/facebook/hermes/issues/1761). | [facebook/react-native#56816](https://github.com/facebook/react-native/pull/56816) | diff --git a/packages/react-native/bun/react-native@0.85.3-pr56912.patch b/packages/react-native/bun/react-native@0.85.3-pr56912.patch new file mode 100644 index 0000000..e6afbf8 --- /dev/null +++ b/packages/react-native/bun/react-native@0.85.3-pr56912.patch @@ -0,0 +1,30 @@ +diff --git a/sdks/hermes-engine/hermes-engine.podspec b/sdks/hermes-engine/hermes-engine.podspec +index 6ef12a1f68a..96c9e53d6fd 100644 +--- a/sdks/hermes-engine/hermes-engine.podspec ++++ b/sdks/hermes-engine/hermes-engine.podspec +@@ -83,7 +83,7 @@ Pod::Spec.new do |spec| + # We ignore this if we provide a specific tarball: the assumption here is that if you are providing a tarball, is because you want to + # test something specific for that tarball. + if source_type == HermesEngineSourceType::DOWNLOAD_PREBUILD_RELEASE_TARBALL +- spec.script_phase = { ++ script_phase = { + :name => "[Hermes] Replace Hermes for the right configuration, if needed", + :execution_position => :before_compile, + :script => <<-EOS +@@ -97,6 +97,15 @@ Pod::Spec.new do |spec| + "$NODE_BINARY" "$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js" -c "$CONFIG" -r "#{version}" -p "$PODS_ROOT" + EOS + } ++ ++ ++ # :always_out_of_date is only available in CocoaPods 1.13.0 and later ++ if Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.13.0') ++ # always run the script without warning ++ script_phase[:always_out_of_date] = "1" ++ end ++ ++ spec.script_phase = script_phase + end + + elsif HermesEngineSourceType::isFromSource(source_type) then + diff --git a/packages/react-native/npm/react-native+0.85.3-pr56912.patch b/packages/react-native/npm/react-native+0.85.3-pr56912.patch new file mode 100644 index 0000000..b479050 --- /dev/null +++ b/packages/react-native/npm/react-native+0.85.3-pr56912.patch @@ -0,0 +1,30 @@ +diff --git a/node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec b/node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec +index 6ef12a1f68a..96c9e53d6fd 100644 +--- a/node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec ++++ b/node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec +@@ -83,7 +83,7 @@ Pod::Spec.new do |spec| + # We ignore this if we provide a specific tarball: the assumption here is that if you are providing a tarball, is because you want to + # test something specific for that tarball. + if source_type == HermesEngineSourceType::DOWNLOAD_PREBUILD_RELEASE_TARBALL +- spec.script_phase = { ++ script_phase = { + :name => "[Hermes] Replace Hermes for the right configuration, if needed", + :execution_position => :before_compile, + :script => <<-EOS +@@ -97,6 +97,15 @@ Pod::Spec.new do |spec| + "$NODE_BINARY" "$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js" -c "$CONFIG" -r "#{version}" -p "$PODS_ROOT" + EOS + } ++ ++ ++ # :always_out_of_date is only available in CocoaPods 1.13.0 and later ++ if Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.13.0') ++ # always run the script without warning ++ script_phase[:always_out_of_date] = "1" ++ end ++ ++ spec.script_phase = script_phase + end + + elsif HermesEngineSourceType::isFromSource(source_type) then + diff --git a/packages/react-native/pnpm/react-native@0.85.3-pr56912.patch b/packages/react-native/pnpm/react-native@0.85.3-pr56912.patch new file mode 100644 index 0000000..e6afbf8 --- /dev/null +++ b/packages/react-native/pnpm/react-native@0.85.3-pr56912.patch @@ -0,0 +1,30 @@ +diff --git a/sdks/hermes-engine/hermes-engine.podspec b/sdks/hermes-engine/hermes-engine.podspec +index 6ef12a1f68a..96c9e53d6fd 100644 +--- a/sdks/hermes-engine/hermes-engine.podspec ++++ b/sdks/hermes-engine/hermes-engine.podspec +@@ -83,7 +83,7 @@ Pod::Spec.new do |spec| + # We ignore this if we provide a specific tarball: the assumption here is that if you are providing a tarball, is because you want to + # test something specific for that tarball. + if source_type == HermesEngineSourceType::DOWNLOAD_PREBUILD_RELEASE_TARBALL +- spec.script_phase = { ++ script_phase = { + :name => "[Hermes] Replace Hermes for the right configuration, if needed", + :execution_position => :before_compile, + :script => <<-EOS +@@ -97,6 +97,15 @@ Pod::Spec.new do |spec| + "$NODE_BINARY" "$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js" -c "$CONFIG" -r "#{version}" -p "$PODS_ROOT" + EOS + } ++ ++ ++ # :always_out_of_date is only available in CocoaPods 1.13.0 and later ++ if Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.13.0') ++ # always run the script without warning ++ script_phase[:always_out_of_date] = "1" ++ end ++ ++ spec.script_phase = script_phase + end + + elsif HermesEngineSourceType::isFromSource(source_type) then +