From 07579d4945e0fee0120c84463b52544a9dae0e2a Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Mon, 7 Jul 2025 14:42:52 +0100 Subject: [PATCH 001/312] Bump hermes version for 0.81.0 --- packages/react-native/sdks/.hermesversion | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/react-native/sdks/.hermesversion diff --git a/packages/react-native/sdks/.hermesversion b/packages/react-native/sdks/.hermesversion new file mode 100644 index 00000000000..6cbff7e69d0 --- /dev/null +++ b/packages/react-native/sdks/.hermesversion @@ -0,0 +1 @@ +hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 \ No newline at end of file From de8aeb658e231b4d499e6b1484cfd9582d366492 Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Tue, 8 Jul 2025 09:03:32 -0700 Subject: [PATCH 002/312] Fix all workflows to use node 22.14.0 Summary: We hit this error when trying to release 0.81.0 (see [action run](https://github.com/facebook/react-native/actions/runs/16147471618/job/45570030039)): > error react-native/metro-babel-transformer@0.81.0-main: The engine "node" is incompatible with this module. Expected version ">= 22.14.0". Got "20.19.2" This should fix the issue. Changelog: [Internal] Reviewed By: motiz88, cortinico Differential Revision: D77938906 --- .github/actions/setup-node/action.yml | 2 +- .github/actions/yarn-install/action.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index b22fb3e822d..d076bf4acb8 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -4,7 +4,7 @@ inputs: node-version: description: 'The node.js version to use' required: false - default: '22' + default: '22.14.0' runs: using: "composite" steps: diff --git a/.github/actions/yarn-install/action.yml b/.github/actions/yarn-install/action.yml index cdb4a85c899..7f7c7bd2bc9 100644 --- a/.github/actions/yarn-install/action.yml +++ b/.github/actions/yarn-install/action.yml @@ -2,6 +2,8 @@ name: yarn-install runs: using: composite steps: + - name: Setup node.js + uses: ./.github/actions/setup-node - name: Install dependencies shell: bash run: | From 9879028183240768e211b29907101ec7cd344146 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 8 Jul 2025 16:14:15 +0000 Subject: [PATCH 003/312] Release 0.81.0-rc.0 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 6 +++--- packages/react-native/React/Base/RCTVersion.m | 6 +++--- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 6 +++--- .../ReactCommon/cxxreact/ReactNativeVersion.h | 10 +++++----- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 10 +++++----- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 74 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 84b36a75d70..1a4653e8cb0 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-main", - "@react-native/metro-config": "0.81.0-main", + "@react-native/metro-babel-transformer": "0.81.0-rc.0", + "@react-native/metro-config": "0.81.0-rc.0", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 1b15cd15041..cae6eddfe14 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 0be39ceb922..ebb1df1cfa9 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 92dba5dace2..41bf955e7a8 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-main", + "@react-native/dev-middleware": "0.81.0-rc.0", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.82.5", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 24f6810e3aa..68fefa3d1fc 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 8ca79a5c39d..cec04847ce7 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index cbafe6bf36b..d23321b76bc 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index ece94b94e65..2af12dd8b65 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-main", + "@react-native/debugger-frontend": "0.81.0-rc.0", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 10ead7344c5..95945f8bdcb 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-main", + "@react-native/eslint-plugin": "0.81.0-rc.0", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 48263c87d2c..65b675b0962 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 299f145e4e6..545ba38d2ba 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-main", + "@react-native/codegen": "0.81.0-rc.0", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 5897ef53b24..9c48d9809d4 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index fb0d4556cfb..32aa6bc4e3f 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-main", - "@react-native/metro-babel-transformer": "0.81.0-main", + "@react-native/js-polyfills": "0.81.0-rc.0", + "@react-native/metro-babel-transformer": "0.81.0-rc.0", "metro-config": "^0.82.5", "metro-runtime": "^0.82.5" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index ccfe78e7afa..a8f7353e1c0 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 48b016fcb2b..938369d2aad 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index baf6f178868..d575a5a1ef2 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 17aaae7809a..0d6f2e93ecc 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-main", + "@react-native/babel-plugin-codegen": "0.81.0-rc.0", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index bf4a934ebcc..0e2eebf74a1 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-main", + "@react-native/babel-preset": "0.81.0-rc.0", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 16068f79d45..b547ea6c1da 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index abe99392696..5d07f5a4900 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 38344be5bf0..aeaeba0f479 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 96311c75092..220d35a9bc8 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-main", - "react-native": "1000.0.0" + "@react-native/babel-preset": "0.81.0-rc.0", + "react-native": "0.81.0-rc.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index cfee63f4dae..3fdfc0f156b 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -15,8 +15,8 @@ export const version: $ReadOnly<{ patch: number, prerelease: string | null, }> = { - major: 1000, - minor: 0, + major: 0, + minor: 81, patch: 0, - prerelease: null, + prerelease: 'rc.0', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 69ce4f75320..b8737d7bd19 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -21,10 +21,10 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^(void){ __rnVersion = @{ - RCTVersionMajor: @(1000), - RCTVersionMinor: @(0), + RCTVersionMajor: @(0), + RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: [NSNull null], + RCTVersionPrerelease: @"rc.0", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 7c0c467db7a..d145451dbe1 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1000.0.0 +VERSION_NAME=0.81.0-rc.0 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 2405d32ce68..29cb572f085 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -12,9 +12,9 @@ package com.facebook.react.modules.systeminfo public object ReactNativeVersion { @JvmField public val VERSION: Map = mapOf( - "major" to 1000, - "minor" to 0, + "major" to 0, + "minor" to 81, "patch" to 0, - "prerelease" to null + "prerelease" to "rc.0" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 0c876d971a6..b3488570cbb 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -12,17 +12,17 @@ #include #include -#define REACT_NATIVE_VERSION_MAJOR 1000 -#define REACT_NATIVE_VERSION_MINOR 0 +#define REACT_NATIVE_VERSION_MAJOR 0 +#define REACT_NATIVE_VERSION_MINOR 81 #define REACT_NATIVE_VERSION_PATCH 0 namespace facebook::react { constexpr struct { - int32_t Major = 1000; - int32_t Minor = 0; + int32_t Major = 0; + int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = ""; + std::string_view Prerelease = "rc.0"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 8c40a5c8a24..fe00343737e 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "1000.0.0", + "version": "0.81.0-rc.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -160,13 +160,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-main", - "@react-native/codegen": "0.81.0-main", - "@react-native/community-cli-plugin": "0.81.0-main", - "@react-native/gradle-plugin": "0.81.0-main", - "@react-native/js-polyfills": "0.81.0-main", - "@react-native/normalize-colors": "0.81.0-main", - "@react-native/virtualized-lists": "0.81.0-main", + "@react-native/assets-registry": "0.81.0-rc.0", + "@react-native/codegen": "0.81.0-rc.0", + "@react-native/community-cli-plugin": "0.81.0-rc.0", + "@react-native/gradle-plugin": "0.81.0-rc.0", + "@react-native/js-polyfills": "0.81.0-rc.0", + "@react-native/normalize-colors": "0.81.0-rc.0", + "@react-native/virtualized-lists": "0.81.0-rc.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 6d32169ee71..951e69765b4 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -838,7 +838,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -876,7 +876,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -980,4 +980,4 @@ SCRIPT end " -`; +`; \ No newline at end of file diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 9c6463d3367..b80d825f4e6 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-main", - "@react-native/popup-menu-android": "0.81.0-main", + "@react-native/new-app-screen": "0.81.0-rc.0", + "@react-native/popup-menu-android": "0.81.0-rc.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 3a706f61b28..b455336782f 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index dd596f66ec2..ba68327908d 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index daa3725bc16..598ae89bbf4 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "1000.0.0" + "react-native": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-main", - "@react-native/core-cli-utils": "0.81.0-main", - "@react-native/eslint-config": "0.81.0-main", - "@react-native/metro-config": "0.81.0-main", - "@react-native/typescript-config": "0.81.0-main", + "@react-native/babel-preset": "0.81.0-rc.0", + "@react-native/core-cli-utils": "0.81.0-rc.0", + "@react-native/eslint-config": "0.81.0-rc.0", + "@react-native/metro-config": "0.81.0-rc.0", + "@react-native/typescript-config": "0.81.0-rc.0", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index b5edd1b1739..edd0d521570 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", From e01cbf95e466930b29b54c41498764fd8f7579f4 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Wed, 9 Jul 2025 09:59:01 +0100 Subject: [PATCH 004/312] Revert "Release 0.81.0-rc.0" This reverts commit 9879028183240768e211b29907101ec7cd344146. --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 6 +++--- packages/react-native/React/Base/RCTVersion.m | 6 +++--- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 6 +++--- .../ReactCommon/cxxreact/ReactNativeVersion.h | 10 +++++----- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 10 +++++----- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 74 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 1a4653e8cb0..84b36a75d70 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.0", - "@react-native/metro-config": "0.81.0-rc.0", + "@react-native/metro-babel-transformer": "0.81.0-main", + "@react-native/metro-config": "0.81.0-main", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index cae6eddfe14..1b15cd15041 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index ebb1df1cfa9..0be39ceb922 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 41bf955e7a8..92dba5dace2 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.0", + "@react-native/dev-middleware": "0.81.0-main", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.82.5", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 68fefa3d1fc..24f6810e3aa 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index cec04847ce7..8ca79a5c39d 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index d23321b76bc..cbafe6bf36b 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 2af12dd8b65..ece94b94e65 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.0", + "@react-native/debugger-frontend": "0.81.0-main", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 95945f8bdcb..10ead7344c5 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.0", + "@react-native/eslint-plugin": "0.81.0-main", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 65b675b0962..48263c87d2c 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 545ba38d2ba..299f145e4e6 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.0", + "@react-native/codegen": "0.81.0-main", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 9c48d9809d4..5897ef53b24 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 32aa6bc4e3f..fb0d4556cfb 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.0", - "@react-native/metro-babel-transformer": "0.81.0-rc.0", + "@react-native/js-polyfills": "0.81.0-main", + "@react-native/metro-babel-transformer": "0.81.0-main", "metro-config": "^0.82.5", "metro-runtime": "^0.82.5" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index a8f7353e1c0..ccfe78e7afa 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 938369d2aad..48b016fcb2b 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index d575a5a1ef2..baf6f178868 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 0d6f2e93ecc..17aaae7809a 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.0", + "@react-native/babel-plugin-codegen": "0.81.0-main", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 0e2eebf74a1..bf4a934ebcc 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.0", + "@react-native/babel-preset": "0.81.0-main", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index b547ea6c1da..16068f79d45 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 5d07f5a4900..abe99392696 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index aeaeba0f479..38344be5bf0 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 220d35a9bc8..96311c75092 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.0", - "react-native": "0.81.0-rc.0" + "@react-native/babel-preset": "0.81.0-main", + "react-native": "1000.0.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 3fdfc0f156b..cfee63f4dae 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -15,8 +15,8 @@ export const version: $ReadOnly<{ patch: number, prerelease: string | null, }> = { - major: 0, - minor: 81, + major: 1000, + minor: 0, patch: 0, - prerelease: 'rc.0', + prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index b8737d7bd19..69ce4f75320 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -21,10 +21,10 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^(void){ __rnVersion = @{ - RCTVersionMajor: @(0), - RCTVersionMinor: @(81), + RCTVersionMajor: @(1000), + RCTVersionMinor: @(0), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.0", + RCTVersionPrerelease: [NSNull null], }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index d145451dbe1..7c0c467db7a 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.0 +VERSION_NAME=1000.0.0 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 29cb572f085..2405d32ce68 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -12,9 +12,9 @@ package com.facebook.react.modules.systeminfo public object ReactNativeVersion { @JvmField public val VERSION: Map = mapOf( - "major" to 0, - "minor" to 81, + "major" to 1000, + "minor" to 0, "patch" to 0, - "prerelease" to "rc.0" + "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index b3488570cbb..0c876d971a6 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -12,17 +12,17 @@ #include #include -#define REACT_NATIVE_VERSION_MAJOR 0 -#define REACT_NATIVE_VERSION_MINOR 81 +#define REACT_NATIVE_VERSION_MAJOR 1000 +#define REACT_NATIVE_VERSION_MINOR 0 #define REACT_NATIVE_VERSION_PATCH 0 namespace facebook::react { constexpr struct { - int32_t Major = 0; - int32_t Minor = 81; + int32_t Major = 1000; + int32_t Minor = 0; int32_t Patch = 0; - std::string_view Prerelease = "rc.0"; + std::string_view Prerelease = ""; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index fe00343737e..8c40a5c8a24 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.0", + "version": "1000.0.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -160,13 +160,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.0", - "@react-native/codegen": "0.81.0-rc.0", - "@react-native/community-cli-plugin": "0.81.0-rc.0", - "@react-native/gradle-plugin": "0.81.0-rc.0", - "@react-native/js-polyfills": "0.81.0-rc.0", - "@react-native/normalize-colors": "0.81.0-rc.0", - "@react-native/virtualized-lists": "0.81.0-rc.0", + "@react-native/assets-registry": "0.81.0-main", + "@react-native/codegen": "0.81.0-main", + "@react-native/community-cli-plugin": "0.81.0-main", + "@react-native/gradle-plugin": "0.81.0-main", + "@react-native/js-polyfills": "0.81.0-main", + "@react-native/normalize-colors": "0.81.0-main", + "@react-native/virtualized-lists": "0.81.0-main", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 951e69765b4..6d32169ee71 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -838,7 +838,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -876,7 +876,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -980,4 +980,4 @@ SCRIPT end " -`; \ No newline at end of file +`; diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index b80d825f4e6..9c6463d3367 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.0", - "@react-native/popup-menu-android": "0.81.0-rc.0", + "@react-native/new-app-screen": "0.81.0-main", + "@react-native/popup-menu-android": "0.81.0-main", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index b455336782f..3a706f61b28 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index ba68327908d..dd596f66ec2 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 598ae89bbf4..daa3725bc16 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.0" + "react-native": "1000.0.0" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.0", - "@react-native/core-cli-utils": "0.81.0-rc.0", - "@react-native/eslint-config": "0.81.0-rc.0", - "@react-native/metro-config": "0.81.0-rc.0", - "@react-native/typescript-config": "0.81.0-rc.0", + "@react-native/babel-preset": "0.81.0-main", + "@react-native/core-cli-utils": "0.81.0-main", + "@react-native/eslint-config": "0.81.0-main", + "@react-native/metro-config": "0.81.0-main", + "@react-native/typescript-config": "0.81.0-main", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index edd0d521570..b5edd1b1739 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "devDependencies": { "@babel/core": "^7.25.2", From 1a6887bd70cdefb8fbc421467de841ece74d5c6b Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Wed, 9 Jul 2025 09:59:38 +0100 Subject: [PATCH 005/312] [LOCAL] Add more logging around computeNightlyTarballURL --- packages/react-native/scripts/ios-prebuild/utils.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/react-native/scripts/ios-prebuild/utils.js b/packages/react-native/scripts/ios-prebuild/utils.js index d9dec121dd5..deed11a1541 100644 --- a/packages/react-native/scripts/ios-prebuild/utils.js +++ b/packages/react-native/scripts/ios-prebuild/utils.js @@ -65,10 +65,13 @@ async function computeNightlyTarballURL( artifactCoordinate /*: string */, artifactName /*: string */, ) /*: Promise */ { + const urlLog = createLogger('NightlyURL'); const xmlUrl = `https://central.sonatype.com/repository/maven-snapshots/com/facebook/react/${artifactCoordinate}/${version}-SNAPSHOT/maven-metadata.xml`; + urlLog(`Attempting to download maven-metadata.xml from: ${xmlUrl}...`); const response = await fetch(xmlUrl); if (!response.ok) { + urlLog(`Downloading maven-metadata.xml failed!`, 'error'); return ''; } const xmlText = await response.text(); @@ -76,6 +79,7 @@ async function computeNightlyTarballURL( // Extract the block const snapshotMatch = xmlText.match(/([\s\S]*?)<\/snapshot>/); if (!snapshotMatch) { + urlLog(`Could not find a tag that matches the regex!`, 'error'); return ''; } const snapshotContent = snapshotMatch[1]; @@ -83,6 +87,7 @@ async function computeNightlyTarballURL( // Extract from the snapshot block const timestampMatch = snapshotContent.match(/(.*?)<\/timestamp>/); if (!timestampMatch) { + urlLog(`Could not find a tag inside that matches the regex!`, 'error'); return ''; } const timestamp = timestampMatch[1]; @@ -92,12 +97,14 @@ async function computeNightlyTarballURL( /(.*?)<\/buildNumber>/, ); if (!buildNumberMatch) { + urlLog(`Could not find a tag that matches the regex!`, 'error'); return ''; } const buildNumber = buildNumberMatch[1]; const fullVersion = `${version}-${timestamp}-${buildNumber}`; const finalUrl = `https://central.sonatype.com/repository/maven-snapshots/com/facebook/react/${artifactCoordinate}/${version}-SNAPSHOT/${artifactCoordinate}-${fullVersion}-${artifactName}`; + urlLog(`Final artifact URL found: ${finalUrl}`); return finalUrl; } From b52ecff6280244dcf50a67415e55ff9f1b4db91c Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Wed, 9 Jul 2025 09:03:09 +0000 Subject: [PATCH 006/312] Release 0.81.0-rc.0 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 6 +++--- packages/react-native/React/Base/RCTVersion.m | 6 +++--- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 6 +++--- .../ReactCommon/cxxreact/ReactNativeVersion.h | 10 +++++----- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 10 +++++----- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 74 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 84b36a75d70..1a4653e8cb0 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-main", - "@react-native/metro-config": "0.81.0-main", + "@react-native/metro-babel-transformer": "0.81.0-rc.0", + "@react-native/metro-config": "0.81.0-rc.0", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 1b15cd15041..cae6eddfe14 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 0be39ceb922..ebb1df1cfa9 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 92dba5dace2..41bf955e7a8 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-main", + "@react-native/dev-middleware": "0.81.0-rc.0", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.82.5", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 24f6810e3aa..68fefa3d1fc 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 8ca79a5c39d..cec04847ce7 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index cbafe6bf36b..d23321b76bc 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index ece94b94e65..2af12dd8b65 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-main", + "@react-native/debugger-frontend": "0.81.0-rc.0", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 10ead7344c5..95945f8bdcb 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-main", + "@react-native/eslint-plugin": "0.81.0-rc.0", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 48263c87d2c..65b675b0962 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 299f145e4e6..545ba38d2ba 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-main", + "@react-native/codegen": "0.81.0-rc.0", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 5897ef53b24..9c48d9809d4 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index fb0d4556cfb..32aa6bc4e3f 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-main", - "@react-native/metro-babel-transformer": "0.81.0-main", + "@react-native/js-polyfills": "0.81.0-rc.0", + "@react-native/metro-babel-transformer": "0.81.0-rc.0", "metro-config": "^0.82.5", "metro-runtime": "^0.82.5" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index ccfe78e7afa..a8f7353e1c0 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 48b016fcb2b..938369d2aad 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index baf6f178868..d575a5a1ef2 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 17aaae7809a..0d6f2e93ecc 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-main", + "@react-native/babel-plugin-codegen": "0.81.0-rc.0", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index bf4a934ebcc..0e2eebf74a1 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-main", + "@react-native/babel-preset": "0.81.0-rc.0", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 16068f79d45..b547ea6c1da 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index abe99392696..5d07f5a4900 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 38344be5bf0..aeaeba0f479 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 96311c75092..220d35a9bc8 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-main", - "react-native": "1000.0.0" + "@react-native/babel-preset": "0.81.0-rc.0", + "react-native": "0.81.0-rc.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index cfee63f4dae..3fdfc0f156b 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -15,8 +15,8 @@ export const version: $ReadOnly<{ patch: number, prerelease: string | null, }> = { - major: 1000, - minor: 0, + major: 0, + minor: 81, patch: 0, - prerelease: null, + prerelease: 'rc.0', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 69ce4f75320..b8737d7bd19 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -21,10 +21,10 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^(void){ __rnVersion = @{ - RCTVersionMajor: @(1000), - RCTVersionMinor: @(0), + RCTVersionMajor: @(0), + RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: [NSNull null], + RCTVersionPrerelease: @"rc.0", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 7c0c467db7a..d145451dbe1 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1000.0.0 +VERSION_NAME=0.81.0-rc.0 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 2405d32ce68..29cb572f085 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -12,9 +12,9 @@ package com.facebook.react.modules.systeminfo public object ReactNativeVersion { @JvmField public val VERSION: Map = mapOf( - "major" to 1000, - "minor" to 0, + "major" to 0, + "minor" to 81, "patch" to 0, - "prerelease" to null + "prerelease" to "rc.0" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 0c876d971a6..b3488570cbb 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -12,17 +12,17 @@ #include #include -#define REACT_NATIVE_VERSION_MAJOR 1000 -#define REACT_NATIVE_VERSION_MINOR 0 +#define REACT_NATIVE_VERSION_MAJOR 0 +#define REACT_NATIVE_VERSION_MINOR 81 #define REACT_NATIVE_VERSION_PATCH 0 namespace facebook::react { constexpr struct { - int32_t Major = 1000; - int32_t Minor = 0; + int32_t Major = 0; + int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = ""; + std::string_view Prerelease = "rc.0"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 8c40a5c8a24..fe00343737e 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "1000.0.0", + "version": "0.81.0-rc.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -160,13 +160,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-main", - "@react-native/codegen": "0.81.0-main", - "@react-native/community-cli-plugin": "0.81.0-main", - "@react-native/gradle-plugin": "0.81.0-main", - "@react-native/js-polyfills": "0.81.0-main", - "@react-native/normalize-colors": "0.81.0-main", - "@react-native/virtualized-lists": "0.81.0-main", + "@react-native/assets-registry": "0.81.0-rc.0", + "@react-native/codegen": "0.81.0-rc.0", + "@react-native/community-cli-plugin": "0.81.0-rc.0", + "@react-native/gradle-plugin": "0.81.0-rc.0", + "@react-native/js-polyfills": "0.81.0-rc.0", + "@react-native/normalize-colors": "0.81.0-rc.0", + "@react-native/virtualized-lists": "0.81.0-rc.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 6d32169ee71..951e69765b4 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -838,7 +838,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -876,7 +876,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -980,4 +980,4 @@ SCRIPT end " -`; +`; \ No newline at end of file diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 9c6463d3367..b80d825f4e6 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-main", - "@react-native/popup-menu-android": "0.81.0-main", + "@react-native/new-app-screen": "0.81.0-rc.0", + "@react-native/popup-menu-android": "0.81.0-rc.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 3a706f61b28..b455336782f 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index dd596f66ec2..ba68327908d 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index daa3725bc16..598ae89bbf4 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "1000.0.0" + "react-native": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-main", - "@react-native/core-cli-utils": "0.81.0-main", - "@react-native/eslint-config": "0.81.0-main", - "@react-native/metro-config": "0.81.0-main", - "@react-native/typescript-config": "0.81.0-main", + "@react-native/babel-preset": "0.81.0-rc.0", + "@react-native/core-cli-utils": "0.81.0-rc.0", + "@react-native/eslint-config": "0.81.0-rc.0", + "@react-native/metro-config": "0.81.0-rc.0", + "@react-native/typescript-config": "0.81.0-rc.0", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index b5edd1b1739..edd0d521570 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", From b22bed22b430856ae594cdc9425ce371c8724af0 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 12:00:18 +0100 Subject: [PATCH 007/312] Revert "Release 0.81.0-rc.0" This reverts commit b52ecff6280244dcf50a67415e55ff9f1b4db91c. --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 6 +++--- packages/react-native/React/Base/RCTVersion.m | 6 +++--- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 6 +++--- .../ReactCommon/cxxreact/ReactNativeVersion.h | 10 +++++----- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 10 +++++----- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 74 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 1a4653e8cb0..84b36a75d70 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.0", - "@react-native/metro-config": "0.81.0-rc.0", + "@react-native/metro-babel-transformer": "0.81.0-main", + "@react-native/metro-config": "0.81.0-main", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index cae6eddfe14..1b15cd15041 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index ebb1df1cfa9..0be39ceb922 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 41bf955e7a8..92dba5dace2 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.0", + "@react-native/dev-middleware": "0.81.0-main", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.82.5", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 68fefa3d1fc..24f6810e3aa 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index cec04847ce7..8ca79a5c39d 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index d23321b76bc..cbafe6bf36b 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 2af12dd8b65..ece94b94e65 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.0", + "@react-native/debugger-frontend": "0.81.0-main", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 95945f8bdcb..10ead7344c5 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.0", + "@react-native/eslint-plugin": "0.81.0-main", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 65b675b0962..48263c87d2c 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 545ba38d2ba..299f145e4e6 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.0", + "@react-native/codegen": "0.81.0-main", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 9c48d9809d4..5897ef53b24 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 32aa6bc4e3f..fb0d4556cfb 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.0", - "@react-native/metro-babel-transformer": "0.81.0-rc.0", + "@react-native/js-polyfills": "0.81.0-main", + "@react-native/metro-babel-transformer": "0.81.0-main", "metro-config": "^0.82.5", "metro-runtime": "^0.82.5" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index a8f7353e1c0..ccfe78e7afa 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 938369d2aad..48b016fcb2b 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index d575a5a1ef2..baf6f178868 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 0d6f2e93ecc..17aaae7809a 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.0", + "@react-native/babel-plugin-codegen": "0.81.0-main", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 0e2eebf74a1..bf4a934ebcc 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.0", + "@react-native/babel-preset": "0.81.0-main", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index b547ea6c1da..16068f79d45 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 5d07f5a4900..abe99392696 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index aeaeba0f479..38344be5bf0 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 220d35a9bc8..96311c75092 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.0", - "react-native": "0.81.0-rc.0" + "@react-native/babel-preset": "0.81.0-main", + "react-native": "1000.0.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 3fdfc0f156b..cfee63f4dae 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -15,8 +15,8 @@ export const version: $ReadOnly<{ patch: number, prerelease: string | null, }> = { - major: 0, - minor: 81, + major: 1000, + minor: 0, patch: 0, - prerelease: 'rc.0', + prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index b8737d7bd19..69ce4f75320 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -21,10 +21,10 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^(void){ __rnVersion = @{ - RCTVersionMajor: @(0), - RCTVersionMinor: @(81), + RCTVersionMajor: @(1000), + RCTVersionMinor: @(0), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.0", + RCTVersionPrerelease: [NSNull null], }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index d145451dbe1..7c0c467db7a 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.0 +VERSION_NAME=1000.0.0 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 29cb572f085..2405d32ce68 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -12,9 +12,9 @@ package com.facebook.react.modules.systeminfo public object ReactNativeVersion { @JvmField public val VERSION: Map = mapOf( - "major" to 0, - "minor" to 81, + "major" to 1000, + "minor" to 0, "patch" to 0, - "prerelease" to "rc.0" + "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index b3488570cbb..0c876d971a6 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -12,17 +12,17 @@ #include #include -#define REACT_NATIVE_VERSION_MAJOR 0 -#define REACT_NATIVE_VERSION_MINOR 81 +#define REACT_NATIVE_VERSION_MAJOR 1000 +#define REACT_NATIVE_VERSION_MINOR 0 #define REACT_NATIVE_VERSION_PATCH 0 namespace facebook::react { constexpr struct { - int32_t Major = 0; - int32_t Minor = 81; + int32_t Major = 1000; + int32_t Minor = 0; int32_t Patch = 0; - std::string_view Prerelease = "rc.0"; + std::string_view Prerelease = ""; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index fe00343737e..8c40a5c8a24 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.0", + "version": "1000.0.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -160,13 +160,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.0", - "@react-native/codegen": "0.81.0-rc.0", - "@react-native/community-cli-plugin": "0.81.0-rc.0", - "@react-native/gradle-plugin": "0.81.0-rc.0", - "@react-native/js-polyfills": "0.81.0-rc.0", - "@react-native/normalize-colors": "0.81.0-rc.0", - "@react-native/virtualized-lists": "0.81.0-rc.0", + "@react-native/assets-registry": "0.81.0-main", + "@react-native/codegen": "0.81.0-main", + "@react-native/community-cli-plugin": "0.81.0-main", + "@react-native/gradle-plugin": "0.81.0-main", + "@react-native/js-polyfills": "0.81.0-main", + "@react-native/normalize-colors": "0.81.0-main", + "@react-native/virtualized-lists": "0.81.0-main", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 951e69765b4..6d32169ee71 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -838,7 +838,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -876,7 +876,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"1000.0.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -980,4 +980,4 @@ SCRIPT end " -`; \ No newline at end of file +`; diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index b80d825f4e6..9c6463d3367 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.0", - "@react-native/popup-menu-android": "0.81.0-rc.0", + "@react-native/new-app-screen": "0.81.0-main", + "@react-native/popup-menu-android": "0.81.0-main", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index b455336782f..3a706f61b28 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index ba68327908d..dd596f66ec2 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.0", + "version": "0.81.0-main", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 598ae89bbf4..daa3725bc16 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.0" + "react-native": "1000.0.0" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.0", - "@react-native/core-cli-utils": "0.81.0-rc.0", - "@react-native/eslint-config": "0.81.0-rc.0", - "@react-native/metro-config": "0.81.0-rc.0", - "@react-native/typescript-config": "0.81.0-rc.0", + "@react-native/babel-preset": "0.81.0-main", + "@react-native/core-cli-utils": "0.81.0-main", + "@react-native/eslint-config": "0.81.0-main", + "@react-native/metro-config": "0.81.0-main", + "@react-native/typescript-config": "0.81.0-main", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index edd0d521570..b5edd1b1739 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-main" }, "devDependencies": { "@babel/core": "^7.25.2", From bce7f544acb9fe0bcb4e0d0bb5612bf3bbeefd30 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 12:00:37 +0100 Subject: [PATCH 008/312] Revert "[LOCAL] Add more logging around computeNightlyTarballURL" This reverts commit 1a6887bd70cdefb8fbc421467de841ece74d5c6b. --- packages/react-native/scripts/ios-prebuild/utils.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/utils.js b/packages/react-native/scripts/ios-prebuild/utils.js index deed11a1541..d9dec121dd5 100644 --- a/packages/react-native/scripts/ios-prebuild/utils.js +++ b/packages/react-native/scripts/ios-prebuild/utils.js @@ -65,13 +65,10 @@ async function computeNightlyTarballURL( artifactCoordinate /*: string */, artifactName /*: string */, ) /*: Promise */ { - const urlLog = createLogger('NightlyURL'); const xmlUrl = `https://central.sonatype.com/repository/maven-snapshots/com/facebook/react/${artifactCoordinate}/${version}-SNAPSHOT/maven-metadata.xml`; - urlLog(`Attempting to download maven-metadata.xml from: ${xmlUrl}...`); const response = await fetch(xmlUrl); if (!response.ok) { - urlLog(`Downloading maven-metadata.xml failed!`, 'error'); return ''; } const xmlText = await response.text(); @@ -79,7 +76,6 @@ async function computeNightlyTarballURL( // Extract the block const snapshotMatch = xmlText.match(/([\s\S]*?)<\/snapshot>/); if (!snapshotMatch) { - urlLog(`Could not find a tag that matches the regex!`, 'error'); return ''; } const snapshotContent = snapshotMatch[1]; @@ -87,7 +83,6 @@ async function computeNightlyTarballURL( // Extract from the snapshot block const timestampMatch = snapshotContent.match(/(.*?)<\/timestamp>/); if (!timestampMatch) { - urlLog(`Could not find a tag inside that matches the regex!`, 'error'); return ''; } const timestamp = timestampMatch[1]; @@ -97,14 +92,12 @@ async function computeNightlyTarballURL( /(.*?)<\/buildNumber>/, ); if (!buildNumberMatch) { - urlLog(`Could not find a tag that matches the regex!`, 'error'); return ''; } const buildNumber = buildNumberMatch[1]; const fullVersion = `${version}-${timestamp}-${buildNumber}`; const finalUrl = `https://central.sonatype.com/repository/maven-snapshots/com/facebook/react/${artifactCoordinate}/${version}-SNAPSHOT/${artifactCoordinate}-${fullVersion}-${artifactName}`; - urlLog(`Final artifact URL found: ${finalUrl}`); return finalUrl; } From 918e4226200e5eb66975b8c9338cfc9b184967e2 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 12:05:13 +0100 Subject: [PATCH 009/312] [RN][CI]Fix prebuilds for stable releases (#52503) --- .github/workflows/prebuild-ios-core.yml | 2 +- packages/rn-tester/Podfile.lock | 1360 ++++++----------------- 2 files changed, 333 insertions(+), 1029 deletions(-) diff --git a/.github/workflows/prebuild-ios-core.yml b/.github/workflows/prebuild-ios-core.yml index e4983229f64..4921aba754a 100644 --- a/.github/workflows/prebuild-ios-core.yml +++ b/.github/workflows/prebuild-ios-core.yml @@ -83,7 +83,7 @@ jobs: # Move the XCFramework in the destination directory mv /tmp/third-party/packages/react-native/third-party/ReactNativeDependencies.xcframework packages/react-native/third-party/ReactNativeDependencies.xcframework - VERSION=$(jq -r '.version' package.json) + VERSION=$(jq -r '.version' packages/react-native/package.json) echo "$VERSION-${{matrix.flavor}}" > "packages/react-native/third-party/version.txt" cat "packages/react-native/third-party/version.txt" # Check destination directory diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 2a568e1874e..d503ff9c511 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -1,30 +1,10 @@ PODS: - - boost (1.84.0) - - DoubleConversion (1.1.6) - - fast_float (8.0.0) - FBLazyVector (1000.0.0) - - fmt (11.0.2) - - glog (0.3.5) - hermes-engine (1000.0.0): - - hermes-engine/cdp (= 1000.0.0) - - hermes-engine/Hermes (= 1000.0.0) - - hermes-engine/inspector (= 1000.0.0) - - hermes-engine/inspector_chrome (= 1000.0.0) - - hermes-engine/Public (= 1000.0.0) - - hermes-engine/cdp (1000.0.0) - - hermes-engine/Hermes (1000.0.0) - - hermes-engine/inspector (1000.0.0) - - hermes-engine/inspector_chrome (1000.0.0) - - hermes-engine/Public (1000.0.0) + - hermes-engine/Pre-built (= 1000.0.0) + - hermes-engine/Pre-built (1000.0.0) - MyNativeView (0.80.0-main): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -42,17 +22,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - NativeCxxModuleExample (0.80.0-main): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -70,18 +43,11 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - OCMock (3.9.4) - OSSLibraryExample (0.80.0-main): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -99,27 +65,8 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - RCTDeprecation (1000.0.0) - RCTRequired (1000.0.0) - RCTTypeSafety (1000.0.0): @@ -141,14 +88,7 @@ PODS: - React-RCTVibration (= 1000.0.0) - React-callinvoker (1000.0.0) - React-Core (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default (= 1000.0.0) - React-cxxreact @@ -163,17 +103,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga + - React-Core-prebuilt (1000.0.0): + - ReactNativeDependencies - React-Core/CoreModulesHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -188,18 +123,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/Default (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt (= 1000.0.0) - React-cxxreact - React-featureflags - React-hermes @@ -212,17 +141,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/DevSupport (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default (= 1000.0.0) - React-Core/RCTWebSocket (= 1000.0.0) @@ -238,17 +160,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTActionSheetHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -263,17 +178,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTAnimationHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -288,17 +196,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTBlobHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -313,17 +214,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTImageHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -338,17 +232,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTLinkingHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -363,17 +250,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTNetworkHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -388,17 +268,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTPushNotificationHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -413,17 +286,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTSettingsHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -438,17 +304,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTTextHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -463,17 +322,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTVibrationHeaders (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default - React-cxxreact @@ -488,17 +340,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTWebSocket (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation - React-Core/Default (= 1000.0.0) - React-cxxreact @@ -513,16 +358,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-CoreModules (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety (= 1000.0.0) - React-Core/CoreModulesHeaders (= 1000.0.0) - React-jsi (= 1000.0.0) @@ -535,16 +373,9 @@ PODS: - React-RCTImage (= 1000.0.0) - React-runtimeexecutor - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-cxxreact (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 1000.0.0) - React-debug (= 1000.0.0) - React-jsi (= 1000.0.0) @@ -555,17 +386,10 @@ PODS: - React-perflogger (= 1000.0.0) - React-runtimeexecutor - React-timing (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies - React-debug (1000.0.0) - React-defaultsnativemodule (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-domnativemodule - React-featureflagsnativemodule - React-idlecallbacksnativemodule @@ -573,17 +397,11 @@ PODS: - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - SocketRocket + - ReactNativeDependencies - React-domnativemodule (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-Fabric + - React-Fabric/bridging - React-FabricComponents - React-graphics - React-jsi @@ -591,17 +409,10 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-Fabric (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -609,6 +420,7 @@ PODS: - React-debug - React-Fabric/animations (= 1000.0.0) - React-Fabric/attributedstring (= 1000.0.0) + - React-Fabric/bridging (= 1000.0.0) - React-Fabric/componentregistry (= 1000.0.0) - React-Fabric/componentregistrynative (= 1000.0.0) - React-Fabric/components (= 1000.0.0) @@ -633,16 +445,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/animations (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -658,16 +463,27 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/attributedstring (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - React-Fabric/bridging (1000.0.0): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -683,16 +499,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/componentregistry (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -708,16 +517,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/componentregistrynative (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -733,16 +535,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -762,16 +557,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/legacyviewmanagerinterop (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -787,16 +575,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/root (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -812,16 +593,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/scrollview (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -837,16 +611,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/view (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -863,17 +630,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-Fabric/consistency (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -889,16 +649,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/core (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -914,16 +667,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/dom (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -939,16 +685,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/imagemanager (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -964,16 +703,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/leakchecker (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -989,16 +721,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/mounting (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1014,16 +739,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1040,16 +758,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers/events (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1065,16 +776,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/scheduler (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1092,16 +796,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/telemetry (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1117,16 +814,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/templateprocessor (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1142,16 +832,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/uimanager (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1169,16 +852,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/uimanager/consistency (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1195,16 +871,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-FabricComponents (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1223,17 +892,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1243,11 +905,13 @@ PODS: - React-FabricComponents/components/inputaccessory (= 1000.0.0) - React-FabricComponents/components/iostextinput (= 1000.0.0) - React-FabricComponents/components/modal (= 1000.0.0) + - React-FabricComponents/components/rncore (= 1000.0.0) - React-FabricComponents/components/safeareaview (= 1000.0.0) - React-FabricComponents/components/scrollview (= 1000.0.0) - React-FabricComponents/components/text (= 1000.0.0) - React-FabricComponents/components/textinput (= 1000.0.0) - React-FabricComponents/components/unimplementedview (= 1000.0.0) + - React-FabricComponents/components/virtualview (= 1000.0.0) - React-featureflags - React-graphics - React-jsi @@ -1258,17 +922,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/inputaccessory (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1285,17 +942,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/iostextinput (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1312,17 +962,30 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/modal (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - React-FabricComponents/components/rncore (1000.0.0): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1339,17 +1002,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/safeareaview (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1366,17 +1022,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/scrollview (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1393,17 +1042,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/text (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1420,17 +1062,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/textinput (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1447,17 +1082,30 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/unimplementedview (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - React-FabricComponents/components/virtualview (1000.0.0): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1474,17 +1122,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/textlayoutmanager (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1501,17 +1142,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricImage (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired (= 1000.0.0) - RCTTypeSafety (= 1000.0.0) - React-Fabric @@ -1524,54 +1158,26 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - React-featureflags (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - ReactNativeDependencies - React-featureflagsnativemodule (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-graphics (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-hermes (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-cxxreact (= 1000.0.0) - React-jsi - React-jsiexecutor (= 1000.0.0) @@ -1580,72 +1186,37 @@ PODS: - React-jsinspectortracing - React-perflogger (= 1000.0.0) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-idlecallbacksnativemodule (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-ImageManager (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-Core/Default - React-debug - React-Fabric - React-graphics - React-rendererdebug - React-utils - - SocketRocket + - ReactNativeDependencies - React-jserrorhandler (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-cxxreact - React-debug - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - SocketRocket + - ReactNativeDependencies - React-jsi (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - hermes-engine + - ReactNativeDependencies - React-jsiexecutor (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-cxxreact (= 1000.0.0) - React-jsi (= 1000.0.0) - React-jsinspector @@ -1653,16 +1224,9 @@ PODS: - React-jsinspectortracing - React-perflogger (= 1000.0.0) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-jsinspector (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-featureflags - React-jsi - React-jsinspectorcdp @@ -1670,99 +1234,43 @@ PODS: - React-jsinspectortracing - React-perflogger (= 1000.0.0) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-jsinspectorcdp (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - ReactNativeDependencies - React-jsinspectornetwork (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-featureflags - React-jsinspectorcdp - React-performancetimeline - React-timing - - SocketRocket + - ReactNativeDependencies - React-jsinspectortracing (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-oscompat - React-timing - - SocketRocket + - ReactNativeDependencies - React-jsitooling (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-cxxreact (= 1000.0.0) - React-jsi (= 1000.0.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-jsitracing (1000.0.0): - React-jsi - React-logger (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - ReactNativeDependencies - React-Mapbuffer (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-debug - - SocketRocket + - ReactNativeDependencies - React-microtasksnativemodule (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-NativeModulesApple (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker - React-Core - React-cxxreact @@ -1773,40 +1281,19 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-oscompat (1000.0.0) - React-perflogger (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - ReactNativeDependencies - React-performancetimeline (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-featureflags - React-jsinspectortracing - React-perflogger - React-timing - - SocketRocket + - ReactNativeDependencies - React-RCTActionSheet (1000.0.0): - React-Core/RCTActionSheetHeaders (= 1000.0.0) - React-RCTAnimation (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTAnimationHeaders - React-featureflags @@ -1814,16 +1301,9 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTAppDelegate (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1848,16 +1328,9 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTBlob (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -1867,16 +1340,9 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTFabric (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-Core - React-debug - React-Fabric @@ -1901,17 +1367,10 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-RCTFBReactNativeSpec (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1919,16 +1378,9 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec/components (= 1000.0.0) - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTFBReactNativeSpec/components (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -1941,16 +1393,9 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - React-RCTImage (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi @@ -1958,7 +1403,7 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTLinking (1000.0.0): - React-Core/RCTLinkingHeaders (= 1000.0.0) - React-jsi (= 1000.0.0) @@ -1967,13 +1412,6 @@ PODS: - ReactCommon - ReactCommon/turbomodule/core (= 1000.0.0) - React-RCTNetwork (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-featureflags @@ -1983,7 +1421,7 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTPushNotification (1000.0.0): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders @@ -1992,14 +1430,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - React-RCTRuntime (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-Core - React-jsi - React-jsinspector @@ -2010,75 +1441,40 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes - - SocketRocket + - ReactNativeDependencies - React-RCTSettings (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTTest (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-Core (= 1000.0.0) - React-CoreModules (= 1000.0.0) - React-jsi (= 1000.0.0) - ReactCommon/turbomodule/core (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies - React-RCTText (1000.0.0): - React-Core/RCTTextHeaders (= 1000.0.0) - Yoga - React-RCTVibration (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-rendererconsistency (1000.0.0) - React-renderercss (1000.0.0): - React-debug - React-utils - React-rendererdebug (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - React-debug - - SocketRocket + - ReactNativeDependencies - React-RuntimeApple (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker - React-Core/Default - React-CoreModules @@ -2098,16 +1494,9 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - React-RuntimeCore (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-cxxreact - React-Fabric - React-featureflags @@ -2120,18 +1509,15 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - React-runtimeexecutor (1000.0.0): + - React-debug + - React-featureflags - React-jsi (= 1000.0.0) + - React-utils + - ReactNativeDependencies - React-RuntimeHermes (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-featureflags - React-hermes - React-jsi @@ -2143,16 +1529,9 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-runtimescheduler (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker - React-cxxreact - React-debug @@ -2165,31 +1544,17 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - SocketRocket + - ReactNativeDependencies - React-timing (1000.0.0) - React-utils (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-debug - React-jsi (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies - ReactAppDependencyProvider (1000.0.0): - ReactCodegen - ReactCodegen (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -2206,42 +1571,21 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - ReactCommon (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - ReactCommon/turbomodule (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies - ReactCommon-Samples (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-Core - React-cxxreact - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 1000.0.0) - React-cxxreact (= 1000.0.0) - React-jsi (= 1000.0.0) @@ -2249,31 +1593,17 @@ PODS: - React-perflogger (= 1000.0.0) - ReactCommon/turbomodule/bridging (= 1000.0.0) - ReactCommon/turbomodule/core (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule/bridging (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 1000.0.0) - React-cxxreact (= 1000.0.0) - React-jsi (= 1000.0.0) - React-logger (= 1000.0.0) - React-perflogger (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule/core (1000.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 1000.0.0) - React-cxxreact (= 1000.0.0) - React-debug (= 1000.0.0) @@ -2282,16 +1612,10 @@ PODS: - React-logger (= 1000.0.0) - React-perflogger (= 1000.0.0) - React-utils (= 1000.0.0) - - SocketRocket + - ReactNativeDependencies + - ReactNativeDependencies (1000.0.0) - ScreenshotManager (0.80.0-main): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core @@ -2309,30 +1633,24 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - SocketRocket (0.7.1) - Yoga (0.0.0) DEPENDENCIES: - - boost (from `../react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../react-native/third-party-podspecs/DoubleConversion.podspec`) - - fast_float (from `../react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../react-native/Libraries/FBLazyVector`) - - fmt (from `../react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../react-native/sdks/hermes-engine/hermes-engine.podspec`) - MyNativeView (from `NativeComponentExample`) - NativeCxxModuleExample (from `NativeCxxModuleExample`) - OCMock (~> 3.9.1) - OSSLibraryExample (from `../react-native-test-library`) - - RCT-Folly (from `../react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../react-native/Libraries/Required`) - RCTTypeSafety (from `../react-native/Libraries/TypeSafety`) - React (from `../react-native/`) - React-callinvoker (from `../react-native/ReactCommon/callinvoker`) - React-Core (from `../react-native/`) + - React-Core-prebuilt (from `../react-native/React-Core-prebuilt.podspec`) - React-Core/RCTWebSocket (from `../react-native/`) - React-CoreModules (from `../react-native/React/CoreModules`) - React-cxxreact (from `../react-native/ReactCommon/cxxreact`) @@ -2393,28 +1711,17 @@ DEPENDENCIES: - ReactCodegen (from `build/generated/ios`) - ReactCommon-Samples (from `../react-native/ReactCommon/react/nativemodule/samples`) - ReactCommon/turbomodule/core (from `../react-native/ReactCommon`) + - ReactNativeDependencies (from `../react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - ScreenshotManager (from `NativeModuleExample`) - - SocketRocket (~> 0.7.1) - Yoga (from `../react-native/ReactCommon/yoga`) SPEC REPOS: trunk: - OCMock - - SocketRocket EXTERNAL SOURCES: - boost: - :podspec: "../react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../react-native/third-party-podspecs/DoubleConversion.podspec" - fast_float: - :podspec: "../react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../react-native/sdks/hermes-engine/hermes-engine.podspec" :tag: '' @@ -2424,8 +1731,6 @@ EXTERNAL SOURCES: :path: NativeCxxModuleExample OSSLibraryExample: :path: "../react-native-test-library" - RCT-Folly: - :podspec: "../react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: :path: "../react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: @@ -2438,6 +1743,8 @@ EXTERNAL SOURCES: :path: "../react-native/ReactCommon/callinvoker" React-Core: :path: "../react-native/" + React-Core-prebuilt: + :podspec: "../react-native/React-Core-prebuilt.podspec" React-CoreModules: :path: "../react-native/React/CoreModules" React-cxxreact: @@ -2556,93 +1863,90 @@ EXTERNAL SOURCES: :path: "../react-native/ReactCommon" ReactCommon-Samples: :path: "../react-native/ReactCommon/react/nativemodule/samples" + ReactNativeDependencies: + :podspec: "../react-native/third-party-podspecs/ReactNativeDependencies.podspec" ScreenshotManager: :path: NativeModuleExample Yoga: :path: "../react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: d3c2dd739a63c1a124e775df075dc7c517a719cb - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: fd5605ca4043c8317548d649d0b64e5dafc2a124 - MyNativeView: 9b03b64f5cd9220bf7ef49fcdfc468effe704fa0 - NativeCxxModuleExample: 2897d5f3aee8a02dd201a3dd41fbc94ada1aac5e + FBLazyVector: a70cb77984903b97f5d310db7ecb0c69310c575d + hermes-engine: 03acd1d398759cd3ad47def33503c2c777f01a23 + MyNativeView: c9322d1415339ef2828d7b108491c5a2c0be4068 + NativeCxxModuleExample: adb8f3907b14b2909bf66fb81ef6dba4b53e14ac OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 - OSSLibraryExample: bf5b5a4238613dae3c536faff58f87528e6191cf - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 3808e36294137f9ee5668f4df2e73dc079cd1dcf - RCTRequired: a00614e2da5344c2cda3d287050b6cee00e21dc6 - RCTTypeSafety: 459a16418c6b413060d35434ba3e83f5b0bd2651 - React: 170a01a19ba2525ab7f11243e2df6b19bf268093 - React-callinvoker: f08f425e4043cd1998a158b6e39a6aed1fd1d718 - React-Core: d35c5cf69898fd026e5cd93a0454b1d42e999d3e - React-CoreModules: 3ce1d43f6cc37f43759ec543ce1c0010080f1de1 - React-cxxreact: 3169b106af8f405e182d131d3a0844201e3252e2 - React-debug: 195df38487d3f48a7af04deddeb4a5c6d4440416 - React-defaultsnativemodule: 8afea5a4bd07addb523bf48489b8a684ea1bdff0 - React-domnativemodule: 8a813559774e65bc800fe489bbb454cd546f21d7 - React-Fabric: e9846203f11ab49be8b1329c76301bbd399ef2ad - React-FabricComponents: 032d6f01f1d6966633418c0fece18f698ddb7897 - React-FabricImage: 264c9ce5241e43e25b94c8de55ac6c3c8a046472 - React-featureflags: 595651ea13c63a9f77f06d9a1973b665b4a28b7e - React-featureflagsnativemodule: 06823479a2ee210cfa0e9c19447c2722a8d995f2 - React-graphics: 1f99b9b5515eac389f0cf9c85b03abc366d6a933 - React-hermes: 745eb45a6d0aae7e890d0aae0def54670bbd103c - React-idlecallbacksnativemodule: 4e65f183318b8a0fbabc481a4eafc0f0d62d1cbf - React-ImageManager: a6833445e17879933378b7c0ba45ee42115c14bc - React-jserrorhandler: bec134a192c50338193544404d45df24fb8a19ca - React-jsi: 4ad77650fb0ca4229569eb2532db7a87e3d12662 - React-jsiexecutor: fa5b80bdbe1ceffc33a892da20fc07b4dfa4df7a - React-jsinspector: 10b5dc4eef2a3d05b80be2114ed676496c5bf59c - React-jsinspectorcdp: 5fb266e5f23d3a2819ba848e9d4d0b6b00f95934 - React-jsinspectornetwork: 1655a81f3fe14789df41e063bd56dd130cc3562a - React-jsinspectortracing: 5b0be488e06958a572e1badfe8509929ae1cc83b - React-jsitooling: 9e563b89f94cf4baf872fe47105d60ae83f4ce4d - React-jsitracing: ce443686f52538d1033ce7db1e7d643e866262f0 - React-logger: 116c3ae5a9906671d157aa00882a5ee75a5a7ebc - React-Mapbuffer: fc937cfa41140d7724c559c3d16c50dd725361c8 - React-microtasksnativemodule: 09899c7389250279bdcc5384f0281bb069979855 - React-NativeModulesApple: d05b718ccd8b68c184e76dbc1efb63385197595b - React-oscompat: 7133e0e945cda067ae36b22502df663d73002864 - React-perflogger: ada3cdf3dfc8b7cd1fabe3c91b672e23981611ab - React-performancetimeline: e7d5849d89ee39557dcd56dfb6e7b0d49003d925 - React-RCTActionSheet: 1bf8cc8086ad1c15da3407dfb7bc9dd94dc7595d - React-RCTAnimation: 263593e66c89bf810604b1ace15dfa382a1ca2df - React-RCTAppDelegate: 3a99437ffa7460f85045de65f9bed6b1c47d5f09 - React-RCTBlob: 7b76230c53fe87d305eeeb250b0aae031bb6cbae - React-RCTFabric: 2fd2ef899c7219fd39fd61c39750510f88a81434 - React-RCTFBReactNativeSpec: 4ed3b463eb26726b04ac65c73797207ecab5634c - React-RCTImage: de404b6b0ebe53976a97e3a0dee819c83e12977b - React-RCTLinking: 06742cfad41c506091403a414370743a4ed75af3 - React-RCTNetwork: b4577eec0092c16d8996e415e4cac7a372d6d362 - React-RCTPushNotification: ea11178d499696516e0ff9ae335edbe99b06f94b - React-RCTRuntime: 925039e78fc530e0421c308ccc607f214f3c7be1 - React-RCTSettings: d3c2dd305ec81f7faf42762ec598d57f07fd43be - React-RCTTest: 2db46eda60bc2228cb67622a580e8e86b00088d9 - React-RCTText: e416825b80c530647040ef91d23ffd35ccc87981 - React-RCTVibration: 1837a27fc16eeffc9509779c3334fde54c012bcc - React-rendererconsistency: 777c894edc43dde01499189917ac54ee76ae6a6a - React-renderercss: a9cb6ba7f49a80dc4b4f7008bae1590d12f27049 - React-rendererdebug: fea8bde927403a198742b2d940a5f1cd8230c0b4 - React-RuntimeApple: 6a0c164a8855edb4987b90da2d4d8601302de72d - React-RuntimeCore: 6dec37113b759b76641bd028bfbbbec8cf923356 - React-runtimeexecutor: a16a24b964e964afe833a652d703e1bb39f10dc9 - React-RuntimeHermes: d4f661204d3061219a63951eb4efed4dcaf3f12f - React-runtimescheduler: ae44fe8b4170a9d59f62e8b7d7b060c179db739d - React-timing: 9d49179631e5e3c759e6e82d4c613c73da80a144 - React-utils: 0944df8d553d66b27f486282c42a84a969fd2f6c - ReactAppDependencyProvider: 68f2d2cefd6c9b9f2865246be2bfe86ebd49238d - ReactCodegen: 8fc4c8b6562a59409b5650e67f78719093d093bf - ReactCommon: a53973ab35d399560ace331ec9e2b26db0592cec - ReactCommon-Samples: dcc128cbf51ac38d2578791750d0a046d1b8a5e9 - ScreenshotManager: 6ac0b11c7bbd5cf1abd9448fb3b856fe6fd65ff7 - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: c4e80f1c2235fa6236d71a49e5bb2ee74d987921 + OSSLibraryExample: b4281d9099bcbf375be15c3144abdb6950d2f1b0 + RCTDeprecation: 706a006feee48f95f8b956eb573bcac0894d917e + RCTRequired: 608228b5b851062fd9f155f70600c6bb85b260ac + RCTTypeSafety: 74ea02cd0c954ca237425e917d3ad1bb4fd53ad0 + React: c451d95357b4d80bbe5b23d605b6a51f35990bd0 + React-callinvoker: 69e958049d5940b70c42cd3fbed2de2e5f3bee9c + React-Core: 5d9006704388f09d59b6587baf0cbe23b8a89bd0 + React-Core-prebuilt: be4d8e00b90cc0a08a47bce0ca44bbb2d7433a85 + React-CoreModules: 8e4e53f802bde5adf71d26746ca64bb72080c563 + React-cxxreact: a04da83ae1bab6a167498a2a397beee2b5221594 + React-debug: 473377ab43ade07fd67f219f5780f6c6db3c22ef + React-defaultsnativemodule: 98841de1855a37bff1ef67276a677e103230c4bc + React-domnativemodule: 707c47fba7c75367c3c5e680aac137007af2ce72 + React-Fabric: 17b322e77b094a1d8897ebd59164f638692c1c67 + React-FabricComponents: 8ae9205e7311e19ace3b36092427ace877289dd3 + React-FabricImage: cd074a7d16ee7ad15a3ef97752f598aae03131eb + React-featureflags: ae70d503b31628c702edcd413a611bf0c0105575 + React-featureflagsnativemodule: d29bbcf8fd639d02b6d4951c5f764ec99c09c7c6 + React-graphics: 0c371c62461a18153d878343abb7b0b97057b944 + React-hermes: 3f34efa3f5135ea1ae2de230a14a444fb4ce7ec3 + React-idlecallbacksnativemodule: 07b5e9e5972924e25c3b76f3bc4190607f84027d + React-ImageManager: 98385572fcbae8a4fd8b92e7bf02c0193e3dd781 + React-jserrorhandler: 26bc769d6fb8dc1af03297434231c5f61c51cb25 + React-jsi: 94ebd22684f3d6a31cb6fb9e8d0ebc56df2d1e35 + React-jsiexecutor: bfab666ba0c1e6d95fb19438a4f83586e59c8de1 + React-jsinspector: a4e8886a3586348397daef853d5e61b05563f16a + React-jsinspectorcdp: 307c3165aea069e6da65e0986a9c749c30d1e4c3 + React-jsinspectornetwork: e1afc4c88aade4577cf8dec749392ee7710c50ab + React-jsinspectortracing: fc5710671b94228ac23789a63e70862afaf823b3 + React-jsitooling: 029c1dbed4da424ca9edf79e83796c1b31e1ac8e + React-jsitracing: f1f47bf8a0596208b9a27efc1d22d24bfe88af86 + React-logger: 81c884511727687ee2c403036deb6c1b518e312a + React-Mapbuffer: bb5dfa5840cde36e49dfb29f85ed2fc9c1d28041 + React-microtasksnativemodule: a976a928ddce0496860c877a6a5e591c30598180 + React-NativeModulesApple: 011aa3172eb6b2140afed3d402b5ad17a6dbf47e + React-oscompat: 5c0f2521e775431a4de44faef9766053eddf4da3 + React-perflogger: 798855126031795074c84f110b4f3c9bb97be7b3 + React-performancetimeline: c9902c6eb15181562a5e5e59ebcec4afa526f8a2 + React-RCTActionSheet: 7ae118d8ab2300bd5810b785c14bd020412cd457 + React-RCTAnimation: 756d86658c533d8c7e15281a69ee2db4b9c3d29f + React-RCTAppDelegate: b7c27a5bc0e3e6c7d1dff025b3f407df54490a5d + React-RCTBlob: ee5967d3c2642aa5e2d6182aa1a74312a0602129 + React-RCTFabric: d0098aa8a1abae3eb1bd8c083c86665cbabf0a36 + React-RCTFBReactNativeSpec: e5e0cf25834c7283f3e7347e5fb2472f387d2177 + React-RCTImage: 144fe50a30c529003c1f40d226e3d0c93b8b3921 + React-RCTLinking: b5453e32444504f7e85fce929120d9cc8fe71b51 + React-RCTNetwork: 540f12d345f194c5cbc48dee3ff2a4f9b23cf529 + React-RCTPushNotification: db9adfa0d4cb02f4f0eb35cf399b04dd7f373641 + React-RCTRuntime: a37225a76659365c9936bf7d136b5a9bd8c3a6d9 + React-RCTSettings: 50d1d2ba0e1785d1c87d12c804bb4d8b245478c9 + React-RCTTest: f7855cb8ea1a8c0e4dad9a5a3e34545ab1e36a66 + React-RCTText: eb8742f80de47f0f3e70ea4342a3f137f08fecfd + React-RCTVibration: 08ee8f5e40b4f91315edd26eed0e69f2bf33b3cc + React-rendererconsistency: 58805fe61e9a32aff90ac0cb50d37bbe37e20abd + React-renderercss: b59b0c24f95cb44e5f3ef60419a8dbc65fc668be + React-rendererdebug: 4ebe254e85f73be9b4b17b1623204fa3bfd7d784 + React-RuntimeApple: 4278635a95c9eb3a2f70d91bc25a479d18df3293 + React-RuntimeCore: fd9f49bd78aff7138638ccfc41b7e991fcdeda79 + React-runtimeexecutor: e07f8b686d6ba322f54436162bad5816a1491405 + React-RuntimeHermes: fc040cfd25ae70184700a28f10cd2c9a2b0e1fb7 + React-runtimescheduler: 5a351fc4809232ca78e6ba487fd41399651d9801 + React-timing: 9899af75e36fafc429502f0045cb308b91b75d3a + React-utils: aa546242375e1acf6423b627aa226289b6f74298 + ReactAppDependencyProvider: 8eb75f4c2dbcc219259c044b7b00321e656bed31 + ReactCodegen: 20456cab74e72dfabec28899bfdb446d05e42b98 + ReactCommon: 2c0a12478cfa27ef072266ce4b531bc3d0ff664d + ReactCommon-Samples: faf5877dd577b3bed559d829639258341a6e11d0 + ReactNativeDependencies: c1f621d1b95272f3b6ed6f5b29691ce83cd391f2 + ScreenshotManager: abe82a83dd07cedf107cd4d225369f62a587bc31 + Yoga: fb04f4d85dfcdcd30ffdc741ea3984582d645d9b -PODFILE CHECKSUM: 8591f96a513620a2a83a0b9a125ad3fa32ea1369 +PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 COCOAPODS: 1.15.2 From 1fc81fe2169863de2c302ad6d8f77097925ee336 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Wed, 9 Jul 2025 11:08:15 +0000 Subject: [PATCH 010/312] Release 0.81.0-rc.0 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 6 +++--- packages/react-native/React/Base/RCTVersion.m | 6 +++--- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 6 +++--- .../ReactCommon/cxxreact/ReactNativeVersion.h | 10 +++++----- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 10 +++++----- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 74 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 84b36a75d70..1a4653e8cb0 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-main", - "@react-native/metro-config": "0.81.0-main", + "@react-native/metro-babel-transformer": "0.81.0-rc.0", + "@react-native/metro-config": "0.81.0-rc.0", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 1b15cd15041..cae6eddfe14 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 0be39ceb922..ebb1df1cfa9 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 92dba5dace2..41bf955e7a8 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-main", + "@react-native/dev-middleware": "0.81.0-rc.0", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.82.5", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 24f6810e3aa..68fefa3d1fc 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 8ca79a5c39d..cec04847ce7 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index cbafe6bf36b..d23321b76bc 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index ece94b94e65..2af12dd8b65 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-main", + "@react-native/debugger-frontend": "0.81.0-rc.0", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 10ead7344c5..95945f8bdcb 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-main", + "@react-native/eslint-plugin": "0.81.0-rc.0", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 48263c87d2c..65b675b0962 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 299f145e4e6..545ba38d2ba 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-main", + "@react-native/codegen": "0.81.0-rc.0", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 5897ef53b24..9c48d9809d4 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index fb0d4556cfb..32aa6bc4e3f 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-main", - "@react-native/metro-babel-transformer": "0.81.0-main", + "@react-native/js-polyfills": "0.81.0-rc.0", + "@react-native/metro-babel-transformer": "0.81.0-rc.0", "metro-config": "^0.82.5", "metro-runtime": "^0.82.5" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index ccfe78e7afa..a8f7353e1c0 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 48b016fcb2b..938369d2aad 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index baf6f178868..d575a5a1ef2 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 17aaae7809a..0d6f2e93ecc 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-main", + "@react-native/babel-plugin-codegen": "0.81.0-rc.0", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index bf4a934ebcc..0e2eebf74a1 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-main", + "@react-native/babel-preset": "0.81.0-rc.0", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 16068f79d45..b547ea6c1da 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index abe99392696..5d07f5a4900 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 38344be5bf0..aeaeba0f479 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 96311c75092..220d35a9bc8 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-main", - "react-native": "1000.0.0" + "@react-native/babel-preset": "0.81.0-rc.0", + "react-native": "0.81.0-rc.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index cfee63f4dae..3fdfc0f156b 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -15,8 +15,8 @@ export const version: $ReadOnly<{ patch: number, prerelease: string | null, }> = { - major: 1000, - minor: 0, + major: 0, + minor: 81, patch: 0, - prerelease: null, + prerelease: 'rc.0', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 69ce4f75320..b8737d7bd19 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -21,10 +21,10 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^(void){ __rnVersion = @{ - RCTVersionMajor: @(1000), - RCTVersionMinor: @(0), + RCTVersionMajor: @(0), + RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: [NSNull null], + RCTVersionPrerelease: @"rc.0", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 7c0c467db7a..d145451dbe1 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1000.0.0 +VERSION_NAME=0.81.0-rc.0 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 2405d32ce68..29cb572f085 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -12,9 +12,9 @@ package com.facebook.react.modules.systeminfo public object ReactNativeVersion { @JvmField public val VERSION: Map = mapOf( - "major" to 1000, - "minor" to 0, + "major" to 0, + "minor" to 81, "patch" to 0, - "prerelease" to null + "prerelease" to "rc.0" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 0c876d971a6..b3488570cbb 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -12,17 +12,17 @@ #include #include -#define REACT_NATIVE_VERSION_MAJOR 1000 -#define REACT_NATIVE_VERSION_MINOR 0 +#define REACT_NATIVE_VERSION_MAJOR 0 +#define REACT_NATIVE_VERSION_MINOR 81 #define REACT_NATIVE_VERSION_PATCH 0 namespace facebook::react { constexpr struct { - int32_t Major = 1000; - int32_t Minor = 0; + int32_t Major = 0; + int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = ""; + std::string_view Prerelease = "rc.0"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 8c40a5c8a24..fe00343737e 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "1000.0.0", + "version": "0.81.0-rc.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -160,13 +160,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-main", - "@react-native/codegen": "0.81.0-main", - "@react-native/community-cli-plugin": "0.81.0-main", - "@react-native/gradle-plugin": "0.81.0-main", - "@react-native/js-polyfills": "0.81.0-main", - "@react-native/normalize-colors": "0.81.0-main", - "@react-native/virtualized-lists": "0.81.0-main", + "@react-native/assets-registry": "0.81.0-rc.0", + "@react-native/codegen": "0.81.0-rc.0", + "@react-native/community-cli-plugin": "0.81.0-rc.0", + "@react-native/gradle-plugin": "0.81.0-rc.0", + "@react-native/js-polyfills": "0.81.0-rc.0", + "@react-native/normalize-colors": "0.81.0-rc.0", + "@react-native/virtualized-lists": "0.81.0-rc.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 6d32169ee71..951e69765b4 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -838,7 +838,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -876,7 +876,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"1000.0.0\\" +version = \\"0.81.0-rc.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -980,4 +980,4 @@ SCRIPT end " -`; +`; \ No newline at end of file diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 9c6463d3367..b80d825f4e6 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-main", - "@react-native/popup-menu-android": "0.81.0-main", + "@react-native/new-app-screen": "0.81.0-rc.0", + "@react-native/popup-menu-android": "0.81.0-rc.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 3a706f61b28..b455336782f 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index dd596f66ec2..ba68327908d 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-main", + "version": "0.81.0-rc.0", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index daa3725bc16..598ae89bbf4 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "1000.0.0" + "react-native": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-main", - "@react-native/core-cli-utils": "0.81.0-main", - "@react-native/eslint-config": "0.81.0-main", - "@react-native/metro-config": "0.81.0-main", - "@react-native/typescript-config": "0.81.0-main", + "@react-native/babel-preset": "0.81.0-rc.0", + "@react-native/core-cli-utils": "0.81.0-rc.0", + "@react-native/eslint-config": "0.81.0-rc.0", + "@react-native/metro-config": "0.81.0-rc.0", + "@react-native/typescript-config": "0.81.0-rc.0", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index b5edd1b1739..edd0d521570 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-main" + "@react-native/codegen": "0.81.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", From 87c8e687d952c8d5afbb726230b777bc949a47c7 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 14:34:56 +0100 Subject: [PATCH 011/312] [LOCAL] Bump podfile.lock --- packages/rn-tester/Podfile.lock | 1790 ++++++++++++++++++++++--------- 1 file changed, 1286 insertions(+), 504 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index d503ff9c511..8aa66016ade 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -1,10 +1,22 @@ PODS: - - FBLazyVector (1000.0.0) - - hermes-engine (1000.0.0): - - hermes-engine/Pre-built (= 1000.0.0) - - hermes-engine/Pre-built (1000.0.0) - - MyNativeView (0.80.0-main): - - hermes-engine + - boost (1.84.0) + - DoubleConversion (1.1.6) + - fast_float (8.0.0) + - FBLazyVector (0.81.0-rc.0) + - fmt (11.0.2) + - glog (0.3.5) + - hermes-engine (0.81.0-rc.0): + - hermes-engine/Pre-built (= 0.81.0-rc.0) + - hermes-engine/Pre-built (0.81.0-rc.0) + - MyNativeView (0.81.0-main): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -22,10 +34,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - NativeCxxModuleExample (0.80.0-main): - - hermes-engine + - NativeCxxModuleExample (0.81.0-main): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -43,11 +62,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - OCMock (3.9.4) - - OSSLibraryExample (0.80.0-main): - - hermes-engine + - OSSLibraryExample (0.81.0-main): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -65,32 +91,58 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - RCTDeprecation (1000.0.0) - - RCTRequired (1000.0.0) - - RCTTypeSafety (1000.0.0): - - FBLazyVector (= 1000.0.0) - - RCTRequired (= 1000.0.0) - - React-Core (= 1000.0.0) - - React (1000.0.0): - - React-Core (= 1000.0.0) - - React-Core/DevSupport (= 1000.0.0) - - React-Core/RCTWebSocket (= 1000.0.0) - - React-RCTActionSheet (= 1000.0.0) - - React-RCTAnimation (= 1000.0.0) - - React-RCTBlob (= 1000.0.0) - - React-RCTImage (= 1000.0.0) - - React-RCTLinking (= 1000.0.0) - - React-RCTNetwork (= 1000.0.0) - - React-RCTSettings (= 1000.0.0) - - React-RCTText (= 1000.0.0) - - React-RCTVibration (= 1000.0.0) - - React-callinvoker (1000.0.0) - - React-Core (1000.0.0): - - hermes-engine + - RCT-Folly (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCTDeprecation (0.81.0-rc.0) + - RCTRequired (0.81.0-rc.0) + - RCTTypeSafety (0.81.0-rc.0): + - FBLazyVector (= 0.81.0-rc.0) + - RCTRequired (= 0.81.0-rc.0) + - React-Core (= 0.81.0-rc.0) + - React (0.81.0-rc.0): + - React-Core (= 0.81.0-rc.0) + - React-Core/DevSupport (= 0.81.0-rc.0) + - React-Core/RCTWebSocket (= 0.81.0-rc.0) + - React-RCTActionSheet (= 0.81.0-rc.0) + - React-RCTAnimation (= 0.81.0-rc.0) + - React-RCTBlob (= 0.81.0-rc.0) + - React-RCTImage (= 0.81.0-rc.0) + - React-RCTLinking (= 0.81.0-rc.0) + - React-RCTNetwork (= 0.81.0-rc.0) + - React-RCTSettings (= 0.81.0-rc.0) + - React-RCTText (= 0.81.0-rc.0) + - React-RCTVibration (= 0.81.0-rc.0) + - React-callinvoker (0.81.0-rc.0) + - React-Core (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 1000.0.0) + - React-Core/Default (= 0.81.0-rc.0) - React-cxxreact - React-featureflags - React-hermes @@ -103,12 +155,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core-prebuilt (1000.0.0): - - ReactNativeDependencies - - React-Core/CoreModulesHeaders (1000.0.0): - - hermes-engine + - React-Core/CoreModulesHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -123,12 +180,18 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/Default (1000.0.0): - - hermes-engine + - React-Core/Default (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - - React-Core-prebuilt (= 1000.0.0) - React-cxxreact - React-featureflags - React-hermes @@ -141,13 +204,20 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/DevSupport (1000.0.0): - - hermes-engine + - React-Core/DevSupport (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 1000.0.0) - - React-Core/RCTWebSocket (= 1000.0.0) + - React-Core/Default (= 0.81.0-rc.0) + - React-Core/RCTWebSocket (= 0.81.0-rc.0) - React-cxxreact - React-featureflags - React-hermes @@ -160,10 +230,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTActionSheetHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -178,10 +255,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTAnimationHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -196,10 +280,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTBlobHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -214,10 +305,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTImageHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTImageHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -232,10 +330,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTLinkingHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -250,10 +355,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTNetworkHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -268,10 +380,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTPushNotificationHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -286,10 +405,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTSettingsHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -304,10 +430,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTTextHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTTextHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -322,10 +455,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (1000.0.0): - - hermes-engine + - React-Core/RCTVibrationHeaders (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - React-Core/Default - React-cxxreact @@ -340,12 +480,19 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Core/RCTWebSocket (1000.0.0): - - hermes-engine + - React-Core/RCTWebSocket (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 1000.0.0) + - React-Core/Default (= 0.81.0-rc.0) - React-cxxreact - React-featureflags - React-hermes @@ -358,38 +505,59 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-CoreModules (1000.0.0): - - RCTTypeSafety (= 1000.0.0) - - React-Core/CoreModulesHeaders (= 1000.0.0) - - React-jsi (= 1000.0.0) + - React-CoreModules (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety (= 0.81.0-rc.0) + - React-Core/CoreModulesHeaders (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 1000.0.0) + - React-RCTImage (= 0.81.0-rc.0) - React-runtimeexecutor - ReactCommon - - ReactNativeDependencies - - React-cxxreact (1000.0.0): - - hermes-engine - - React-callinvoker (= 1000.0.0) - - React-debug (= 1000.0.0) - - React-jsi (= 1000.0.0) + - SocketRocket + - React-cxxreact (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.0-rc.0) + - React-debug (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 1000.0.0) - - React-perflogger (= 1000.0.0) + - React-logger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.0) - React-runtimeexecutor - - React-timing (= 1000.0.0) - - ReactNativeDependencies - - React-debug (1000.0.0) - - React-defaultsnativemodule (1000.0.0): - - hermes-engine + - React-timing (= 0.81.0-rc.0) + - SocketRocket + - React-debug (0.81.0-rc.0) + - React-defaultsnativemodule (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-domnativemodule - React-featureflagsnativemodule - React-idlecallbacksnativemodule @@ -397,9 +565,16 @@ PODS: - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - ReactNativeDependencies - - React-domnativemodule (1000.0.0): - - hermes-engine + - SocketRocket + - React-domnativemodule (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-Fabric - React-Fabric/bridging - React-FabricComponents @@ -409,32 +584,39 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Fabric (1000.0.0): - - hermes-engine + - React-Fabric (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 1000.0.0) - - React-Fabric/attributedstring (= 1000.0.0) - - React-Fabric/bridging (= 1000.0.0) - - React-Fabric/componentregistry (= 1000.0.0) - - React-Fabric/componentregistrynative (= 1000.0.0) - - React-Fabric/components (= 1000.0.0) - - React-Fabric/consistency (= 1000.0.0) - - React-Fabric/core (= 1000.0.0) - - React-Fabric/dom (= 1000.0.0) - - React-Fabric/imagemanager (= 1000.0.0) - - React-Fabric/leakchecker (= 1000.0.0) - - React-Fabric/mounting (= 1000.0.0) - - React-Fabric/observers (= 1000.0.0) - - React-Fabric/scheduler (= 1000.0.0) - - React-Fabric/telemetry (= 1000.0.0) - - React-Fabric/templateprocessor (= 1000.0.0) - - React-Fabric/uimanager (= 1000.0.0) + - React-Fabric/animations (= 0.81.0-rc.0) + - React-Fabric/attributedstring (= 0.81.0-rc.0) + - React-Fabric/bridging (= 0.81.0-rc.0) + - React-Fabric/componentregistry (= 0.81.0-rc.0) + - React-Fabric/componentregistrynative (= 0.81.0-rc.0) + - React-Fabric/components (= 0.81.0-rc.0) + - React-Fabric/consistency (= 0.81.0-rc.0) + - React-Fabric/core (= 0.81.0-rc.0) + - React-Fabric/dom (= 0.81.0-rc.0) + - React-Fabric/imagemanager (= 0.81.0-rc.0) + - React-Fabric/leakchecker (= 0.81.0-rc.0) + - React-Fabric/mounting (= 0.81.0-rc.0) + - React-Fabric/observers (= 0.81.0-rc.0) + - React-Fabric/scheduler (= 0.81.0-rc.0) + - React-Fabric/telemetry (= 0.81.0-rc.0) + - React-Fabric/templateprocessor (= 0.81.0-rc.0) + - React-Fabric/uimanager (= 0.81.0-rc.0) - React-featureflags - React-graphics - React-jsi @@ -445,9 +627,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animations (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/animations (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -463,9 +652,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/attributedstring (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/attributedstring (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -481,9 +677,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/bridging (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/bridging (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -499,9 +702,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistry (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/componentregistry (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -517,9 +727,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistrynative (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/componentregistrynative (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -535,18 +752,25 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/components (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 1000.0.0) - - React-Fabric/components/root (= 1000.0.0) - - React-Fabric/components/scrollview (= 1000.0.0) - - React-Fabric/components/view (= 1000.0.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.0) + - React-Fabric/components/root (= 0.81.0-rc.0) + - React-Fabric/components/scrollview (= 0.81.0-rc.0) + - React-Fabric/components/view (= 0.81.0-rc.0) - React-featureflags - React-graphics - React-jsi @@ -557,9 +781,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/legacyviewmanagerinterop (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -575,9 +806,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/root (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/components/root (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -593,9 +831,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/scrollview (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/components/scrollview (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -611,9 +856,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/view (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/components/view (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -630,10 +882,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-Fabric/consistency (1000.0.0): - - hermes-engine + - React-Fabric/consistency (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -649,9 +908,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/core (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/core (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -667,9 +933,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/dom (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/dom (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -685,9 +958,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/imagemanager (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/imagemanager (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -703,9 +983,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/leakchecker (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/leakchecker (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -721,9 +1008,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/mounting (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/mounting (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -739,15 +1033,22 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/observers (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 1000.0.0) + - React-Fabric/observers/events (= 0.81.0-rc.0) - React-featureflags - React-graphics - React-jsi @@ -758,9 +1059,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/events (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/observers/events (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -776,9 +1084,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/scheduler (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/scheduler (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -796,9 +1111,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/telemetry (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/telemetry (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -814,9 +1136,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/templateprocessor (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/templateprocessor (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -832,15 +1161,22 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/uimanager (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 1000.0.0) + - React-Fabric/uimanager/consistency (= 0.81.0-rc.0) - React-featureflags - React-graphics - React-jsi @@ -852,9 +1188,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager/consistency (1000.0.0): - - hermes-engine + - SocketRocket + - React-Fabric/uimanager/consistency (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -871,17 +1214,24 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-FabricComponents (1000.0.0): - - hermes-engine + - SocketRocket + - React-FabricComponents (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 1000.0.0) - - React-FabricComponents/textlayoutmanager (= 1000.0.0) + - React-FabricComponents/components (= 0.81.0-rc.0) + - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.0) - React-featureflags - React-graphics - React-jsi @@ -892,26 +1242,33 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components (1000.0.0): - - hermes-engine + - React-FabricComponents/components (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 1000.0.0) - - React-FabricComponents/components/iostextinput (= 1000.0.0) - - React-FabricComponents/components/modal (= 1000.0.0) - - React-FabricComponents/components/rncore (= 1000.0.0) - - React-FabricComponents/components/safeareaview (= 1000.0.0) - - React-FabricComponents/components/scrollview (= 1000.0.0) - - React-FabricComponents/components/text (= 1000.0.0) - - React-FabricComponents/components/textinput (= 1000.0.0) - - React-FabricComponents/components/unimplementedview (= 1000.0.0) - - React-FabricComponents/components/virtualview (= 1000.0.0) + - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.0) + - React-FabricComponents/components/iostextinput (= 0.81.0-rc.0) + - React-FabricComponents/components/modal (= 0.81.0-rc.0) + - React-FabricComponents/components/rncore (= 0.81.0-rc.0) + - React-FabricComponents/components/safeareaview (= 0.81.0-rc.0) + - React-FabricComponents/components/scrollview (= 0.81.0-rc.0) + - React-FabricComponents/components/text (= 0.81.0-rc.0) + - React-FabricComponents/components/textinput (= 0.81.0-rc.0) + - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.0) + - React-FabricComponents/components/virtualview (= 0.81.0-rc.0) - React-featureflags - React-graphics - React-jsi @@ -922,10 +1279,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (1000.0.0): - - hermes-engine + - React-FabricComponents/components/inputaccessory (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -942,10 +1306,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (1000.0.0): - - hermes-engine + - React-FabricComponents/components/iostextinput (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -962,10 +1333,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/modal (1000.0.0): - - hermes-engine + - React-FabricComponents/components/modal (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -982,10 +1360,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/rncore (1000.0.0): - - hermes-engine + - React-FabricComponents/components/rncore (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1002,10 +1387,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (1000.0.0): - - hermes-engine + - React-FabricComponents/components/safeareaview (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1022,10 +1414,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (1000.0.0): - - hermes-engine + - React-FabricComponents/components/scrollview (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1042,10 +1441,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/text (1000.0.0): - - hermes-engine + - React-FabricComponents/components/text (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1062,10 +1468,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/textinput (1000.0.0): - - hermes-engine + - React-FabricComponents/components/textinput (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1082,10 +1495,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (1000.0.0): - - hermes-engine + - React-FabricComponents/components/unimplementedview (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1102,10 +1522,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (1000.0.0): - - hermes-engine + - React-FabricComponents/components/virtualview (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1122,10 +1549,17 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (1000.0.0): - - hermes-engine + - React-FabricComponents/textlayoutmanager (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1142,135 +1576,268 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga - - React-FabricImage (1000.0.0): - - hermes-engine - - RCTRequired (= 1000.0.0) - - RCTTypeSafety (= 1000.0.0) + - React-FabricImage (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired (= 0.81.0-rc.0) + - RCTTypeSafety (= 0.81.0-rc.0) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 1000.0.0) + - React-jsiexecutor (= 0.81.0-rc.0) - React-logger - React-rendererdebug - React-utils - ReactCommon - - ReactNativeDependencies + - SocketRocket - Yoga - - React-featureflags (1000.0.0): - - ReactNativeDependencies - - React-featureflagsnativemodule (1000.0.0): - - hermes-engine + - React-featureflags (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-featureflagsnativemodule (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-graphics (1000.0.0): + - SocketRocket + - React-graphics (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-utils - - ReactNativeDependencies - - React-hermes (1000.0.0): + - SocketRocket + - React-hermes (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine - - React-cxxreact (= 1000.0.0) + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.0-rc.0) - React-jsi - - React-jsiexecutor (= 1000.0.0) + - React-jsiexecutor (= 0.81.0-rc.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 1000.0.0) + - React-perflogger (= 0.81.0-rc.0) - React-runtimeexecutor - - ReactNativeDependencies - - React-idlecallbacksnativemodule (1000.0.0): + - SocketRocket + - React-idlecallbacksnativemodule (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-ImageManager (1000.0.0): + - SocketRocket + - React-ImageManager (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-Core/Default - React-debug - React-Fabric - React-graphics - React-rendererdebug - React-utils - - ReactNativeDependencies - - React-jserrorhandler (1000.0.0): + - SocketRocket + - React-jserrorhandler (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-cxxreact - React-debug - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - ReactNativeDependencies - - React-jsi (1000.0.0): - - hermes-engine - - ReactNativeDependencies - - React-jsiexecutor (1000.0.0): - - hermes-engine - - React-cxxreact (= 1000.0.0) - - React-jsi (= 1000.0.0) + - SocketRocket + - React-jsi (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsiexecutor (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 1000.0.0) + - React-perflogger (= 0.81.0-rc.0) - React-runtimeexecutor - - ReactNativeDependencies - - React-jsinspector (1000.0.0): + - SocketRocket + - React-jsinspector (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-featureflags - React-jsi - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 1000.0.0) + - React-perflogger (= 0.81.0-rc.0) - React-runtimeexecutor - - ReactNativeDependencies - - React-jsinspectorcdp (1000.0.0): - - ReactNativeDependencies - - React-jsinspectornetwork (1000.0.0): + - SocketRocket + - React-jsinspectorcdp (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsinspectornetwork (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-featureflags - React-jsinspectorcdp - React-performancetimeline - React-timing - - ReactNativeDependencies - - React-jsinspectortracing (1000.0.0): + - SocketRocket + - React-jsinspectortracing (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-oscompat - React-timing - - ReactNativeDependencies - - React-jsitooling (1000.0.0): - - React-cxxreact (= 1000.0.0) - - React-jsi (= 1000.0.0) + - SocketRocket + - React-jsitooling (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - - ReactNativeDependencies - - React-jsitracing (1000.0.0): - - React-jsi - - React-logger (1000.0.0): - - ReactNativeDependencies - - React-Mapbuffer (1000.0.0): + - SocketRocket + - React-jsitracing (0.81.0-rc.0): + - React-jsi + - React-logger (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-Mapbuffer (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-debug - - ReactNativeDependencies - - React-microtasksnativemodule (1000.0.0): + - SocketRocket + - React-microtasksnativemodule (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-NativeModulesApple (1000.0.0): - - hermes-engine + - SocketRocket + - React-NativeModulesApple (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-callinvoker - React-Core - React-cxxreact @@ -1281,19 +1848,40 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-oscompat (1000.0.0) - - React-perflogger (1000.0.0): - - ReactNativeDependencies - - React-performancetimeline (1000.0.0): + - SocketRocket + - React-oscompat (0.81.0-rc.0) + - React-perflogger (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-performancetimeline (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-featureflags - React-jsinspectortracing - React-perflogger - React-timing - - ReactNativeDependencies - - React-RCTActionSheet (1000.0.0): - - React-Core/RCTActionSheetHeaders (= 1000.0.0) - - React-RCTAnimation (1000.0.0): + - SocketRocket + - React-RCTActionSheet (0.81.0-rc.0): + - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.0) + - React-RCTAnimation (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTAnimationHeaders - React-featureflags @@ -1301,9 +1889,16 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactNativeDependencies - - React-RCTAppDelegate (1000.0.0): - - hermes-engine + - SocketRocket + - React-RCTAppDelegate (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1328,9 +1923,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - ReactNativeDependencies - - React-RCTBlob (1000.0.0): - - hermes-engine + - SocketRocket + - React-RCTBlob (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -1340,9 +1942,16 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - ReactNativeDependencies - - React-RCTFabric (1000.0.0): - - hermes-engine + - SocketRocket + - React-RCTFabric (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-Core - React-debug - React-Fabric @@ -1367,20 +1976,34 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies + - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (1000.0.0): - - hermes-engine + - React-RCTFBReactNativeSpec (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 1000.0.0) + - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.0) - ReactCommon - - ReactNativeDependencies - - React-RCTFBReactNativeSpec/components (1000.0.0): - - hermes-engine + - SocketRocket + - React-RCTFBReactNativeSpec/components (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1393,9 +2016,16 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - ReactNativeDependencies + - SocketRocket - Yoga - - React-RCTImage (1000.0.0): + - React-RCTImage (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi @@ -1403,15 +2033,22 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - ReactNativeDependencies - - React-RCTLinking (1000.0.0): - - React-Core/RCTLinkingHeaders (= 1000.0.0) - - React-jsi (= 1000.0.0) + - SocketRocket + - React-RCTLinking (0.81.0-rc.0): + - React-Core/RCTLinkingHeaders (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 1000.0.0) - - React-RCTNetwork (1000.0.0): + - ReactCommon/turbomodule/core (= 0.81.0-rc.0) + - React-RCTNetwork (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-featureflags @@ -1421,16 +2058,23 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactNativeDependencies - - React-RCTPushNotification (1000.0.0): + - SocketRocket + - React-RCTPushNotification (0.81.0-rc.0): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (1000.0.0): - - hermes-engine + - React-RCTRuntime (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-Core - React-jsi - React-jsinspector @@ -1441,40 +2085,75 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes - - ReactNativeDependencies - - React-RCTSettings (1000.0.0): + - SocketRocket + - React-RCTSettings (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactNativeDependencies - - React-RCTTest (1000.0.0): - - React-Core (= 1000.0.0) - - React-CoreModules (= 1000.0.0) - - React-jsi (= 1000.0.0) - - ReactCommon/turbomodule/core (= 1000.0.0) - - ReactNativeDependencies - - React-RCTText (1000.0.0): - - React-Core/RCTTextHeaders (= 1000.0.0) + - SocketRocket + - React-RCTTest (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core (= 0.81.0-rc.0) + - React-CoreModules (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) + - ReactCommon/turbomodule/core (= 0.81.0-rc.0) + - SocketRocket + - React-RCTText (0.81.0-rc.0): + - React-Core/RCTTextHeaders (= 0.81.0-rc.0) - Yoga - - React-RCTVibration (1000.0.0): + - React-RCTVibration (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactNativeDependencies - - React-rendererconsistency (1000.0.0) - - React-renderercss (1000.0.0): + - SocketRocket + - React-rendererconsistency (0.81.0-rc.0) + - React-renderercss (0.81.0-rc.0): - React-debug - React-utils - - React-rendererdebug (1000.0.0): + - React-rendererdebug (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-debug - - ReactNativeDependencies - - React-RuntimeApple (1000.0.0): - - hermes-engine + - SocketRocket + - React-RuntimeApple (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-callinvoker - React-Core/Default - React-CoreModules @@ -1494,9 +2173,16 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - ReactNativeDependencies - - React-RuntimeCore (1000.0.0): + - SocketRocket + - React-RuntimeCore (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-cxxreact - React-Fabric - React-featureflags @@ -1509,15 +2195,29 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - ReactNativeDependencies - - React-runtimeexecutor (1000.0.0): + - SocketRocket + - React-runtimeexecutor (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 1000.0.0) + - React-jsi (= 0.81.0-rc.0) - React-utils - - ReactNativeDependencies - - React-RuntimeHermes (1000.0.0): + - SocketRocket + - React-RuntimeHermes (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-featureflags - React-hermes - React-jsi @@ -1529,9 +2229,16 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - ReactNativeDependencies - - React-runtimescheduler (1000.0.0): + - SocketRocket + - React-runtimescheduler (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-callinvoker - React-cxxreact - React-debug @@ -1544,17 +2251,31 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - ReactNativeDependencies - - React-timing (1000.0.0) - - React-utils (1000.0.0): - - hermes-engine + - SocketRocket + - React-timing (0.81.0-rc.0) + - React-utils (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-debug - - React-jsi (= 1000.0.0) - - ReactNativeDependencies - - ReactAppDependencyProvider (1000.0.0): + - React-jsi (= 0.81.0-rc.0) + - SocketRocket + - ReactAppDependencyProvider (0.81.0-rc.0): - ReactCodegen - - ReactCodegen (1000.0.0): - - hermes-engine + - ReactCodegen (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1571,51 +2292,92 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactCommon (1000.0.0): - - ReactCommon/turbomodule (= 1000.0.0) - - ReactNativeDependencies - - ReactCommon-Samples (1000.0.0): - - hermes-engine + - SocketRocket + - ReactCommon (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - ReactCommon/turbomodule (= 0.81.0-rc.0) + - SocketRocket + - ReactCommon-Samples (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - React-Core - React-cxxreact - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactNativeDependencies - - ReactCommon/turbomodule (1000.0.0): - - hermes-engine - - React-callinvoker (= 1000.0.0) - - React-cxxreact (= 1000.0.0) - - React-jsi (= 1000.0.0) - - React-logger (= 1000.0.0) - - React-perflogger (= 1000.0.0) - - ReactCommon/turbomodule/bridging (= 1000.0.0) - - ReactCommon/turbomodule/core (= 1000.0.0) - - ReactNativeDependencies - - ReactCommon/turbomodule/bridging (1000.0.0): - - hermes-engine - - React-callinvoker (= 1000.0.0) - - React-cxxreact (= 1000.0.0) - - React-jsi (= 1000.0.0) - - React-logger (= 1000.0.0) - - React-perflogger (= 1000.0.0) - - ReactNativeDependencies - - ReactCommon/turbomodule/core (1000.0.0): - - hermes-engine - - React-callinvoker (= 1000.0.0) - - React-cxxreact (= 1000.0.0) - - React-debug (= 1000.0.0) - - React-featureflags (= 1000.0.0) - - React-jsi (= 1000.0.0) - - React-logger (= 1000.0.0) - - React-perflogger (= 1000.0.0) - - React-utils (= 1000.0.0) - - ReactNativeDependencies - - ReactNativeDependencies (1000.0.0) - - ScreenshotManager (0.80.0-main): - - hermes-engine + - SocketRocket + - ReactCommon/turbomodule (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.0-rc.0) + - React-cxxreact (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) + - React-logger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.0) + - ReactCommon/turbomodule/bridging (= 0.81.0-rc.0) + - ReactCommon/turbomodule/core (= 0.81.0-rc.0) + - SocketRocket + - ReactCommon/turbomodule/bridging (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.0-rc.0) + - React-cxxreact (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) + - React-logger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.0) + - SocketRocket + - ReactCommon/turbomodule/core (0.81.0-rc.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.0-rc.0) + - React-cxxreact (= 0.81.0-rc.0) + - React-debug (= 0.81.0-rc.0) + - React-featureflags (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.0) + - React-logger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.0) + - React-utils (= 0.81.0-rc.0) + - SocketRocket + - ScreenshotManager (0.81.0-main): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core @@ -1633,24 +2395,30 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactNativeDependencies + - SocketRocket - Yoga + - SocketRocket (0.7.1) - Yoga (0.0.0) DEPENDENCIES: + - boost (from `../react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../react-native/third-party-podspecs/DoubleConversion.podspec`) + - fast_float (from `../react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../react-native/Libraries/FBLazyVector`) + - fmt (from `../react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../react-native/sdks/hermes-engine/hermes-engine.podspec`) - MyNativeView (from `NativeComponentExample`) - NativeCxxModuleExample (from `NativeCxxModuleExample`) - OCMock (~> 3.9.1) - OSSLibraryExample (from `../react-native-test-library`) + - RCT-Folly (from `../react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../react-native/Libraries/Required`) - RCTTypeSafety (from `../react-native/Libraries/TypeSafety`) - React (from `../react-native/`) - React-callinvoker (from `../react-native/ReactCommon/callinvoker`) - React-Core (from `../react-native/`) - - React-Core-prebuilt (from `../react-native/React-Core-prebuilt.podspec`) - React-Core/RCTWebSocket (from `../react-native/`) - React-CoreModules (from `../react-native/React/CoreModules`) - React-cxxreact (from `../react-native/ReactCommon/cxxreact`) @@ -1711,26 +2479,39 @@ DEPENDENCIES: - ReactCodegen (from `build/generated/ios`) - ReactCommon-Samples (from `../react-native/ReactCommon/react/nativemodule/samples`) - ReactCommon/turbomodule/core (from `../react-native/ReactCommon`) - - ReactNativeDependencies (from `../react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - ScreenshotManager (from `NativeModuleExample`) + - SocketRocket (~> 0.7.1) - Yoga (from `../react-native/ReactCommon/yoga`) SPEC REPOS: trunk: - OCMock + - SocketRocket EXTERNAL SOURCES: + boost: + :podspec: "../react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../react-native/third-party-podspecs/DoubleConversion.podspec" + fast_float: + :podspec: "../react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: '' + :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 MyNativeView: :path: NativeComponentExample NativeCxxModuleExample: :path: NativeCxxModuleExample OSSLibraryExample: :path: "../react-native-test-library" + RCT-Folly: + :podspec: "../react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: :path: "../react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: @@ -1743,8 +2524,6 @@ EXTERNAL SOURCES: :path: "../react-native/ReactCommon/callinvoker" React-Core: :path: "../react-native/" - React-Core-prebuilt: - :podspec: "../react-native/React-Core-prebuilt.podspec" React-CoreModules: :path: "../react-native/React/CoreModules" React-cxxreact: @@ -1863,89 +2642,92 @@ EXTERNAL SOURCES: :path: "../react-native/ReactCommon" ReactCommon-Samples: :path: "../react-native/ReactCommon/react/nativemodule/samples" - ReactNativeDependencies: - :podspec: "../react-native/third-party-podspecs/ReactNativeDependencies.podspec" ScreenshotManager: :path: NativeModuleExample Yoga: :path: "../react-native/ReactCommon/yoga" SPEC CHECKSUMS: - FBLazyVector: a70cb77984903b97f5d310db7ecb0c69310c575d - hermes-engine: 03acd1d398759cd3ad47def33503c2c777f01a23 - MyNativeView: c9322d1415339ef2828d7b108491c5a2c0be4068 - NativeCxxModuleExample: adb8f3907b14b2909bf66fb81ef6dba4b53e14ac + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 + FBLazyVector: 1a60614c9bf4b769d5e6db6e7cc99b159473d3fd + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + hermes-engine: e11dd6f36fb954b68ac57c63aab26870693a0523 + MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 + NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 - OSSLibraryExample: b4281d9099bcbf375be15c3144abdb6950d2f1b0 - RCTDeprecation: 706a006feee48f95f8b956eb573bcac0894d917e - RCTRequired: 608228b5b851062fd9f155f70600c6bb85b260ac - RCTTypeSafety: 74ea02cd0c954ca237425e917d3ad1bb4fd53ad0 - React: c451d95357b4d80bbe5b23d605b6a51f35990bd0 - React-callinvoker: 69e958049d5940b70c42cd3fbed2de2e5f3bee9c - React-Core: 5d9006704388f09d59b6587baf0cbe23b8a89bd0 - React-Core-prebuilt: be4d8e00b90cc0a08a47bce0ca44bbb2d7433a85 - React-CoreModules: 8e4e53f802bde5adf71d26746ca64bb72080c563 - React-cxxreact: a04da83ae1bab6a167498a2a397beee2b5221594 - React-debug: 473377ab43ade07fd67f219f5780f6c6db3c22ef - React-defaultsnativemodule: 98841de1855a37bff1ef67276a677e103230c4bc - React-domnativemodule: 707c47fba7c75367c3c5e680aac137007af2ce72 - React-Fabric: 17b322e77b094a1d8897ebd59164f638692c1c67 - React-FabricComponents: 8ae9205e7311e19ace3b36092427ace877289dd3 - React-FabricImage: cd074a7d16ee7ad15a3ef97752f598aae03131eb - React-featureflags: ae70d503b31628c702edcd413a611bf0c0105575 - React-featureflagsnativemodule: d29bbcf8fd639d02b6d4951c5f764ec99c09c7c6 - React-graphics: 0c371c62461a18153d878343abb7b0b97057b944 - React-hermes: 3f34efa3f5135ea1ae2de230a14a444fb4ce7ec3 - React-idlecallbacksnativemodule: 07b5e9e5972924e25c3b76f3bc4190607f84027d - React-ImageManager: 98385572fcbae8a4fd8b92e7bf02c0193e3dd781 - React-jserrorhandler: 26bc769d6fb8dc1af03297434231c5f61c51cb25 - React-jsi: 94ebd22684f3d6a31cb6fb9e8d0ebc56df2d1e35 - React-jsiexecutor: bfab666ba0c1e6d95fb19438a4f83586e59c8de1 - React-jsinspector: a4e8886a3586348397daef853d5e61b05563f16a - React-jsinspectorcdp: 307c3165aea069e6da65e0986a9c749c30d1e4c3 - React-jsinspectornetwork: e1afc4c88aade4577cf8dec749392ee7710c50ab - React-jsinspectortracing: fc5710671b94228ac23789a63e70862afaf823b3 - React-jsitooling: 029c1dbed4da424ca9edf79e83796c1b31e1ac8e - React-jsitracing: f1f47bf8a0596208b9a27efc1d22d24bfe88af86 - React-logger: 81c884511727687ee2c403036deb6c1b518e312a - React-Mapbuffer: bb5dfa5840cde36e49dfb29f85ed2fc9c1d28041 - React-microtasksnativemodule: a976a928ddce0496860c877a6a5e591c30598180 - React-NativeModulesApple: 011aa3172eb6b2140afed3d402b5ad17a6dbf47e - React-oscompat: 5c0f2521e775431a4de44faef9766053eddf4da3 - React-perflogger: 798855126031795074c84f110b4f3c9bb97be7b3 - React-performancetimeline: c9902c6eb15181562a5e5e59ebcec4afa526f8a2 - React-RCTActionSheet: 7ae118d8ab2300bd5810b785c14bd020412cd457 - React-RCTAnimation: 756d86658c533d8c7e15281a69ee2db4b9c3d29f - React-RCTAppDelegate: b7c27a5bc0e3e6c7d1dff025b3f407df54490a5d - React-RCTBlob: ee5967d3c2642aa5e2d6182aa1a74312a0602129 - React-RCTFabric: d0098aa8a1abae3eb1bd8c083c86665cbabf0a36 - React-RCTFBReactNativeSpec: e5e0cf25834c7283f3e7347e5fb2472f387d2177 - React-RCTImage: 144fe50a30c529003c1f40d226e3d0c93b8b3921 - React-RCTLinking: b5453e32444504f7e85fce929120d9cc8fe71b51 - React-RCTNetwork: 540f12d345f194c5cbc48dee3ff2a4f9b23cf529 - React-RCTPushNotification: db9adfa0d4cb02f4f0eb35cf399b04dd7f373641 - React-RCTRuntime: a37225a76659365c9936bf7d136b5a9bd8c3a6d9 - React-RCTSettings: 50d1d2ba0e1785d1c87d12c804bb4d8b245478c9 - React-RCTTest: f7855cb8ea1a8c0e4dad9a5a3e34545ab1e36a66 - React-RCTText: eb8742f80de47f0f3e70ea4342a3f137f08fecfd - React-RCTVibration: 08ee8f5e40b4f91315edd26eed0e69f2bf33b3cc - React-rendererconsistency: 58805fe61e9a32aff90ac0cb50d37bbe37e20abd - React-renderercss: b59b0c24f95cb44e5f3ef60419a8dbc65fc668be - React-rendererdebug: 4ebe254e85f73be9b4b17b1623204fa3bfd7d784 - React-RuntimeApple: 4278635a95c9eb3a2f70d91bc25a479d18df3293 - React-RuntimeCore: fd9f49bd78aff7138638ccfc41b7e991fcdeda79 - React-runtimeexecutor: e07f8b686d6ba322f54436162bad5816a1491405 - React-RuntimeHermes: fc040cfd25ae70184700a28f10cd2c9a2b0e1fb7 - React-runtimescheduler: 5a351fc4809232ca78e6ba487fd41399651d9801 - React-timing: 9899af75e36fafc429502f0045cb308b91b75d3a - React-utils: aa546242375e1acf6423b627aa226289b6f74298 - ReactAppDependencyProvider: 8eb75f4c2dbcc219259c044b7b00321e656bed31 - ReactCodegen: 20456cab74e72dfabec28899bfdb446d05e42b98 - ReactCommon: 2c0a12478cfa27ef072266ce4b531bc3d0ff664d - ReactCommon-Samples: faf5877dd577b3bed559d829639258341a6e11d0 - ReactNativeDependencies: c1f621d1b95272f3b6ed6f5b29691ce83cd391f2 - ScreenshotManager: abe82a83dd07cedf107cd4d225369f62a587bc31 - Yoga: fb04f4d85dfcdcd30ffdc741ea3984582d645d9b + OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 + RCTDeprecation: 12ad29a0de812bbc22e9a2d655ef589e53e8549c + RCTRequired: 2af6f22ad0b38174924749187cd538a9377ede9b + RCTTypeSafety: eb4d5f4f5f76719be33fea6abeb927bc3648e223 + React: ae6c320c1c1c746735fe0552bd80ab09eb5e5965 + React-callinvoker: 357c5e653f9ded9882eef35a9c79cfe7883c7952 + React-Core: a5d148ae64a2ab39a4f19b5ea944414210ae78c3 + React-CoreModules: 23c84ebe472a20fcacc7b12431ddc33c7e154773 + React-cxxreact: ac69940b0fa37d4c17577d747b29b01cdd51e16a + React-debug: 69d00768e3931fb67c300dfdd3bb564041c79550 + React-defaultsnativemodule: 55019bf6e59876dd966454c79ecbe681e463289a + React-domnativemodule: 4eb2619645ddea23c1741c032ff2866e72cdc79f + React-Fabric: 3f3a94654354aa47f40da630ba40f916b639bc66 + React-FabricComponents: 5298e37a538f6d1eb44d01c3f63c71fde23c8003 + React-FabricImage: b8919e65407fe9c2d0018e43ae859f38e23dfcf7 + React-featureflags: acc6bbdc2f6f0696692b8d084957630698af8c47 + React-featureflagsnativemodule: 554eac2c832374d8089f7e440a471d7ac5526e4f + React-graphics: cd2b8c4db6d7c73ae09234ad1c3e3ee8e4b1a132 + React-hermes: 43778d36050c00e04c423405e14e6a7b4a0354e5 + React-idlecallbacksnativemodule: 0b7a22fd91ee5496d21d391e9df2ebb699f4f56a + React-ImageManager: 3e378f1c026eb5c14d3e9d5ffee4fd13e4d21f05 + React-jserrorhandler: 5c5305488056be3dad391d9e6f4202fc33afec34 + React-jsi: f325975776228bbb777458661f5daffdce6221e8 + React-jsiexecutor: 402dffd360653d38c0444401250166b37e58f88c + React-jsinspector: 889aed82ba549cf739059087f840fd91c4897ec9 + React-jsinspectorcdp: 72817c01c6e47af348b0beb06319a6afb6715364 + React-jsinspectornetwork: bbbcabfb5a1feedff7bc73dc49abd96b5e622c8e + React-jsinspectortracing: 2f626a61aac285ba5f0f66072b514796fcae9ce1 + React-jsitooling: 2900a5f8bcf937f068a2513a51649b69f59187be + React-jsitracing: 33cca161c23ea28fc40f932c20f098f45100bec2 + React-logger: c7e141766582e403862b2e986f45f7b5a9099d6d + React-Mapbuffer: 1bd8de39348006345e7c81699334131ef1a2fa38 + React-microtasksnativemodule: 4a37c01568355ee7d1c4afc3ee01e0e460ddcbe4 + React-NativeModulesApple: 1fc3e6bc346e93c7602b43f3bab36bc046396386 + React-oscompat: 840467926a77e46c193ac8ccd4078a3f0af029ef + React-perflogger: 6aaef7ae140bfd2b4c8256429797aac6a39179c2 + React-performancetimeline: 2c2287e4a682f70fe44882eb2a5333c5edc8fb06 + React-RCTActionSheet: 6ae67865a0a729194758fe93bd0befa6992520ee + React-RCTAnimation: ec446d4b77cd0d8e8543164fdda317edad6af605 + React-RCTAppDelegate: 8c92ab25b3147445d5e9f15c28a2ccf712e7369a + React-RCTBlob: 9b18ecca8a06528bb90ed6e5601b93e051bdf8d4 + React-RCTFabric: c938d7b2782d0bae9b02644d3020b63e1d359461 + React-RCTFBReactNativeSpec: 5f054b35ddf7e4c07fb3830103ee50c47cdf5578 + React-RCTImage: a4075533ccadbb3753918a9b93c96e52307e435d + React-RCTLinking: a7949fa25c7a9e5f56d038ef22e852adea3e0973 + React-RCTNetwork: 7f9fd80e2f16dcfbb5b55d5d498bbbd011549ad0 + React-RCTPushNotification: 4aaa234c3106d9c0bd1534cb70bd445a66512ec0 + React-RCTRuntime: 95b176d99fdbf6d2b8d5912c8f59b5df6adfb393 + React-RCTSettings: 1625919263e77e7c21956ea5371d5c9a63f0a86c + React-RCTTest: d3013ad3e5b346e8ed94ef83871cce4d2dc1a4ee + React-RCTText: 6028f67dbe5d1d88ac75cff50b25c7bb40434b8e + React-RCTVibration: 2eb74075ba5888303f92b1f8ba62c4269645e42f + React-rendererconsistency: aaf55340b14b2b3da830304a561ef6f757c228c2 + React-renderercss: 41b161fdcfa7e703a0dcbfb4411ccb33be8100d4 + React-rendererdebug: be2f16c2d770ea42ecf7b16d2849d92ff63ee043 + React-RuntimeApple: e5372e94aaf70565fcb21a0c460b8cfee9699e93 + React-RuntimeCore: 4f37aca70749a27fb0cb234c9fb8f4912e6438b1 + React-runtimeexecutor: 29807910e0f06dad12e42e322d412ed82234d0be + React-RuntimeHermes: e27354afcc473d6746c895ba8f131e8033d06491 + React-runtimescheduler: 9782ee8a3f958b371522f2f4fbbfeaefe7a2d47a + React-timing: 35923a99adfba07561648f97c3374688f2a54424 + React-utils: 674f9136ce8bbc520c57ad837eb420ee38a7af32 + ReactAppDependencyProvider: 673b38067987ee6a6668c8ee5223d778cb68d3c7 + ReactCodegen: 0141bd74eb5ca5718add839aca23770e942fdb25 + ReactCommon: 6f9c0a9ba2c9de7b730f5451409ed9f3125d384f + ReactCommon-Samples: f3466d5b4a94fe669aa9d6d8c88b4ccea0ac7613 + ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: 463fb69091efea832b3a9c5bc15cfaeac94b375c PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From 6b9f5d622ffbe79da8f4e7b7d8094504a480425e Mon Sep 17 00:00:00 2001 From: Rob Hogan <2590098+robhogan@users.noreply.github.com> Date: Mon, 14 Jul 2025 08:51:12 +0200 Subject: [PATCH 012/312] Bump Metro to 0.83.0 (#52577) --- package.json | 4 +- packages/community-cli-plugin/package.json | 8 +- .../src/commands/start/runServer.js | 2 +- packages/core-cli-utils/src/private/app.js | 5 +- packages/metro-config/package.json | 4 +- packages/react-native/package.json | 4 +- scripts/babel-register.js | 3 +- yarn.lock | 199 ++++++++++-------- 8 files changed, 121 insertions(+), 108 deletions(-) diff --git a/package.json b/package.json index 1a4653e8cb0..cfa2ef628db 100644 --- a/package.json +++ b/package.json @@ -90,9 +90,9 @@ "jest-snapshot": "^29.7.0", "markdownlint-cli2": "^0.17.2", "markdownlint-rule-relative-links": "^3.0.0", - "metro-babel-register": "^0.82.5", + "metro-babel-register": "^0.83.0", "metro-memory-fs": "^0.82.5", - "metro-transform-plugins": "^0.82.5", + "metro-transform-plugins": "^0.83.0", "micromatch": "^4.0.4", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 41bf955e7a8..caee25f966b 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -25,13 +25,13 @@ "@react-native/dev-middleware": "0.81.0-rc.0", "debug": "^4.4.0", "invariant": "^2.2.4", - "metro": "^0.82.5", - "metro-config": "^0.82.5", - "metro-core": "^0.82.5", + "metro": "^0.83.0", + "metro-config": "^0.83.0", + "metro-core": "^0.83.0", "semver": "^7.1.3" }, "devDependencies": { - "metro-resolver": "^0.82.5" + "metro-resolver": "^0.83.0" }, "peerDependencies": { "@react-native-community/cli": "*", diff --git a/packages/community-cli-plugin/src/commands/start/runServer.js b/packages/community-cli-plugin/src/commands/start/runServer.js index 6bb60084cb0..991c90977f5 100644 --- a/packages/community-cli-plugin/src/commands/start/runServer.js +++ b/packages/community-cli-plugin/src/commands/start/runServer.js @@ -147,7 +147,7 @@ async function runServer( // $FlowIgnore[cannot-write] Assigning to readonly property metroConfig.reporter = reporter; - const serverInstance = await Metro.runServer(metroConfig, { + const {httpServer: serverInstance} = await Metro.runServer(metroConfig, { host: args.host, secure: args.https, secureCert: args.cert, diff --git a/packages/core-cli-utils/src/private/app.js b/packages/core-cli-utils/src/private/app.js index cfc98552a62..725cf30226a 100644 --- a/packages/core-cli-utils/src/private/app.js +++ b/packages/core-cli-utils/src/private/app.js @@ -76,9 +76,8 @@ function getNodePackagePath(packageName: string): string { } function metro(...args: $ReadOnlyArray): ExecaPromise { - const metroPath = getNodePackagePath(path.join('metro', 'src', 'cli.js')); - log(`🚇 ${metroPath} ${args.join(' ')} `); - return execa('node', [metroPath, ...args]); + log(`🚇 metro ${args.join(' ')} `); + return execa('npx', ['--offline', 'metro', ...args]); } export const tasks = { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 32aa6bc4e3f..274bc9256b4 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -28,7 +28,7 @@ "dependencies": { "@react-native/js-polyfills": "0.81.0-rc.0", "@react-native/metro-babel-transformer": "0.81.0-rc.0", - "metro-config": "^0.82.5", - "metro-runtime": "^0.82.5" + "metro-config": "^0.83.0", + "metro-runtime": "^0.83.0" } } diff --git a/packages/react-native/package.json b/packages/react-native/package.json index fe00343737e..7b507a0570c 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -179,8 +179,8 @@ "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", - "metro-runtime": "^0.82.5", - "metro-source-map": "^0.82.5", + "metro-runtime": "^0.83.0", + "metro-source-map": "^0.83.0", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", diff --git a/scripts/babel-register.js b/scripts/babel-register.js index 64439cd6355..801045592b5 100644 --- a/scripts/babel-register.js +++ b/scripts/babel-register.js @@ -41,7 +41,8 @@ function registerForMonorepo() { // $FlowExpectedError[cannot-resolve-module] - Won't resolve in OSS require('@fb-tools/babel-register'); } else { - require('metro-babel-register')([ + const {register} = require('metro-babel-register'); + register([ PACKAGES_DIR, PRIVATE_DIR, SCRIPTS_DIR, diff --git a/yarn.lock b/yarn.lock index 25db5e6af41..2f49ab2716c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1203,7 +1203,20 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9": +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a" + integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/traverse@^7.25.3", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a" integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== @@ -6805,10 +6818,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-register@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.82.5.tgz#897c2021e6c44b18b533338d420fcacd5e9807c4" - integrity sha512-pWGLHX1ggicEu6UvF3Pe7E7xY7812u/EaY1OiR7f9ooy5s/W20OQsvkNshQ68j9v1yvFkckgzB2YCTYiklSsIg== +metro-babel-register@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.83.0.tgz#04fb08f2cd64018e2ad19b4a64e710d912e923c8" + integrity sha512-HfMrNvBbZSy8Sbf5aVlTub2PW86bPgp6oVOiHQ0kKLRl5+lMcvY9Tm8M5/5fZ8+TJAGOXgA9E0GNfgcSb99VLw== dependencies: "@babel/core" "^7.25.2" "@babel/plugin-proposal-export-namespace-from" "^7.18.9" @@ -6822,60 +6835,60 @@ metro-babel-register@^0.82.5: escape-string-regexp "^1.0.5" flow-enums-runtime "^0.0.6" -metro-babel-transformer@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.82.5.tgz#a65ed29265d8257109ab8c37884e6e3a2edee86d" - integrity sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q== +metro-babel-transformer@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.83.0.tgz#933839d581e61a2f107c708e0fbf4379a83fa1ca" + integrity sha512-ncYhd1WWElJj6W+uMgoi57mUgdWm8UZBLUg9/TYh6iFipJ6A78IuztOFbohAk+Zh5S376bF86TSDaeRouAzJkg== dependencies: "@babel/core" "^7.25.2" flow-enums-runtime "^0.0.6" hermes-parser "0.29.1" nullthrows "^1.1.1" -metro-cache-key@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.82.5.tgz#290a0054b28a708266fb91c8028cf94be04f99c9" - integrity sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA== +metro-cache-key@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.83.0.tgz#73d6c4810454092ad833706ce39e3111171892c5" + integrity sha512-T0WmTe0NRt/7/kaWuDoUbeF5xlfqzLyVg5MO6X2XnXT8le42S2UxRWJgZOtojOXGvthdQhzdxZM2GCd+BQLfAQ== dependencies: flow-enums-runtime "^0.0.6" -metro-cache@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.82.5.tgz#4c8fe58cd5fa30b87db0b2b6a650a771ec6fe162" - integrity sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q== +metro-cache@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.83.0.tgz#595d9be2cc0e4bc674088a79965fb61ab6e54b36" + integrity sha512-t5ExK5od6PcI7Zc441oRNdnYoxWb9EuqBsgoVQUG2/DRsEAHCkK6EqwLYForgMABYwJOpBTGMw74f7EQMKakuw== dependencies: exponential-backoff "^3.1.1" flow-enums-runtime "^0.0.6" https-proxy-agent "^7.0.5" - metro-core "0.82.5" + metro-core "0.83.0" -metro-config@0.82.5, metro-config@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.82.5.tgz#07366f32c3fe6203d630af7df4781900816c7c85" - integrity sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g== +metro-config@0.83.0, metro-config@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.83.0.tgz#43bb29db0247c6b990993672b6acba52b67c36d5" + integrity sha512-fkuXgw8KXMOOGfPVwE1xULTeW2kfpyp8dtfD96PcBZHPxv8Pu0EAihTXkCPaKk1PKqIHenzEdW9s2MRUWvyRPA== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" flow-enums-runtime "^0.0.6" jest-validate "^29.7.0" - metro "0.82.5" - metro-cache "0.82.5" - metro-core "0.82.5" - metro-runtime "0.82.5" + metro "0.83.0" + metro-cache "0.83.0" + metro-core "0.83.0" + metro-runtime "0.83.0" -metro-core@0.82.5, metro-core@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.82.5.tgz#fda1b2f7365e3a09055dd72ba1681f8fc1f6f492" - integrity sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA== +metro-core@0.83.0, metro-core@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.83.0.tgz#d9fb3dffea49b07db75d735e23cd2528a0a66db5" + integrity sha512-LeWfVWejZVx/cEkOYrgQ11A+2cTPdq30Xm4SM31SfA64teKCnaUPa4k6CxU65AUou5EF4nCFo7B2XE5Q2jwBvg== dependencies: flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.82.5" + metro-resolver "0.83.0" -metro-file-map@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.82.5.tgz#3e47410a9ce8f6c913480970226a17371c2d2974" - integrity sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ== +metro-file-map@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.83.0.tgz#6b1bc47848caccc403896eb8c81a4699c39c934c" + integrity sha512-vWbimPJ/sPwSFfYJcwSbgsM+x3E6mELFnm8WqwrvTvRm55NR05noAzx1HG/X0PJUylptHlQAbguPEA7F4jd/ug== dependencies: debug "^4.4.0" fb-watchman "^2.0.0" @@ -6894,61 +6907,61 @@ metro-memory-fs@^0.82.5: dependencies: flow-enums-runtime "^0.0.6" -metro-minify-terser@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.82.5.tgz#5dc77d53b6ef4079bd9c752ae046d557df4ae584" - integrity sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg== +metro-minify-terser@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.83.0.tgz#c84c0eae701ecd7e4cf3c595e1f483e8a5e813ad" + integrity sha512-jsVzWnkl43Kb18iQvEn0Keq0n5WQwAiAHn9vCFE6roM6E4fVLDKlzDNoWyFzs9GyodlVYkbjAuz9PCpEzBfq5Q== dependencies: flow-enums-runtime "^0.0.6" terser "^5.15.0" -metro-resolver@0.82.5, metro-resolver@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.82.5.tgz#cb810038d488a47334df444312b23f0090eca5c3" - integrity sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g== +metro-resolver@0.83.0, metro-resolver@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.83.0.tgz#a4dc88b192c886c02343703127fef80e3a03ca83" + integrity sha512-TGwPrU4lpKwmvpfnN9WA4RMECpSsZ+GAtiKQRjNh6ek0f7XUR8RuGPTWc4VidTo973C0syfbYVoD/iv1hFgAiw== dependencies: flow-enums-runtime "^0.0.6" -metro-runtime@0.82.5, metro-runtime@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.82.5.tgz#97840760e4cee49f08948dd918dbeba08dd0d0ec" - integrity sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g== +metro-runtime@0.83.0, metro-runtime@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.83.0.tgz#495d28160784c303c98c1d32ef936b2e5524c445" + integrity sha512-35q73Hz4X8JcNa2jgHdRy7zLggyEM2tPhkw+xjfuoRXO8TtFLGl7gKug/lF3GVYWEI6I9wEf5BGsnAoE5MZ4tQ== dependencies: "@babel/runtime" "^7.25.0" flow-enums-runtime "^0.0.6" -metro-source-map@0.82.5, metro-source-map@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.82.5.tgz#85e2e9672bff6d6cefb3b65b96fcc69f929c69c6" - integrity sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw== +metro-source-map@0.83.0, metro-source-map@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.83.0.tgz#a9c807a6c7cf43448e6f55e280dab8aafadf0586" + integrity sha512-XsQl5MhXo249q0ImDCFatBaWzU4K6ksso9n2MKoreuMPrgmVwzOAkVvJRUxuPvjW0DzBZKwqpk3ubC5MYRalfQ== dependencies: "@babel/traverse" "^7.25.3" "@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3" "@babel/types" "^7.25.2" flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.82.5" + metro-symbolicate "0.83.0" nullthrows "^1.1.1" - ob1 "0.82.5" + ob1 "0.83.0" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.82.5.tgz#b53255cad11f1e6795f319ca4b41857bfe295d65" - integrity sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw== +metro-symbolicate@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.83.0.tgz#05938d2ecbf6c8318185d7b631f9938dcaa115d5" + integrity sha512-pPu73T3y4TWpmGgUIJBF8b4bPjxV9LHcqEqAc6Gd7xqN1Wquu6onhdmi72XLHxhk+mZBF2mtVIr/QKI3tOyRLg== dependencies: flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.82.5" + metro-source-map "0.83.0" nullthrows "^1.1.1" source-map "^0.5.6" vlq "^1.0.0" -metro-transform-plugins@0.82.5, metro-transform-plugins@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.82.5.tgz#678da4d0f9085b2a3fc0b4350062f19cc625c5fc" - integrity sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA== +metro-transform-plugins@0.83.0, metro-transform-plugins@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.83.0.tgz#0204405be0f5ffbcd73443ac15408b1285052894" + integrity sha512-HLUB+CduKt9KOUwW6zS3YezcIAUal3mmxEi6PW6/SqpqQIqR7Ij83UswCy/LRhY2Lx6IwucR8Zg9Oo+d0cCvzA== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.25.0" @@ -6957,29 +6970,29 @@ metro-transform-plugins@0.82.5, metro-transform-plugins@^0.82.5: flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-worker@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.82.5.tgz#aabdccf17aaa584ec0fd97b5283e806958fb3418" - integrity sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw== +metro-transform-worker@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.83.0.tgz#40822fdaf7b37ed18478948e1714acbd4c2c8a92" + integrity sha512-z9ZGlVMcw562mFqcJrU12yAgjntdRCsQV98rOyIOLF00/ui9un+xbQjqarjYmXpO3fM8SMGD1EjhuSGFN6MmWA== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.25.0" "@babel/parser" "^7.25.3" "@babel/types" "^7.25.2" flow-enums-runtime "^0.0.6" - metro "0.82.5" - metro-babel-transformer "0.82.5" - metro-cache "0.82.5" - metro-cache-key "0.82.5" - metro-minify-terser "0.82.5" - metro-source-map "0.82.5" - metro-transform-plugins "0.82.5" + metro "0.83.0" + metro-babel-transformer "0.83.0" + metro-cache "0.83.0" + metro-cache-key "0.83.0" + metro-minify-terser "0.83.0" + metro-source-map "0.83.0" + metro-transform-plugins "0.83.0" nullthrows "^1.1.1" -metro@0.82.5, metro@^0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.82.5.tgz#a27fbc08dd283a14ae58496288c10adaae65f461" - integrity sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg== +metro@0.83.0, metro@^0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.83.0.tgz#0837569b1c34e543fc3d4af262863c49725d9398" + integrity sha512-qQoLKhFzZH1AjO81BDftQBUUI5FNzpKC6Bv9QGcZf1YiK034yl6aLQWg6HnNEkKkGNiMwgGlEJAzn40HjQtZmw== dependencies: "@babel/code-frame" "^7.24.7" "@babel/core" "^7.25.2" @@ -7002,18 +7015,18 @@ metro@0.82.5, metro@^0.82.5: jest-worker "^29.7.0" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.82.5" - metro-cache "0.82.5" - metro-cache-key "0.82.5" - metro-config "0.82.5" - metro-core "0.82.5" - metro-file-map "0.82.5" - metro-resolver "0.82.5" - metro-runtime "0.82.5" - metro-source-map "0.82.5" - metro-symbolicate "0.82.5" - metro-transform-plugins "0.82.5" - metro-transform-worker "0.82.5" + metro-babel-transformer "0.83.0" + metro-cache "0.83.0" + metro-cache-key "0.83.0" + metro-config "0.83.0" + metro-core "0.83.0" + metro-file-map "0.83.0" + metro-resolver "0.83.0" + metro-runtime "0.83.0" + metro-source-map "0.83.0" + metro-symbolicate "0.83.0" + metro-transform-plugins "0.83.0" + metro-transform-worker "0.83.0" mime-types "^2.1.27" nullthrows "^1.1.1" serialize-error "^2.1.0" @@ -7498,10 +7511,10 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -ob1@0.82.5: - version "0.82.5" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.82.5.tgz#a2860e39385f4602bc2666c46f331b7531b94a8b" - integrity sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ== +ob1@0.83.0: + version "0.83.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.83.0.tgz#4c3dda1fa32ae3ccfa2cf34a73624648b458c307" + integrity sha512-uLomnfaQcMEvUnvnf7frI8YO6qe8F4pDPvatBxqLuams9BYVA9YvZqM7xJjx7cw+nYgXjreOxsIJjNsM4a6A1A== dependencies: flow-enums-runtime "^0.0.6" From 3a99e31e56a4134bf1c365478ad59e75f1cfe7ba Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 7 Jul 2025 10:20:43 -0700 Subject: [PATCH 013/312] @DeprecatedInNewArchitecture -> @Deprecated (#52399) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52399 I'm raising the deprecation warnings for those methods that are using legacy arch. Previously the `DeprecatedInNewArchitecture` was not generating warnings for user in their builds, while now the Kotlin's/Java's `DeprecatedInNewArchitecture` it will. Changelog: [Android] [Changed] - Introduce more deprecation warnings for Legacy Arch classes Reviewed By: mdvacca Differential Revision: D77736713 fbshipit-source-id: bc21729ed8253d3ec6b6a40577bcd76622c3f8a6 --- .../react/tasks/GeneratePackageListTask.kt | 1 + .../tasks/GeneratePackageListTaskTest.kt | 4 +- .../OSSLibraryExamplePackage.kt | 2 + .../ReactAndroid/api/ReactAndroid.api | 2 +- .../com/facebook/react/BaseReactPackage.kt | 1 + .../facebook/react/HeadlessJsTaskService.kt | 1 + .../com/facebook/react/LazyReactPackage.kt | 2 + .../facebook/react/ReactActivityDelegate.java | 63 +++++++++++-------- .../com/facebook/react/ReactApplication.kt | 4 ++ .../java/com/facebook/react/ReactDelegate.kt | 9 ++- .../java/com/facebook/react/ReactFragment.kt | 4 ++ .../com/facebook/react/ReactNativeHost.java | 10 +-- .../java/com/facebook/react/ReactPackage.kt | 6 +- .../com/facebook/react/ReactPackageHelper.kt | 1 + .../ReactPackageTurboModuleManagerDelegate.kt | 2 + .../facebook/react/bridge/BaseJavaModule.java | 2 - .../react/bridge/BridgeReactContext.java | 27 +++++--- .../react/bridge/CxxModuleWrapperBase.kt | 2 + .../com/facebook/react/bridge/ModuleHolder.kt | 1 + .../facebook/react/bridge/NativeModule.java | 6 +- .../DeprecatedInNewArchitecture.kt | 16 ----- .../react/defaults/DefaultReactHost.kt | 2 + .../react/defaults/DefaultReactNativeHost.kt | 2 + .../react/modules/blob/BlobProvider.kt | 2 +- .../uimanager/ViewManagerPropertyUpdater.kt | 3 +- .../react/uimanager/common/UIManagerType.kt | 2 - .../react/fabric/FabricUIManagerTest.kt | 2 + .../react/fabric/MountingManagerTest.kt | 2 + .../modules/clipboard/ClipboardModuleTest.kt | 2 + .../deviceinfo/DeviceInfoModuleTest.kt | 2 + .../react/uimanager/BaseViewManagerTest.kt | 2 + .../react/uimanager/ReactPropConstantsTest.kt | 2 + .../ReactPropForShadowNodeSetterTest.kt | 2 + .../uimanager/UIManagerModuleConstantsTest.kt | 2 + .../react/uiapp/RNTesterApplication.kt | 9 +-- 35 files changed, 125 insertions(+), 77 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/DeprecatedInNewArchitecture.kt diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt index 36cc66caf88..100db628824 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt @@ -148,6 +148,7 @@ abstract class GeneratePackageListTask : DefaultTask() { {{ packageImports }} + @SuppressWarnings("deprecation") public class PackageList { private Application application; private ReactNativeHost reactNativeHost; diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt index 0214403d67c..fc85587d15e 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt @@ -233,6 +233,7 @@ class GeneratePackageListTaskTest { + @SuppressWarnings("deprecation") public class PackageList { private Application application; private ReactNativeHost reactNativeHost; @@ -311,7 +312,8 @@ class GeneratePackageListTaskTest { import com.facebook.react.aPackage; // @react-native/another-package import com.facebook.react.anotherPackage; - + + @SuppressWarnings("deprecation") public class PackageList { private Application application; private ReactNativeHost reactNativeHost; diff --git a/packages/react-native-test-library/android/src/main/java/com/facebook/react/osslibraryexample/OSSLibraryExamplePackage.kt b/packages/react-native-test-library/android/src/main/java/com/facebook/react/osslibraryexample/OSSLibraryExamplePackage.kt index 00508e089a3..428cd61ed9e 100644 --- a/packages/react-native-test-library/android/src/main/java/com/facebook/react/osslibraryexample/OSSLibraryExamplePackage.kt +++ b/packages/react-native-test-library/android/src/main/java/com/facebook/react/osslibraryexample/OSSLibraryExamplePackage.kt @@ -12,7 +12,9 @@ import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.uimanager.ViewManager +@Suppress("DEPRECATION") public class OSSLibraryExamplePackage : ReactPackage { + @Deprecated("Migrate to [BaseReactPackage] and implement [getModule] instead.") override fun createNativeModules(reactContext: ReactApplicationContext): List = listOf(NativeSampleModule(reactContext)) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index fc70f58c197..fc5b2b28b8a 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -353,7 +353,7 @@ public abstract class com/facebook/react/ReactNativeHost { } public abstract interface class com/facebook/react/ReactPackage { - public abstract fun createNativeModules (Lcom/facebook/react/bridge/ReactApplicationContext;)Ljava/util/List; + public fun createNativeModules (Lcom/facebook/react/bridge/ReactApplicationContext;)Ljava/util/List; public abstract fun createViewManagers (Lcom/facebook/react/bridge/ReactApplicationContext;)Ljava/util/List; public fun getModule (Ljava/lang/String;Lcom/facebook/react/bridge/ReactApplicationContext;)Lcom/facebook/react/bridge/NativeModule; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt index c6a3c87d949..9ad6912d215 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt @@ -22,6 +22,7 @@ import javax.inject.Provider /** Abstract class that supports lazy loading of NativeModules by default. */ public abstract class BaseReactPackage : ReactPackage { + @Deprecated("Migrate to [BaseReactPackage] and implement [getModule] instead.") override fun createNativeModules(reactContext: ReactApplicationContext): List { throw UnsupportedOperationException( "createNativeModules method is not supported. Use getModule() method instead.") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt index eff3c428828..e974a935798 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt @@ -112,6 +112,7 @@ public abstract class HeadlessJsTaskService : Service(), HeadlessJsTaskEventList * simply have a different mechanism for storing a `ReactNativeHost`, e.g. as a static field * somewhere. */ + @Suppress("DEPRECATION") protected val reactNativeHost: ReactNativeHost get() = (application as ReactApplication).reactNativeHost diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/LazyReactPackage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/LazyReactPackage.kt index acf881246c4..66b767066e3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/LazyReactPackage.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/LazyReactPackage.kt @@ -92,6 +92,8 @@ public abstract class LazyReactPackage : ReactPackage { * @param reactContext react application context that can be used to create modules * @return A [List]<[NativeModule]> to register */ + @Suppress("DEPRECATION") + @Deprecated("Migrate to [BaseReactPackage] and implement [getModule] instead.") override fun createNativeModules(reactContext: ReactApplicationContext): List = buildList { for (holder in getNativeModules(reactContext)) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java index 47945767493..12793d95d94 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java @@ -18,20 +18,22 @@ import android.view.Window; import androidx.annotation.Nullable; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactContext; -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture; import com.facebook.react.interfaces.fabric.ReactSurface; import com.facebook.react.internal.featureflags.ReactNativeNewArchitectureFeatureFlags; import com.facebook.react.modules.core.PermissionListener; import com.facebook.react.views.view.WindowUtilKt; import com.facebook.systrace.Systrace; +import java.util.Objects; /** * Delegate class for {@link ReactActivity}. You can subclass this to provide custom implementations * for e.g. {@link #getReactNativeHost()}, if your Application class doesn't implement {@link * ReactApplication}. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ReactActivityDelegate { private final @Nullable Activity mActivity; @@ -86,8 +88,11 @@ public ReactActivityDelegate( * ReactApplication#getReactNativeHost()}. Override this method if your application class does not * implement {@code ReactApplication} or you simply have a different mechanism for storing a * {@code ReactNativeHost}, e.g. as a static field somewhere. + * + * @deprecated "Do not access {@link ReactNativeHost} directly. This class is going away in the + * New Architecture. You should access {@link ReactHost} instead." */ - @DeprecatedInNewArchitecture(message = "Use getReactHost()") + @Deprecated protected ReactNativeHost getReactNativeHost() { return ((ReactApplication) getPlainActivity().getApplication()).getReactNativeHost(); } @@ -107,16 +112,21 @@ protected ReactNativeHost getReactNativeHost() { return mReactDelegate; } - @DeprecatedInNewArchitecture(message = "Use getReactHost()") + /** + * @deprecated @deprecated "Do not access {@link ReactInstanceManager} directly. This class is + * going away in the New Architecture. You should access {@link ReactHost} instead." + * @noinspection deprecation + */ public ReactInstanceManager getReactInstanceManager() { - return mReactDelegate.getReactInstanceManager(); + return Objects.requireNonNull(mReactDelegate).getReactInstanceManager(); } + @Nullable public String getMainComponentName() { return mMainComponentName; } - public void onCreate(Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { Systrace.traceSection( Systrace.TRACE_TAG_REACT, "ReactActivityDelegate.onCreate::init", @@ -147,6 +157,7 @@ public void onCreate(Bundle savedInstanceState) { launchOptions, isFabricEnabled()) { @Override + @Nullable protected ReactRootView createRootView() { ReactRootView rootView = ReactActivityDelegate.this.createRootView(); if (rootView == null) { @@ -162,31 +173,29 @@ protected ReactRootView createRootView() { }); } - protected void loadApp(String appKey) { - mReactDelegate.loadApp(appKey); + protected void loadApp(@Nullable String appKey) { + Objects.requireNonNull(mReactDelegate).loadApp(Objects.requireNonNull(appKey)); getPlainActivity().setContentView(mReactDelegate.getReactRootView()); } public void setReactSurface(ReactSurface reactSurface) { - mReactDelegate.setReactSurface(reactSurface); + Objects.requireNonNull(mReactDelegate).setReactSurface(reactSurface); } public void setReactRootView(ReactRootView reactRootView) { - mReactDelegate.setReactRootView(reactRootView); + Objects.requireNonNull(mReactDelegate).setReactRootView(reactRootView); } public void onUserLeaveHint() { - if (mReactDelegate != null) { - mReactDelegate.onUserLeaveHint(); - } + Objects.requireNonNull(mReactDelegate).onUserLeaveHint(); } public void onPause() { - mReactDelegate.onHostPause(); + Objects.requireNonNull(mReactDelegate).onHostPause(); } public void onResume() { - mReactDelegate.onHostResume(); + Objects.requireNonNull(mReactDelegate).onHostResume(); if (mPermissionsCallback != null) { mPermissionsCallback.invoke(); @@ -195,43 +204,43 @@ public void onResume() { } public void onDestroy() { - mReactDelegate.onHostDestroy(); + Objects.requireNonNull(mReactDelegate).onHostDestroy(); } - public void onActivityResult(int requestCode, int resultCode, Intent data) { - mReactDelegate.onActivityResult(requestCode, resultCode, data, true); + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + Objects.requireNonNull(mReactDelegate).onActivityResult(requestCode, resultCode, data, true); } public boolean onKeyDown(int keyCode, KeyEvent event) { - return mReactDelegate.onKeyDown(keyCode, event); + return Objects.requireNonNull(mReactDelegate).onKeyDown(keyCode, event); } public boolean onKeyUp(int keyCode, KeyEvent event) { - return mReactDelegate.shouldShowDevMenuOrReload(keyCode, event); + return Objects.requireNonNull(mReactDelegate).shouldShowDevMenuOrReload(keyCode, event); } public boolean onKeyLongPress(int keyCode, KeyEvent event) { - return mReactDelegate.onKeyLongPress(keyCode); + return Objects.requireNonNull(mReactDelegate).onKeyLongPress(keyCode); } public boolean onBackPressed() { - return mReactDelegate.onBackPressed(); + return Objects.requireNonNull(mReactDelegate).onBackPressed(); } - public boolean onNewIntent(Intent intent) { - return mReactDelegate.onNewIntent(intent); + public boolean onNewIntent(@Nullable Intent intent) { + return Objects.requireNonNull(mReactDelegate).onNewIntent(Objects.requireNonNull(intent)); } public void onWindowFocusChanged(boolean hasFocus) { - mReactDelegate.onWindowFocusChanged(hasFocus); + Objects.requireNonNull(mReactDelegate).onWindowFocusChanged(hasFocus); } public void onConfigurationChanged(Configuration newConfig) { - mReactDelegate.onConfigurationChanged(newConfig); + Objects.requireNonNull(mReactDelegate).onConfigurationChanged(newConfig); } public void requestPermissions( - String[] permissions, int requestCode, PermissionListener listener) { + String[] permissions, int requestCode, @Nullable PermissionListener listener) { mPermissionListener = listener; getPlainActivity().requestPermissions(permissions, requestCode); } @@ -267,7 +276,7 @@ protected ReactActivity getReactActivity() { * context will no longer be valid. */ public @Nullable ReactContext getCurrentReactContext() { - return mReactDelegate.getCurrentReactContext(); + return Objects.requireNonNull(mReactDelegate).getCurrentReactContext(); } /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt index 9360b51f734..306eb49aa3c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt @@ -10,6 +10,10 @@ package com.facebook.react /** Interface that represents an instance of a React Native application */ public interface ReactApplication { /** Get the default [ReactNativeHost] for this app. */ + @Suppress("DEPRECATION") + @Deprecated( + "You should not use ReactNativeHost directly in the New Architecture. Use ReactHost instead.", + ReplaceWith("reactHost")) public val reactNativeHost: ReactNativeHost /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt index 258bb6bcf47..4d81bc58c11 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt @@ -14,7 +14,6 @@ import android.os.Bundle import android.view.KeyEvent import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.UiThreadUtil.runOnUiThread -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture import com.facebook.react.devsupport.DoubleTapReloadRecognizer import com.facebook.react.devsupport.ReleaseDevSupportManager import com.facebook.react.devsupport.interfaces.DevSupportManager @@ -26,12 +25,17 @@ import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler * A delegate for handling React Application support. This delegate is unaware whether it is used in * an [Activity] or a [android.app.Fragment]. */ +@Suppress("DEPRECATION") public open class ReactDelegate { private val activity: Activity private var internalReactRootView: ReactRootView? = null private val mainComponentName: String? private var launchOptions: Bundle? private var doubleTapReloadRecognizer: DoubleTapReloadRecognizer? + + @Deprecated( + "You should not use ReactNativeHost directly in the New Architecture. Use ReactHost instead.", + ReplaceWith("reactHost")) private var reactNativeHost: ReactNativeHost? = null public var reactHost: ReactHost? = null private set @@ -380,7 +384,8 @@ public open class ReactDelegate { return false } - @DeprecatedInNewArchitecture(message = "Use reactHost") + @Deprecated( + "Do not access [ReactInstanceManager] directly. This class is going away in the New Architecture. You should use [ReactHost] instead.") public fun getReactInstanceManager(): ReactInstanceManager { val nonNullReactNativeHost = checkNotNull(reactNativeHost) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.kt index a8b45e5745f..304a0d003b4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.kt @@ -58,6 +58,10 @@ public open class ReactFragment : Fragment(), PermissionAwareActivity { * method if your application class does not implement `ReactApplication` or you simply have a * different mechanism for storing a `ReactNativeHost`, e.g. as a static field somewhere. */ + @Suppress("DEPRECATION") + @Deprecated( + "You should not use ReactNativeHost directly in the New Architecture. Use ReactHost instead.", + ReplaceWith("reactHost")) protected open val reactNativeHost: ReactNativeHost? get() = (activity?.application as ReactApplication?)?.reactNativeHost diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java index 2745a672cad..b05e6bb7dc6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java @@ -10,6 +10,7 @@ import android.app.Application; import androidx.annotation.Nullable; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.JSExceptionHandler; import com.facebook.react.bridge.JavaScriptExecutorFactory; import com.facebook.react.bridge.ReactMarker; @@ -18,7 +19,6 @@ import com.facebook.react.common.LifecycleState; import com.facebook.react.common.SurfaceDelegate; import com.facebook.react.common.SurfaceDelegateFactory; -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture; import com.facebook.react.common.annotations.internal.LegacyArchitecture; import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; @@ -32,12 +32,12 @@ /** * Simple class that holds an instance of {@link ReactInstanceManager}. This can be used in your * {@link Application class} (see {@link ReactApplication}), or as a static field. + * + * @deprecated This class will be replaced by com.facebook.react.ReactHost in the New Architecture. */ -@DeprecatedInNewArchitecture( - message = - "This class will be replaced by com.facebook.react.ReactHost in the new architecture of" - + " React Native.") +@Deprecated @LegacyArchitecture(logLevel = LegacyArchitectureLogLevel.ERROR) +@Nullsafe(Nullsafe.Mode.LOCAL) public abstract class ReactNativeHost { static { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackage.kt index 2ccc7a0edd4..732fe6deedd 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackage.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackage.kt @@ -10,7 +10,6 @@ package com.facebook.react import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.UIManager -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture import com.facebook.react.common.annotations.StableReactNativeAPI import com.facebook.react.uimanager.ViewManager @@ -34,8 +33,9 @@ public interface ReactPackage { * @return list of native modules to register with the newly created catalyst instance This method * is deprecated in the new Architecture of React Native. */ - @DeprecatedInNewArchitecture(message = "Migrate to BaseReactPackage and implement getModule") - public fun createNativeModules(reactContext: ReactApplicationContext): List + @Deprecated(message = "Migrate to [BaseReactPackage] and implement [getModule] instead.") + public fun createNativeModules(reactContext: ReactApplicationContext): List = + emptyList() /** @return a list of view managers that should be registered with [UIManager] */ public fun createViewManagers( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageHelper.kt index 1ade7b5d98a..28a3c0acca3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageHelper.kt @@ -28,6 +28,7 @@ internal object ReactPackageHelper { FLog.d( ReactConstants.TAG, "${reactPackage.javaClass.simpleName} is not a LazyReactPackage, falling back to old version.") + @Suppress("DEPRECATION") val nativeModules = reactPackage.createNativeModules(reactApplicationContext) return Iterable { object : Iterator { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt index 28e3bc0772b..d13a565d6e0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt @@ -83,6 +83,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage if (shouldSupportLegacyPackages()) { // TODO(T145105887): Output warnings that ReactPackage was used + @Suppress("DEPRECATION") val nativeModules = reactPackage.createNativeModules(reactApplicationContext) val moduleMap: MutableMap = mutableMapOf() @@ -94,6 +95,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage val moduleName = reactModule?.name ?: module.name + @Suppress("DEPRECATION") val moduleInfo: ReactModuleInfo = if (reactModule != null) ReactModuleInfo( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java index 3fec048a770..ca7baa18081 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java @@ -16,7 +16,6 @@ import com.facebook.infer.annotation.ThreadConfined; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.common.ReactConstants; -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture; import com.facebook.react.common.annotations.StableReactNativeAPI; import com.facebook.react.common.build.ReactBuildConfig; import java.util.Map; @@ -72,7 +71,6 @@ public BaseJavaModule(@Nullable ReactApplicationContext reactContext) { /** * @return a map of constants this module exports to JS. Supports JSON types. */ - @DeprecatedInNewArchitecture() public @Nullable Map getConstants() { return null; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java index 88ea2110858..a8b3e7ceae6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java @@ -14,11 +14,11 @@ import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.infer.annotation.ThreadConfined; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.queue.ReactQueueConfiguration; import com.facebook.react.common.ReactConstants; -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.common.annotations.UnstableReactNativeAPI; import com.facebook.react.common.annotations.VisibleForTesting; @@ -27,16 +27,21 @@ import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder; import java.util.Collection; +import java.util.Objects; /** * This is the bridge-specific concrete subclass of ReactContext. ReactContext has many methods that * delegate to the react instance. This subclass implements those methods, by delegating to the * CatalystInstance. If you need to create a ReactContext within an "bridge context", please create * BridgeReactContext. + * + * @deprecated This class is deprecated in the New Architecture and will be replaced by {@link + * com.facebook.react.runtime.BridgelessReactContext} */ -@DeprecatedInNewArchitecture @VisibleForTesting @LegacyArchitecture(logLevel = LegacyArchitectureLogLevel.ERROR) +@Deprecated +@Nullsafe(Nullsafe.Mode.LOCAL) public class BridgeReactContext extends ReactApplicationContext { static { LegacyArchitectureLogger.assertLegacyArchitecture( @@ -119,6 +124,7 @@ public boolean hasNativeModule(Class nativeModuleInt if (mCatalystInstance == null) { raiseCatalystInstanceMissingException(); } + Assertions.assertNotNull(mCatalystInstance); return mCatalystInstance.hasNativeModule(nativeModuleInterface); } @@ -127,6 +133,7 @@ public Collection getNativeModules() { if (mCatalystInstance == null) { raiseCatalystInstanceMissingException(); } + Assertions.assertNotNull(mCatalystInstance); return mCatalystInstance.getNativeModules(); } @@ -139,6 +146,7 @@ public T getNativeModule(Class nativeModuleInterface if (mCatalystInstance == null) { raiseCatalystInstanceMissingException(); } + Assertions.assertNotNull(mCatalystInstance); return mCatalystInstance.getNativeModule(nativeModuleInterface); } @@ -147,6 +155,7 @@ public T getNativeModule(Class nativeModuleInterface if (mCatalystInstance == null) { raiseCatalystInstanceMissingException(); } + Assertions.assertNotNull(mCatalystInstance); return mCatalystInstance.getNativeModule(moduleName); } @@ -210,8 +219,7 @@ public void destroy() { @Override public void handleException(Exception e) { boolean catalystInstanceVariableExists = mCatalystInstance != null; - boolean isCatalystInstanceAlive = - catalystInstanceVariableExists && !mCatalystInstance.isDestroyed(); + boolean isCatalystInstanceAlive = mCatalystInstance != null && !mCatalystInstance.isDestroyed(); boolean hasExceptionHandler = getJSExceptionHandler() != null; if (isCatalystInstanceAlive && hasExceptionHandler) { @@ -268,18 +276,19 @@ public CallInvokerHolder getJSCallInvokerHolder() { return null; } - @DeprecatedInNewArchitecture( - message = - "This method will be deprecated later as part of Stable APIs with bridge removal and not" - + " encouraged usage.") /** * Get the UIManager for Fabric from the CatalystInstance. * * @return The UIManager when CatalystInstance is active. + * @deprecated Do not use this method. Instead use {@link + * com.facebook.react.uimanager.UIManagerHelper} method {@code getUIManager} to get the + * UIManager instance from the current ReactContext. */ @Override + @Deprecated public @Nullable UIManager getFabricUIManager() { - return mCatalystInstance.getFabricUIManager(); + //noinspection deprecation + return Objects.requireNonNull(mCatalystInstance).getFabricUIManager(); } /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt index 944d56892ad..b0ee31db64c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt @@ -32,6 +32,8 @@ protected constructor( // do nothing } + @Deprecated( + "The method canOverrideExistingModule is not used in the New Architecture and will be removed in a future release.") override fun canOverrideExistingModule(): Boolean = false override fun invalidate() { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt index d6e12cc369f..0e35427ebcf 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt @@ -53,6 +53,7 @@ public class ModuleHolder { public constructor(nativeModule: NativeModule) { name = nativeModule.name + @Suppress("DEPRECATION") reactModuleInfo = ReactModuleInfo( nativeModule.name, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java index 65d1a01a8f0..6b87da71538 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java @@ -9,7 +9,6 @@ import com.facebook.infer.annotation.Nullsafe; import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture; import com.facebook.react.common.annotations.StableReactNativeAPI; import javax.annotation.Nonnull; @@ -50,8 +49,11 @@ public interface NativeModule { * of a different package (such as the core one). Trying to override without returning true from * this method is considered an error and will throw an exception during initialization. By * default all modules return false. + * + * @deprecated The method canOverrideExistingModule is not used in the New Architecture and will + * be removed in a future release. */ - @DeprecatedInNewArchitecture() + @Deprecated default boolean canOverrideExistingModule() { return false; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/DeprecatedInNewArchitecture.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/DeprecatedInNewArchitecture.kt deleted file mode 100644 index 393ac8ade42..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/DeprecatedInNewArchitecture.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.common.annotations - -/** - * Annotates a method or class that will be deprecated once the NewArchitecture is fully released in - * OSS. - */ -@Retention(AnnotationRetention.SOURCE) -@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) -internal annotation class DeprecatedInNewArchitecture(val message: String = "") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt index 11b2814c48b..66b1519c165 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.defaults import android.content.Context diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt index 8a98a43c91f..c36a9be0952 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.defaults import android.app.Application diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.kt index c153eda7733..0d94958392d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.kt @@ -53,7 +53,7 @@ public class BlobProvider : ContentProvider() { var blobModule: BlobModule? = null val context = context?.applicationContext if (context is ReactApplication) { - val host = (context as ReactApplication).reactNativeHost + @Suppress("DEPRECATION") val host = (context as ReactApplication).reactNativeHost val reactContext = host.reactInstanceManager.currentReactContext ?: throw RuntimeException("No ReactContext associated with BlobProvider") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt index d61f559e8a7..d0fac3071cf 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt @@ -10,7 +10,6 @@ package com.facebook.react.uimanager import android.view.View import com.facebook.common.logging.FLog import com.facebook.react.bridge.ReadableArray -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture import com.facebook.react.uimanager.ViewManagersPropertyCache.PropSetter import java.util.HashMap @@ -70,8 +69,8 @@ public object ViewManagerPropertyUpdater { } } - @DeprecatedInNewArchitecture @JvmStatic + @Deprecated("Use ViewManager#updateProperties to update a view's properties") public fun > updateProps(node: T, props: ReactStylesDiffMap) { val setter = findNodeSetter(node.javaClass) val iterator = props.backingMap.entryIterator diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.kt index f0c97b73222..bd2464d010f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.kt @@ -8,12 +8,10 @@ package com.facebook.react.uimanager.common import androidx.annotation.IntDef -import com.facebook.react.common.annotations.DeprecatedInNewArchitecture @Retention(AnnotationRetention.SOURCE) @Suppress("DEPRECATION") @IntDef(UIManagerType.DEFAULT, UIManagerType.LEGACY, UIManagerType.FABRIC) -@DeprecatedInNewArchitecture public annotation class UIManagerType { public companion object { @Deprecated( diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.kt index 3403b6d8f27..38033aae0a5 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.fabric import com.facebook.react.bridge.BridgeReactContext diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt index 4f009cb1adf..473e2eb4c0b 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.fabric import com.facebook.react.ReactRootView diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt index e3488696fcc..2e7ccf0b10d 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.modules.clipboard import android.annotation.SuppressLint diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt index c908d39aae3..66c90ef5e12 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.modules.deviceinfo import com.facebook.react.bridge.BridgeReactContext diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt index 39aae436333..f538b5475ee 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.uimanager import android.view.View.OnFocusChangeListener diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropConstantsTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropConstantsTest.kt index e2b2f5865ed..ac8639e2204 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropConstantsTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropConstantsTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.uimanager import android.view.View diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropForShadowNodeSetterTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropForShadowNodeSetterTest.kt index 47d10eb489a..b02a717e09e 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropForShadowNodeSetterTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactPropForShadowNodeSetterTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.uimanager import com.facebook.react.bridge.BridgeReactContext diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleConstantsTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleConstantsTest.kt index e1bf44598ac..6c43884936a 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleConstantsTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleConstantsTest.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.uimanager import android.view.View diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt index dddd3312063..05ca30df409 100644 --- a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +@file:Suppress("DEPRECATION") + package com.facebook.react.uiapp import android.app.Application @@ -37,6 +39,9 @@ import com.facebook.react.views.view.setEdgeToEdgeFeatureFlagOn import com.facebook.soloader.SoLoader internal class RNTesterApplication : Application(), ReactApplication { + @Deprecated( + "You should not use ReactNativeHost directly in the New Architecture. Use ReactHost instead.", + replaceWith = ReplaceWith("reactHost")) override val reactNativeHost: ReactNativeHost by lazy { object : DefaultReactNativeHost(this) { public override fun getJSMainModuleName(): String = BuildConfig.JS_MAIN_MODULE_NAME @@ -86,10 +91,6 @@ internal class RNTesterApplication : Application(), ReactApplication { } }, object : ReactPackage, ViewManagerOnDemandReactPackage { - override fun createNativeModules( - reactContext: ReactApplicationContext - ): List = emptyList() - override fun getViewManagerNames(reactContext: ReactApplicationContext) = listOf("RNTMyNativeView", "RNTMyLegacyNativeView", "RNTReportFullyDrawnView") From 31fdd536ca2d2d12eb3d62a334b83affdb65264a Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 10:14:41 -0700 Subject: [PATCH 014/312] Add the `ENTERPRISE_REPOSITORY` env var to let user consume artifacts from their personal maven mirror (#52514) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52514 As per title, this change add the `ENTERPRISE_REPOSITORY` env variable so that users can use their owm maven mirror to consume artifacts rather than the official url. This is helpful as: - we can reduce the traffic toward maven central - companies can speed up their builds by relying on local/closer replicas ## Changelog: [iOS][Added] - Add the `ENTERPRISE_REPOSITORY` env variable to cocopaods infra Reviewed By: cortinico Differential Revision: D78011424 fbshipit-source-id: 24b83b4866095d7fe3318362afc5075b99b146e7 --- packages/react-native/scripts/cocoapods/rncore.rb | 7 ++++++- packages/react-native/scripts/cocoapods/rndependencies.rb | 7 ++++++- packages/react-native/scripts/ios-prebuild/hermes.js | 5 ++++- .../scripts/ios-prebuild/reactNativeDependencies.js | 5 ++++- packages/react-native/sdks/hermes-engine/hermes-utils.rb | 7 ++++++- 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/packages/react-native/scripts/cocoapods/rncore.rb b/packages/react-native/scripts/cocoapods/rncore.rb index 8fc1c7a4d99..ec25a5ba6f6 100644 --- a/packages/react-native/scripts/cocoapods/rncore.rb +++ b/packages/react-native/scripts/cocoapods/rncore.rb @@ -119,7 +119,12 @@ def self.podspec_source_download_prebuild_stable_tarball() end def self.stable_tarball_url(version, build_type) - maven_repo_url = "https://repo1.maven.org/maven2" + ## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. + ## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. + maven_repo_url = + ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ? + ENV[ENTERPRISE_REPOSITORY] : + "https://repo1.maven.org/maven2" group = "com/facebook/react" # Sample url from Maven: # https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.0/react-native-artifacts-0.81.0-reactnative-core-debug.tar.gz diff --git a/packages/react-native/scripts/cocoapods/rndependencies.rb b/packages/react-native/scripts/cocoapods/rndependencies.rb index 18308e8ac51..ec364e3b3f9 100644 --- a/packages/react-native/scripts/cocoapods/rndependencies.rb +++ b/packages/react-native/scripts/cocoapods/rndependencies.rb @@ -166,7 +166,12 @@ def self.podspec_source_download_prebuild_release_tarball() end def self.release_tarball_url(version, build_type) - maven_repo_url = "https://repo1.maven.org/maven2" + ## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. + ## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. + maven_repo_url = + ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ? + ENV[ENTERPRISE_REPOSITORY] : + "https://repo1.maven.org/maven2" group = "com/facebook/react" # Sample url from Maven: # https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.79.0-rc.0/react-native-artifacts-0.79.0-rc.0-reactnative-dependencies-debug.tar.gz diff --git a/packages/react-native/scripts/ios-prebuild/hermes.js b/packages/react-native/scripts/ios-prebuild/hermes.js index 356901ebdf2..e5e67bfcb0a 100644 --- a/packages/react-native/scripts/ios-prebuild/hermes.js +++ b/packages/react-native/scripts/ios-prebuild/hermes.js @@ -183,7 +183,10 @@ function getTarballUrl( version /*: string */, buildType /*: BuildFlavor */, ) /*: string */ { - const mavenRepoUrl = 'https://repo1.maven.org/maven2'; + // You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. + // The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. + const mavenRepoUrl = + process.env.ENTERPRISE_REPOSITORY ?? 'https://repo1.maven.org/maven2'; const namespace = 'com/facebook/react'; return `${mavenRepoUrl}/${namespace}/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-ios-${buildType.toLowerCase()}.tar.gz`; } diff --git a/packages/react-native/scripts/ios-prebuild/reactNativeDependencies.js b/packages/react-native/scripts/ios-prebuild/reactNativeDependencies.js index bac3a0e0519..6b5880e98c1 100644 --- a/packages/react-native/scripts/ios-prebuild/reactNativeDependencies.js +++ b/packages/react-native/scripts/ios-prebuild/reactNativeDependencies.js @@ -179,7 +179,10 @@ function getTarballUrl( version /*: string */, buildType /*: BuildFlavor */, ) /*: string */ { - const mavenRepoUrl = 'https://repo1.maven.org/maven2'; + // You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. + // The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. + const mavenRepoUrl = + process.env.ENTERPRISE_REPOSITORY ?? 'https://repo1.maven.org/maven2'; const namespace = 'com/facebook/react'; return `${mavenRepoUrl}/${namespace}/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-${buildType.toLowerCase()}.tar.gz`; } diff --git a/packages/react-native/sdks/hermes-engine/hermes-utils.rb b/packages/react-native/sdks/hermes-engine/hermes-utils.rb index 8ca229aa09e..f769f3063d5 100644 --- a/packages/react-native/sdks/hermes-engine/hermes-utils.rb +++ b/packages/react-native/sdks/hermes-engine/hermes-utils.rb @@ -204,7 +204,12 @@ def hermestag_file(react_native_path) end def release_tarball_url(version, build_type) - maven_repo_url = "https://repo1.maven.org/maven2" + ## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. + ## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. + maven_repo_url = + ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ? + ENV[ENTERPRISE_REPOSITORY] : + "https://repo1.maven.org/maven2" namespace = "com/facebook/react" # Sample url from Maven: # https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.71.0/react-native-artifacts-0.71.0-hermes-ios-debug.tar.gz From 5d779bd60b8d6d03b212d70bc4c5e8d471bd0322 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Fri, 11 Jul 2025 03:01:30 -0700 Subject: [PATCH 015/312] Fix ENTERPRISE_REPOSITORY usage (#52553) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52553 This change fixes the usage of `ENTERPRISE_REPOSITORY` in Ruby ## Changelog [Internal] - Reviewed By: cortinico Differential Revision: D78152641 fbshipit-source-id: e4ace014f1b7cbeb1ec5a0dea955d1fc2bae5b67 --- packages/react-native/scripts/cocoapods/rncore.rb | 4 ++-- packages/react-native/scripts/cocoapods/rndependencies.rb | 4 ++-- packages/react-native/sdks/hermes-engine/hermes-utils.rb | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/react-native/scripts/cocoapods/rncore.rb b/packages/react-native/scripts/cocoapods/rncore.rb index ec25a5ba6f6..a7bd337287f 100644 --- a/packages/react-native/scripts/cocoapods/rncore.rb +++ b/packages/react-native/scripts/cocoapods/rncore.rb @@ -122,8 +122,8 @@ def self.stable_tarball_url(version, build_type) ## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. ## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. maven_repo_url = - ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ? - ENV[ENTERPRISE_REPOSITORY] : + ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ? + ENV['ENTERPRISE_REPOSITORY'] : "https://repo1.maven.org/maven2" group = "com/facebook/react" # Sample url from Maven: diff --git a/packages/react-native/scripts/cocoapods/rndependencies.rb b/packages/react-native/scripts/cocoapods/rndependencies.rb index ec364e3b3f9..2717ab09e6b 100644 --- a/packages/react-native/scripts/cocoapods/rndependencies.rb +++ b/packages/react-native/scripts/cocoapods/rndependencies.rb @@ -169,8 +169,8 @@ def self.release_tarball_url(version, build_type) ## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. ## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. maven_repo_url = - ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ? - ENV[ENTERPRISE_REPOSITORY] : + ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ? + ENV['ENTERPRISE_REPOSITORY'] : "https://repo1.maven.org/maven2" group = "com/facebook/react" # Sample url from Maven: diff --git a/packages/react-native/sdks/hermes-engine/hermes-utils.rb b/packages/react-native/sdks/hermes-engine/hermes-utils.rb index f769f3063d5..d01a1d33006 100644 --- a/packages/react-native/sdks/hermes-engine/hermes-utils.rb +++ b/packages/react-native/sdks/hermes-engine/hermes-utils.rb @@ -207,8 +207,8 @@ def release_tarball_url(version, build_type) ## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded. ## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central. maven_repo_url = - ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ? - ENV[ENTERPRISE_REPOSITORY] : + ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ? + ENV['ENTERPRISE_REPOSITORY'] : "https://repo1.maven.org/maven2" namespace = "com/facebook/react" # Sample url from Maven: From 528173eb96c9c9baa539022673335eb159ea032f Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 08:12:58 -0700 Subject: [PATCH 016/312] Change polling to try and download the pom manifest (#52512) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52512 The way Maven works is that the artifacts are uploaded and available way before the browsing UI will allow us to browse them. By trying to download the `.pom` file instead of checking for the browsing website to be visible, we can shave some minutes during the release ## Changelog: [Internal] - Reviewed By: cortinico Differential Revision: D78008635 fbshipit-source-id: 96516163628d6d25db385d996a11b4af78db764a --- .../__tests__/verifyArtifactsAreOnMaven-test.js | 8 ++++---- .github/workflow-scripts/verifyArtifactsAreOnMaven.js | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflow-scripts/__tests__/verifyArtifactsAreOnMaven-test.js b/.github/workflow-scripts/__tests__/verifyArtifactsAreOnMaven-test.js index df1a332ac22..e77e7c4e2e4 100644 --- a/.github/workflow-scripts/__tests__/verifyArtifactsAreOnMaven-test.js +++ b/.github/workflow-scripts/__tests__/verifyArtifactsAreOnMaven-test.js @@ -38,7 +38,7 @@ describe('#verifyArtifactsAreOnMaven', () => { expect(mockSleep).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( - 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1', + 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom', ); }); @@ -55,7 +55,7 @@ describe('#verifyArtifactsAreOnMaven', () => { expect(mockSleep).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( - 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1', + 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom', ); }); @@ -67,7 +67,7 @@ describe('#verifyArtifactsAreOnMaven', () => { expect(mockSleep).toHaveBeenCalledTimes(0); expect(mockFetch).toHaveBeenCalledWith( - 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1', + 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom', ); }); @@ -81,7 +81,7 @@ describe('#verifyArtifactsAreOnMaven', () => { expect(mockSleep).toHaveBeenCalledTimes(90); expect(mockExit).toHaveBeenCalledWith(1); expect(mockFetch).toHaveBeenCalledWith( - 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1', + 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom', ); }); }); diff --git a/.github/workflow-scripts/verifyArtifactsAreOnMaven.js b/.github/workflow-scripts/verifyArtifactsAreOnMaven.js index d2091b00cde..1bb46163e0a 100644 --- a/.github/workflow-scripts/verifyArtifactsAreOnMaven.js +++ b/.github/workflow-scripts/verifyArtifactsAreOnMaven.js @@ -13,13 +13,14 @@ const SLEEP_S = 60; // 1 minute const MAX_RETRIES = 90; // 90 attempts. Waiting between attempt: 1 min. Total time: 90 min. const ARTIFACT_URL = 'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/'; +const ARTIFACT_NAME = 'react-native-artifacts-'; async function verifyArtifactsAreOnMaven(version, retries = MAX_RETRIES) { if (version.startsWith('v')) { version = version.substring(1); } - const artifactUrl = `${ARTIFACT_URL}${version}`; + const artifactUrl = `${ARTIFACT_URL}${version}/${ARTIFACT_NAME}${version}.pom`; for (let currentAttempt = 1; currentAttempt <= retries; currentAttempt++) { const response = await fetch(artifactUrl); From bbb322b4f41c23b80b3bd2cb1720d3c5ac34f40c Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 9 Jul 2025 08:12:58 -0700 Subject: [PATCH 017/312] Fix bump-podfile-lock job by using Xcode 16.2 (#52513) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52513 We bumped the requirement for cocoapods to use Xcode 16.1 or greater. This job was not update and therefore it failed when releasing 0.81.0-rc.0. This change should fix it and it should be cherry picked in the release branch too. By default, the macos executor in github actions are using Xcode 15.2 ## Changelog [Internal] - Reviewed By: cortinico, fabriziocucci Differential Revision: D78008316 fbshipit-source-id: 4d05233ca3b936cf128400030328124c453963ea --- .github/workflows/bump-podfile-lock.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/bump-podfile-lock.yml b/.github/workflows/bump-podfile-lock.yml index cdaf01e2a79..80b726edfd5 100644 --- a/.github/workflows/bump-podfile-lock.yml +++ b/.github/workflows/bump-podfile-lock.yml @@ -18,6 +18,10 @@ jobs: run: | git config --local user.email "bot@reactnative.dev" git config --local user.name "React Native Bot" + - name: Setup xcode + uses: ./.github/actions/setup-xcode + with: + xcode-version: '16.2.0' - name: Extract branch name run: | TAG="${{ github.ref_name }}"; From c9263e71e1cee13d833e75fb033e2bf5bd4a9b1b Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Thu, 10 Jul 2025 03:04:07 -0700 Subject: [PATCH 018/312] add support for USE_FRAMEWORKS when using prebuilt React Native Core (#52489) Summary: When using prebuilts the USE_FRAMEWORKS setting is not really relevant for the React Native code, since there will not be any source code to build frameworks for - and because we already have a framework for the code in React.XCFramework. This commit adds a new command to the React Native podspecs like we did with the ReactNativeDependencies framework. The method is called `add_rncore_dependency` and it does nothing when building from source - but when linking with the React.XCFramework it explicitly adds linking with the framework. In addition there are a few places in the ruby code where we check for the USE_FRAMEWORK value and changes some settings - where needed this commit will add a separate check to ensure we're building from source when making these changes. bypass-github-export-checks ## Changelog: [IOS] [ADDED] - Added support for using USE_FRAMEWORKS with prebuilt React Native Core Pull Request resolved: https://github.com/facebook/react-native/pull/52489 Test Plan: RNTester: - Builds without USE_FRAMEWORKS as before with/without prebuilt - Builds with USE_FRAMEWORKS=dynamic as before with source - and now also with prebuilt code. - Same goes for the static variant. Reviewed By: mdvacca Differential Revision: D78012332 Pulled By: cipolleschi fbshipit-source-id: ea942738ae52b9dceae48fb78a5026f04b7545b8 --- .../AppDelegate/React-RCTAppDelegate.podspec | 1 + .../Libraries/Blob/React-RCTBlob.podspec | 1 + .../Libraries/Image/React-RCTImage.podspec | 1 + .../React-RCTAnimation.podspec | 1 + .../Network/React-RCTNetwork.podspec | 1 + .../Settings/React-RCTSettings.podspec | 1 + .../Vibration/React-RCTVibration.podspec | 1 + packages/react-native/React-Core.podspec | 5 +--- .../CoreModules/React-CoreModules.podspec | 1 + .../React/React-RCTFBReactNativeSpec.podspec | 1 + .../React/React-RCTFabric.podspec | 1 + .../React/Runtime/React-RCTRuntime.podspec | 1 + .../ReactCommon/React-Fabric.podspec | 3 ++- .../React-FabricComponents.podspec | 1 + .../ReactCommon/React-FabricImage.podspec | 1 + .../ReactCommon/React-Mapbuffer.podspec | 2 +- .../ReactCommon/ReactCommon.podspec | 3 ++- .../cxxreact/React-cxxreact.podspec | 1 + .../ReactCommon/hermes/React-hermes.podspec | 1 + .../React-jserrorhandler.podspec | 3 ++- .../ReactCommon/jsi/React-jsi.podspec | 1 + .../jsiexecutor/React-jsiexecutor.podspec | 1 + .../React-jsinspector.podspec | 1 + .../cdp/React-jsinspectorcdp.podspec | 3 ++- .../network/React-jsinspectornetwork.podspec | 3 ++- .../tracing/React-jsinspectortracing.podspec | 3 ++- .../jsitooling/React-jsitooling.podspec | 3 ++- .../ReactCommon/logger/React-logger.podspec | 1 + .../react/debug/React-debug.podspec | 2 +- .../featureflags/React-featureflags.podspec | 3 ++- .../ios/React-NativeModulesApple.podspec | 3 ++- .../React-defaultsnativemodule.podspec | 1 + .../dom/React-domnativemodule.podspec | 1 + .../React-featureflagsnativemodule.podspec | 1 + .../React-idlecallbacksnativemodule.podspec | 1 + .../React-microtasksnativemodule.podspec | 1 + .../samples/ReactCommon-Samples.podspec | 1 + .../React-performancetimeline.podspec | 3 ++- .../renderer/css/React-renderercss.podspec | 4 ++-- .../debug/React-rendererdebug.podspec | 3 ++- .../renderer/graphics/React-graphics.podspec | 3 ++- .../platform/ios/React-ImageManager.podspec | 1 + .../React-runtimescheduler.podspec | 3 ++- .../react/runtime/React-RuntimeCore.podspec | 3 ++- .../react/runtime/React-RuntimeHermes.podspec | 3 ++- .../platform/ios/React-RuntimeApple.podspec | 3 ++- .../react/utils/React-utils.podspec | 3 ++- .../reactperflogger/React-perflogger.podspec | 1 + .../React-runtimeexecutor.podspec | 3 ++- .../scripts/cocoapods/new_architecture.rb | 1 + .../react-native/scripts/cocoapods/rncore.rb | 12 ++++++++++ .../react-native/scripts/cocoapods/utils.rb | 24 ++++++++++++------- .../generate-artifacts-executor-test.js.snap | 2 ++ .../templates/ReactCodegen.podspec.template | 1 + .../rn-tester/RCTTest/React-RCTTest.podspec | 1 + 55 files changed, 101 insertions(+), 34 deletions(-) diff --git a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec index 2e2bd60415e..437a80be92c 100644 --- a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec +++ b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec @@ -84,4 +84,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/Libraries/Blob/React-RCTBlob.podspec b/packages/react-native/Libraries/Blob/React-RCTBlob.podspec index 427a7471909..b0cab452128 100644 --- a/packages/react-native/Libraries/Blob/React-RCTBlob.podspec +++ b/packages/react-native/Libraries/Blob/React-RCTBlob.podspec @@ -55,4 +55,5 @@ Pod::Spec.new do |s| end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/Libraries/Image/React-RCTImage.podspec b/packages/react-native/Libraries/Image/React-RCTImage.podspec index 82e27b2c3ef..f2692e24c24 100644 --- a/packages/react-native/Libraries/Image/React-RCTImage.podspec +++ b/packages/react-native/Libraries/Image/React-RCTImage.podspec @@ -53,4 +53,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-NativeModulesApple") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/Libraries/NativeAnimation/React-RCTAnimation.podspec b/packages/react-native/Libraries/NativeAnimation/React-RCTAnimation.podspec index fbe0b69e37f..cc2f5c3d7e6 100644 --- a/packages/react-native/Libraries/NativeAnimation/React-RCTAnimation.podspec +++ b/packages/react-native/Libraries/NativeAnimation/React-RCTAnimation.podspec @@ -50,4 +50,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-featureflags") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/Libraries/Network/React-RCTNetwork.podspec b/packages/react-native/Libraries/Network/React-RCTNetwork.podspec index 8ffd5c2923d..e0eaca0aefc 100644 --- a/packages/react-native/Libraries/Network/React-RCTNetwork.podspec +++ b/packages/react-native/Libraries/Network/React-RCTNetwork.podspec @@ -52,4 +52,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-NativeModulesApple", :additional_framework_paths => ["build/generated/ios"]) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/Libraries/Settings/React-RCTSettings.podspec b/packages/react-native/Libraries/Settings/React-RCTSettings.podspec index 1016a81ad6c..8bd2c214f60 100644 --- a/packages/react-native/Libraries/Settings/React-RCTSettings.podspec +++ b/packages/react-native/Libraries/Settings/React-RCTSettings.podspec @@ -49,4 +49,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-NativeModulesApple", :additional_framework_paths => ["build/generated/ios"]) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec b/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec index 2b8212346cb..9768c13d4b3 100644 --- a/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec +++ b/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec @@ -49,4 +49,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-NativeModulesApple") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/React-Core.podspec b/packages/react-native/React-Core.podspec index 795801379b9..63eb78aeb59 100644 --- a/packages/react-native/React-Core.podspec +++ b/packages/react-native/React-Core.podspec @@ -83,10 +83,6 @@ Pod::Spec.new do |s| ss.exclude_files = exclude_files ss.private_header_files = "React/Cxx*/*.h" - # Include prebuilt if we're not building from source - if !ReactNativeCoreUtils.build_rncore_from_source() - ss.dependency "React-Core-prebuilt", version - end end s.subspec "DevSupport" do |ss| @@ -137,4 +133,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/React/CoreModules/React-CoreModules.podspec b/packages/react-native/React/CoreModules/React-CoreModules.podspec index be613510df5..6049b7d6b9f 100644 --- a/packages/react-native/React/CoreModules/React-CoreModules.podspec +++ b/packages/react-native/React/CoreModules/React-CoreModules.podspec @@ -63,4 +63,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-NativeModulesApple") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/React/React-RCTFBReactNativeSpec.podspec b/packages/react-native/React/React-RCTFBReactNativeSpec.podspec index 0920534b444..f5ebc834cbe 100644 --- a/packages/react-native/React/React-RCTFBReactNativeSpec.podspec +++ b/packages/react-native/React/React-RCTFBReactNativeSpec.podspec @@ -61,6 +61,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.subspec "components" do |ss| ss.source_files = podspec_sources("FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/**/*.{m,mm,cpp,h}", "FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/**/*.{h}") diff --git a/packages/react-native/React/React-RCTFabric.podspec b/packages/react-native/React/React-RCTFabric.podspec index 5dd782ed308..974f046fef1 100644 --- a/packages/react-native/React/React-RCTFabric.podspec +++ b/packages/react-native/React/React-RCTFabric.podspec @@ -97,6 +97,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.test_spec 'Tests' do |test_spec| test_spec.source_files = podspec_sources("Tests/**/*.{mm}", "") diff --git a/packages/react-native/React/Runtime/React-RCTRuntime.podspec b/packages/react-native/React/Runtime/React-RCTRuntime.podspec index f0984dc0601..2b1ca69d69e 100644 --- a/packages/react-native/React/Runtime/React-RCTRuntime.podspec +++ b/packages/react-native/React/Runtime/React-RCTRuntime.podspec @@ -68,4 +68,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/React-Fabric.podspec b/packages/react-native/ReactCommon/React-Fabric.podspec index f4756ab4af6..0a213adb955 100644 --- a/packages/react-native/ReactCommon/React-Fabric.podspec +++ b/packages/react-native/ReactCommon/React-Fabric.podspec @@ -32,7 +32,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = './' s.module_name = 'React_Fabric' end @@ -56,6 +56,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.subspec "animations" do |ss| ss.source_files = podspec_sources("react/renderer/animations/**/*.{m,mm,cpp,h}", "react/renderer/animations/**/*.{h}") diff --git a/packages/react-native/ReactCommon/React-FabricComponents.podspec b/packages/react-native/ReactCommon/React-FabricComponents.podspec index 2c9e811738b..3448123ee3f 100644 --- a/packages/react-native/ReactCommon/React-FabricComponents.podspec +++ b/packages/react-native/ReactCommon/React-FabricComponents.podspec @@ -79,6 +79,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.subspec "components" do |ss| diff --git a/packages/react-native/ReactCommon/React-FabricImage.podspec b/packages/react-native/ReactCommon/React-FabricImage.podspec index b2884cff041..0a20f733523 100644 --- a/packages/react-native/ReactCommon/React-FabricImage.podspec +++ b/packages/react-native/ReactCommon/React-FabricImage.podspec @@ -78,4 +78,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/React-Mapbuffer.podspec b/packages/react-native/ReactCommon/React-Mapbuffer.podspec index bd9af5b75f8..29de1623771 100644 --- a/packages/react-native/ReactCommon/React-Mapbuffer.podspec +++ b/packages/react-native/ReactCommon/React-Mapbuffer.podspec @@ -39,5 +39,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-debug") add_rn_third_party_dependencies(s) - + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/ReactCommon.podspec b/packages/react-native/ReactCommon/ReactCommon.podspec index 345d97686fe..b672e27c3a6 100644 --- a/packages/react-native/ReactCommon/ReactCommon.podspec +++ b/packages/react-native/ReactCommon/ReactCommon.podspec @@ -32,11 +32,12 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = './' end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) # TODO (T48588859): Restructure this target to align with dir structure: "react/nativemodule/..." # Note: Update this only when ready to minimize breaking changes. diff --git a/packages/react-native/ReactCommon/cxxreact/React-cxxreact.podspec b/packages/react-native/ReactCommon/cxxreact/React-cxxreact.podspec index 127dc2cec70..d6282664acf 100644 --- a/packages/react-native/ReactCommon/cxxreact/React-cxxreact.podspec +++ b/packages/react-native/ReactCommon/cxxreact/React-cxxreact.podspec @@ -52,4 +52,5 @@ Pod::Spec.new do |s| end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/hermes/React-hermes.podspec b/packages/react-native/ReactCommon/hermes/React-hermes.podspec index 687d25201ec..3014edde8e8 100644 --- a/packages/react-native/ReactCommon/hermes/React-hermes.podspec +++ b/packages/react-native/ReactCommon/hermes/React-hermes.podspec @@ -48,4 +48,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-runtimeexecutor", :additional_framework_paths => ["platform/ios"]) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec b/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec index 7510bb3db46..9433e579bdc 100644 --- a/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +++ b/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec @@ -33,7 +33,7 @@ Pod::Spec.new do |s| "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard() } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = '../' s.module_name = 'React_jserrorhandler' end @@ -49,5 +49,6 @@ Pod::Spec.new do |s| end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsi/React-jsi.podspec b/packages/react-native/ReactCommon/jsi/React-jsi.podspec index 45a8697a1d6..60e18530c97 100644 --- a/packages/react-native/ReactCommon/jsi/React-jsi.podspec +++ b/packages/react-native/ReactCommon/jsi/React-jsi.podspec @@ -46,4 +46,5 @@ Pod::Spec.new do |s| s.exclude_files = files_to_exclude add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsiexecutor/React-jsiexecutor.podspec b/packages/react-native/ReactCommon/jsiexecutor/React-jsiexecutor.podspec index 6059f09ef1e..9b127209819 100644 --- a/packages/react-native/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +++ b/packages/react-native/ReactCommon/jsiexecutor/React-jsiexecutor.podspec @@ -41,4 +41,5 @@ Pod::Spec.new do |s| end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec b/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec index dc6c8c37cf1..443088bcad4 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec @@ -60,4 +60,5 @@ Pod::Spec.new do |s| end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec b/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec index 2de4f6afd63..224c512030e 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec @@ -41,10 +41,11 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES"} - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = module_name s.header_mappings_dir = "../.." end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec b/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec index 91dbb1d6ce9..6f79020f0c3 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec @@ -41,7 +41,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES"} - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = module_name s.header_mappings_dir = "../.." end @@ -52,4 +52,5 @@ Pod::Spec.new do |s| s.dependency "React-timing" add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec b/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec index 63efbdaf465..21206aba7aa 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec @@ -41,7 +41,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES"} - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = module_name s.header_mappings_dir = "../.." end @@ -50,4 +50,5 @@ Pod::Spec.new do |s| s.dependency "React-timing" add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec b/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec index e6eda1f7e44..03e9ad0896c 100644 --- a/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec +++ b/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec @@ -28,7 +28,7 @@ Pod::Spec.new do |s| s.source_files = podspec_sources("react/runtime/*.{cpp,h}", "react/runtime/*.h") s.header_dir = "react/runtime" - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "JSITooling" s.header_mappings_dir = "./" end @@ -46,4 +46,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-jsinspectortracing", :framework_name => 'jsinspector_moderntracing') add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/logger/React-logger.podspec b/packages/react-native/ReactCommon/logger/React-logger.podspec index cb3cbba45bc..d83e10202c6 100644 --- a/packages/react-native/ReactCommon/logger/React-logger.podspec +++ b/packages/react-native/ReactCommon/logger/React-logger.podspec @@ -30,4 +30,5 @@ Pod::Spec.new do |s| s.header_dir = "logger" add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/debug/React-debug.podspec b/packages/react-native/ReactCommon/react/debug/React-debug.podspec index ea0932fa40c..b68c407a2f4 100644 --- a/packages/react-native/ReactCommon/react/debug/React-debug.podspec +++ b/packages/react-native/ReactCommon/react/debug/React-debug.podspec @@ -30,7 +30,7 @@ Pod::Spec.new do |s| s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_debug" s.header_mappings_dir = "../.." end diff --git a/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec b/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec index c1a55996c92..b5335894e5b 100644 --- a/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec +++ b/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec @@ -37,10 +37,11 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_featureflags" s.header_mappings_dir = "../.." end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec index edc219a3d51..063f0de34fc 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec @@ -31,7 +31,7 @@ Pod::Spec.new do |s| "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = './' end @@ -51,4 +51,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec index 8641c8d0679..3c97b10ea0c 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec @@ -47,6 +47,7 @@ Pod::Spec.new do |s| s.dependency "React-jsiexecutor" depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "React-domnativemodule" s.dependency "React-featureflagsnativemodule" diff --git a/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec index f7b860087b7..ca55e1a8a24 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec @@ -50,6 +50,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "Yoga" s.dependency "ReactCommon/turbomodule/core" diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec index 3579b4b32a9..3be0cac40b5 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec @@ -48,6 +48,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "ReactCommon/turbomodule/core" s.dependency "React-RCTFBReactNativeSpec" diff --git a/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec index 222f33f6760..d6bc746f77b 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec @@ -48,6 +48,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "ReactCommon/turbomodule/core" s.dependency "React-runtimescheduler" diff --git a/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec index 4bfaae3f62e..df364406aff 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec @@ -48,6 +48,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "ReactCommon/turbomodule/core" add_dependency(s, "React-RCTFBReactNativeSpec") diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec b/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec index 305ab3ac1be..fc5b29a94b0 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec @@ -57,4 +57,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec b/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec index 0c4e9748752..9f518ff6e8b 100644 --- a/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec +++ b/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec @@ -38,7 +38,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' ')} - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_performancetimeline" s.header_mappings_dir = "../../.." end @@ -49,4 +49,5 @@ Pod::Spec.new do |s| s.dependency "React-perflogger" add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec index ecd07167cd3..17f1d012023 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec +++ b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec @@ -18,7 +18,7 @@ end header_search_paths = [] -if ENV['USE_FRAMEWORKS'] +if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() header_search_paths << "\"$(PODS_TARGET_SRCROOT)/../../..\"" # this is needed to allow the renderer/css access its own files end @@ -40,7 +40,7 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES", } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_renderercss" s.header_mappings_dir = "../../.." end diff --git a/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec b/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec index 7f0216450e2..fe20e606387 100644 --- a/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec +++ b/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec @@ -40,11 +40,12 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_rendererdebug" s.header_mappings_dir = "../../.." end add_dependency(s, "React-debug") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec index 6f351f597c4..1af95039868 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec +++ b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec @@ -34,7 +34,7 @@ Pod::Spec.new do |s| s.header_dir = "react/renderer/graphics" s.framework = "UIKit" - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_graphics" s.header_mappings_dir = "../../.." header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] @@ -51,4 +51,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec index 412da4335dc..b21eb5b7c10 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec @@ -55,4 +55,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-rendererdebug") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec index cfeafdc923e..ca21eafd2c0 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec @@ -38,7 +38,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' ')} - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_runtimescheduler" s.header_mappings_dir = "../../.." end @@ -58,4 +58,5 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec b/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec index b6ea134e8fc..46c3c994495 100644 --- a/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec +++ b/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec @@ -33,7 +33,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = '../../' s.module_name = 'React_RuntimeCore' end @@ -52,6 +52,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "React-jsinspector" add_dependency(s, "React-jsitooling", :framework_name => "JSITooling") diff --git a/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec b/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec index acc74f4e42d..c213513db89 100644 --- a/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec +++ b/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec @@ -32,7 +32,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = '../../' s.module_name = 'React_RuntimeHermes' end @@ -52,4 +52,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-jsitooling", :framework_name => "JSITooling") add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec b/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec index ed8b6ee38a3..c40bcd43d51 100644 --- a/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec +++ b/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec @@ -38,7 +38,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = './' s.module_name = 'React_RuntimeApple' end @@ -71,4 +71,5 @@ Pod::Spec.new do |s| end add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/react/utils/React-utils.podspec b/packages/react-native/ReactCommon/react/utils/React-utils.podspec index 2472be4235a..27eeb6b40b6 100644 --- a/packages/react-native/ReactCommon/react/utils/React-utils.podspec +++ b/packages/react-native/ReactCommon/react/utils/React-utils.podspec @@ -34,7 +34,7 @@ Pod::Spec.new do |s| s.header_dir = "react/utils" s.exclude_files = "tests" - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.module_name = "React_utils" s.header_mappings_dir = "../.." header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] @@ -49,6 +49,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) add_dependency(s, "React-debug") end diff --git a/packages/react-native/ReactCommon/reactperflogger/React-perflogger.podspec b/packages/react-native/ReactCommon/reactperflogger/React-perflogger.podspec index f8f0b70268f..fb32c2a11ea 100644 --- a/packages/react-native/ReactCommon/reactperflogger/React-perflogger.podspec +++ b/packages/react-native/ReactCommon/reactperflogger/React-perflogger.podspec @@ -38,4 +38,5 @@ Pod::Spec.new do |s| } add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end diff --git a/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec b/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec index fc73fed8a16..86216f7d89b 100644 --- a/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +++ b/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec @@ -33,7 +33,7 @@ Pod::Spec.new do |s| s.source_files = podspec_sources(["ReactCommon/*.{m,mm,cpp,h}", "platform/ios/**/*.{m,mm,cpp,h}"], ["ReactCommon/*.h", "platform/ios/**/*.h"]) s.header_dir = "ReactCommon" - if ENV['USE_FRAMEWORKS'] + if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() s.header_mappings_dir = '.' header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] end @@ -44,6 +44,7 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES" } add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.dependency "React-jsi", version add_dependency(s, "React-featureflags") diff --git a/packages/react-native/scripts/cocoapods/new_architecture.rb b/packages/react-native/scripts/cocoapods/new_architecture.rb index f3ff4b90ed1..71ba87068e8 100644 --- a/packages/react-native/scripts/cocoapods/new_architecture.rb +++ b/packages/react-native/scripts/cocoapods/new_architecture.rb @@ -132,6 +132,7 @@ def self.install_modules_dependencies(spec, new_arch_enabled, folly_version = He depend_on_js_engine(spec) add_rn_third_party_dependencies(spec) + add_rncore_dependency(spec) spec.pod_target_xcconfig = current_config end diff --git a/packages/react-native/scripts/cocoapods/rncore.rb b/packages/react-native/scripts/cocoapods/rncore.rb index a7bd337287f..6c350b0346b 100644 --- a/packages/react-native/scripts/cocoapods/rncore.rb +++ b/packages/react-native/scripts/cocoapods/rncore.rb @@ -9,6 +9,18 @@ require_relative './utils.rb' +### Adds ReactNativeCore-prebuilt as a dependency to the given podspec if we're not +### building ReactNativeCore from source (then this function does nothing). +def add_rncore_dependency(s) + if !ReactNativeCoreUtils.build_rncore_from_source() + current_pod_target_xcconfig = s.to_hash["pod_target_xcconfig"] || {} + current_pod_target_xcconfig = current_pod_target_xcconfig.to_h unless current_pod_target_xcconfig.is_a?(Hash) + s.dependency "React-Core-prebuilt" + current_pod_target_xcconfig["HEADER_SEARCH_PATHS"] ||= [] << "$(PODS_ROOT)/React-Core-prebuilt/React.xcframework/Headers" + s.pod_target_xcconfig = current_pod_target_xcconfig + end +end + ## - RCT_USE_PREBUILT_RNCORE: If set to 1, it will use the release tarball from Maven instead of building from source. ## - RCT_TESTONLY_RNCORE_TARBALL_PATH: **TEST ONLY** If set, it will use a local tarball of RNCore if it exists. ## - RCT_TESTONLY_RNCORE_VERSION: **TEST ONLY** If set, it will override the version of RNCore to be used. diff --git a/packages/react-native/scripts/cocoapods/utils.rb b/packages/react-native/scripts/cocoapods/utils.rb index f6226b00c07..2cd7ef43725 100644 --- a/packages/react-native/scripts/cocoapods/utils.rb +++ b/packages/react-native/scripts/cocoapods/utils.rb @@ -255,18 +255,26 @@ def self.detect_use_frameworks(target_definition) end def self.create_header_search_path_for_frameworks(base_folder, pod_name, framework_name, additional_paths, include_base_path = true) - platforms = $RN_PLATFORMS != nil ? $RN_PLATFORMS : [] search_paths = [] - if platforms.empty?() || platforms.length() == 1 - base_path = File.join("${#{base_folder}}", pod_name, "#{framework_name}.framework", "Headers") - self.add_search_path_to_result(search_paths, base_path, additional_paths, include_base_path) - else - platforms.each { |platform| - base_path = File.join("${#{base_folder}}", "#{pod_name}-#{platform}", "#{framework_name}.framework", "Headers") + # When building using the prebuilt rncore we can't use framework folders as search paths since these aren't created + if ReactNativeCoreUtils.build_rncore_from_source() + platforms = $RN_PLATFORMS != nil ? $RN_PLATFORMS : [] + + if platforms.empty?() || platforms.length() == 1 + base_path = File.join("${#{base_folder}}", pod_name, "#{framework_name}.framework", "Headers") self.add_search_path_to_result(search_paths, base_path, additional_paths, include_base_path) - } + else + platforms.each { |platform| + base_path = File.join("${#{base_folder}}", "#{pod_name}-#{platform}", "#{framework_name}.framework", "Headers") + self.add_search_path_to_result(search_paths, base_path, additional_paths, include_base_path) + } + end + else + base_path = File.join("${PODS_ROOT}", "#{pod_name}") + self.add_search_path_to_result(search_paths, base_path, additional_paths, include_base_path) end + return search_paths end diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 951e69765b4..49b21ae02f1 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -478,6 +478,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.script_phases = { 'name' => 'Generate Specs', @@ -955,6 +956,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.script_phases = { 'name' => 'Generate Specs', diff --git a/packages/react-native/scripts/codegen/templates/ReactCodegen.podspec.template b/packages/react-native/scripts/codegen/templates/ReactCodegen.podspec.template index 20b40fdaccb..34cf8a7c343 100644 --- a/packages/react-native/scripts/codegen/templates/ReactCodegen.podspec.template +++ b/packages/react-native/scripts/codegen/templates/ReactCodegen.podspec.template @@ -82,6 +82,7 @@ Pod::Spec.new do |s| depend_on_js_engine(s) add_rn_third_party_dependencies(s) + add_rncore_dependency(s) s.script_phases = { 'name' => 'Generate Specs', diff --git a/packages/rn-tester/RCTTest/React-RCTTest.podspec b/packages/rn-tester/RCTTest/React-RCTTest.podspec index a65d1032d41..e9676863578 100644 --- a/packages/rn-tester/RCTTest/React-RCTTest.podspec +++ b/packages/rn-tester/RCTTest/React-RCTTest.podspec @@ -41,4 +41,5 @@ Pod::Spec.new do |s| s.dependency "React-jsi", version add_rn_third_party_dependencies(s) + add_rncore_dependency(s) end From c665a969391f3f5bb8ffab3cf8fac1780f861864 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Thu, 10 Jul 2025 03:04:07 -0700 Subject: [PATCH 019/312] add release/debug switch script (#52498) Summary: Fixes #T228219721 This commit adds the debug/release switch script like we have for rn deps and hermes for react-core prebuilt: - Added script: replace-rncore-version-js - Inserted script into React-Core-prebuilt podspec - Updated rncore.rb with correct filenames bypass-github-export-checks ## Changelog: [IOS] [ADDED] - add release/debug switch script for React-Core-prebuilt Pull Request resolved: https://github.com/facebook/react-native/pull/52498 Test Plan: Run in RNTester and switch between release/debug Reviewed By: rshest Differential Revision: D78012917 Pulled By: cipolleschi fbshipit-source-id: 71cad23cd41484a8253fc89d5dce8653649657a0 --- .../react-native/React-Core-prebuilt.podspec | 5 +- .../react-native/scripts/cocoapods/rncore.rb | 16 +-- .../scripts/replace-rncore-version.js | 120 ++++++++++++++++++ 3 files changed, 130 insertions(+), 11 deletions(-) create mode 100644 packages/react-native/scripts/replace-rncore-version.js diff --git a/packages/react-native/React-Core-prebuilt.podspec b/packages/react-native/React-Core-prebuilt.podspec index 65a4a448345..4892ce8ab27 100644 --- a/packages/react-native/React-Core-prebuilt.podspec +++ b/packages/react-native/React-Core-prebuilt.podspec @@ -62,8 +62,7 @@ Pod::Spec.new do |s| CONFIG="Debug" fi - # TODO(T228219721): Add this for React Native Core as well - ##### "$NODE_BINARY" "$REACT_NATIVE_PATH/third-party-podspecs/replace_dependencies_version.js" -c "$CONFIG" -r "#{version}" -p "$PODS_ROOT" + "$NODE_BINARY" "$REACT_NATIVE_PATH/scripts/replace-rncore-version.js" -c "$CONFIG" -r "#{version}" -p "$PODS_ROOT" EOS } @@ -73,7 +72,7 @@ Pod::Spec.new do |s| # always run the script without warning script_phase[:always_out_of_date] = "1" end - + s.script_phase = script_phase end end diff --git a/packages/react-native/scripts/cocoapods/rncore.rb b/packages/react-native/scripts/cocoapods/rncore.rb index 6c350b0346b..7108f147cf1 100644 --- a/packages/react-native/scripts/cocoapods/rncore.rb +++ b/packages/react-native/scripts/cocoapods/rncore.rb @@ -125,8 +125,8 @@ def self.podspec_source_download_prebuild_stable_tarball() url = stable_tarball_url(@@react_native_version, :debug) rncore_log("Using tarball from URL: #{url}") - download_stable_rndeps(@@react_native_path, @@react_native_version, :debug) - download_stable_rndeps(@@react_native_path, @@react_native_version, :release) + download_stable_rncore(@@react_native_path, @@react_native_version, :debug) + download_stable_rncore(@@react_native_path, @@react_native_version, :release) return {:http => url} end @@ -162,9 +162,9 @@ def self.nightly_tarball_url(version) end end - def self.download_stable_rndeps(react_native_path, version, configuration) + def self.download_stable_rncore(react_native_path, version, configuration) tarball_url = stable_tarball_url(version, configuration) - download_rndeps_tarball(react_native_path, tarball_url, version, configuration) + download_rncore_tarball(react_native_path, tarball_url, version, configuration) end def self.podspec_source_download_prebuilt_nightly_tarball(version) @@ -173,14 +173,14 @@ def self.podspec_source_download_prebuilt_nightly_tarball(version) return {:http => url} end - def self.download_rndeps_tarball(react_native_path, tarball_url, version, configuration) + def self.download_rncore_tarball(react_native_path, tarball_url, version, configuration) destination_path = configuration == nil ? - "#{artifacts_dir()}/reactnative-core-debug.tar.gz-#{version}.tar.gz" : - "#{artifacts_dir()}/reactnative-core-debug.tar.gz-#{version}-#{configuration}.tar.gz" + "#{artifacts_dir()}/reactnative-core-#{version}.tar.gz" : + "#{artifacts_dir()}/reactnative-core-#{version}-#{configuration}.tar.gz" unless File.exist?(destination_path) # Download to a temporary file first so we don't cache incomplete downloads. - tmp_file = "#{artifacts_dir()}/reactnative-core-debug.tar.gz.download" + tmp_file = "#{artifacts_dir()}/reactnative-core.download" `mkdir -p "#{artifacts_dir()}" && curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"` end diff --git a/packages/react-native/scripts/replace-rncore-version.js b/packages/react-native/scripts/replace-rncore-version.js new file mode 100644 index 00000000000..16c2d762150 --- /dev/null +++ b/packages/react-native/scripts/replace-rncore-version.js @@ -0,0 +1,120 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +'use strict'; + +const {execSync} = require('child_process'); +const fs = require('fs'); +const yargs = require('yargs'); + +const LAST_BUILD_FILENAME = 'React-Core-prebuilt/.last_build_configuration'; + +function validateBuildConfiguration(configuration /*: string */) { + if (!['Debug', 'Release'].includes(configuration)) { + throw new Error(`Invalid configuration ${configuration}`); + } +} + +function validateVersion(version /*: ?string */) { + if (version == null || version === '') { + throw new Error('Version cannot be empty'); + } +} + +function shouldReplaceRnCoreConfiguration(configuration /*: string */) { + const fileExists = fs.existsSync(LAST_BUILD_FILENAME); + + if (fileExists) { + console.log(`Found ${LAST_BUILD_FILENAME} file`); + const oldConfiguration = fs.readFileSync(LAST_BUILD_FILENAME).toString(); + if (oldConfiguration === configuration) { + console.log( + 'Same config of the previous build. No need to replace React-Core-prebuilt', + ); + return false; + } + } + + // Assumption: if there is no stored last build, we assume that it was build for debug. + if (!fileExists && configuration === 'Debug') { + console.log( + 'No previous build detected, but Debug Configuration. No need to replace React-Core-prebuilt', + ); + return false; + } + + return true; +} + +function replaceRNCoreConfiguration( + configuration /*: string */, + version /*: string */, + podsRoot /*: string */, +) { + // Filename comes from rncore.rb + const tarballURLPath = `${podsRoot}/ReactNativeCore-artifacts/reactnative-core-${version.toLowerCase()}-${configuration.toLowerCase()}.tar.gz`; + + const finalLocation = 'React-Core-prebuilt'; + console.log('Preparing the final location', finalLocation); + fs.rmSync(finalLocation, {force: true, recursive: true}); + fs.mkdirSync(finalLocation, {recursive: true}); + + console.log('Extracting the tarball', tarballURLPath); + execSync(`tar -xf ${tarballURLPath} -C ${finalLocation}`); +} + +function updateLastBuildConfiguration(configuration /*: string */) { + console.log(`Updating ${LAST_BUILD_FILENAME} with ${configuration}`); + fs.writeFileSync(LAST_BUILD_FILENAME, configuration); +} + +function main( + configuration /*: string */, + version /*: string */, + podsRoot /*: string */, +) { + validateBuildConfiguration(configuration); + validateVersion(version); + + if (!shouldReplaceRnCoreConfiguration(configuration)) { + return; + } + + replaceRNCoreConfiguration(configuration, version, podsRoot); + updateLastBuildConfiguration(configuration); + console.log('Done replacing React Native prebuilt'); +} + +// This script is executed in the Pods folder, which is usually not synched to Github, so it should be ok +const argv = yargs + .option('c', { + alias: 'configuration', + description: + 'Configuration to use to download the right React-Core prebuilt version. Allowed values are "Debug" and "Release".', + }) + .option('r', { + alias: 'reactNativeVersion', + description: + 'The Version of React Native associated with the React-Core prebuilt tarball.', + }) + .option('p', { + alias: 'podsRoot', + description: 'The path to the Pods root folder', + }) + .usage('Usage: $0 -c Debug -r -p ').argv; + +// $FlowFixMe[prop-missing] +const configuration = argv.configuration; +// $FlowFixMe[prop-missing] +const version = argv.reactNativeVersion; +// $FlowFixMe[prop-missing] +const podsRoot = argv.podsRoot; + +main(configuration, version, podsRoot); From d9bf351b12a0936767fba71ee9b05840d3d0b31e Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Thu, 10 Jul 2025 09:36:54 -0700 Subject: [PATCH 020/312] Back out "Remove ShadowNodeTraits::Trait::DirtyYogaNode" (#52528) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52528 This was a breaking change that is currently breaking `react-native-safe-area-context` so we can't ship it as it is, especially because all the apps in OSS will be affected by this. Changelog: [General] [Changed] - Revert breaking change due to the removal of `ShadowNodeTraits::Trait::DirtyYogaNode` Original commit changeset: 869e81f0ae00 Original Phabricator Diff: D75324251 Reviewed By: huntie Differential Revision: D78085848 fbshipit-source-id: f7fcc5e33d59cc966a4ee88dfdbedca4f4c580e0 --- .../ReactCommon/react/renderer/core/ShadowNodeTraits.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeTraits.h b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeTraits.h index ef60eba2ad1..a6896b84678 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeTraits.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeTraits.h @@ -82,6 +82,15 @@ class ShadowNodeTraits { // Must not be set directly. It is used by the view culling algorithm to // efficiently determine if a node is uncullable. Unstable_uncullableTrace = 1 << 13, + + // Indicates that the `YogaLayoutableShadowNode` must set `isDirty` flag for + // Yoga node when a `ShadowNode` is being cloned. `ShadowNode`s that modify + // Yoga styles in the constructor (or later) *after* the `ShadowNode` + // is cloned must set this trait. + // Any Yoga node (not only Leaf ones) can have this trait. + // **Deprecated**: This trait is deprecated and will be removed in a future + // version of React Native. + DirtyYogaNode = 1 << 14, }; /* From 6b8d1a07d9e15bb8d6772a1721938caa8e2b15b9 Mon Sep 17 00:00:00 2001 From: Tomasz Zawadzki Date: Thu, 10 Jul 2025 08:25:50 -0700 Subject: [PATCH 021/312] Expose `react_renderer_bridging` headers via prefab (#52529) Summary: This PR fixes the following build error while trying to build `react-native@0.81.0-rc.0` app with `react-native-screens@4.10.0` installed using react-native prebuilds (AAR) due to a missing `react/renderer/bridging/bridging.h` file in `prefab/modules/` inside `react-android-0.81.0-rc.0-debug.aar`. ``` In file included from /Users/tomekzaw/RNOS/react-native-reanimated/node_modules/react-native-screens/android/src/main/cpp/NativeProxy.cpp:2: In file included from /Users/tomekzaw/.gradle/caches/8.14.1/transforms/75e7f8f7b5ef763e687a16737daf01b6/transformed/react-android-0.81.0-rc.0-debug/prefab/modules/reactnative/include/react/fabric/Binding.h:12: In file included from /Users/tomekzaw/.gradle/caches/8.14.1/transforms/75e7f8f7b5ef763e687a16737daf01b6/transformed/react-android-0.81.0-rc.0-debug/prefab/modules/reactnative/include/react/fabric/FabricUIManagerBinding.h:22: /Users/tomekzaw/.gradle/caches/8.14.1/transforms/75e7f8f7b5ef763e687a16737daf01b6/transformed/react-android-0.81.0-rc.0-debug/prefab/modules/reactnative/include/react/renderer/uimanager/primitives.h:14:10: fatal error: 'react/renderer/bridging/bridging.h' file not found 14 | #include | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. ninja: build stopped: subcommand failed. ``` ## Changelog: [ANDROID] [CHANGED] - Expose `react_renderer_bridging` headers via prefab Pull Request resolved: https://github.com/facebook/react-native/pull/52529 Reviewed By: cipolleschi Differential Revision: D78092428 Pulled By: cortinico fbshipit-source-id: de8208ae7545201f600c277a0c8907575c310c58 --- packages/react-native/ReactAndroid/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 1b3991d4679..a24a08ceed9 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -112,6 +112,8 @@ val preparePrefab by Pair( "../ReactCommon/react/renderer/animations/", "react/renderer/animations/"), + // react_renderer_bridging + Pair("../ReactCommon/react/renderer/bridging/", "react/renderer/bridging/"), // react_renderer_componentregistry Pair( "../ReactCommon/react/renderer/componentregistry/", From bb27a16d84bc7c8e9d5fd3651989571324204af4 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Fri, 11 Jul 2025 07:15:35 -0700 Subject: [PATCH 022/312] Fix RCTPushNotification podspec to work with prebuilds (#52531) Summary: This change tries to use the prebuilds we build in CI i other iOS jobs to speed-up the iOS CI bypass-github-export-checks ## Changelog: [Internal] - Pull Request resolved: https://github.com/facebook/react-native/pull/52531 Test Plan: Build rntester using prebuilds: ``` # after downloading the prebuilds from CI and unzipping them export HERMES_ENGINE_TARBALL_PATH=~/Downloads/hermes-ios-Debug.tar.gz export RCT_USE_LOCAL_RN_DEP=~/Downloads/reactnative-dependencies-debug.tar.gz export RCT_TESTONLY_RNCORE_TARBALL_PATH=~/Downloads/React.xcframework.tar.gz USE_FRAMEWORKS=dynamic bundle exec pod install open RNTesterPods.xcworkspace ``` And then build from Xcode. Reviewed By: rshest Differential Revision: D78158734 Pulled By: cipolleschi fbshipit-source-id: 43cbb66bd44fa621292b69de0dadde5ed20c4574 --- .../PushNotificationIOS/React-RCTPushNotification.podspec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec b/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec index 487566103e2..9e18e93b55f 100644 --- a/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +++ b/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec @@ -18,6 +18,7 @@ end header_search_paths = [ "\"${PODS_ROOT}/Headers/Public/ReactCodegen/react/renderer/components\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTFBReactNativeSpec/FBReactNativeSpec\"", ] Pod::Spec.new do |s| @@ -45,7 +46,9 @@ Pod::Spec.new do |s| s.dependency "React-Core/RCTPushNotificationHeaders" s.dependency "React-jsi" - add_dependency(s, "React-RCTFBReactNativeSpec") + add_dependency(s, "React-RCTFBReactNativeSpec", :additional_framework_paths => ['FBReactNativeSpec']) add_dependency(s, "ReactCommon", :subspec => "turbomodule/core", :additional_framework_paths => ["react/nativemodule/core"]) add_dependency(s, "React-NativeModulesApple") + + add_rncore_dependency(s) end From 9c4da7b9057bde70a135f1e272f7f466f02f350d Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Thu, 3 Jul 2025 11:37:55 -0700 Subject: [PATCH 023/312] Fix Dimensions window values on Android < 15 (#47554) Summary: This PR (initially created for edge-to-edge opt-in support, rebased multiple times) fixes the `Dimensions` API `window` values on Android < 15, when edge-to-edge is enabled. Currently the window height doesn't include the status and navigation bar heights (but it does on Android >= 15): Screenshot 2025-06-27 at 16 23 02 Using `WindowMetricsCalculator` from AndroidX: Screenshot 2025-06-27 at 16 34 01 Fixes https://github.com/facebook/react-native/issues/47080 ## Changelog: [Android] [Fixed] Fix `Dimensions` `window` values on Android < 15 when edge-to-edge is enabled Pull Request resolved: https://github.com/facebook/react-native/pull/47554 Test Plan: Run the example app on an Android < 15 device. Rollback Plan: Reviewed By: cortinico Differential Revision: D77547628 Pulled By: alanleedev fbshipit-source-id: 9d841f642d5b7ef3294dfbf3868137087a672ad6 --- .../react-native/ReactAndroid/build.gradle.kts | 1 + .../react/uimanager/DisplayMetricsHolder.kt | 16 +++++++++++++++- packages/react-native/gradle/libs.versions.toml | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index a24a08ceed9..1e9fef41e96 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -620,6 +620,7 @@ dependencies { api(libs.androidx.autofill) api(libs.androidx.swiperefreshlayout) api(libs.androidx.tracing) + api(libs.androidx.window) api(libs.fbjni) api(libs.fresco) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt index 9f6c9310a69..994990b83c4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt @@ -13,8 +13,10 @@ import android.util.DisplayMetrics import android.view.WindowManager import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.window.layout.WindowMetricsCalculator import com.facebook.react.bridge.WritableMap import com.facebook.react.bridge.WritableNativeMap +import com.facebook.react.views.view.isEdgeToEdgeFeatureFlagOn /** * Holds an instance of the current DisplayMetrics so we don't have to thread it through all the @@ -62,9 +64,19 @@ public object DisplayMetricsHolder { @JvmStatic public fun initDisplayMetrics(context: Context) { val displayMetrics = context.resources.displayMetrics - windowDisplayMetrics = displayMetrics + val windowDisplayMetrics = DisplayMetrics() val screenDisplayMetrics = DisplayMetrics() + + windowDisplayMetrics.setTo(displayMetrics) screenDisplayMetrics.setTo(displayMetrics) + + if (isEdgeToEdgeFeatureFlagOn) { + WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context).let { + windowDisplayMetrics.widthPixels = it.bounds.width() + windowDisplayMetrics.heightPixels = it.bounds.height() + } + } + val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager // Get the real display metrics if we are using API level 17 or higher. // The real metrics include system decor elements (e.g. soft menu bar). @@ -72,6 +84,8 @@ public object DisplayMetricsHolder { // See: // http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics) @Suppress("DEPRECATION") wm.defaultDisplay.getRealMetrics(screenDisplayMetrics) + + DisplayMetricsHolder.windowDisplayMetrics = windowDisplayMetrics DisplayMetricsHolder.screenDisplayMetrics = screenDisplayMetrics } diff --git a/packages/react-native/gradle/libs.versions.toml b/packages/react-native/gradle/libs.versions.toml index f0902b7441d..db117f7dfc8 100644 --- a/packages/react-native/gradle/libs.versions.toml +++ b/packages/react-native/gradle/libs.versions.toml @@ -16,6 +16,7 @@ androidx-swiperefreshlayout = "1.1.0" androidx-test = "1.5.0" androidx-test-junit = "1.2.1" androidx-tracing = "1.1.0" +androidx-window = "1.4.0" assertj = "3.21.0" binary-compatibility-validator = "0.13.2" download = "5.4.0" @@ -63,6 +64,7 @@ androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidx- androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-test" } androidx-tracing = { module = "androidx.tracing:tracing", version.ref = "androidx-tracing" } androidx-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" } +androidx-window = { module = "androidx.window:window", version.ref = "androidx-window" } fbjni = { module = "com.facebook.fbjni:fbjni", version.ref = "fbjni" } fresco = { module = "com.facebook.fresco:fresco", version.ref = "fresco" } From 75dcb5fc79fd2a84abfc78f8c6017f07d51945dc Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Thu, 10 Jul 2025 03:04:07 -0700 Subject: [PATCH 024/312] fix wrong use of return in header file generation loop (#52490) Summary: Instead of returning when creating the list of header files from our podspecs, we now call `continue`. This is a bug that causes all subsequent globs in the header file list to be omitted after the first omitted glob. bypass-github-export-checks ## Changelog: [IOS] [FIXED] - Fixed premature return in header file generation from podspec globs Pull Request resolved: https://github.com/facebook/react-native/pull/52490 Test Plan: Run prebuild scripts and verify that React-Fabric podspec headers are included in the resulting xcframework. Reviewed By: mdvacca Differential Revision: D78012399 Pulled By: cipolleschi fbshipit-source-id: 2d334f4f7ff966ea4c778786a7056e13a255a708 --- packages/react-native/scripts/ios-prebuild/headers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/scripts/ios-prebuild/headers.js b/packages/react-native/scripts/ios-prebuild/headers.js index a3f1bad1c0e..25b03daf1a6 100644 --- a/packages/react-native/scripts/ios-prebuild/headers.js +++ b/packages/react-native/scripts/ios-prebuild/headers.js @@ -49,7 +49,7 @@ function getHeaderFilesFromPodspecs( let arg2 = match[2]?.trim().replace(/['"]/g, ''); if (!arg2) { // Skip - return; + continue; } // Check if arg2 is an array (e.g., ['a', 'b']) if (arg2.startsWith('[') && arg2.endsWith(']')) { From 2b13f47ff97564273467e4a53f31b347ad8e18bd Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Tue, 8 Jul 2025 16:33:18 -0700 Subject: [PATCH 025/312] Gradle to 8.14.3 (#52466) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52466 Just another patch bump of Gradle 8.14 Changelog: [Android] [Changed] - Gradle to 8.14.3 Reviewed By: NickGerleman Differential Revision: D77865220 fbshipit-source-id: 450d175242f046909ab1984654d24e92a2536d5d --- gradle/wrapper/gradle-wrapper.properties | 2 +- packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties | 2 +- .../helloworld/android/gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 002b867c48b..d4081da476b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties index ff23a68d70f..d4081da476b 100644 --- a/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/packages/gradle-plugin/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties b/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties index ff23a68d70f..d4081da476b 100644 --- a/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties +++ b/private/helloworld/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From c7cd66c64e7cd4e182d19383f317f61119717979 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Fri, 11 Jul 2025 02:16:35 -0700 Subject: [PATCH 026/312] Fix `display: contents` nodes not being cloned with the wrong owner (#52530) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52530 This PR fixes two issues with `display: contents` implementation: 1. When a node with `display: contents` set is a leaf, it won't be cloned after the initial tree is built. The added test case covers this scenario. 2. It was possible for the subtree of `display: contents` nodes not to be cloned during layout. I don't have a minimal reproduction for this one, unfortunately. It was discovered in the Expensify app: https://github.com/Expensify/App/issues/65268, along with a consistent reproduction. In that specific case, it seems to be heavily tied to `react-native-onyx`, which is a state management library. Changelog: [GENERAL][FIXED] - Fixed nodes with `display: contents` set being cloned with the wrong owner X-link: https://github.com/facebook/yoga/pull/1826 Reviewed By: adityasharat, NickGerleman Differential Revision: D78084270 Pulled By: j-piasecki fbshipit-source-id: eb81f6d7dcd1665974d07261ba693e2abea239bb --- .../yoga/yoga/algorithm/CalculateLayout.cpp | 23 ++++++++------- .../ReactCommon/yoga/yoga/node/Node.cpp | 28 +++++++++++++++++++ .../ReactCommon/yoga/yoga/node/Node.h | 10 ++++--- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp b/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp index 8c4eaef934d..db7904286d8 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +++ b/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp @@ -478,16 +478,19 @@ static void zeroOutLayoutRecursively(yoga::Node* const node) { } static void cleanupContentsNodesRecursively(yoga::Node* const node) { - for (auto child : node->getChildren()) { - if (child->style().display() == Display::Contents) { - child->getLayout() = {}; - child->setLayoutDimension(0, Dimension::Width); - child->setLayoutDimension(0, Dimension::Height); - child->setHasNewLayout(true); - child->setDirty(false); - child->cloneChildrenIfNeeded(); - - cleanupContentsNodesRecursively(child); + if (node->hasContentsChildren()) [[unlikely]] { + node->cloneContentsChildrenIfNeeded(); + for (auto child : node->getChildren()) { + if (child->style().display() == Display::Contents) { + child->getLayout() = {}; + child->setLayoutDimension(0, Dimension::Width); + child->setLayoutDimension(0, Dimension::Height); + child->setHasNewLayout(true); + child->setDirty(false); + child->cloneChildrenIfNeeded(); + + cleanupContentsNodesRecursively(child); + } } } } diff --git a/packages/react-native/ReactCommon/yoga/yoga/node/Node.cpp b/packages/react-native/ReactCommon/yoga/yoga/node/Node.cpp index fbdf5c1bff7..d42bd5f9e70 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/node/Node.cpp +++ b/packages/react-native/ReactCommon/yoga/yoga/node/Node.cpp @@ -181,6 +181,17 @@ void Node::setDirty(bool isDirty) { } } +void Node::setChildren(const std::vector& children) { + children_ = children; + + contentsChildrenCount_ = 0; + for (const auto& child : children) { + if (child->style().display() == Display::Contents) { + contentsChildrenCount_++; + } + } +} + bool Node::removeChild(Node* child) { auto p = std::find(children_.begin(), children_.end(), child); if (p != children_.end()) { @@ -380,6 +391,23 @@ void Node::cloneChildrenIfNeeded() { if (child->getOwner() != this) { child = resolveRef(config_->cloneNode(child, this, i)); child->setOwner(this); + + if (child->hasContentsChildren()) [[unlikely]] { + child->cloneContentsChildrenIfNeeded(); + } + } + i += 1; + } +} + +void Node::cloneContentsChildrenIfNeeded() { + size_t i = 0; + for (Node*& child : children_) { + if (child->style().display() == Display::Contents && + child->getOwner() != this) { + child = resolveRef(config_->cloneNode(child, this, i)); + child->setOwner(this); + child->cloneChildrenIfNeeded(); } i += 1; } diff --git a/packages/react-native/ReactCommon/yoga/yoga/node/Node.h b/packages/react-native/ReactCommon/yoga/yoga/node/Node.h index 5ae7d432ebb..8068c814973 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/node/Node.h +++ b/packages/react-native/ReactCommon/yoga/yoga/node/Node.h @@ -96,6 +96,10 @@ class YG_EXPORT Node : public ::YGNode { return config_->hasErrata(errata); } + bool hasContentsChildren() const { + return contentsChildrenCount_ != 0; + } + YGDirtiedFunc getDirtiedFunc() const { return dirtiedFunc_; } @@ -244,15 +248,12 @@ class YG_EXPORT Node : public ::YGNode { owner_ = owner; } - void setChildren(const std::vector& children) { - children_ = children; - } - // TODO: rvalue override for setChildren void setConfig(Config* config); void setDirty(bool isDirty); + void setChildren(const std::vector& children); void setLayoutLastOwnerDirection(Direction direction); void setLayoutComputedFlexBasis(FloatOptional computedFlexBasis); void setLayoutComputedFlexBasisGeneration( @@ -286,6 +287,7 @@ class YG_EXPORT Node : public ::YGNode { void removeChild(size_t index); void cloneChildrenIfNeeded(); + void cloneContentsChildrenIfNeeded(); void markDirtyAndPropagate(); float resolveFlexGrow() const; float resolveFlexShrink() const; From ab7396175357f8bbb950c5c28cb2e0e48674272c Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 14 Jul 2025 14:39:05 +0100 Subject: [PATCH 027/312] Revert "Fix Dimensions window values on Android < 15 (#47554)" This reverts commit 9c4da7b9057bde70a135f1e272f7f466f02f350d. --- .../react-native/ReactAndroid/build.gradle.kts | 1 - .../react/uimanager/DisplayMetricsHolder.kt | 16 +--------------- packages/react-native/gradle/libs.versions.toml | 2 -- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 1e9fef41e96..a24a08ceed9 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -620,7 +620,6 @@ dependencies { api(libs.androidx.autofill) api(libs.androidx.swiperefreshlayout) api(libs.androidx.tracing) - api(libs.androidx.window) api(libs.fbjni) api(libs.fresco) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt index 994990b83c4..9f6c9310a69 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt @@ -13,10 +13,8 @@ import android.util.DisplayMetrics import android.view.WindowManager import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat -import androidx.window.layout.WindowMetricsCalculator import com.facebook.react.bridge.WritableMap import com.facebook.react.bridge.WritableNativeMap -import com.facebook.react.views.view.isEdgeToEdgeFeatureFlagOn /** * Holds an instance of the current DisplayMetrics so we don't have to thread it through all the @@ -64,19 +62,9 @@ public object DisplayMetricsHolder { @JvmStatic public fun initDisplayMetrics(context: Context) { val displayMetrics = context.resources.displayMetrics - val windowDisplayMetrics = DisplayMetrics() + windowDisplayMetrics = displayMetrics val screenDisplayMetrics = DisplayMetrics() - - windowDisplayMetrics.setTo(displayMetrics) screenDisplayMetrics.setTo(displayMetrics) - - if (isEdgeToEdgeFeatureFlagOn) { - WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context).let { - windowDisplayMetrics.widthPixels = it.bounds.width() - windowDisplayMetrics.heightPixels = it.bounds.height() - } - } - val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager // Get the real display metrics if we are using API level 17 or higher. // The real metrics include system decor elements (e.g. soft menu bar). @@ -84,8 +72,6 @@ public object DisplayMetricsHolder { // See: // http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics) @Suppress("DEPRECATION") wm.defaultDisplay.getRealMetrics(screenDisplayMetrics) - - DisplayMetricsHolder.windowDisplayMetrics = windowDisplayMetrics DisplayMetricsHolder.screenDisplayMetrics = screenDisplayMetrics } diff --git a/packages/react-native/gradle/libs.versions.toml b/packages/react-native/gradle/libs.versions.toml index db117f7dfc8..f0902b7441d 100644 --- a/packages/react-native/gradle/libs.versions.toml +++ b/packages/react-native/gradle/libs.versions.toml @@ -16,7 +16,6 @@ androidx-swiperefreshlayout = "1.1.0" androidx-test = "1.5.0" androidx-test-junit = "1.2.1" androidx-tracing = "1.1.0" -androidx-window = "1.4.0" assertj = "3.21.0" binary-compatibility-validator = "0.13.2" download = "5.4.0" @@ -64,7 +63,6 @@ androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidx- androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-test" } androidx-tracing = { module = "androidx.tracing:tracing", version.ref = "androidx-tracing" } androidx-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" } -androidx-window = { module = "androidx.window:window", version.ref = "androidx-window" } fbjni = { module = "com.facebook.fbjni:fbjni", version.ref = "fbjni" } fresco = { module = "com.facebook.fresco:fresco", version.ref = "fresco" } From b06bb89ddd3cebddea4716036a4368b87a65f492 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 15 Jul 2025 09:52:01 +0000 Subject: [PATCH 028/312] Release 0.81.0-rc.1 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index cfa2ef628db..996776fa2c1 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.0", - "@react-native/metro-config": "0.81.0-rc.0", + "@react-native/metro-babel-transformer": "0.81.0-rc.1", + "@react-native/metro-config": "0.81.0-rc.1", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index cae6eddfe14..7dae6f065dc 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index ebb1df1cfa9..cb34ae7f773 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-rc.1" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index caee25f966b..9caecb623eb 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.0", + "@react-native/dev-middleware": "0.81.0-rc.1", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.0", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 68fefa3d1fc..6db7d9e719b 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index cec04847ce7..913ee761003 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index d23321b76bc..2fd144634b6 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 2af12dd8b65..bcfe6ec308f 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.0", + "@react-native/debugger-frontend": "0.81.0-rc.1", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 95945f8bdcb..65c866e119f 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.0", + "@react-native/eslint-plugin": "0.81.0-rc.1", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 65b675b0962..d042ed2ef64 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 545ba38d2ba..33114ca1c49 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.0", + "@react-native/codegen": "0.81.0-rc.1", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 9c48d9809d4..31531cc5b65 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 274bc9256b4..0bbbfaa7fe8 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.0", - "@react-native/metro-babel-transformer": "0.81.0-rc.0", + "@react-native/js-polyfills": "0.81.0-rc.1", + "@react-native/metro-babel-transformer": "0.81.0-rc.1", "metro-config": "^0.83.0", "metro-runtime": "^0.83.0" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index a8f7353e1c0..0c080ca3c6e 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 938369d2aad..a537136ba10 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index d575a5a1ef2..bd10537265c 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 0d6f2e93ecc..f51c1530232 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.0", + "@react-native/babel-plugin-codegen": "0.81.0-rc.1", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 0e2eebf74a1..e5c05de822f 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.0", + "@react-native/babel-preset": "0.81.0-rc.1", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index b547ea6c1da..b6822de8b0f 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 5d07f5a4900..37c43443593 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-rc.1" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index aeaeba0f479..6e69f12bb53 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-rc.1" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 220d35a9bc8..96218070735 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.0", - "react-native": "0.81.0-rc.0" + "@react-native/babel-preset": "0.81.0-rc.1", + "react-native": "0.81.0-rc.1" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 3fdfc0f156b..ee1edf1ee69 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -18,5 +18,5 @@ export const version: $ReadOnly<{ major: 0, minor: 81, patch: 0, - prerelease: 'rc.0', + prerelease: 'rc.1', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index b8737d7bd19..76c813f5173 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.0", + RCTVersionPrerelease: @"rc.1", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index d145451dbe1..0310c0dda3a 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.0 +VERSION_NAME=0.81.0-rc.1 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 29cb572f085..4f9a897f321 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -15,6 +15,6 @@ public object ReactNativeVersion { "major" to 0, "minor" to 81, "patch" to 0, - "prerelease" to "rc.0" + "prerelease" to "rc.1" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index b3488570cbb..a2eb6d7bc95 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -22,7 +22,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = "rc.0"; + std::string_view Prerelease = "rc.1"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 7b507a0570c..de878477d9a 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -160,13 +160,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.0", - "@react-native/codegen": "0.81.0-rc.0", - "@react-native/community-cli-plugin": "0.81.0-rc.0", - "@react-native/gradle-plugin": "0.81.0-rc.0", - "@react-native/js-polyfills": "0.81.0-rc.0", - "@react-native/normalize-colors": "0.81.0-rc.0", - "@react-native/virtualized-lists": "0.81.0-rc.0", + "@react-native/assets-registry": "0.81.0-rc.1", + "@react-native/codegen": "0.81.0-rc.1", + "@react-native/community-cli-plugin": "0.81.0-rc.1", + "@react-native/gradle-plugin": "0.81.0-rc.1", + "@react-native/js-polyfills": "0.81.0-rc.1", + "@react-native/normalize-colors": "0.81.0-rc.1", + "@react-native/virtualized-lists": "0.81.0-rc.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 49b21ae02f1..cd2c2580dbf 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"0.81.0-rc.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"0.81.0-rc.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -839,7 +839,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"0.81.0-rc.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -877,7 +877,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.0\\" +version = \\"0.81.0-rc.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index b80d825f4e6..8caf56bbf2a 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.0", - "@react-native/popup-menu-android": "0.81.0-rc.0", + "@react-native/new-app-screen": "0.81.0-rc.1", + "@react-native/popup-menu-android": "0.81.0-rc.1", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index b455336782f..47b0e26eee8 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index ba68327908d..d1d901e0267 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.0", + "version": "0.81.0-rc.1", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 598ae89bbf4..58bae0b15be 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.0" + "react-native": "0.81.0-rc.1" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.0", - "@react-native/core-cli-utils": "0.81.0-rc.0", - "@react-native/eslint-config": "0.81.0-rc.0", - "@react-native/metro-config": "0.81.0-rc.0", - "@react-native/typescript-config": "0.81.0-rc.0", + "@react-native/babel-preset": "0.81.0-rc.1", + "@react-native/core-cli-utils": "0.81.0-rc.1", + "@react-native/eslint-config": "0.81.0-rc.1", + "@react-native/metro-config": "0.81.0-rc.1", + "@react-native/typescript-config": "0.81.0-rc.1", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index edd0d521570..675dc8f5a33 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.0" + "@react-native/codegen": "0.81.0-rc.1" }, "devDependencies": { "@babel/core": "^7.25.2", From 10b63c15b6faaf54d555ede879f82ac565f030a9 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 15 Jul 2025 12:06:48 +0000 Subject: [PATCH 029/312] [LOCAL] Bump Podfile.lock --- packages/rn-tester/Podfile.lock | 598 ++++++++++++++++---------------- 1 file changed, 299 insertions(+), 299 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 8aa66016ade..de68e92dbcc 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0-rc.0) + - FBLazyVector (0.81.0-rc.1) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.0-rc.0): - - hermes-engine/Pre-built (= 0.81.0-rc.0) - - hermes-engine/Pre-built (0.81.0-rc.0) + - hermes-engine (0.81.0-rc.1): + - hermes-engine/Pre-built (= 0.81.0-rc.1) + - hermes-engine/Pre-built (0.81.0-rc.1) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0-rc.0) - - RCTRequired (0.81.0-rc.0) - - RCTTypeSafety (0.81.0-rc.0): - - FBLazyVector (= 0.81.0-rc.0) - - RCTRequired (= 0.81.0-rc.0) - - React-Core (= 0.81.0-rc.0) - - React (0.81.0-rc.0): - - React-Core (= 0.81.0-rc.0) - - React-Core/DevSupport (= 0.81.0-rc.0) - - React-Core/RCTWebSocket (= 0.81.0-rc.0) - - React-RCTActionSheet (= 0.81.0-rc.0) - - React-RCTAnimation (= 0.81.0-rc.0) - - React-RCTBlob (= 0.81.0-rc.0) - - React-RCTImage (= 0.81.0-rc.0) - - React-RCTLinking (= 0.81.0-rc.0) - - React-RCTNetwork (= 0.81.0-rc.0) - - React-RCTSettings (= 0.81.0-rc.0) - - React-RCTText (= 0.81.0-rc.0) - - React-RCTVibration (= 0.81.0-rc.0) - - React-callinvoker (0.81.0-rc.0) - - React-Core (0.81.0-rc.0): + - RCTDeprecation (0.81.0-rc.1) + - RCTRequired (0.81.0-rc.1) + - RCTTypeSafety (0.81.0-rc.1): + - FBLazyVector (= 0.81.0-rc.1) + - RCTRequired (= 0.81.0-rc.1) + - React-Core (= 0.81.0-rc.1) + - React (0.81.0-rc.1): + - React-Core (= 0.81.0-rc.1) + - React-Core/DevSupport (= 0.81.0-rc.1) + - React-Core/RCTWebSocket (= 0.81.0-rc.1) + - React-RCTActionSheet (= 0.81.0-rc.1) + - React-RCTAnimation (= 0.81.0-rc.1) + - React-RCTBlob (= 0.81.0-rc.1) + - React-RCTImage (= 0.81.0-rc.1) + - React-RCTLinking (= 0.81.0-rc.1) + - React-RCTNetwork (= 0.81.0-rc.1) + - React-RCTSettings (= 0.81.0-rc.1) + - React-RCTText (= 0.81.0-rc.1) + - React-RCTVibration (= 0.81.0-rc.1) + - React-callinvoker (0.81.0-rc.1) + - React-Core (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.0) + - React-Core/Default (= 0.81.0-rc.1) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0-rc.0): + - React-Core/CoreModulesHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0-rc.0): + - React-Core/Default (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0-rc.0): + - React-Core/DevSupport (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.0) - - React-Core/RCTWebSocket (= 0.81.0-rc.0) + - React-Core/Default (= 0.81.0-rc.1) + - React-Core/RCTWebSocket (= 0.81.0-rc.1) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0-rc.0): + - React-Core/RCTActionSheetHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0-rc.0): + - React-Core/RCTAnimationHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0-rc.0): + - React-Core/RCTBlobHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0-rc.0): + - React-Core/RCTImageHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0-rc.0): + - React-Core/RCTLinkingHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0-rc.0): + - React-Core/RCTNetworkHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.0-rc.0): + - React-Core/RCTPushNotificationHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0-rc.0): + - React-Core/RCTSettingsHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0-rc.0): + - React-Core/RCTTextHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0-rc.0): + - React-Core/RCTVibrationHeaders (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0-rc.0): + - React-Core/RCTWebSocket (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.0) + - React-Core/Default (= 0.81.0-rc.1) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0-rc.0): + - React-CoreModules (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0-rc.0) - - React-Core/CoreModulesHeaders (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) + - RCTTypeSafety (= 0.81.0-rc.1) + - React-Core/CoreModulesHeaders (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0-rc.0) + - React-RCTImage (= 0.81.0-rc.1) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0-rc.0): + - React-cxxreact (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.0) - - React-debug (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) + - React-callinvoker (= 0.81.0-rc.1) + - React-debug (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0-rc.0) - - React-perflogger (= 0.81.0-rc.0) + - React-logger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.1) - React-runtimeexecutor - - React-timing (= 0.81.0-rc.0) + - React-timing (= 0.81.0-rc.1) - SocketRocket - - React-debug (0.81.0-rc.0) - - React-defaultsnativemodule (0.81.0-rc.0): + - React-debug (0.81.0-rc.1) + - React-defaultsnativemodule (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0-rc.0): + - React-domnativemodule (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0-rc.0): + - React-Fabric (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0-rc.0) - - React-Fabric/attributedstring (= 0.81.0-rc.0) - - React-Fabric/bridging (= 0.81.0-rc.0) - - React-Fabric/componentregistry (= 0.81.0-rc.0) - - React-Fabric/componentregistrynative (= 0.81.0-rc.0) - - React-Fabric/components (= 0.81.0-rc.0) - - React-Fabric/consistency (= 0.81.0-rc.0) - - React-Fabric/core (= 0.81.0-rc.0) - - React-Fabric/dom (= 0.81.0-rc.0) - - React-Fabric/imagemanager (= 0.81.0-rc.0) - - React-Fabric/leakchecker (= 0.81.0-rc.0) - - React-Fabric/mounting (= 0.81.0-rc.0) - - React-Fabric/observers (= 0.81.0-rc.0) - - React-Fabric/scheduler (= 0.81.0-rc.0) - - React-Fabric/telemetry (= 0.81.0-rc.0) - - React-Fabric/templateprocessor (= 0.81.0-rc.0) - - React-Fabric/uimanager (= 0.81.0-rc.0) + - React-Fabric/animations (= 0.81.0-rc.1) + - React-Fabric/attributedstring (= 0.81.0-rc.1) + - React-Fabric/bridging (= 0.81.0-rc.1) + - React-Fabric/componentregistry (= 0.81.0-rc.1) + - React-Fabric/componentregistrynative (= 0.81.0-rc.1) + - React-Fabric/components (= 0.81.0-rc.1) + - React-Fabric/consistency (= 0.81.0-rc.1) + - React-Fabric/core (= 0.81.0-rc.1) + - React-Fabric/dom (= 0.81.0-rc.1) + - React-Fabric/imagemanager (= 0.81.0-rc.1) + - React-Fabric/leakchecker (= 0.81.0-rc.1) + - React-Fabric/mounting (= 0.81.0-rc.1) + - React-Fabric/observers (= 0.81.0-rc.1) + - React-Fabric/scheduler (= 0.81.0-rc.1) + - React-Fabric/telemetry (= 0.81.0-rc.1) + - React-Fabric/templateprocessor (= 0.81.0-rc.1) + - React-Fabric/uimanager (= 0.81.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0-rc.0): + - React-Fabric/animations (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0-rc.0): + - React-Fabric/attributedstring (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0-rc.0): + - React-Fabric/bridging (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0-rc.0): + - React-Fabric/componentregistry (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0-rc.0): + - React-Fabric/componentregistrynative (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0-rc.0): + - React-Fabric/components (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.0) - - React-Fabric/components/root (= 0.81.0-rc.0) - - React-Fabric/components/scrollview (= 0.81.0-rc.0) - - React-Fabric/components/view (= 0.81.0-rc.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.1) + - React-Fabric/components/root (= 0.81.0-rc.1) + - React-Fabric/components/scrollview (= 0.81.0-rc.1) + - React-Fabric/components/view (= 0.81.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.0): + - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0-rc.0): + - React-Fabric/components/root (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0-rc.0): + - React-Fabric/components/scrollview (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0-rc.0): + - React-Fabric/components/view (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0-rc.0): + - React-Fabric/consistency (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0-rc.0): + - React-Fabric/core (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0-rc.0): + - React-Fabric/dom (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0-rc.0): + - React-Fabric/imagemanager (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0-rc.0): + - React-Fabric/leakchecker (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0-rc.0): + - React-Fabric/mounting (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0-rc.0): + - React-Fabric/observers (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0-rc.0) + - React-Fabric/observers/events (= 0.81.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0-rc.0): + - React-Fabric/observers/events (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0-rc.0): + - React-Fabric/scheduler (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0-rc.0): + - React-Fabric/telemetry (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0-rc.0): + - React-Fabric/templateprocessor (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0-rc.0): + - React-Fabric/uimanager (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0-rc.0) + - React-Fabric/uimanager/consistency (= 0.81.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0-rc.0): + - React-Fabric/uimanager/consistency (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0-rc.0): + - React-FabricComponents (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0-rc.0) - - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.0) + - React-FabricComponents/components (= 0.81.0-rc.1) + - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0-rc.0): + - React-FabricComponents/components (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1259,16 +1259,16 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.0) - - React-FabricComponents/components/iostextinput (= 0.81.0-rc.0) - - React-FabricComponents/components/modal (= 0.81.0-rc.0) - - React-FabricComponents/components/rncore (= 0.81.0-rc.0) - - React-FabricComponents/components/safeareaview (= 0.81.0-rc.0) - - React-FabricComponents/components/scrollview (= 0.81.0-rc.0) - - React-FabricComponents/components/text (= 0.81.0-rc.0) - - React-FabricComponents/components/textinput (= 0.81.0-rc.0) - - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.0) - - React-FabricComponents/components/virtualview (= 0.81.0-rc.0) + - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.1) + - React-FabricComponents/components/iostextinput (= 0.81.0-rc.1) + - React-FabricComponents/components/modal (= 0.81.0-rc.1) + - React-FabricComponents/components/rncore (= 0.81.0-rc.1) + - React-FabricComponents/components/safeareaview (= 0.81.0-rc.1) + - React-FabricComponents/components/scrollview (= 0.81.0-rc.1) + - React-FabricComponents/components/text (= 0.81.0-rc.1) + - React-FabricComponents/components/textinput (= 0.81.0-rc.1) + - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.1) + - React-FabricComponents/components/virtualview (= 0.81.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -1281,7 +1281,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0-rc.0): + - React-FabricComponents/components/inputaccessory (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1308,7 +1308,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0-rc.0): + - React-FabricComponents/components/iostextinput (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1335,7 +1335,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0-rc.0): + - React-FabricComponents/components/modal (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1362,7 +1362,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0-rc.0): + - React-FabricComponents/components/rncore (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1389,7 +1389,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0-rc.0): + - React-FabricComponents/components/safeareaview (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1416,7 +1416,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0-rc.0): + - React-FabricComponents/components/scrollview (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1443,7 +1443,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0-rc.0): + - React-FabricComponents/components/text (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1470,7 +1470,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0-rc.0): + - React-FabricComponents/components/textinput (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1497,7 +1497,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0-rc.0): + - React-FabricComponents/components/unimplementedview (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1524,7 +1524,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0-rc.0): + - React-FabricComponents/components/virtualview (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1551,7 +1551,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0-rc.0): + - React-FabricComponents/textlayoutmanager (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1578,7 +1578,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0-rc.0): + - React-FabricImage (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1587,21 +1587,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0-rc.0) - - RCTTypeSafety (= 0.81.0-rc.0) + - RCTRequired (= 0.81.0-rc.1) + - RCTTypeSafety (= 0.81.0-rc.1) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0-rc.0) + - React-jsiexecutor (= 0.81.0-rc.1) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0-rc.0): + - React-featureflags (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1610,7 +1610,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0-rc.0): + - React-featureflagsnativemodule (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1625,7 +1625,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0-rc.0): + - React-graphics (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0-rc.0): + - React-hermes (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1647,16 +1647,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.0) + - React-cxxreact (= 0.81.0-rc.1) - React-jsi - - React-jsiexecutor (= 0.81.0-rc.0) + - React-jsiexecutor (= 0.81.0-rc.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.1) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0-rc.0): + - React-idlecallbacksnativemodule (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1672,7 +1672,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0-rc.0): + - React-ImageManager (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1687,7 +1687,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0-rc.0): + - React-jserrorhandler (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1702,7 +1702,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0-rc.0): + - React-jsi (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1712,7 +1712,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0-rc.0): + - React-jsiexecutor (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1721,15 +1721,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) + - React-cxxreact (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.1) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0-rc.0): + - React-jsinspector (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1743,10 +1743,10 @@ PODS: - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.0) + - React-perflogger (= 0.81.0-rc.1) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0-rc.0): + - React-jsinspectorcdp (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1755,7 +1755,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0-rc.0): + - React-jsinspectornetwork (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1768,7 +1768,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0-rc.0): + - React-jsinspectortracing (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1779,7 +1779,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0-rc.0): + - React-jsitooling (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1787,16 +1787,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) + - React-cxxreact (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0-rc.0): + - React-jsitracing (0.81.0-rc.1): - React-jsi - - React-logger (0.81.0-rc.0): + - React-logger (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1805,7 +1805,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0-rc.0): + - React-Mapbuffer (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1815,7 +1815,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0-rc.0): + - React-microtasksnativemodule (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1829,7 +1829,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.0-rc.0): + - React-NativeModulesApple (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1849,8 +1849,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0-rc.0) - - React-perflogger (0.81.0-rc.0): + - React-oscompat (0.81.0-rc.1) + - React-perflogger (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1859,7 +1859,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0-rc.0): + - React-performancetimeline (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1872,9 +1872,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0-rc.0): - - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.0) - - React-RCTAnimation (0.81.0-rc.0): + - React-RCTActionSheet (0.81.0-rc.1): + - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.1) + - React-RCTAnimation (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1890,7 +1890,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0-rc.0): + - React-RCTAppDelegate (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1924,7 +1924,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0-rc.0): + - React-RCTBlob (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1943,7 +1943,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0-rc.0): + - React-RCTFabric (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1978,7 +1978,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0-rc.0): + - React-RCTFBReactNativeSpec (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -1992,10 +1992,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.0) + - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.1) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0-rc.0): + - React-RCTFBReactNativeSpec/components (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2018,7 +2018,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0-rc.0): + - React-RCTImage (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2034,14 +2034,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0-rc.0): - - React-Core/RCTLinkingHeaders (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) + - React-RCTLinking (0.81.0-rc.1): + - React-Core/RCTLinkingHeaders (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0-rc.0) - - React-RCTNetwork (0.81.0-rc.0): + - ReactCommon/turbomodule/core (= 0.81.0-rc.1) + - React-RCTNetwork (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2059,14 +2059,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.0-rc.0): + - React-RCTPushNotification (0.81.0-rc.1): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.0-rc.0): + - React-RCTRuntime (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2086,7 +2086,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0-rc.0): + - React-RCTSettings (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2101,7 +2101,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.0-rc.0): + - React-RCTTest (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2109,15 +2109,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.0-rc.0) - - React-CoreModules (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) - - ReactCommon/turbomodule/core (= 0.81.0-rc.0) + - React-Core (= 0.81.0-rc.1) + - React-CoreModules (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) + - ReactCommon/turbomodule/core (= 0.81.0-rc.1) - SocketRocket - - React-RCTText (0.81.0-rc.0): - - React-Core/RCTTextHeaders (= 0.81.0-rc.0) + - React-RCTText (0.81.0-rc.1): + - React-Core/RCTTextHeaders (= 0.81.0-rc.1) - Yoga - - React-RCTVibration (0.81.0-rc.0): + - React-RCTVibration (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2131,11 +2131,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0-rc.0) - - React-renderercss (0.81.0-rc.0): + - React-rendererconsistency (0.81.0-rc.1) + - React-renderercss (0.81.0-rc.1): - React-debug - React-utils - - React-rendererdebug (0.81.0-rc.0): + - React-rendererdebug (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2145,7 +2145,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0-rc.0): + - React-RuntimeApple (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0-rc.0): + - React-RuntimeCore (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2196,7 +2196,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0-rc.0): + - React-runtimeexecutor (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2206,10 +2206,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.1) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0-rc.0): + - React-RuntimeHermes (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2230,7 +2230,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0-rc.0): + - React-runtimescheduler (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2252,8 +2252,8 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0-rc.0) - - React-utils (0.81.0-rc.0): + - React-timing (0.81.0-rc.1) + - React-utils (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2263,11 +2263,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0-rc.0) + - React-jsi (= 0.81.0-rc.1) - SocketRocket - - ReactAppDependencyProvider (0.81.0-rc.0): + - ReactAppDependencyProvider (0.81.0-rc.1): - ReactCodegen - - ReactCodegen (0.81.0-rc.0): + - ReactCodegen (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2293,7 +2293,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0-rc.0): + - ReactCommon (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2301,9 +2301,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0-rc.0) + - ReactCommon/turbomodule (= 0.81.0-rc.1) - SocketRocket - - ReactCommon-Samples (0.81.0-rc.0): + - ReactCommon-Samples (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2319,7 +2319,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.0-rc.0): + - ReactCommon/turbomodule (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2328,15 +2328,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.0) - - React-cxxreact (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) - - React-logger (= 0.81.0-rc.0) - - React-perflogger (= 0.81.0-rc.0) - - ReactCommon/turbomodule/bridging (= 0.81.0-rc.0) - - ReactCommon/turbomodule/core (= 0.81.0-rc.0) + - React-callinvoker (= 0.81.0-rc.1) + - React-cxxreact (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) + - React-logger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.1) + - ReactCommon/turbomodule/bridging (= 0.81.0-rc.1) + - ReactCommon/turbomodule/core (= 0.81.0-rc.1) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0-rc.0): + - ReactCommon/turbomodule/bridging (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2345,13 +2345,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.0) - - React-cxxreact (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) - - React-logger (= 0.81.0-rc.0) - - React-perflogger (= 0.81.0-rc.0) + - React-callinvoker (= 0.81.0-rc.1) + - React-cxxreact (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) + - React-logger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.1) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0-rc.0): + - ReactCommon/turbomodule/core (0.81.0-rc.1): - boost - DoubleConversion - fast_float @@ -2360,14 +2360,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.0) - - React-cxxreact (= 0.81.0-rc.0) - - React-debug (= 0.81.0-rc.0) - - React-featureflags (= 0.81.0-rc.0) - - React-jsi (= 0.81.0-rc.0) - - React-logger (= 0.81.0-rc.0) - - React-perflogger (= 0.81.0-rc.0) - - React-utils (= 0.81.0-rc.0) + - React-callinvoker (= 0.81.0-rc.1) + - React-cxxreact (= 0.81.0-rc.1) + - React-debug (= 0.81.0-rc.1) + - React-featureflags (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.1) + - React-logger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.1) + - React-utils (= 0.81.0-rc.1) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2651,83 +2651,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 1a60614c9bf4b769d5e6db6e7cc99b159473d3fd + FBLazyVector: 2c3d3c490f38cb7f4e6a6f3b435d94673abe704c fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: e11dd6f36fb954b68ac57c63aab26870693a0523 + hermes-engine: ebf353fe47a71a4771e31060913caa6c78418abf MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 12ad29a0de812bbc22e9a2d655ef589e53e8549c - RCTRequired: 2af6f22ad0b38174924749187cd538a9377ede9b - RCTTypeSafety: eb4d5f4f5f76719be33fea6abeb927bc3648e223 - React: ae6c320c1c1c746735fe0552bd80ab09eb5e5965 - React-callinvoker: 357c5e653f9ded9882eef35a9c79cfe7883c7952 - React-Core: a5d148ae64a2ab39a4f19b5ea944414210ae78c3 - React-CoreModules: 23c84ebe472a20fcacc7b12431ddc33c7e154773 - React-cxxreact: ac69940b0fa37d4c17577d747b29b01cdd51e16a - React-debug: 69d00768e3931fb67c300dfdd3bb564041c79550 - React-defaultsnativemodule: 55019bf6e59876dd966454c79ecbe681e463289a - React-domnativemodule: 4eb2619645ddea23c1741c032ff2866e72cdc79f - React-Fabric: 3f3a94654354aa47f40da630ba40f916b639bc66 - React-FabricComponents: 5298e37a538f6d1eb44d01c3f63c71fde23c8003 - React-FabricImage: b8919e65407fe9c2d0018e43ae859f38e23dfcf7 - React-featureflags: acc6bbdc2f6f0696692b8d084957630698af8c47 - React-featureflagsnativemodule: 554eac2c832374d8089f7e440a471d7ac5526e4f - React-graphics: cd2b8c4db6d7c73ae09234ad1c3e3ee8e4b1a132 - React-hermes: 43778d36050c00e04c423405e14e6a7b4a0354e5 - React-idlecallbacksnativemodule: 0b7a22fd91ee5496d21d391e9df2ebb699f4f56a - React-ImageManager: 3e378f1c026eb5c14d3e9d5ffee4fd13e4d21f05 - React-jserrorhandler: 5c5305488056be3dad391d9e6f4202fc33afec34 - React-jsi: f325975776228bbb777458661f5daffdce6221e8 - React-jsiexecutor: 402dffd360653d38c0444401250166b37e58f88c - React-jsinspector: 889aed82ba549cf739059087f840fd91c4897ec9 - React-jsinspectorcdp: 72817c01c6e47af348b0beb06319a6afb6715364 - React-jsinspectornetwork: bbbcabfb5a1feedff7bc73dc49abd96b5e622c8e - React-jsinspectortracing: 2f626a61aac285ba5f0f66072b514796fcae9ce1 - React-jsitooling: 2900a5f8bcf937f068a2513a51649b69f59187be - React-jsitracing: 33cca161c23ea28fc40f932c20f098f45100bec2 - React-logger: c7e141766582e403862b2e986f45f7b5a9099d6d - React-Mapbuffer: 1bd8de39348006345e7c81699334131ef1a2fa38 - React-microtasksnativemodule: 4a37c01568355ee7d1c4afc3ee01e0e460ddcbe4 - React-NativeModulesApple: 1fc3e6bc346e93c7602b43f3bab36bc046396386 - React-oscompat: 840467926a77e46c193ac8ccd4078a3f0af029ef - React-perflogger: 6aaef7ae140bfd2b4c8256429797aac6a39179c2 - React-performancetimeline: 2c2287e4a682f70fe44882eb2a5333c5edc8fb06 - React-RCTActionSheet: 6ae67865a0a729194758fe93bd0befa6992520ee - React-RCTAnimation: ec446d4b77cd0d8e8543164fdda317edad6af605 - React-RCTAppDelegate: 8c92ab25b3147445d5e9f15c28a2ccf712e7369a - React-RCTBlob: 9b18ecca8a06528bb90ed6e5601b93e051bdf8d4 - React-RCTFabric: c938d7b2782d0bae9b02644d3020b63e1d359461 - React-RCTFBReactNativeSpec: 5f054b35ddf7e4c07fb3830103ee50c47cdf5578 - React-RCTImage: a4075533ccadbb3753918a9b93c96e52307e435d - React-RCTLinking: a7949fa25c7a9e5f56d038ef22e852adea3e0973 - React-RCTNetwork: 7f9fd80e2f16dcfbb5b55d5d498bbbd011549ad0 - React-RCTPushNotification: 4aaa234c3106d9c0bd1534cb70bd445a66512ec0 - React-RCTRuntime: 95b176d99fdbf6d2b8d5912c8f59b5df6adfb393 - React-RCTSettings: 1625919263e77e7c21956ea5371d5c9a63f0a86c - React-RCTTest: d3013ad3e5b346e8ed94ef83871cce4d2dc1a4ee - React-RCTText: 6028f67dbe5d1d88ac75cff50b25c7bb40434b8e - React-RCTVibration: 2eb74075ba5888303f92b1f8ba62c4269645e42f - React-rendererconsistency: aaf55340b14b2b3da830304a561ef6f757c228c2 - React-renderercss: 41b161fdcfa7e703a0dcbfb4411ccb33be8100d4 - React-rendererdebug: be2f16c2d770ea42ecf7b16d2849d92ff63ee043 - React-RuntimeApple: e5372e94aaf70565fcb21a0c460b8cfee9699e93 - React-RuntimeCore: 4f37aca70749a27fb0cb234c9fb8f4912e6438b1 - React-runtimeexecutor: 29807910e0f06dad12e42e322d412ed82234d0be - React-RuntimeHermes: e27354afcc473d6746c895ba8f131e8033d06491 - React-runtimescheduler: 9782ee8a3f958b371522f2f4fbbfeaefe7a2d47a - React-timing: 35923a99adfba07561648f97c3374688f2a54424 - React-utils: 674f9136ce8bbc520c57ad837eb420ee38a7af32 - ReactAppDependencyProvider: 673b38067987ee6a6668c8ee5223d778cb68d3c7 - ReactCodegen: 0141bd74eb5ca5718add839aca23770e942fdb25 - ReactCommon: 6f9c0a9ba2c9de7b730f5451409ed9f3125d384f - ReactCommon-Samples: f3466d5b4a94fe669aa9d6d8c88b4ccea0ac7613 + RCTDeprecation: 643cbda69382342a90c35f8c085566d7ede84273 + RCTRequired: f166b7d9fa53dd68aa453bbe11491d51fb6cf9ab + RCTTypeSafety: dc3c32ba6ca1b93c34873a90a8c54d04c21b03be + React: 3b03c6d538ef0974681fe55099314da2e2e2a7ea + React-callinvoker: 8bf85b95bb9d11af2a3457fe49e78b511e293253 + React-Core: 6d857d5caebdfd3f31275592c9982cf625223937 + React-CoreModules: 45c12ddaa171c9adfb3dce8c62d4368355d704b2 + React-cxxreact: 55266eea62dbc25d847667e98584975ef567d772 + React-debug: d2f264471cdf80e475b639dd4b600470e7c57997 + React-defaultsnativemodule: 5646ab400bccae48be2d4fd5a7fc94873ae25c42 + React-domnativemodule: 28b7d8c2a52053145af86b7d6a0281d0003efea1 + React-Fabric: 25594873fc5230f2919b6129d0e23af8cdd7056f + React-FabricComponents: e7c3babfb733090bde0cb615b8f75e2593d2449e + React-FabricImage: 75ba1235ed23f86bc027f6a9ffc250b9a848b531 + React-featureflags: bc4d066e4301c9c22c47812d2abb573a8f6d4d56 + React-featureflagsnativemodule: 34b7369d88ede95d03467b1b8ffb796c7c43a171 + React-graphics: 5218bdf0efc83ed43e38c04383d5f112c92a9844 + React-hermes: 36d1b3137ca672c55e3ca7d5704deb01c9a85ec1 + React-idlecallbacksnativemodule: 14cd2f0b24d55721af58527a2b5d6e1e450812b5 + React-ImageManager: d28f843cbafebb4c31542fa874514dc00e441d6d + React-jserrorhandler: d0fa47b9614e8f2bf7de492a5f6b62ec2559ef97 + React-jsi: 3eff0de69318f7ccf2fcc2a9f9870d95df3d91d0 + React-jsiexecutor: 66c53fea4331d2bf88e9a1aab22b6cb9e506d554 + React-jsinspector: 81fe29f14e14a89d9ce87b6327e903aef24def5b + React-jsinspectorcdp: c4447c04117dd20cb7a652bed317c90f87831c4f + React-jsinspectornetwork: b5eebda62c67093458f29a6ed2231db8e8abf099 + React-jsinspectortracing: 1cd1549d9278e7a6dd835a422303d965afdf858a + React-jsitooling: a7fcdd8ee8cdf658dfead98617f2e03cf4991391 + React-jsitracing: 61ebe7907cbda37a7e8b0019e92811ae8936d16c + React-logger: 94ead6e22cbb742d8e1d6cf2e53e547bb410298e + React-Mapbuffer: b8f9300413a8a68ec2181ea18f6c7b0a04f33e23 + React-microtasksnativemodule: 2872a2678180d5fc19780c5846ecd61e9158cac7 + React-NativeModulesApple: ee9297d5abca090d55f7db1e33c8227236676c2e + React-oscompat: 7bcdcc87bc819cee38f79cdfb719ea7be195ba7f + React-perflogger: f396cd74b77f3ab07fd5cefbd378c8211638c278 + React-performancetimeline: 6e971bb7b51d0394446cde878683cebb14741025 + React-RCTActionSheet: 5d379fbcaf9e07f84ddc3a56a6320321a22c9f7d + React-RCTAnimation: 677ca6b471924fcc0a11373ef36733203e4d2624 + React-RCTAppDelegate: 4be749669608a40ff03cf7ae61760c17a4cfc639 + React-RCTBlob: 4c453632d0656e281a479e61eb39956626149968 + React-RCTFabric: 00ea6b0d5b21ef5d294cc67f3f9fa5cd549002fa + React-RCTFBReactNativeSpec: 33046f89611dabff1e3b97e4c43c149da7a26cdb + React-RCTImage: 37c839d3b590aa49a50903b8af237eb4c4af4903 + React-RCTLinking: 72d2e913ff6ad555065f6b53a81463c9693e0c0b + React-RCTNetwork: 5d8e55b29933a7d16f40b71eecbfa1c7eca93cc3 + React-RCTPushNotification: 253c8c530f74985e91d78663df8fe9c66b28af64 + React-RCTRuntime: 5b59f5dd0a991fadf04a7c6942f7cb028cd9c0b4 + React-RCTSettings: 3be629bfd8a7cc237c84255ca8a73ad570469df6 + React-RCTTest: 23fb03dc1d0e216ded6a62d2f71dc472de59d32f + React-RCTText: eaa8bdabd4fa0d98d344428f220957f97af936ad + React-RCTVibration: df75f700b0e3b2c85a6643196a83159b763b4a4a + React-rendererconsistency: de839cbdc296c5dbf73e733ba2fde1c78733cc67 + React-renderercss: 58076c1024a9451de214f0a24400f1aae21a34ce + React-rendererdebug: b382e92cee6b792104c42d25bbe4709910c84c0b + React-RuntimeApple: 68b9a7b54a194ce8a8b65e6c36ea6d2b57d51f7d + React-RuntimeCore: 6cb253b4ed89b2df6ecf82a045ba3f4e09758972 + React-runtimeexecutor: 4cc55a19939ff1e92c3941b1f667f596f77b383c + React-RuntimeHermes: 1728929b48c9e3079a65b464bbd7c4e4d197dfd4 + React-runtimescheduler: 51d7430d47caa6dd3039506043cd3e2268cdd9a6 + React-timing: fb14f87ff4443df6b022fca19b6028401c743cc3 + React-utils: d0b9a2f8867cbcaafbdd05fa189381578e8e0a2e + ReactAppDependencyProvider: d6047f02061d1d4ddea220c25c03dc0f85fa3e66 + ReactCodegen: e7d0a2c663a46acd07c511492b79df9b79930252 + ReactCommon: 9c0b5f78d34ee283d93cfd59fe0271ba629b2045 + ReactCommon-Samples: 0b39807bc0cf6c876593935c484999648cbd99b6 ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 463fb69091efea832b3a9c5bc15cfaeac94b375c + Yoga: 865fbf57ad8aa871fbe40f8cd286825fad7cf80f PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From 14bfad58f6686ecec019aa704947f867826df3d9 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 9 Jul 2025 08:26:19 -0700 Subject: [PATCH 030/312] Add optional safeAreaInsets prop to NewAppScreen (replacing SafeAreaView) (#52507) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52507 Resolves https://github.com/reactwg/react-native-releases/issues/1011. Changelog: [General][Changed] - `NewAppScreen` no longer internally handles device safe area, use optional `safeAreaInsets` prop (aligned in 0.81 template) Reviewed By: cortinico Differential Revision: D78006238 fbshipit-source-id: 01fb16d6754b69a722ea11838d558bebd4748026 --- packages/new-app-screen/src/NewAppScreen.js | 29 ++++++++++++--------- packages/new-app-screen/src/index.d.ts | 8 ++++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/new-app-screen/src/NewAppScreen.js b/packages/new-app-screen/src/NewAppScreen.js index d49ba6beac3..4518adb6a5b 100644 --- a/packages/new-app-screen/src/NewAppScreen.js +++ b/packages/new-app-screen/src/NewAppScreen.js @@ -13,10 +13,7 @@ import {ThemedText, useTheme} from './Theme'; import * as React from 'react'; import { Image, - Platform, - SafeAreaView, ScrollView, - StatusBar, StyleSheet, Text, TouchableHighlight, @@ -29,24 +26,32 @@ import {version as ReactNativeVersion} from 'react-native/Libraries/Core/ReactNa export type NewAppScreenProps = $ReadOnly<{ templateFileName?: string, + safeAreaInsets?: $ReadOnly<{ + top: number, + bottom: number, + left: number, + right: number, + }>, }>; -const statusBarHeightOffset = Platform.select({ - android: StatusBar.currentHeight || 0, - default: 0, -}); - export default function NewAppScreen({ templateFileName = 'App.tsx', + safeAreaInsets = {top: 0, bottom: 0, left: 0, right: 0}, }: NewAppScreenProps): React.Node { const {colors} = useTheme(); const isDarkMode = useColorScheme() === 'dark'; const isLargeScreen = useWindowDimensions().width > 600; return ( - - - + + + - + ); } diff --git a/packages/new-app-screen/src/index.d.ts b/packages/new-app-screen/src/index.d.ts index 2568a07fcca..acbe8b24c85 100644 --- a/packages/new-app-screen/src/index.d.ts +++ b/packages/new-app-screen/src/index.d.ts @@ -11,6 +11,14 @@ import type * as React from 'react'; export type NewAppScreenProps = Readonly<{ templateFileName?: string | undefined; + safeAreaInsets?: + | Readonly<{ + top: number; + bottom: number; + left: number; + right: number; + }> + | undefined; }>; export function NewAppScreen(props: NewAppScreenProps): React.ReactNode; From 2e1d7111dd320a75fb42a9b9a2c684927a34995b Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Thu, 17 Jul 2025 12:53:36 -0700 Subject: [PATCH 031/312] RN: Default Hermes Parser to `reactRuntimeTarget: "19"` (#52625) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52625 Changes `react-native/babel-preset` so that by default, `hermes-parser` is configured with `reactRuntimeTarget: "19"`. This changes the compiled output of Component Syntax to not use `forwardRef` when a `ref` prop is present. Additionally, this adds a new preset option property, `hermesParserOptions`. This object allows users of `react-native/babel-preset` to supply overrides for any `hermes-parser` options. Changelog: [General][Changed] - Configures `react-native/babel-preset` to target React 19 by default, meaning Component Syntax will not compile to `forwardRef` calls when a `ref` prop is present. [General][Added] - Added support to `react-native/babel-preset` for a `hermesParserOptions` option, that expects an object that enables overriding `hermes-parser` options. Reviewed By: SamChou19815 Differential Revision: D78383269 fbshipit-source-id: 1e6b66b9bfbeaf8a06fdc39031cb6de7e921765f --- .../src/configs/main.js | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/packages/react-native-babel-preset/src/configs/main.js b/packages/react-native-babel-preset/src/configs/main.js index 5f18e424082..2cf830c40b8 100644 --- a/packages/react-native-babel-preset/src/configs/main.js +++ b/packages/react-native-babel-preset/src/configs/main.js @@ -38,19 +38,6 @@ function isFirstParty(fileName) { // use `this.foo = bar` instead of `this.defineProperty('foo', ...)` const loose = true; -const defaultPlugins = [ - [require('babel-plugin-syntax-hermes-parser'), {parseLangTypes: 'flow'}], - [require('babel-plugin-transform-flow-enums')], - [require('@babel/plugin-transform-block-scoping')], - [require('@babel/plugin-transform-class-properties'), {loose}], - [require('@babel/plugin-transform-private-methods'), {loose}], - [require('@babel/plugin-transform-private-property-in-object'), {loose}], - [require('@babel/plugin-syntax-dynamic-import')], - [require('@babel/plugin-syntax-export-default-from')], - ...passthroughSyntaxPlugins, - [require('@babel/plugin-transform-unicode-regex')], -]; - // For Static Hermes testing (experimental), the hermes-canary transformProfile // is used to enable regenerator (and some related lowering passes) because SH // requires more Babel lowering than Hermes temporarily. @@ -234,7 +221,28 @@ const getPreset = (src, options) => { plugins: [require('@babel/plugin-transform-flow-strip-types')], }, { - plugins: defaultPlugins, + plugins: [ + [ + require('babel-plugin-syntax-hermes-parser'), + { + parseLangTypes: 'flow', + reactRuntimeTarget: '19', + ...options.hermesParserOptions, + }, + ], + [require('babel-plugin-transform-flow-enums')], + [require('@babel/plugin-transform-block-scoping')], + [require('@babel/plugin-transform-class-properties'), {loose}], + [require('@babel/plugin-transform-private-methods'), {loose}], + [ + require('@babel/plugin-transform-private-property-in-object'), + {loose}, + ], + [require('@babel/plugin-syntax-dynamic-import')], + [require('@babel/plugin-syntax-export-default-from')], + ...passthroughSyntaxPlugins, + [require('@babel/plugin-transform-unicode-regex')], + ], }, { test: isTypeScriptSource, From 828287de3c8509ed5181ecd5a047f2c91a539828 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Thu, 17 Jul 2025 05:26:07 -0700 Subject: [PATCH 032/312] added missing script in package.json (#52663) Summary: When switching between release/debug we're running a script to copy the correct xcframework. This script for the React-Core prebuilts was not part of the package.json file. This caused the build to fail after trying to switch from debug -> release. ## Changelog: [IOS] [FIXED] - Fixed missing script for resolving prebuilt xcframework when switching between release/debug Pull Request resolved: https://github.com/facebook/react-native/pull/52663 Test Plan: - Create new RN App - Install pod with prebuilt deps and core - Build (success) - Switch to release - Build (success) Reviewed By: cortinico Differential Revision: D78481302 Pulled By: cipolleschi fbshipit-source-id: 1c7181e63219098ae140d77ff1cb2c0c9b9642e5 --- packages/react-native/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/package.json b/packages/react-native/package.json index de878477d9a..91b304dce4b 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -106,6 +106,7 @@ "ReactCommon", "README.md", "rn-get-polyfills.js", + "scripts/replace-rncore-version.js", "scripts/bundle.js", "scripts/cocoapods", "scripts/codegen", From ddadb2e788cfd7039d8493a30d1bc7b35a20a507 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Thu, 17 Jul 2025 06:46:00 -0700 Subject: [PATCH 033/312] resolve xcframework paths from conf switch script (#52664) Summary: When switching between debug/release we run a small script to make sure to copy the correct version of the RNDeps xcframework. This script was missing a resolve function that fixed up some path issues that we do when installing in the podspec. ## Changelog: [IOS] [FIXED] - Fixed issue with RNDeps release/debug switch failing Pull Request resolved: https://github.com/facebook/react-native/pull/52664 Test Plan: - Create new RN App - Install pod with prebuilt deps - Build (success) - Switch to release - Build (success) Reviewed By: cortinico Differential Revision: D78481590 Pulled By: cipolleschi fbshipit-source-id: 2d02b0bc55e8aef6f3fafb4f7aa193c4cf00414e --- .../replace_dependencies_version.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/react-native/third-party-podspecs/replace_dependencies_version.js b/packages/react-native/third-party-podspecs/replace_dependencies_version.js index ac3f24a7b57..56d0b9f2706 100644 --- a/packages/react-native/third-party-podspecs/replace_dependencies_version.js +++ b/packages/react-native/third-party-podspecs/replace_dependencies_version.js @@ -67,6 +67,25 @@ function replaceRNDepsConfiguration( console.log('Extracting the tarball', tarballURLPath); execSync(`tar -xf ${tarballURLPath} -C ${finalLocation}`); + + // Now we need to remove the extra third-party folder as we do in the podspec's prepare-script + // We need to take the ReactNativeDependencies.xcframework folder and move it up one level + // from ${finalLocation}/packages/react-native/third-party/ to ${finalLocation}/packages/react-native/ + console.log('Resolving ReactNativeDependencies.xcframework folder structure'); + const thirdPartyPath = `${finalLocation}/packages/react-native/third-party`; + const sourcePath = `${thirdPartyPath}/ReactNativeDependencies.xcframework`; + const destinationPath = `${finalLocation}/packages/react-native/ReactNativeDependencies.xcframework`; + if (fs.existsSync(sourcePath)) { + fs.renameSync(sourcePath, destinationPath); + } else { + throw new Error( + `Expected ReactNativeDependencies.xcframework to be at ${sourcePath}, but it was not found.`, + ); + } + + if (fs.existsSync(thirdPartyPath)) { + fs.rmSync(thirdPartyPath, {force: true, recursive: true}); + } } function updateLastBuildConfiguration(configuration /*: string */) { From d8bf94489ab7498eba7e5f45d09dd2819fe739c3 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Mon, 21 Jul 2025 15:03:49 +0100 Subject: [PATCH 034/312] [RN][Release]Fix E2E script when using CI artifacts (#52606) --- scripts/release-testing/test-e2e-local.js | 56 ++++--------------- .../utils/github-actions-utils.js | 7 +-- 2 files changed, 13 insertions(+), 50 deletions(-) diff --git a/scripts/release-testing/test-e2e-local.js b/scripts/release-testing/test-e2e-local.js index 5749c19ba64..ad23224a8eb 100644 --- a/scripts/release-testing/test-e2e-local.js +++ b/scripts/release-testing/test-e2e-local.js @@ -48,11 +48,6 @@ const argv = yargs coerce: platform => platform.toLowerCase(), choices: ['ios', 'android'], }) - .option('h', { - alias: 'hermes', - type: 'boolean', - default: true, - }) .option('c', { alias: 'ciToken', type: 'string', @@ -80,9 +75,7 @@ async function testRNTesterIOS( onReleaseBranch /*: boolean */, ) { console.info( - `We're going to test the ${ - argv.hermes === true ? 'Hermes' : 'JSC' - } version of RNTester iOS with the new Architecture enabled`, + `We're going to test the 'Hermes' version of RNTester iOS with the new Architecture enabled`, ); // if everything succeeded so far, we can launch Metro and the app @@ -98,25 +91,15 @@ async function testRNTesterIOS( 'RNTester.app', ); exec(`rm -rf ${appOutputFolder}`); - if (argv.hermes === true) { - // download hermes App - const hermesAppUrl = await ciArtifacts.artifactURLForHermesRNTesterApp(); - const hermesAppZipPath = path.join( - ciArtifacts.baseTmpPath(), - 'RNTesterAppHermes.zip', - ); - ciArtifacts.downloadArtifact(hermesAppUrl, hermesAppZipPath); - exec(`unzip ${hermesAppZipPath} -d ${appOutputFolder}`); - } else { - // download JSC app - const hermesAppUrl = await ciArtifacts.artifactURLForJSCRNTesterApp(); - const hermesAppZipPath = path.join( - ciArtifacts.baseTmpPath(), - 'RNTesterAppJSC.zip', - ); - ciArtifacts.downloadArtifact(hermesAppUrl, hermesAppZipPath); - exec(`unzip ${hermesAppZipPath} -d ${appOutputFolder}`); - } + + // download hermes App + const hermesAppUrl = await ciArtifacts.artifactURLForHermesRNTesterApp(); + const hermesAppZipPath = path.join( + ciArtifacts.baseTmpPath(), + 'RNTesterAppHermes.zip', + ); + ciArtifacts.downloadArtifact(hermesAppUrl, hermesAppZipPath); + exec(`unzip ${hermesAppZipPath} -d ${appOutputFolder}`); // boot device const bootedDevice = String( @@ -135,9 +118,7 @@ async function testRNTesterIOS( exec('xcrun simctl launch booted com.meta.RNTester.localDevelopment'); } else { exec( - `USE_HERMES=${ - argv.hermes === true ? 1 : 0 - } CI=${onReleaseBranch.toString()} RCT_NEW_ARCH_ENABLED=1 bundle exec pod install --ansi`, + `USE_HERMES=1 CI=${onReleaseBranch.toString()} RCT_NEW_ARCH_ENABLED=1 bundle exec pod install --ansi`, ); // launch the app on iOS simulator @@ -320,26 +301,13 @@ async function testRNTestProject( 'reactNativeArchitectures=arm64-v8a', 'android/gradle.properties', ); - const hermesEnabled = (await argv).hermes === true; - - // Update gradle properties to set Hermes as false - if (!hermesEnabled) { - sed( - '-i', - 'hermesEnabled=true', - 'hermesEnabled=false', - 'android/gradle.properties', - ); - } if (argv.platform === 'ios') { // doing the pod install here so that it's easier to play around RNTestProject cd('ios'); exec('bundle install'); exec( - `HERMES_ENGINE_TARBALL_PATH=${hermesPath} USE_HERMES=${ - hermesEnabled ? 1 : 0 - } bundle exec pod install --ansi`, + `HERMES_ENGINE_TARBALL_PATH=${hermesPath} USE_HERMES=1 bundle exec pod install --ansi`, ); cd('..'); diff --git a/scripts/release-testing/utils/github-actions-utils.js b/scripts/release-testing/utils/github-actions-utils.js index f92b01c5ee3..5ff85821a33 100644 --- a/scripts/release-testing/utils/github-actions-utils.js +++ b/scripts/release-testing/utils/github-actions-utils.js @@ -209,12 +209,8 @@ async function artifactURLForRNTesterAPK( return getArtifactURL('rntester-debug'); } -async function artifactURLForJSCRNTesterApp() /*: Promise */ { - return getArtifactURL('RNTesterApp-NewArch-JSC-Debug'); -} - async function artifactURLForHermesRNTesterApp() /*: Promise */ { - return getArtifactURL('RNTesterApp-NewArch-Hermes-Debug'); + return getArtifactURL('RNTesterApp-NewArch-Debug'); } async function artifactURLForMavenLocal() /*: Promise */ { @@ -249,7 +245,6 @@ module.exports = { initialize, downloadArtifact, artifactURLForRNTesterAPK, - artifactURLForJSCRNTesterApp, artifactURLForHermesRNTesterApp, artifactURLForMavenLocal, artifactURLHermesDebug, From cdd7f995813727b630ff38abc8a910a0f8f10b37 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Mon, 21 Jul 2025 15:04:30 +0100 Subject: [PATCH 035/312] [LOCAL][RN][Release] Fix E2E test script when the ci flag is not specified (#52609) --- scripts/release-testing/test-e2e-local.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/release-testing/test-e2e-local.js b/scripts/release-testing/test-e2e-local.js index ad23224a8eb..9b9ec6751cf 100644 --- a/scripts/release-testing/test-e2e-local.js +++ b/scripts/release-testing/test-e2e-local.js @@ -113,19 +113,23 @@ async function testRNTesterIOS( // install app on device exec(`xcrun simctl install booted ${appOutputFolder}`); - - // launch the app on iOS simulator - exec('xcrun simctl launch booted com.meta.RNTester.localDevelopment'); } else { exec( `USE_HERMES=1 CI=${onReleaseBranch.toString()} RCT_NEW_ARCH_ENABLED=1 bundle exec pod install --ansi`, ); - // launch the app on iOS simulator + // build the app on iOS simulator + exec( + 'xcodebuild -workspace RNTesterPods.xcworkspace -scheme RNTester -sdk "iphonesimulator" -destination "generic/platform=iOS Simulator" -derivedDataPath "/tmp/RNTesterBuild"', + ); + + exec('xcrun simctl boot "iPhone 16 Pro"'); exec( - 'npx react-native run-ios --scheme RNTester --simulator "iPhone 15 Pro"', + 'xcrun simctl install booted "/tmp/RNTesterBuild/Build/Products/Debug-iphonesimulator/RNTester.app"', ); + exec('open -a simulator'); } + exec('xcrun simctl launch booted com.meta.RNTester.localDevelopment'); } /** From be05c8fda81251f812e0a8292ca4c84e78620b12 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Thu, 17 Jul 2025 05:15:04 -0700 Subject: [PATCH 036/312] Fix Windows CI (#52666) Summary: As per [this issue](https://github.com/actions/runner-images/issues/12416), Windows machine doesn't have access to D: drive anymore ## Changelog: [Internal] - Pull Request resolved: https://github.com/facebook/react-native/pull/52666 Test Plan: GHA Reviewed By: huntie Differential Revision: D78484060 Pulled By: cipolleschi fbshipit-source-id: 36d844f9d7d69f1d74a154b019307cc1e269ad66 --- .github/actions/build-hermesc-windows/action.yml | 16 ++++++++-------- .github/workflows/nightly.yml | 6 +++--- .github/workflows/publish-release.yml | 6 +++--- .github/workflows/test-all.yml | 6 +++--- .../kotlin/com/facebook/react/utils/OsTest.kt | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/actions/build-hermesc-windows/action.yml b/.github/actions/build-hermesc-windows/action.yml index 7b80fbc9929..1dcaebb2fb9 100644 --- a/.github/actions/build-hermesc-windows/action.yml +++ b/.github/actions/build-hermesc-windows/action.yml @@ -14,23 +14,23 @@ runs: uses: actions/download-artifact@v4 with: name: hermes-workspace - path: 'D:\tmp\hermes' + path: 'C:\tmp\hermes' - name: Set up workspace shell: powershell run: | - mkdir -p D:\tmp\hermes\osx-bin + mkdir -p C:\tmp\hermes\osx-bin mkdir -p .\packages\react-native\sdks\hermes - cp -r -Force D:\tmp\hermes\hermes\* .\packages\react-native\sdks\hermes\. + cp -r -Force C:\tmp\hermes\hermes\* .\packages\react-native\sdks\hermes\. cp -r -Force .\packages\react-native\sdks\hermes-engine\utils\* .\packages\react-native\sdks\hermes\. - name: Windows cache uses: actions/cache@v4 with: key: v3-hermes-${{ github.job }}-windows-${{ inputs.hermes-version }}-${{ inputs.react-native-version }} path: | - D:\tmp\hermes\win64-bin\ - D:\tmp\hermes\hermes\icu\ - D:\tmp\hermes\hermes\deps\ - D:\tmp\hermes\hermes\build_release\ + C:\tmp\hermes\win64-bin\ + C:\tmp\hermes\hermes\icu\ + C:\tmp\hermes\hermes\deps\ + C:\tmp\hermes\hermes\build_release\ - name: setup-msbuild uses: microsoft/setup-msbuild@v1.3.2 - name: Set up workspace @@ -83,4 +83,4 @@ runs: uses: actions/upload-artifact@v4.3.4 with: name: hermes-win64-bin - path: D:\tmp\hermes\win64-bin\ + path: C:\tmp\hermes\win64-bin\ diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2b494041a00..24177338f95 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -128,9 +128,9 @@ jobs: runs-on: windows-2025 needs: prepare_hermes_workspace env: - HERMES_WS_DIR: 'D:\tmp\hermes' - HERMES_TARBALL_ARTIFACTS_DIR: 'D:\tmp\hermes\hermes-runtime-darwin' - HERMES_OSXBIN_ARTIFACTS_DIR: 'D:\tmp\hermes\osx-bin' + HERMES_WS_DIR: 'C:\tmp\hermes' + HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin' + HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin' ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip" MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin' CMAKE_DIR: 'C:\Program Files\CMake\bin' diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 2410cb49a32..8f356720f0b 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -125,9 +125,9 @@ jobs: runs-on: windows-2025 needs: prepare_hermes_workspace env: - HERMES_WS_DIR: 'D:\tmp\hermes' - HERMES_TARBALL_ARTIFACTS_DIR: 'D:\tmp\hermes\hermes-runtime-darwin' - HERMES_OSXBIN_ARTIFACTS_DIR: 'D:\tmp\hermes\osx-bin' + HERMES_WS_DIR: 'C:\tmp\hermes' + HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin' + HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin' ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip" MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin' CMAKE_DIR: 'C:\Program Files\CMake\bin' diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index e4da3cec69c..1ca98516222 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -392,9 +392,9 @@ jobs: runs-on: windows-2025 needs: prepare_hermes_workspace env: - HERMES_WS_DIR: 'D:\tmp\hermes' - HERMES_TARBALL_ARTIFACTS_DIR: 'D:\tmp\hermes\hermes-runtime-darwin' - HERMES_OSXBIN_ARTIFACTS_DIR: 'D:\tmp\hermes\osx-bin' + HERMES_WS_DIR: 'C:\tmp\hermes' + HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin' + HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin' ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip" MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin' CMAKE_DIR: 'C:\Program Files\CMake\bin' diff --git a/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt b/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt index bf535ade745..85b8dc28daf 100644 --- a/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt +++ b/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt @@ -55,7 +55,7 @@ class OsTest { @Test fun unixifyPath_withAWindowsPath_convertsItCorrectly() { - val aWindowsPath = "D:\\just\\a\\windows\\path\\" + val aWindowsPath = "C:\\just\\a\\windows\\path\\" assertThat("/D/just/a/windows/path/").isEqualTo(aWindowsPath.unixifyPath()) } From d61decce15e7280468b1d043769491d38301a68c Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 17 Jul 2025 20:42:02 -0700 Subject: [PATCH 037/312] Fix build_android GHA Job (#52694) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52694 build_android job is always failing, with this assertion. Seems like find/replace in D78484060 gone wrong? Changelog: [Internal] Reviewed By: sbuggay Differential Revision: D78534334 fbshipit-source-id: 291bdd01b41fa6efea00ed63a0dee8bdb14cbc3a --- .../shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt b/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt index 85b8dc28daf..bf535ade745 100644 --- a/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt +++ b/packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt @@ -55,7 +55,7 @@ class OsTest { @Test fun unixifyPath_withAWindowsPath_convertsItCorrectly() { - val aWindowsPath = "C:\\just\\a\\windows\\path\\" + val aWindowsPath = "D:\\just\\a\\windows\\path\\" assertThat("/D/just/a/windows/path/").isEqualTo(aWindowsPath.unixifyPath()) } From dd12edf35f89aed4872ba40e54fc9caaabfac0bf Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 21 Jul 2025 15:31:19 +0100 Subject: [PATCH 038/312] [0.81] Implement mechanism to prevent ShadowTree commit exhaustion (#52736) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement mechanism to prevent ShadowTree commit exhaustion (#52645) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52645 Changelog: [internal] This add a new feature flag to test a fix for https://github.com/facebook/react-native/issues/51870 Reviewed By: cortinico, sammy-SC Differential Revision: D78418504 fbshipit-source-id: 2792026b6936393d196fd1e3162f8b2c61a38ed6 * Fix incorrect locking and attempts check in ShadowTree experiment (#52681) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52681 Changelog: [internal] In the original change I made in D78418504 / https://github.com/facebook/react-native/pull/52645 I made 2 mistakes: 1. Used a lock that would try to re-lock on itself without it being recursive (which would cause a deadlock). I didn't see that because when testing I didn't hit the case where we'd exhaust the options. 2. The `attemps` variable wasn't incremented, so we never left the loop in case of exhaustion. This propagates a flag to `tryCommit` to indicate we've already locked on the commitMutex_ so we don't need to lock again in that case and increases the counter, fixing the issue. Reviewed By: cortinico Differential Revision: D78497509 fbshipit-source-id: 546ccd0c84aed5416ce1aef47d79419b4fe06f66 * Rollout `preventShadowTreeCommitExhaustionWithLocking` in experimental (#52709) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52709 We want to make user for folks in OSS to try `preventShadowTreeCommitExhaustionWithLocking`. Therefore I'm updating the OSS release channel for this flag to experimental. Changelog: [Internal] [Changed] - Rollout `preventShadowTreeCommitExhaustionWithLocking` in experimental Reviewed By: rubennorte Differential Revision: D78558655 fbshipit-source-id: 02a9d216c7b2f8f7bdc1340213f82b70c5692dc7 --------- Co-authored-by: Rubén Norte --- .../featureflags/ReactNativeFeatureFlags.kt | 8 +++- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 ++++- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +- .../ReactNativeFeatureFlagsDefaults.kt | 4 +- .../ReactNativeFeatureFlagsLocalAccessor.kt | 13 ++++- ...agsOverrides_RNOSS_Experimental_Android.kt | 4 +- .../ReactNativeFeatureFlagsProvider.kt | 4 +- .../JReactNativeFeatureFlagsCxxInterop.cpp | 16 ++++++- .../JReactNativeFeatureFlagsCxxInterop.h | 5 +- .../featureflags/ReactNativeFeatureFlags.cpp | 6 ++- .../featureflags/ReactNativeFeatureFlags.h | 7 ++- .../ReactNativeFeatureFlagsAccessor.cpp | 42 +++++++++++----- .../ReactNativeFeatureFlagsAccessor.h | 6 ++- .../ReactNativeFeatureFlagsDefaults.h | 6 ++- .../ReactNativeFeatureFlagsDynamicProvider.h | 11 ++++- ...tiveFeatureFlagsOverridesOSSExperimental.h | 6 ++- .../ReactNativeFeatureFlagsProvider.h | 3 +- .../NativeReactNativeFeatureFlags.cpp | 7 ++- .../NativeReactNativeFeatureFlags.h | 4 +- .../react/renderer/mounting/ShadowTree.cpp | 48 ++++++++++++++----- .../react/renderer/mounting/ShadowTree.h | 3 +- .../ReactNativeFeatureFlags.config.js | 11 +++++ .../featureflags/ReactNativeFeatureFlags.js | 7 ++- .../specs/NativeReactNativeFeatureFlags.js | 3 +- 24 files changed, 193 insertions(+), 47 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index da0fefc85cc..96f0ef3bf8b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -312,6 +312,12 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun preparedTextCacheSize(): Double = accessor.preparedTextCacheSize() + /** + * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again. + */ + @JvmStatic + public fun preventShadowTreeCommitExhaustionWithLocking(): Boolean = accessor.preventShadowTreeCommitExhaustionWithLocking() + /** * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause. */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 98b94a42ab9..4a965f52687 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<9b6d83d6ea0acbc13bce19d869699079>> + * @generated SignedSource<<773ddcede573164ba82db671341ddc3f>> */ /** @@ -67,6 +67,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var fuseboxNetworkInspectionEnabledCache: Boolean? = null private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null private var preparedTextCacheSizeCache: Double? = null + private var preventShadowTreeCommitExhaustionWithLockingCache: Boolean? = null private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null @@ -502,6 +503,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean { + var cached = preventShadowTreeCommitExhaustionWithLockingCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.preventShadowTreeCommitExhaustionWithLocking() + preventShadowTreeCommitExhaustionWithLockingCache = cached + } + return cached + } + override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean { var cached = traceTurboModulePromiseRejectionsOnAndroidCache if (cached == null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index 005c34d70c1..ac7ba42df0c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<75760457dea789ab0951d3a22be3341c>> + * @generated SignedSource<<96fca46813d841eb7f4d043010513999>> */ /** @@ -122,6 +122,8 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun preparedTextCacheSize(): Double + @DoNotStrip @JvmStatic public external fun preventShadowTreeCommitExhaustionWithLocking(): Boolean + @DoNotStrip @JvmStatic public external fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean @DoNotStrip @JvmStatic public external fun updateRuntimeShadowNodeReferencesOnCommit(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 8fb7c868f42..7a559e2b388 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<48fa8921cc2947a713974c9926e1d806>> + * @generated SignedSource<<8ebd61411e0e0ac8c8b307cf803f1206>> */ /** @@ -117,6 +117,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun preparedTextCacheSize(): Double = 200.0 + override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean = false + override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean = false override fun updateRuntimeShadowNodeReferencesOnCommit(): Boolean = false diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index 40f18199004..3469d3ab04b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<356261385b837def94ac5a4ca7ffd05d>> + * @generated SignedSource<> */ /** @@ -71,6 +71,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var fuseboxNetworkInspectionEnabledCache: Boolean? = null private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null private var preparedTextCacheSizeCache: Double? = null + private var preventShadowTreeCommitExhaustionWithLockingCache: Boolean? = null private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null @@ -553,6 +554,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } + override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean { + var cached = preventShadowTreeCommitExhaustionWithLockingCache + if (cached == null) { + cached = currentProvider.preventShadowTreeCommitExhaustionWithLocking() + accessedFeatureFlags.add("preventShadowTreeCommitExhaustionWithLocking") + preventShadowTreeCommitExhaustionWithLockingCache = cached + } + return cached + } + override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean { var cached = traceTurboModulePromiseRejectionsOnAndroidCache if (cached == null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt index 32dc0a1e2d0..ecacb9c45ef 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<93aab733661b558c1701b728c18b3d00>> */ /** @@ -23,5 +23,5 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android : // We could use JNI to get the defaults from C++, // but that is more expensive than just duplicating the defaults here. - + override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean = true } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index e7c491089b2..c18b292a933 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8abf9bfb81265ae0c840457eb6c199bd>> + * @generated SignedSource<> */ /** @@ -117,6 +117,8 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun preparedTextCacheSize(): Double + @DoNotStrip public fun preventShadowTreeCommitExhaustionWithLocking(): Boolean + @DoNotStrip public fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean @DoNotStrip public fun updateRuntimeShadowNodeReferencesOnCommit(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index ea1b239441a..5e812f4a5d8 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<5effd7d4ac8034424144ea68c82b61a7>> + * @generated SignedSource<<7fac1c2c0c3ce131442319925e4231dc>> */ /** @@ -321,6 +321,12 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } + bool preventShadowTreeCommitExhaustionWithLocking() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("preventShadowTreeCommitExhaustionWithLocking"); + return method(javaProvider_); + } + bool traceTurboModulePromiseRejectionsOnAndroid() override { static const auto method = getReactNativeFeatureFlagsProviderJavaClass()->getMethod("traceTurboModulePromiseRejectionsOnAndroid"); @@ -626,6 +632,11 @@ double JReactNativeFeatureFlagsCxxInterop::preparedTextCacheSize( return ReactNativeFeatureFlags::preparedTextCacheSize(); } +bool JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustionWithLocking( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking(); +} + bool JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid( facebook::jni::alias_ref /*unused*/) { return ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid(); @@ -853,6 +864,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "preparedTextCacheSize", JReactNativeFeatureFlagsCxxInterop::preparedTextCacheSize), + makeNativeMethod( + "preventShadowTreeCommitExhaustionWithLocking", + JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustionWithLocking), makeNativeMethod( "traceTurboModulePromiseRejectionsOnAndroid", JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid), diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index 9e894e24978..a384a3b0006 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<07daae0284829d56b7eaa330b1973e02>> */ /** @@ -171,6 +171,9 @@ class JReactNativeFeatureFlagsCxxInterop static double preparedTextCacheSize( facebook::jni::alias_ref); + static bool preventShadowTreeCommitExhaustionWithLocking( + facebook::jni::alias_ref); + static bool traceTurboModulePromiseRejectionsOnAndroid( facebook::jni::alias_ref); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 3d5ae99d1fb..262c68e63be 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<20c25bf5541e37cd5c918684925726df>> + * @generated SignedSource<<0179ba45718903d6fec6dcc19b0e1aaa>> */ /** @@ -214,6 +214,10 @@ double ReactNativeFeatureFlags::preparedTextCacheSize() { return getAccessor().preparedTextCacheSize(); } +bool ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking() { + return getAccessor().preventShadowTreeCommitExhaustionWithLocking(); +} + bool ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid() { return getAccessor().traceTurboModulePromiseRejectionsOnAndroid(); } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index 632a9878a1b..df585d8c6e2 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<20809734183aa7bfd7aad9b8d01ea080>> + * @generated SignedSource<<5055890d2cb2fb46a940f8308f014f0b>> */ /** @@ -274,6 +274,11 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static double preparedTextCacheSize(); + /** + * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again. + */ + RN_EXPORT static bool preventShadowTreeCommitExhaustionWithLocking(); + /** * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause. */ diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index cc991214e13..fc18530eaa6 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<59ec29e038344c52eaa10845efc5240b>> + * @generated SignedSource<> */ /** @@ -875,6 +875,24 @@ double ReactNativeFeatureFlagsAccessor::preparedTextCacheSize() { return flagValue.value(); } +bool ReactNativeFeatureFlagsAccessor::preventShadowTreeCommitExhaustionWithLocking() { + auto flagValue = preventShadowTreeCommitExhaustionWithLocking_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(47, "preventShadowTreeCommitExhaustionWithLocking"); + + flagValue = currentProvider_->preventShadowTreeCommitExhaustionWithLocking(); + preventShadowTreeCommitExhaustionWithLocking_ = flagValue; + } + + return flagValue.value(); +} + bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid() { auto flagValue = traceTurboModulePromiseRejectionsOnAndroid_.load(); @@ -884,7 +902,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(47, "traceTurboModulePromiseRejectionsOnAndroid"); + markFlagAsAccessed(48, "traceTurboModulePromiseRejectionsOnAndroid"); flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid(); traceTurboModulePromiseRejectionsOnAndroid_ = flagValue; @@ -902,7 +920,7 @@ bool ReactNativeFeatureFlagsAccessor::updateRuntimeShadowNodeReferencesOnCommit( // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(48, "updateRuntimeShadowNodeReferencesOnCommit"); + markFlagAsAccessed(49, "updateRuntimeShadowNodeReferencesOnCommit"); flagValue = currentProvider_->updateRuntimeShadowNodeReferencesOnCommit(); updateRuntimeShadowNodeReferencesOnCommit_ = flagValue; @@ -920,7 +938,7 @@ bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(49, "useAlwaysAvailableJSErrorHandling"); + markFlagAsAccessed(50, "useAlwaysAvailableJSErrorHandling"); flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling(); useAlwaysAvailableJSErrorHandling_ = flagValue; @@ -938,7 +956,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(50, "useFabricInterop"); + markFlagAsAccessed(51, "useFabricInterop"); flagValue = currentProvider_->useFabricInterop(); useFabricInterop_ = flagValue; @@ -956,7 +974,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(51, "useNativeViewConfigsInBridgelessMode"); + markFlagAsAccessed(52, "useNativeViewConfigsInBridgelessMode"); flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode(); useNativeViewConfigsInBridgelessMode_ = flagValue; @@ -974,7 +992,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(52, "useOptimizedEventBatchingOnAndroid"); + markFlagAsAccessed(53, "useOptimizedEventBatchingOnAndroid"); flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid(); useOptimizedEventBatchingOnAndroid_ = flagValue; @@ -992,7 +1010,7 @@ bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(53, "useRawPropsJsiValue"); + markFlagAsAccessed(54, "useRawPropsJsiValue"); flagValue = currentProvider_->useRawPropsJsiValue(); useRawPropsJsiValue_ = flagValue; @@ -1010,7 +1028,7 @@ bool ReactNativeFeatureFlagsAccessor::useShadowNodeStateOnClone() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(54, "useShadowNodeStateOnClone"); + markFlagAsAccessed(55, "useShadowNodeStateOnClone"); flagValue = currentProvider_->useShadowNodeStateOnClone(); useShadowNodeStateOnClone_ = flagValue; @@ -1028,7 +1046,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(55, "useTurboModuleInterop"); + markFlagAsAccessed(56, "useTurboModuleInterop"); flagValue = currentProvider_->useTurboModuleInterop(); useTurboModuleInterop_ = flagValue; @@ -1046,7 +1064,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(56, "useTurboModules"); + markFlagAsAccessed(57, "useTurboModules"); flagValue = currentProvider_->useTurboModules(); useTurboModules_ = flagValue; @@ -1064,7 +1082,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(57, "virtualViewPrerenderRatio"); + markFlagAsAccessed(58, "virtualViewPrerenderRatio"); flagValue = currentProvider_->virtualViewPrerenderRatio(); virtualViewPrerenderRatio_ = flagValue; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 8ee25afabd3..86dc5b3d7ea 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<043e1a56e7a302fbca38151b5d079616>> + * @generated SignedSource<<5ed90d5ed1a03a16f551cd1cf6cbdeb3>> */ /** @@ -79,6 +79,7 @@ class ReactNativeFeatureFlagsAccessor { bool fuseboxNetworkInspectionEnabled(); bool hideOffscreenVirtualViewsOnIOS(); double preparedTextCacheSize(); + bool preventShadowTreeCommitExhaustionWithLocking(); bool traceTurboModulePromiseRejectionsOnAndroid(); bool updateRuntimeShadowNodeReferencesOnCommit(); bool useAlwaysAvailableJSErrorHandling(); @@ -101,7 +102,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 58> accessedFeatureFlags_; + std::array, 59> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> animatedShouldSignalBatch_; @@ -150,6 +151,7 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> fuseboxNetworkInspectionEnabled_; std::atomic> hideOffscreenVirtualViewsOnIOS_; std::atomic> preparedTextCacheSize_; + std::atomic> preventShadowTreeCommitExhaustionWithLocking_; std::atomic> traceTurboModulePromiseRejectionsOnAndroid_; std::atomic> updateRuntimeShadowNodeReferencesOnCommit_; std::atomic> useAlwaysAvailableJSErrorHandling_; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index f80b0b99113..57cd86951e5 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<7b5caffd8f748384aa32ed6e153ee9c1>> + * @generated SignedSource<> */ /** @@ -215,6 +215,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return 200.0; } + bool preventShadowTreeCommitExhaustionWithLocking() override { + return false; + } + bool traceTurboModulePromiseRejectionsOnAndroid() override { return false; } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index 2ee1c5dd383..f283d6d641b 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -468,6 +468,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::preparedTextCacheSize(); } + bool preventShadowTreeCommitExhaustionWithLocking() override { + auto value = values_["preventShadowTreeCommitExhaustionWithLocking"]; + if (!value.isNull()) { + return value.getBool(); + } + + return ReactNativeFeatureFlagsDefaults::preventShadowTreeCommitExhaustionWithLocking(); + } + bool traceTurboModulePromiseRejectionsOnAndroid() override { auto value = values_["traceTurboModulePromiseRejectionsOnAndroid"]; if (!value.isNull()) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h index 765468e4ee8..a9e9a58c800 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<1de02178e1be302bb4b19501950b260a>> + * @generated SignedSource<<16c5fdf431579bbfd454a28c06f28c41>> */ /** @@ -27,7 +27,9 @@ class ReactNativeFeatureFlagsOverridesOSSExperimental : public ReactNativeFeatur public: ReactNativeFeatureFlagsOverridesOSSExperimental() = default; - + bool preventShadowTreeCommitExhaustionWithLocking() override { + return true; + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index 2f0a127f62e..ac2506e700f 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -72,6 +72,7 @@ class ReactNativeFeatureFlagsProvider { virtual bool fuseboxNetworkInspectionEnabled() = 0; virtual bool hideOffscreenVirtualViewsOnIOS() = 0; virtual double preparedTextCacheSize() = 0; + virtual bool preventShadowTreeCommitExhaustionWithLocking() = 0; virtual bool traceTurboModulePromiseRejectionsOnAndroid() = 0; virtual bool updateRuntimeShadowNodeReferencesOnCommit() = 0; virtual bool useAlwaysAvailableJSErrorHandling() = 0; diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index 3819fbf4579..f05433332df 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -279,6 +279,11 @@ double NativeReactNativeFeatureFlags::preparedTextCacheSize( return ReactNativeFeatureFlags::preparedTextCacheSize(); } +bool NativeReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking(); +} + bool NativeReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid( jsi::Runtime& /*runtime*/) { return ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid(); diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index f34e0c27071..eb4e64ad071 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<03ab35c55476b69046e67235b66533a0>> */ /** @@ -130,6 +130,8 @@ class NativeReactNativeFeatureFlags double preparedTextCacheSize(jsi::Runtime& runtime); + bool preventShadowTreeCommitExhaustionWithLocking(jsi::Runtime& runtime); + bool traceTurboModulePromiseRejectionsOnAndroid(jsi::Runtime& runtime); bool updateRuntimeShadowNodeReferencesOnCommit(jsi::Runtime& runtime); diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index e91e643ccd2..c803f80e027 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -25,6 +25,10 @@ namespace facebook::react { using CommitStatus = ShadowTree::CommitStatus; using CommitMode = ShadowTree::CommitMode; +namespace { +const int MAX_COMMIT_ATTEMPTS_BEFORE_LOCKING = 3; +} + /* * Generates (possibly) a new tree where all nodes with non-obsolete `State` * objects. If all `State` objects in the tree are not obsolete for the moment @@ -241,23 +245,39 @@ CommitStatus ShadowTree::commit( const CommitOptions& commitOptions) const { [[maybe_unused]] int attempts = 0; - while (true) { - attempts++; + if (ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking()) { + while (attempts < MAX_COMMIT_ATTEMPTS_BEFORE_LOCKING) { + auto status = tryCommit(transaction, commitOptions); + if (status != CommitStatus::Failed) { + return status; + } + attempts++; + } - auto status = tryCommit(transaction, commitOptions); - if (status != CommitStatus::Failed) { - return status; + { + std::unique_lock lock(commitMutex_); + return tryCommit(transaction, commitOptions, true); } + } else { + while (true) { + attempts++; + + auto status = tryCommit(transaction, commitOptions); + if (status != CommitStatus::Failed) { + return status; + } - // After multiple attempts, we failed to commit the transaction. - // Something internally went terribly wrong. - react_native_assert(attempts < 1024); + // After multiple attempts, we failed to commit the transaction. + // Something internally went terribly wrong. + react_native_assert(attempts < 1024); + } } } CommitStatus ShadowTree::tryCommit( const ShadowTreeCommitTransaction& transaction, - const CommitOptions& commitOptions) const { + const CommitOptions& commitOptions, + bool hasLocked) const { TraceSection s("ShadowTree::commit"); auto telemetry = TransactionTelemetry{}; @@ -269,7 +289,10 @@ CommitStatus ShadowTree::tryCommit( { // Reading `currentRevision_` in shared manner. - std::shared_lock lock(commitMutex_); + std::shared_lock lock(commitMutex_, std::defer_lock); + if (!hasLocked) { + lock.lock(); + } commitMode = commitMode_; oldRevision = currentRevision_; } @@ -310,7 +333,10 @@ CommitStatus ShadowTree::tryCommit( { // Updating `currentRevision_` in unique manner if it hasn't changed. - std::unique_lock lock(commitMutex_); + std::unique_lock lock(commitMutex_, std::defer_lock); + if (!hasLocked) { + lock.lock(); + } if (currentRevision_.number != oldRevision.number) { return CommitStatus::Failed; diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h index 87b6a7afa47..6824ae9389c 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h @@ -111,7 +111,8 @@ class ShadowTree final { */ CommitStatus tryCommit( const ShadowTreeCommitTransaction& transaction, - const CommitOptions& commitOptions) const; + const CommitOptions& commitOptions, + bool hasLocked = false) const; /* * Calls `tryCommit` in a loop until it finishes successfully. diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 74e6001241f..def532446ec 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -543,6 +543,17 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, + preventShadowTreeCommitExhaustionWithLocking: { + defaultValue: false, + metadata: { + dateAdded: '2025-07-14', + description: + 'Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again.', + expectedReleaseValue: true, + purpose: 'experimentation', + }, + ossReleaseStage: 'experimental', + }, traceTurboModulePromiseRejectionsOnAndroid: { defaultValue: false, metadata: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index f5720762666..5bd2bea3215 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<595a51e39658c12aab12032f7b928615>> * @flow strict * @noformat */ @@ -98,6 +98,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{ fuseboxNetworkInspectionEnabled: Getter, hideOffscreenVirtualViewsOnIOS: Getter, preparedTextCacheSize: Getter, + preventShadowTreeCommitExhaustionWithLocking: Getter, traceTurboModulePromiseRejectionsOnAndroid: Getter, updateRuntimeShadowNodeReferencesOnCommit: Getter, useAlwaysAvailableJSErrorHandling: Getter, @@ -383,6 +384,10 @@ export const hideOffscreenVirtualViewsOnIOS: Getter = createNativeFlagG * Number cached PreparedLayouts in TextLayoutManager cache */ export const preparedTextCacheSize: Getter = createNativeFlagGetter('preparedTextCacheSize', 200); +/** + * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again. + */ +export const preventShadowTreeCommitExhaustionWithLocking: Getter = createNativeFlagGetter('preventShadowTreeCommitExhaustionWithLocking', false); /** * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause. */ diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index d91d5dbad0c..600adf6f8d4 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<55c1f0223345b5680bbdd888a358f210>> + * @generated SignedSource<<9d6574da819c190bed0458559c66a089>> * @flow strict * @noformat */ @@ -72,6 +72,7 @@ export interface Spec extends TurboModule { +fuseboxNetworkInspectionEnabled?: () => boolean; +hideOffscreenVirtualViewsOnIOS?: () => boolean; +preparedTextCacheSize?: () => number; + +preventShadowTreeCommitExhaustionWithLocking?: () => boolean; +traceTurboModulePromiseRejectionsOnAndroid?: () => boolean; +updateRuntimeShadowNodeReferencesOnCommit?: () => boolean; +useAlwaysAvailableJSErrorHandling?: () => boolean; From 68ef746ec5dd7d2874d190733e75bb8197034c5a Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Mon, 21 Jul 2025 15:42:12 +0000 Subject: [PATCH 039/312] Release 0.81.0-rc.2 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index 996776fa2c1..98068f89ea3 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.1", - "@react-native/metro-config": "0.81.0-rc.1", + "@react-native/metro-babel-transformer": "0.81.0-rc.2", + "@react-native/metro-config": "0.81.0-rc.2", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 7dae6f065dc..8e92b70d1c2 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index cb34ae7f773..03311bffbaf 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.1" + "@react-native/codegen": "0.81.0-rc.2" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 9caecb623eb..18a472fb01b 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.1", + "@react-native/dev-middleware": "0.81.0-rc.2", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.0", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 6db7d9e719b..02611ad049d 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 913ee761003..faf422cb18d 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 2fd144634b6..d7ed541a858 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index bcfe6ec308f..fd1e83ffe53 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.1", + "@react-native/debugger-frontend": "0.81.0-rc.2", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 65c866e119f..5744acdca91 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.1", + "@react-native/eslint-plugin": "0.81.0-rc.2", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index d042ed2ef64..3a4ca4962a0 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 33114ca1c49..795f9a4ed33 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.1", + "@react-native/codegen": "0.81.0-rc.2", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 31531cc5b65..c14898f41ec 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 0bbbfaa7fe8..b1ba78e908c 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.1", - "@react-native/metro-babel-transformer": "0.81.0-rc.1", + "@react-native/js-polyfills": "0.81.0-rc.2", + "@react-native/metro-babel-transformer": "0.81.0-rc.2", "metro-config": "^0.83.0", "metro-runtime": "^0.83.0" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index 0c080ca3c6e..be8ef675347 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index a537136ba10..933c9c9bbba 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index bd10537265c..2745aa202bd 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index f51c1530232..29d9e4f15a2 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.1", + "@react-native/babel-plugin-codegen": "0.81.0-rc.2", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index e5c05de822f..1508ec8cfca 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.1", + "@react-native/babel-preset": "0.81.0-rc.2", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index b6822de8b0f..0dc7012fbda 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 37c43443593..d5d94955a26 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.1" + "@react-native/codegen": "0.81.0-rc.2" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 6e69f12bb53..4e50d0505fa 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.1" + "@react-native/codegen": "0.81.0-rc.2" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 96218070735..cbb37586f17 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.1", - "react-native": "0.81.0-rc.1" + "@react-native/babel-preset": "0.81.0-rc.2", + "react-native": "0.81.0-rc.2" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index ee1edf1ee69..88f1a2aa15b 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -18,5 +18,5 @@ export const version: $ReadOnly<{ major: 0, minor: 81, patch: 0, - prerelease: 'rc.1', + prerelease: 'rc.2', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 76c813f5173..72daddca148 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.1", + RCTVersionPrerelease: @"rc.2", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 0310c0dda3a..3008d258ad0 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.1 +VERSION_NAME=0.81.0-rc.2 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 4f9a897f321..a261452ab23 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -15,6 +15,6 @@ public object ReactNativeVersion { "major" to 0, "minor" to 81, "patch" to 0, - "prerelease" to "rc.1" + "prerelease" to "rc.2" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index a2eb6d7bc95..4b1df51f0f7 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -22,7 +22,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = "rc.1"; + std::string_view Prerelease = "rc.2"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 91b304dce4b..a6b28359ee6 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -161,13 +161,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.1", - "@react-native/codegen": "0.81.0-rc.1", - "@react-native/community-cli-plugin": "0.81.0-rc.1", - "@react-native/gradle-plugin": "0.81.0-rc.1", - "@react-native/js-polyfills": "0.81.0-rc.1", - "@react-native/normalize-colors": "0.81.0-rc.1", - "@react-native/virtualized-lists": "0.81.0-rc.1", + "@react-native/assets-registry": "0.81.0-rc.2", + "@react-native/codegen": "0.81.0-rc.2", + "@react-native/community-cli-plugin": "0.81.0-rc.2", + "@react-native/gradle-plugin": "0.81.0-rc.2", + "@react-native/js-polyfills": "0.81.0-rc.2", + "@react-native/normalize-colors": "0.81.0-rc.2", + "@react-native/virtualized-lists": "0.81.0-rc.2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index cd2c2580dbf..8b508843e88 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.1\\" +version = \\"0.81.0-rc.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.1\\" +version = \\"0.81.0-rc.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -839,7 +839,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.1\\" +version = \\"0.81.0-rc.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -877,7 +877,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.1\\" +version = \\"0.81.0-rc.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 8caf56bbf2a..37f752f0921 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.1", - "@react-native/popup-menu-android": "0.81.0-rc.1", + "@react-native/new-app-screen": "0.81.0-rc.2", + "@react-native/popup-menu-android": "0.81.0-rc.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 47b0e26eee8..05531dec3b6 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index d1d901e0267..b66e23fe0be 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.1", + "version": "0.81.0-rc.2", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 58bae0b15be..90c83ce7f28 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.1" + "react-native": "0.81.0-rc.2" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.1", - "@react-native/core-cli-utils": "0.81.0-rc.1", - "@react-native/eslint-config": "0.81.0-rc.1", - "@react-native/metro-config": "0.81.0-rc.1", - "@react-native/typescript-config": "0.81.0-rc.1", + "@react-native/babel-preset": "0.81.0-rc.2", + "@react-native/core-cli-utils": "0.81.0-rc.2", + "@react-native/eslint-config": "0.81.0-rc.2", + "@react-native/metro-config": "0.81.0-rc.2", + "@react-native/typescript-config": "0.81.0-rc.2", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index 675dc8f5a33..a2d8f150a38 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.1" + "@react-native/codegen": "0.81.0-rc.2" }, "devDependencies": { "@babel/core": "^7.25.2", From 3695258eed45fed5fbff5dd6128c88275f91083c Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Mon, 21 Jul 2025 17:47:34 +0000 Subject: [PATCH 040/312] [LOCAL] Bump Podfile.lock --- packages/rn-tester/Podfile.lock | 598 ++++++++++++++++---------------- 1 file changed, 299 insertions(+), 299 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index de68e92dbcc..0b118bfe662 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0-rc.1) + - FBLazyVector (0.81.0-rc.2) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.0-rc.1): - - hermes-engine/Pre-built (= 0.81.0-rc.1) - - hermes-engine/Pre-built (0.81.0-rc.1) + - hermes-engine (0.81.0-rc.2): + - hermes-engine/Pre-built (= 0.81.0-rc.2) + - hermes-engine/Pre-built (0.81.0-rc.2) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0-rc.1) - - RCTRequired (0.81.0-rc.1) - - RCTTypeSafety (0.81.0-rc.1): - - FBLazyVector (= 0.81.0-rc.1) - - RCTRequired (= 0.81.0-rc.1) - - React-Core (= 0.81.0-rc.1) - - React (0.81.0-rc.1): - - React-Core (= 0.81.0-rc.1) - - React-Core/DevSupport (= 0.81.0-rc.1) - - React-Core/RCTWebSocket (= 0.81.0-rc.1) - - React-RCTActionSheet (= 0.81.0-rc.1) - - React-RCTAnimation (= 0.81.0-rc.1) - - React-RCTBlob (= 0.81.0-rc.1) - - React-RCTImage (= 0.81.0-rc.1) - - React-RCTLinking (= 0.81.0-rc.1) - - React-RCTNetwork (= 0.81.0-rc.1) - - React-RCTSettings (= 0.81.0-rc.1) - - React-RCTText (= 0.81.0-rc.1) - - React-RCTVibration (= 0.81.0-rc.1) - - React-callinvoker (0.81.0-rc.1) - - React-Core (0.81.0-rc.1): + - RCTDeprecation (0.81.0-rc.2) + - RCTRequired (0.81.0-rc.2) + - RCTTypeSafety (0.81.0-rc.2): + - FBLazyVector (= 0.81.0-rc.2) + - RCTRequired (= 0.81.0-rc.2) + - React-Core (= 0.81.0-rc.2) + - React (0.81.0-rc.2): + - React-Core (= 0.81.0-rc.2) + - React-Core/DevSupport (= 0.81.0-rc.2) + - React-Core/RCTWebSocket (= 0.81.0-rc.2) + - React-RCTActionSheet (= 0.81.0-rc.2) + - React-RCTAnimation (= 0.81.0-rc.2) + - React-RCTBlob (= 0.81.0-rc.2) + - React-RCTImage (= 0.81.0-rc.2) + - React-RCTLinking (= 0.81.0-rc.2) + - React-RCTNetwork (= 0.81.0-rc.2) + - React-RCTSettings (= 0.81.0-rc.2) + - React-RCTText (= 0.81.0-rc.2) + - React-RCTVibration (= 0.81.0-rc.2) + - React-callinvoker (0.81.0-rc.2) + - React-Core (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.1) + - React-Core/Default (= 0.81.0-rc.2) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0-rc.1): + - React-Core/CoreModulesHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0-rc.1): + - React-Core/Default (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0-rc.1): + - React-Core/DevSupport (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.1) - - React-Core/RCTWebSocket (= 0.81.0-rc.1) + - React-Core/Default (= 0.81.0-rc.2) + - React-Core/RCTWebSocket (= 0.81.0-rc.2) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0-rc.1): + - React-Core/RCTActionSheetHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0-rc.1): + - React-Core/RCTAnimationHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0-rc.1): + - React-Core/RCTBlobHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0-rc.1): + - React-Core/RCTImageHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0-rc.1): + - React-Core/RCTLinkingHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0-rc.1): + - React-Core/RCTNetworkHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.0-rc.1): + - React-Core/RCTPushNotificationHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0-rc.1): + - React-Core/RCTSettingsHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0-rc.1): + - React-Core/RCTTextHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0-rc.1): + - React-Core/RCTVibrationHeaders (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0-rc.1): + - React-Core/RCTWebSocket (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.1) + - React-Core/Default (= 0.81.0-rc.2) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0-rc.1): + - React-CoreModules (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0-rc.1) - - React-Core/CoreModulesHeaders (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) + - RCTTypeSafety (= 0.81.0-rc.2) + - React-Core/CoreModulesHeaders (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0-rc.1) + - React-RCTImage (= 0.81.0-rc.2) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0-rc.1): + - React-cxxreact (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.1) - - React-debug (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) + - React-callinvoker (= 0.81.0-rc.2) + - React-debug (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0-rc.1) - - React-perflogger (= 0.81.0-rc.1) + - React-logger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.2) - React-runtimeexecutor - - React-timing (= 0.81.0-rc.1) + - React-timing (= 0.81.0-rc.2) - SocketRocket - - React-debug (0.81.0-rc.1) - - React-defaultsnativemodule (0.81.0-rc.1): + - React-debug (0.81.0-rc.2) + - React-defaultsnativemodule (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0-rc.1): + - React-domnativemodule (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0-rc.1): + - React-Fabric (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0-rc.1) - - React-Fabric/attributedstring (= 0.81.0-rc.1) - - React-Fabric/bridging (= 0.81.0-rc.1) - - React-Fabric/componentregistry (= 0.81.0-rc.1) - - React-Fabric/componentregistrynative (= 0.81.0-rc.1) - - React-Fabric/components (= 0.81.0-rc.1) - - React-Fabric/consistency (= 0.81.0-rc.1) - - React-Fabric/core (= 0.81.0-rc.1) - - React-Fabric/dom (= 0.81.0-rc.1) - - React-Fabric/imagemanager (= 0.81.0-rc.1) - - React-Fabric/leakchecker (= 0.81.0-rc.1) - - React-Fabric/mounting (= 0.81.0-rc.1) - - React-Fabric/observers (= 0.81.0-rc.1) - - React-Fabric/scheduler (= 0.81.0-rc.1) - - React-Fabric/telemetry (= 0.81.0-rc.1) - - React-Fabric/templateprocessor (= 0.81.0-rc.1) - - React-Fabric/uimanager (= 0.81.0-rc.1) + - React-Fabric/animations (= 0.81.0-rc.2) + - React-Fabric/attributedstring (= 0.81.0-rc.2) + - React-Fabric/bridging (= 0.81.0-rc.2) + - React-Fabric/componentregistry (= 0.81.0-rc.2) + - React-Fabric/componentregistrynative (= 0.81.0-rc.2) + - React-Fabric/components (= 0.81.0-rc.2) + - React-Fabric/consistency (= 0.81.0-rc.2) + - React-Fabric/core (= 0.81.0-rc.2) + - React-Fabric/dom (= 0.81.0-rc.2) + - React-Fabric/imagemanager (= 0.81.0-rc.2) + - React-Fabric/leakchecker (= 0.81.0-rc.2) + - React-Fabric/mounting (= 0.81.0-rc.2) + - React-Fabric/observers (= 0.81.0-rc.2) + - React-Fabric/scheduler (= 0.81.0-rc.2) + - React-Fabric/telemetry (= 0.81.0-rc.2) + - React-Fabric/templateprocessor (= 0.81.0-rc.2) + - React-Fabric/uimanager (= 0.81.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0-rc.1): + - React-Fabric/animations (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0-rc.1): + - React-Fabric/attributedstring (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0-rc.1): + - React-Fabric/bridging (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0-rc.1): + - React-Fabric/componentregistry (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0-rc.1): + - React-Fabric/componentregistrynative (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0-rc.1): + - React-Fabric/components (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.1) - - React-Fabric/components/root (= 0.81.0-rc.1) - - React-Fabric/components/scrollview (= 0.81.0-rc.1) - - React-Fabric/components/view (= 0.81.0-rc.1) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.2) + - React-Fabric/components/root (= 0.81.0-rc.2) + - React-Fabric/components/scrollview (= 0.81.0-rc.2) + - React-Fabric/components/view (= 0.81.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.1): + - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0-rc.1): + - React-Fabric/components/root (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0-rc.1): + - React-Fabric/components/scrollview (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0-rc.1): + - React-Fabric/components/view (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0-rc.1): + - React-Fabric/consistency (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0-rc.1): + - React-Fabric/core (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0-rc.1): + - React-Fabric/dom (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0-rc.1): + - React-Fabric/imagemanager (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0-rc.1): + - React-Fabric/leakchecker (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0-rc.1): + - React-Fabric/mounting (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0-rc.1): + - React-Fabric/observers (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0-rc.1) + - React-Fabric/observers/events (= 0.81.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0-rc.1): + - React-Fabric/observers/events (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0-rc.1): + - React-Fabric/scheduler (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0-rc.1): + - React-Fabric/telemetry (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0-rc.1): + - React-Fabric/templateprocessor (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0-rc.1): + - React-Fabric/uimanager (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0-rc.1) + - React-Fabric/uimanager/consistency (= 0.81.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0-rc.1): + - React-Fabric/uimanager/consistency (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0-rc.1): + - React-FabricComponents (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0-rc.1) - - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.1) + - React-FabricComponents/components (= 0.81.0-rc.2) + - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0-rc.1): + - React-FabricComponents/components (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1259,16 +1259,16 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.1) - - React-FabricComponents/components/iostextinput (= 0.81.0-rc.1) - - React-FabricComponents/components/modal (= 0.81.0-rc.1) - - React-FabricComponents/components/rncore (= 0.81.0-rc.1) - - React-FabricComponents/components/safeareaview (= 0.81.0-rc.1) - - React-FabricComponents/components/scrollview (= 0.81.0-rc.1) - - React-FabricComponents/components/text (= 0.81.0-rc.1) - - React-FabricComponents/components/textinput (= 0.81.0-rc.1) - - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.1) - - React-FabricComponents/components/virtualview (= 0.81.0-rc.1) + - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.2) + - React-FabricComponents/components/iostextinput (= 0.81.0-rc.2) + - React-FabricComponents/components/modal (= 0.81.0-rc.2) + - React-FabricComponents/components/rncore (= 0.81.0-rc.2) + - React-FabricComponents/components/safeareaview (= 0.81.0-rc.2) + - React-FabricComponents/components/scrollview (= 0.81.0-rc.2) + - React-FabricComponents/components/text (= 0.81.0-rc.2) + - React-FabricComponents/components/textinput (= 0.81.0-rc.2) + - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.2) + - React-FabricComponents/components/virtualview (= 0.81.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -1281,7 +1281,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0-rc.1): + - React-FabricComponents/components/inputaccessory (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1308,7 +1308,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0-rc.1): + - React-FabricComponents/components/iostextinput (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1335,7 +1335,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0-rc.1): + - React-FabricComponents/components/modal (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1362,7 +1362,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0-rc.1): + - React-FabricComponents/components/rncore (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1389,7 +1389,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0-rc.1): + - React-FabricComponents/components/safeareaview (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1416,7 +1416,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0-rc.1): + - React-FabricComponents/components/scrollview (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1443,7 +1443,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0-rc.1): + - React-FabricComponents/components/text (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1470,7 +1470,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0-rc.1): + - React-FabricComponents/components/textinput (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1497,7 +1497,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0-rc.1): + - React-FabricComponents/components/unimplementedview (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1524,7 +1524,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0-rc.1): + - React-FabricComponents/components/virtualview (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1551,7 +1551,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0-rc.1): + - React-FabricComponents/textlayoutmanager (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1578,7 +1578,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0-rc.1): + - React-FabricImage (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1587,21 +1587,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0-rc.1) - - RCTTypeSafety (= 0.81.0-rc.1) + - RCTRequired (= 0.81.0-rc.2) + - RCTTypeSafety (= 0.81.0-rc.2) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0-rc.1) + - React-jsiexecutor (= 0.81.0-rc.2) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0-rc.1): + - React-featureflags (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1610,7 +1610,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0-rc.1): + - React-featureflagsnativemodule (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1625,7 +1625,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0-rc.1): + - React-graphics (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0-rc.1): + - React-hermes (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1647,16 +1647,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.1) + - React-cxxreact (= 0.81.0-rc.2) - React-jsi - - React-jsiexecutor (= 0.81.0-rc.1) + - React-jsiexecutor (= 0.81.0-rc.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.2) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0-rc.1): + - React-idlecallbacksnativemodule (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1672,7 +1672,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0-rc.1): + - React-ImageManager (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1687,7 +1687,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0-rc.1): + - React-jserrorhandler (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1702,7 +1702,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0-rc.1): + - React-jsi (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1712,7 +1712,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0-rc.1): + - React-jsiexecutor (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1721,15 +1721,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) + - React-cxxreact (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.2) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0-rc.1): + - React-jsinspector (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1743,10 +1743,10 @@ PODS: - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.1) + - React-perflogger (= 0.81.0-rc.2) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0-rc.1): + - React-jsinspectorcdp (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1755,7 +1755,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0-rc.1): + - React-jsinspectornetwork (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1768,7 +1768,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0-rc.1): + - React-jsinspectortracing (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1779,7 +1779,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0-rc.1): + - React-jsitooling (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1787,16 +1787,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) + - React-cxxreact (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0-rc.1): + - React-jsitracing (0.81.0-rc.2): - React-jsi - - React-logger (0.81.0-rc.1): + - React-logger (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1805,7 +1805,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0-rc.1): + - React-Mapbuffer (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1815,7 +1815,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0-rc.1): + - React-microtasksnativemodule (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1829,7 +1829,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.0-rc.1): + - React-NativeModulesApple (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1849,8 +1849,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0-rc.1) - - React-perflogger (0.81.0-rc.1): + - React-oscompat (0.81.0-rc.2) + - React-perflogger (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1859,7 +1859,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0-rc.1): + - React-performancetimeline (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1872,9 +1872,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0-rc.1): - - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.1) - - React-RCTAnimation (0.81.0-rc.1): + - React-RCTActionSheet (0.81.0-rc.2): + - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.2) + - React-RCTAnimation (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1890,7 +1890,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0-rc.1): + - React-RCTAppDelegate (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1924,7 +1924,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0-rc.1): + - React-RCTBlob (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1943,7 +1943,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0-rc.1): + - React-RCTFabric (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1978,7 +1978,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0-rc.1): + - React-RCTFBReactNativeSpec (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -1992,10 +1992,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.1) + - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.2) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0-rc.1): + - React-RCTFBReactNativeSpec/components (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2018,7 +2018,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0-rc.1): + - React-RCTImage (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2034,14 +2034,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0-rc.1): - - React-Core/RCTLinkingHeaders (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) + - React-RCTLinking (0.81.0-rc.2): + - React-Core/RCTLinkingHeaders (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0-rc.1) - - React-RCTNetwork (0.81.0-rc.1): + - ReactCommon/turbomodule/core (= 0.81.0-rc.2) + - React-RCTNetwork (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2059,14 +2059,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.0-rc.1): + - React-RCTPushNotification (0.81.0-rc.2): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.0-rc.1): + - React-RCTRuntime (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2086,7 +2086,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0-rc.1): + - React-RCTSettings (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2101,7 +2101,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.0-rc.1): + - React-RCTTest (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2109,15 +2109,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.0-rc.1) - - React-CoreModules (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) - - ReactCommon/turbomodule/core (= 0.81.0-rc.1) + - React-Core (= 0.81.0-rc.2) + - React-CoreModules (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) + - ReactCommon/turbomodule/core (= 0.81.0-rc.2) - SocketRocket - - React-RCTText (0.81.0-rc.1): - - React-Core/RCTTextHeaders (= 0.81.0-rc.1) + - React-RCTText (0.81.0-rc.2): + - React-Core/RCTTextHeaders (= 0.81.0-rc.2) - Yoga - - React-RCTVibration (0.81.0-rc.1): + - React-RCTVibration (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2131,11 +2131,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0-rc.1) - - React-renderercss (0.81.0-rc.1): + - React-rendererconsistency (0.81.0-rc.2) + - React-renderercss (0.81.0-rc.2): - React-debug - React-utils - - React-rendererdebug (0.81.0-rc.1): + - React-rendererdebug (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2145,7 +2145,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0-rc.1): + - React-RuntimeApple (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0-rc.1): + - React-RuntimeCore (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2196,7 +2196,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0-rc.1): + - React-runtimeexecutor (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2206,10 +2206,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.2) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0-rc.1): + - React-RuntimeHermes (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2230,7 +2230,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0-rc.1): + - React-runtimescheduler (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2252,8 +2252,8 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0-rc.1) - - React-utils (0.81.0-rc.1): + - React-timing (0.81.0-rc.2) + - React-utils (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2263,11 +2263,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0-rc.1) + - React-jsi (= 0.81.0-rc.2) - SocketRocket - - ReactAppDependencyProvider (0.81.0-rc.1): + - ReactAppDependencyProvider (0.81.0-rc.2): - ReactCodegen - - ReactCodegen (0.81.0-rc.1): + - ReactCodegen (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2293,7 +2293,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0-rc.1): + - ReactCommon (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2301,9 +2301,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0-rc.1) + - ReactCommon/turbomodule (= 0.81.0-rc.2) - SocketRocket - - ReactCommon-Samples (0.81.0-rc.1): + - ReactCommon-Samples (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2319,7 +2319,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.0-rc.1): + - ReactCommon/turbomodule (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2328,15 +2328,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.1) - - React-cxxreact (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) - - React-logger (= 0.81.0-rc.1) - - React-perflogger (= 0.81.0-rc.1) - - ReactCommon/turbomodule/bridging (= 0.81.0-rc.1) - - ReactCommon/turbomodule/core (= 0.81.0-rc.1) + - React-callinvoker (= 0.81.0-rc.2) + - React-cxxreact (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) + - React-logger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.2) + - ReactCommon/turbomodule/bridging (= 0.81.0-rc.2) + - ReactCommon/turbomodule/core (= 0.81.0-rc.2) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0-rc.1): + - ReactCommon/turbomodule/bridging (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2345,13 +2345,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.1) - - React-cxxreact (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) - - React-logger (= 0.81.0-rc.1) - - React-perflogger (= 0.81.0-rc.1) + - React-callinvoker (= 0.81.0-rc.2) + - React-cxxreact (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) + - React-logger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.2) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0-rc.1): + - ReactCommon/turbomodule/core (0.81.0-rc.2): - boost - DoubleConversion - fast_float @@ -2360,14 +2360,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.1) - - React-cxxreact (= 0.81.0-rc.1) - - React-debug (= 0.81.0-rc.1) - - React-featureflags (= 0.81.0-rc.1) - - React-jsi (= 0.81.0-rc.1) - - React-logger (= 0.81.0-rc.1) - - React-perflogger (= 0.81.0-rc.1) - - React-utils (= 0.81.0-rc.1) + - React-callinvoker (= 0.81.0-rc.2) + - React-cxxreact (= 0.81.0-rc.2) + - React-debug (= 0.81.0-rc.2) + - React-featureflags (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.2) + - React-logger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.2) + - React-utils (= 0.81.0-rc.2) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2651,83 +2651,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 2c3d3c490f38cb7f4e6a6f3b435d94673abe704c + FBLazyVector: 9915acaf61ca57c052d228802204e8e0456efe83 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: ebf353fe47a71a4771e31060913caa6c78418abf + hermes-engine: 3be3e04cd57dac8336622aa8e19f9b6c1ad97fc0 MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 643cbda69382342a90c35f8c085566d7ede84273 - RCTRequired: f166b7d9fa53dd68aa453bbe11491d51fb6cf9ab - RCTTypeSafety: dc3c32ba6ca1b93c34873a90a8c54d04c21b03be - React: 3b03c6d538ef0974681fe55099314da2e2e2a7ea - React-callinvoker: 8bf85b95bb9d11af2a3457fe49e78b511e293253 - React-Core: 6d857d5caebdfd3f31275592c9982cf625223937 - React-CoreModules: 45c12ddaa171c9adfb3dce8c62d4368355d704b2 - React-cxxreact: 55266eea62dbc25d847667e98584975ef567d772 - React-debug: d2f264471cdf80e475b639dd4b600470e7c57997 - React-defaultsnativemodule: 5646ab400bccae48be2d4fd5a7fc94873ae25c42 - React-domnativemodule: 28b7d8c2a52053145af86b7d6a0281d0003efea1 - React-Fabric: 25594873fc5230f2919b6129d0e23af8cdd7056f - React-FabricComponents: e7c3babfb733090bde0cb615b8f75e2593d2449e - React-FabricImage: 75ba1235ed23f86bc027f6a9ffc250b9a848b531 - React-featureflags: bc4d066e4301c9c22c47812d2abb573a8f6d4d56 - React-featureflagsnativemodule: 34b7369d88ede95d03467b1b8ffb796c7c43a171 - React-graphics: 5218bdf0efc83ed43e38c04383d5f112c92a9844 - React-hermes: 36d1b3137ca672c55e3ca7d5704deb01c9a85ec1 - React-idlecallbacksnativemodule: 14cd2f0b24d55721af58527a2b5d6e1e450812b5 - React-ImageManager: d28f843cbafebb4c31542fa874514dc00e441d6d - React-jserrorhandler: d0fa47b9614e8f2bf7de492a5f6b62ec2559ef97 - React-jsi: 3eff0de69318f7ccf2fcc2a9f9870d95df3d91d0 - React-jsiexecutor: 66c53fea4331d2bf88e9a1aab22b6cb9e506d554 - React-jsinspector: 81fe29f14e14a89d9ce87b6327e903aef24def5b - React-jsinspectorcdp: c4447c04117dd20cb7a652bed317c90f87831c4f - React-jsinspectornetwork: b5eebda62c67093458f29a6ed2231db8e8abf099 - React-jsinspectortracing: 1cd1549d9278e7a6dd835a422303d965afdf858a - React-jsitooling: a7fcdd8ee8cdf658dfead98617f2e03cf4991391 - React-jsitracing: 61ebe7907cbda37a7e8b0019e92811ae8936d16c - React-logger: 94ead6e22cbb742d8e1d6cf2e53e547bb410298e - React-Mapbuffer: b8f9300413a8a68ec2181ea18f6c7b0a04f33e23 - React-microtasksnativemodule: 2872a2678180d5fc19780c5846ecd61e9158cac7 - React-NativeModulesApple: ee9297d5abca090d55f7db1e33c8227236676c2e - React-oscompat: 7bcdcc87bc819cee38f79cdfb719ea7be195ba7f - React-perflogger: f396cd74b77f3ab07fd5cefbd378c8211638c278 - React-performancetimeline: 6e971bb7b51d0394446cde878683cebb14741025 - React-RCTActionSheet: 5d379fbcaf9e07f84ddc3a56a6320321a22c9f7d - React-RCTAnimation: 677ca6b471924fcc0a11373ef36733203e4d2624 - React-RCTAppDelegate: 4be749669608a40ff03cf7ae61760c17a4cfc639 - React-RCTBlob: 4c453632d0656e281a479e61eb39956626149968 - React-RCTFabric: 00ea6b0d5b21ef5d294cc67f3f9fa5cd549002fa - React-RCTFBReactNativeSpec: 33046f89611dabff1e3b97e4c43c149da7a26cdb - React-RCTImage: 37c839d3b590aa49a50903b8af237eb4c4af4903 - React-RCTLinking: 72d2e913ff6ad555065f6b53a81463c9693e0c0b - React-RCTNetwork: 5d8e55b29933a7d16f40b71eecbfa1c7eca93cc3 - React-RCTPushNotification: 253c8c530f74985e91d78663df8fe9c66b28af64 - React-RCTRuntime: 5b59f5dd0a991fadf04a7c6942f7cb028cd9c0b4 - React-RCTSettings: 3be629bfd8a7cc237c84255ca8a73ad570469df6 - React-RCTTest: 23fb03dc1d0e216ded6a62d2f71dc472de59d32f - React-RCTText: eaa8bdabd4fa0d98d344428f220957f97af936ad - React-RCTVibration: df75f700b0e3b2c85a6643196a83159b763b4a4a - React-rendererconsistency: de839cbdc296c5dbf73e733ba2fde1c78733cc67 - React-renderercss: 58076c1024a9451de214f0a24400f1aae21a34ce - React-rendererdebug: b382e92cee6b792104c42d25bbe4709910c84c0b - React-RuntimeApple: 68b9a7b54a194ce8a8b65e6c36ea6d2b57d51f7d - React-RuntimeCore: 6cb253b4ed89b2df6ecf82a045ba3f4e09758972 - React-runtimeexecutor: 4cc55a19939ff1e92c3941b1f667f596f77b383c - React-RuntimeHermes: 1728929b48c9e3079a65b464bbd7c4e4d197dfd4 - React-runtimescheduler: 51d7430d47caa6dd3039506043cd3e2268cdd9a6 - React-timing: fb14f87ff4443df6b022fca19b6028401c743cc3 - React-utils: d0b9a2f8867cbcaafbdd05fa189381578e8e0a2e - ReactAppDependencyProvider: d6047f02061d1d4ddea220c25c03dc0f85fa3e66 - ReactCodegen: e7d0a2c663a46acd07c511492b79df9b79930252 - ReactCommon: 9c0b5f78d34ee283d93cfd59fe0271ba629b2045 - ReactCommon-Samples: 0b39807bc0cf6c876593935c484999648cbd99b6 + RCTDeprecation: bdc0c5e21b4efba93a67a6d5ec29fec4cabb6b1f + RCTRequired: cd7aa8fe1456d77523aee320dfeae3f179f3032a + RCTTypeSafety: 3ff37b465918f790b2ca97e21f2070e64a001410 + React: 94a9dcb20baa4d7600f1456927055e42cb4e3707 + React-callinvoker: 59811ef398e469c00f275035e3623172b6b747c9 + React-Core: 5aa5e081cca93ed93266bba058b4e46b635960eb + React-CoreModules: ed955e0cd9476f8ab4f690d3f246a6bc634781b8 + React-cxxreact: c4c36b1c8972276d6ac100dbf6baa46fc4f572de + React-debug: ae84d738d2335d1a39a91f7bd2c25cf2456dc7fe + React-defaultsnativemodule: 6540d5b60e1530ef74a96f43ee36a14e2ec23bbe + React-domnativemodule: fe4980341cad58d3713a7282cac7d95a4291ef21 + React-Fabric: 24208bb40803dd04412fea1d25bfd77db5b3a87f + React-FabricComponents: 6ef500e63b3577613754f0f7e95022549e390657 + React-FabricImage: 36d6d127c9ce256ec48266bd575639bbcaf2c2f5 + React-featureflags: d85c49febedd5f0597bcb51796d57833aef30e39 + React-featureflagsnativemodule: 9653f6c1c4419269e76990074184fb126406517c + React-graphics: 39c57564906edece6be65b678e90dba526bd56c4 + React-hermes: 881d3522fea05574632731691f8f667170a5d1b3 + React-idlecallbacksnativemodule: 0edda9ee6652809b2554e6a46984b9b9c3bf92d8 + React-ImageManager: 0f5ace4a664b8afe299b27d5b5d03a48b33323ee + React-jserrorhandler: 683f3f42346ae10a469dbd399b37fa27c01fa01a + React-jsi: 67435b0e122eb153b689c5cc962fc61e53d42125 + React-jsiexecutor: 761fbbcf806726f70dfba1af60987cf9af85bac0 + React-jsinspector: 3dca378f5081a2184ec1b5655be261e3457e77e3 + React-jsinspectorcdp: 0f8e78d21fb0595005e63cfd49504782d41c2d5c + React-jsinspectornetwork: faa3ed665491e3d37b5041aab4916cf33badf786 + React-jsinspectortracing: 26eccd941638ca1e20db56bd18a2ab8e21cdae00 + React-jsitooling: 18506a86bfa0280b89cb56fd995eb041ffcb7795 + React-jsitracing: c9f91e8af4a912688840b2e36f2087334ee39ce2 + React-logger: 614306fda5e39fda215af4c65b5fa3284ca67c34 + React-Mapbuffer: 9c62370d8bd55012524d8ad104c81c6d148fe925 + React-microtasksnativemodule: e4bab9fcd5a4a3a31c307627ba4da5de2270a609 + React-NativeModulesApple: 3313a38498be0dce0355705878374ca8eadca06d + React-oscompat: a422fccc91cc3e67f4bf59627eba1b38e5f79033 + React-perflogger: b6bb51d043aae261194390b79f3a296f8c5de62c + React-performancetimeline: 881a4b4dc0f93e9275ec7309cb1c28d8847686c4 + React-RCTActionSheet: 79f74605ec821d08716d40cfc0dd2eb0c7448fd9 + React-RCTAnimation: 483db3b0f9a60945553f6237fc14138beb9df771 + React-RCTAppDelegate: 13abd475cecfb241397be86effb75853c6456720 + React-RCTBlob: 4984372c50aab0b40ee7460080a3eae35f6a05d6 + React-RCTFabric: b7d595ad92ad6249136c43da57e6399d0864556a + React-RCTFBReactNativeSpec: 1c9e7497d106ee3b20a16932c36b6ce0b6db7829 + React-RCTImage: 2b6409f62dabbe04fecaa455fdd8bba782b07a46 + React-RCTLinking: 5be4d2ced06b9e9b24c9f7499eb0fbc64848ab29 + React-RCTNetwork: b41267c387de54821638c7e26265228d41ce9f0a + React-RCTPushNotification: 1bf64e58eea349348a0ebf900d0cb5479e96a784 + React-RCTRuntime: c113a3166d9b87bb6b37df5ee3312a8140a9b7dd + React-RCTSettings: fbbe0606f26337d797a7e3da74afd0243d969c55 + React-RCTTest: 7cf698ac37b01d1800c71569f15c31e20bf7b8d4 + React-RCTText: da2698af66ab02b3715b7d56576728b97e8c8b9c + React-RCTVibration: 70e299c05c8c1627e4c4a94196e96a788239d3dc + React-rendererconsistency: 8ffd9cadd4c919baf64e03875334f588341503d8 + React-renderercss: 261440ac366d11df0255e2ad5a0c08871f935e0a + React-rendererdebug: f45b20b35a794718db80c92d9a1c86d3c153265e + React-RuntimeApple: b6c037a003eb37205d1f1acc4fcb32652d69d2e0 + React-RuntimeCore: 9ad571c949c2572045c424140b2368b38e33f4fb + React-runtimeexecutor: 601f1859579175ac96a0237c4c86ef55bbb60662 + React-RuntimeHermes: 1e411089d5cad4f5406f0cc5545fa9d6a804cb10 + React-runtimescheduler: 29f058fd573464deac54b0c32ac0dfc615b7f228 + React-timing: bed1771e3f2dde14dc71f778564c68786b76ce8e + React-utils: d37a08688f23f7d263a3719f5692534cd12dbaf2 + ReactAppDependencyProvider: ba145f1c381299018032c57386bc01cf7da36a79 + ReactCodegen: b608ab77f5678470ae9cb5359138767aea093411 + ReactCommon: 61f2cc9427acc386355f0a1008ceacf35ab3eb21 + ReactCommon-Samples: 10f5a7d4fb0ff92d698264c3f68922080f3526a4 ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 865fbf57ad8aa871fbe40f8cd286825fad7cf80f + Yoga: 670c6752f06f48ee4e172a75988a963ea53ea2a5 PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From 225ca2b6a6b68a2b54e1bf69838babff8db64ca7 Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Mon, 28 Jul 2025 14:37:23 +0100 Subject: [PATCH 041/312] [0.81] Lower minimum Node.js version to 20.19.4 (#52879) * Lower minimum Node.js version to 20.19.4 (#52678) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52678 From partner feedback, there's still appetite to support Node 20.x for the next <1y of life. Lower min version to `20.19.4` (Jul 2025) and widen test matrix in CI. Changelog: [General][Breaking] - Our new minimum Node version is Node.js 20 (Overrides #51840) Reviewed By: cortinico Differential Revision: D78494491 fbshipit-source-id: c8d9dc6250cb11f8a12ca7e761b65f4a8dae9265 * Bump Metro to ^0.83.1, lower minimum Node.js version to 20.19 Summary: Metro release notes: https://github.com/facebook/metro/releases/tag/v0.83.1 The only public-facing change is a lowering of the minimum Node.js version from 22.14 to 20.19. This will need picking to RN `0.81-stable` Changelog: [General][Changed] Metro to ^0.83.1 Reviewed By: huntie Differential Revision: D78895160 fbshipit-source-id: b9ccffe972249b73897f51c14873861e57a97161 * Do not setup-node twice in test_js (#52737) Summary: I've noticed that test_js (20) and test_js (24) are actually running on Node 22. That's because the `yarn-install` action is invoking setup-node again with the default value (22). This changes it. Also I'm cleaning up the workflows so that every `yarn-install` invocation is happening just after the `setup-node` invocation. ## Changelog: [INTERNAL] - Pull Request resolved: https://github.com/facebook/react-native/pull/52737 Test Plan: CI which will most likely be red for test_js (20) so will need a follow-up Reviewed By: cipolleschi Differential Revision: D78664671 Pulled By: cortinico fbshipit-source-id: c73390930d1511d1bf0f2d4ea92e83f50b10247f --------- Co-authored-by: Alex Hunt Co-authored-by: Rob Hogan Co-authored-by: Nicola Corti --- .github/actions/build-hermes-macos/action.yml | 4 +- .github/actions/build-npm-package/action.yml | 4 +- .github/actions/create-release/action.yml | 2 + .github/actions/maestro-ios/action.yml | 2 + .../prepare-hermes-workspace/action.yml | 5 +- .../actions/test-ios-helloworld/action.yml | 4 +- .github/actions/yarn-install/action.yml | 2 - .github/workflows/test-all.yml | 1 + package.json | 4 +- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 2 +- packages/community-cli-plugin/package.json | 10 +- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 2 +- .../eslint-config-react-native/package.json | 2 +- .../eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 2 +- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +- packages/new-app-screen/package.json | 2 +- packages/polyfills/package.json | 2 +- .../react-native-babel-preset/package.json | 2 +- .../package.json | 2 +- packages/react-native-codegen/package.json | 2 +- .../package.json | 2 +- packages/react-native/package.json | 6 +- packages/rn-tester/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 2 +- private/react-native-bots/package.json | 2 +- .../package.json | 2 +- yarn.lock | 184 +++++++++--------- 34 files changed, 139 insertions(+), 137 deletions(-) diff --git a/.github/actions/build-hermes-macos/action.yml b/.github/actions/build-hermes-macos/action.yml index 41c7e6e869c..d2c3eeed4e3 100644 --- a/.github/actions/build-hermes-macos/action.yml +++ b/.github/actions/build-hermes-macos/action.yml @@ -15,8 +15,6 @@ runs: steps: - name: Setup xcode uses: ./.github/actions/setup-xcode - - name: Setup node.js - uses: ./.github/actions/setup-node - name: Restore Hermes workspace uses: ./.github/actions/restore-hermes-workspace - name: Restore Cached Artifacts @@ -45,6 +43,8 @@ runs: echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV echo "ARTIFACTS_EXIST=true" >> $GITHUB_OUTPUT fi + - name: Setup node.js + uses: ./.github/actions/setup-node - name: Yarn- Install Dependencies if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }} uses: ./.github/actions/yarn-install diff --git a/.github/actions/build-npm-package/action.yml b/.github/actions/build-npm-package/action.yml index 807e03a742c..4e4e0d6d6c6 100644 --- a/.github/actions/build-npm-package/action.yml +++ b/.github/actions/build-npm-package/action.yml @@ -116,12 +116,12 @@ runs: - name: Print Artifacts Directory shell: bash run: ls -lR ./packages/react-native/ReactAndroid/external-artifacts/artifacts/ - - name: Setup node.js - uses: ./.github/actions/setup-node - name: Setup gradle uses: ./.github/actions/setup-gradle with: cache-encryption-key: ${{ inputs.gradle-cache-encryption-key }} + - name: Setup node.js + uses: ./.github/actions/setup-node - name: Install dependencies uses: ./.github/actions/yarn-install - name: Build packages diff --git a/.github/actions/create-release/action.yml b/.github/actions/create-release/action.yml index ff22a0cb3a0..1d26e17e8fc 100644 --- a/.github/actions/create-release/action.yml +++ b/.github/actions/create-release/action.yml @@ -14,6 +14,8 @@ inputs: runs: using: composite steps: + - name: Setup node.js + uses: ./.github/actions/setup-node - name: Yarn install uses: ./.github/actions/yarn-install - name: Configure Git diff --git a/.github/actions/maestro-ios/action.yml b/.github/actions/maestro-ios/action.yml index 5ba4f8dc2aa..50b21597c9e 100644 --- a/.github/actions/maestro-ios/action.yml +++ b/.github/actions/maestro-ios/action.yml @@ -35,6 +35,8 @@ runs: with: java-version: '17' distribution: 'zulu' + - name: Setup node.js + uses: ./.github/actions/setup-node - name: Run yarn install uses: ./.github/actions/yarn-install - name: Start Metro in Debug diff --git a/.github/actions/prepare-hermes-workspace/action.yml b/.github/actions/prepare-hermes-workspace/action.yml index 22dbe356ee5..47953b67600 100644 --- a/.github/actions/prepare-hermes-workspace/action.yml +++ b/.github/actions/prepare-hermes-workspace/action.yml @@ -17,9 +17,6 @@ outputs: runs: using: composite steps: - - name: Setup node.js - uses: ./.github/actions/setup-node - - name: Setup hermes version shell: bash id: hermes-version @@ -67,6 +64,8 @@ runs: echo "HERMES_CACHED=true" >> "$GITHUB_OUTPUT" fi + - name: Setup node.js + uses: ./.github/actions/setup-node - name: Yarn- Install Dependencies if: ${{ steps.meaningful-cache.outputs.HERMES_CACHED != 'true' }} uses: ./.github/actions/yarn-install diff --git a/.github/actions/test-ios-helloworld/action.yml b/.github/actions/test-ios-helloworld/action.yml index 137efb0a08b..69f9f05e408 100644 --- a/.github/actions/test-ios-helloworld/action.yml +++ b/.github/actions/test-ios-helloworld/action.yml @@ -23,6 +23,8 @@ runs: uses: ./.github/actions/setup-xcode - name: Setup node.js uses: ./.github/actions/setup-node + - name: Run yarn install + uses: ./.github/actions/yarn-install - name: Create Hermes folder shell: bash run: mkdir -p "$HERMES_WS_DIR" @@ -34,8 +36,6 @@ runs: - name: Print Downloaded hermes shell: bash run: ls -lR "$HERMES_WS_DIR" - - name: Run yarn - uses: ./.github/actions/yarn-install - name: Setup ruby uses: ruby/setup-ruby@v1 with: diff --git a/.github/actions/yarn-install/action.yml b/.github/actions/yarn-install/action.yml index 7f7c7bd2bc9..cdb4a85c899 100644 --- a/.github/actions/yarn-install/action.yml +++ b/.github/actions/yarn-install/action.yml @@ -2,8 +2,6 @@ name: yarn-install runs: using: composite steps: - - name: Setup node.js - uses: ./.github/actions/setup-node - name: Install dependencies shell: bash run: | diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index 1ca98516222..da115d6030e 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -594,6 +594,7 @@ jobs: fail-fast: false matrix: node-version: ["24", "22"] + # node-version: ["24", "22", "20.19.4"] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/package.json b/package.json index 98068f89ea3..e0e4c453695 100644 --- a/package.json +++ b/package.json @@ -90,9 +90,9 @@ "jest-snapshot": "^29.7.0", "markdownlint-cli2": "^0.17.2", "markdownlint-rule-relative-links": "^3.0.0", - "metro-babel-register": "^0.83.0", + "metro-babel-register": "^0.83.1", "metro-memory-fs": "^0.82.5", - "metro-transform-plugins": "^0.83.0", + "metro-transform-plugins": "^0.83.1", "micromatch": "^4.0.4", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 8e92b70d1c2..9bf621c14da 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -17,7 +17,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "files": [ "path-support.js", diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 03311bffbaf..20c630bd39e 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -19,7 +19,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "files": [ "index.js" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 18a472fb01b..91009bc6e49 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -25,13 +25,13 @@ "@react-native/dev-middleware": "0.81.0-rc.2", "debug": "^4.4.0", "invariant": "^2.2.4", - "metro": "^0.83.0", - "metro-config": "^0.83.0", - "metro-core": "^0.83.0", + "metro": "^0.83.1", + "metro-config": "^0.83.1", + "metro-core": "^0.83.1", "semver": "^7.1.3" }, "devDependencies": { - "metro-resolver": "^0.83.0" + "metro-resolver": "^0.83.1" }, "peerDependencies": { "@react-native-community/cli": "*", @@ -43,6 +43,6 @@ } }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" } } diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 02611ad049d..1e16761e6e8 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -21,7 +21,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "files": [ "dist" diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index faf422cb18d..45fd700129d 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -20,6 +20,6 @@ "BUILD_INFO" ], "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" } } diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index d7ed541a858..0f56d212f85 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -26,7 +26,7 @@ }, "license": "MIT", "engines": { - "node": ">= 22.14.0", + "node": ">= 20.19.4", "electron": ">=36.3.0" }, "dependencies": { diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index fd1e83ffe53..f053c351faa 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -35,7 +35,7 @@ "ws": "^6.2.3" }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "devDependencies": { "selfsigned": "^2.4.1", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 5744acdca91..f43a525815b 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -16,7 +16,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "main": "index.js", "dependencies": { diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 3a4ca4962a0..674ba25e439 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -22,6 +22,6 @@ "hermes-eslint": "0.29.1" }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" } } diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 795f9a4ed33..32c666dc5e6 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -36,6 +36,6 @@ "hermes-eslint": "0.29.1" }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" } } diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index c14898f41ec..58e8a317a4b 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -16,7 +16,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "scripts": { "build": "./gradlew build", diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index b1ba78e908c..533c0e0fdc9 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -16,7 +16,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "exports": { ".": "./src/index.js", @@ -28,7 +28,7 @@ "dependencies": { "@react-native/js-polyfills": "0.81.0-rc.2", "@react-native/metro-babel-transformer": "0.81.0-rc.2", - "metro-config": "^0.83.0", - "metro-runtime": "^0.83.0" + "metro-config": "^0.83.1", + "metro-runtime": "^0.83.1" } } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index be8ef675347..23f3635812b 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -30,6 +30,6 @@ } }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" } } diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 2745aa202bd..d3545162841 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -18,7 +18,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "files": [ "console.js", diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 29d9e4f15a2..cf9138ff299 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -13,7 +13,7 @@ ], "license": "MIT", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "main": "src/index.js", "files": [ diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 1508ec8cfca..1706e6b6d92 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -14,7 +14,7 @@ ], "license": "MIT", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "main": "src/index.js", "files": [ diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 0dc7012fbda..87fa84b8dfb 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -18,7 +18,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "scripts": { "build": "yarn clean && node scripts/build.js --verbose", diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index d5d94955a26..9be3b433d0d 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -19,7 +19,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "exports": { ".": "./src/index.js", diff --git a/packages/react-native/package.json b/packages/react-native/package.json index a6b28359ee6..57b0376c095 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -21,7 +21,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "bin": { "react-native": "cli.js" @@ -180,8 +180,8 @@ "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.0", - "metro-source-map": "^0.83.0", + "metro-runtime": "^0.83.1", + "metro-source-map": "^0.83.1", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 37f752f0921..0e7ace08cda 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -10,7 +10,7 @@ "directory": "packages/rn-tester" }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "scripts": { "start": "react-native start", diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index b66e23fe0be..971aebfbd72 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -17,7 +17,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "exports": { ".": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 90c83ce7f28..d2e14fe4e5c 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -33,6 +33,6 @@ "rxjs": "^7.8.1" }, "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" } } diff --git a/private/react-native-bots/package.json b/private/react-native-bots/package.json index a67e918abb7..471c2ef3c24 100644 --- a/private/react-native-bots/package.json +++ b/private/react-native-bots/package.json @@ -4,7 +4,7 @@ "private": true, "license": "MIT", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "devDependencies": { "@rnx-kit/rn-changelog-generator": "^0.4.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index a2d8f150a38..c16d941bbe6 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -5,7 +5,7 @@ "description": "TypeScript related unit test for @react-native/codegen", "license": "MIT", "engines": { - "node": ">= 22.14.0" + "node": ">= 20.19.4" }, "scripts": { "build": "yarn clean && node scripts/build.js --verbose && tsc", diff --git a/yarn.lock b/yarn.lock index 2f49ab2716c..a552058a9b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6818,10 +6818,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-register@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.83.0.tgz#04fb08f2cd64018e2ad19b4a64e710d912e923c8" - integrity sha512-HfMrNvBbZSy8Sbf5aVlTub2PW86bPgp6oVOiHQ0kKLRl5+lMcvY9Tm8M5/5fZ8+TJAGOXgA9E0GNfgcSb99VLw== +metro-babel-register@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.83.1.tgz#a0c6976416992fa5fce76d70c2a8d567c8b48241" + integrity sha512-jeyI2JN6KesVYIUA/Gg6L+JBJ8lpoCBz9bd7NN43LCsC79vINHd3z3knGQF1DY9eHc9EQ3C7Fzzlr813FlnJ1g== dependencies: "@babel/core" "^7.25.2" "@babel/plugin-proposal-export-namespace-from" "^7.18.9" @@ -6835,60 +6835,60 @@ metro-babel-register@^0.83.0: escape-string-regexp "^1.0.5" flow-enums-runtime "^0.0.6" -metro-babel-transformer@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.83.0.tgz#933839d581e61a2f107c708e0fbf4379a83fa1ca" - integrity sha512-ncYhd1WWElJj6W+uMgoi57mUgdWm8UZBLUg9/TYh6iFipJ6A78IuztOFbohAk+Zh5S376bF86TSDaeRouAzJkg== +metro-babel-transformer@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz#77e548b4b8f087fe30ffcd112826b371f83b597d" + integrity sha512-r3xAD3964E8dwDBaZNSO2aIIvWXjIK80uO2xo0/pi3WI8XWT9h5SCjtGWtMtE5PRWw+t20TN0q1WMRsjvhC1rQ== dependencies: "@babel/core" "^7.25.2" flow-enums-runtime "^0.0.6" hermes-parser "0.29.1" nullthrows "^1.1.1" -metro-cache-key@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.83.0.tgz#73d6c4810454092ad833706ce39e3111171892c5" - integrity sha512-T0WmTe0NRt/7/kaWuDoUbeF5xlfqzLyVg5MO6X2XnXT8le42S2UxRWJgZOtojOXGvthdQhzdxZM2GCd+BQLfAQ== +metro-cache-key@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.83.1.tgz#18c59c7c6944cfa0856d57ff5ebbdc18dec12687" + integrity sha512-ZUs+GD5CNeDLxx5UUWmfg26IL+Dnbryd+TLqTlZnDEgehkIa11kUSvgF92OFfJhONeXzV4rZDRGNXoo6JT+8Gg== dependencies: flow-enums-runtime "^0.0.6" -metro-cache@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.83.0.tgz#595d9be2cc0e4bc674088a79965fb61ab6e54b36" - integrity sha512-t5ExK5od6PcI7Zc441oRNdnYoxWb9EuqBsgoVQUG2/DRsEAHCkK6EqwLYForgMABYwJOpBTGMw74f7EQMKakuw== +metro-cache@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.83.1.tgz#bc1319d44934d0935ec4eaf10d28b90ec6ce0aac" + integrity sha512-7N/Ad1PHa1YMWDNiyynTPq34Op2qIE68NWryGEQ4TSE3Zy6a8GpsYnEEZE4Qi6aHgsE+yZHKkRczeBgxhnFIxQ== dependencies: exponential-backoff "^3.1.1" flow-enums-runtime "^0.0.6" https-proxy-agent "^7.0.5" - metro-core "0.83.0" + metro-core "0.83.1" -metro-config@0.83.0, metro-config@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.83.0.tgz#43bb29db0247c6b990993672b6acba52b67c36d5" - integrity sha512-fkuXgw8KXMOOGfPVwE1xULTeW2kfpyp8dtfD96PcBZHPxv8Pu0EAihTXkCPaKk1PKqIHenzEdW9s2MRUWvyRPA== +metro-config@0.83.1, metro-config@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.83.1.tgz#28db7ae553883802c30b1eb374817ad1e686e7b4" + integrity sha512-HJhpZx3wyOkux/jeF1o7akFJzZFdbn6Zf7UQqWrvp7gqFqNulQ8Mju09raBgPmmSxKDl4LbbNeigkX0/nKY1QA== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" flow-enums-runtime "^0.0.6" jest-validate "^29.7.0" - metro "0.83.0" - metro-cache "0.83.0" - metro-core "0.83.0" - metro-runtime "0.83.0" + metro "0.83.1" + metro-cache "0.83.1" + metro-core "0.83.1" + metro-runtime "0.83.1" -metro-core@0.83.0, metro-core@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.83.0.tgz#d9fb3dffea49b07db75d735e23cd2528a0a66db5" - integrity sha512-LeWfVWejZVx/cEkOYrgQ11A+2cTPdq30Xm4SM31SfA64teKCnaUPa4k6CxU65AUou5EF4nCFo7B2XE5Q2jwBvg== +metro-core@0.83.1, metro-core@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.83.1.tgz#fbedf8c6cfdcc58eaec7011718f1041ac9562cff" + integrity sha512-uVL1eAJcMFd2o2Q7dsbpg8COaxjZBBGaXqO2OHnivpCdfanraVL8dPmY6It9ZeqWLOihUKZ2yHW4b6soVCzH/Q== dependencies: flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.83.0" + metro-resolver "0.83.1" -metro-file-map@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.83.0.tgz#6b1bc47848caccc403896eb8c81a4699c39c934c" - integrity sha512-vWbimPJ/sPwSFfYJcwSbgsM+x3E6mELFnm8WqwrvTvRm55NR05noAzx1HG/X0PJUylptHlQAbguPEA7F4jd/ug== +metro-file-map@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.83.1.tgz#9c9a295edd0eb234f23b44952786f0e95c3b2d8d" + integrity sha512-Yu429lnexKl44PttKw3nhqgmpBR+6UQ/tRaYcxPeEShtcza9DWakCn7cjqDTQZtWR2A8xSNv139izJMyQ4CG+w== dependencies: debug "^4.4.0" fb-watchman "^2.0.0" @@ -6907,61 +6907,61 @@ metro-memory-fs@^0.82.5: dependencies: flow-enums-runtime "^0.0.6" -metro-minify-terser@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.83.0.tgz#c84c0eae701ecd7e4cf3c595e1f483e8a5e813ad" - integrity sha512-jsVzWnkl43Kb18iQvEn0Keq0n5WQwAiAHn9vCFE6roM6E4fVLDKlzDNoWyFzs9GyodlVYkbjAuz9PCpEzBfq5Q== +metro-minify-terser@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.83.1.tgz#227f534876fb8eb089b64d7bff8cf77d1817c8f4" + integrity sha512-kmooOxXLvKVxkh80IVSYO4weBdJDhCpg5NSPkjzzAnPJP43u6+usGXobkTWxxrAlq900bhzqKek4pBsUchlX6A== dependencies: flow-enums-runtime "^0.0.6" terser "^5.15.0" -metro-resolver@0.83.0, metro-resolver@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.83.0.tgz#a4dc88b192c886c02343703127fef80e3a03ca83" - integrity sha512-TGwPrU4lpKwmvpfnN9WA4RMECpSsZ+GAtiKQRjNh6ek0f7XUR8RuGPTWc4VidTo973C0syfbYVoD/iv1hFgAiw== +metro-resolver@0.83.1, metro-resolver@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.83.1.tgz#2e14c8b0762883f3568f41cde08f4a48893021ce" + integrity sha512-t8j46kiILAqqFS5RNa+xpQyVjULxRxlvMidqUswPEk5nQVNdlJslqizDm/Et3v/JKwOtQGkYAQCHxP1zGStR/g== dependencies: flow-enums-runtime "^0.0.6" -metro-runtime@0.83.0, metro-runtime@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.83.0.tgz#495d28160784c303c98c1d32ef936b2e5524c445" - integrity sha512-35q73Hz4X8JcNa2jgHdRy7zLggyEM2tPhkw+xjfuoRXO8TtFLGl7gKug/lF3GVYWEI6I9wEf5BGsnAoE5MZ4tQ== +metro-runtime@0.83.1, metro-runtime@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.83.1.tgz#5835c57c20cb89db45c48abb4bdae0246529a21b" + integrity sha512-3Ag8ZS4IwafL/JUKlaeM6/CbkooY+WcVeqdNlBG0m4S0Qz0om3rdFdy1y6fYBpl6AwXJwWeMuXrvZdMuByTcRA== dependencies: "@babel/runtime" "^7.25.0" flow-enums-runtime "^0.0.6" -metro-source-map@0.83.0, metro-source-map@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.83.0.tgz#a9c807a6c7cf43448e6f55e280dab8aafadf0586" - integrity sha512-XsQl5MhXo249q0ImDCFatBaWzU4K6ksso9n2MKoreuMPrgmVwzOAkVvJRUxuPvjW0DzBZKwqpk3ubC5MYRalfQ== +metro-source-map@0.83.1, metro-source-map@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.83.1.tgz#afaeccad77f543eebfe22ecc1d94c0b58c721946" + integrity sha512-De7Vbeo96fFZ2cqmI0fWwVJbtHIwPZv++LYlWSwzTiCzxBDJORncN0LcT48Vi2UlQLzXJg+/CuTAcy7NBVh69A== dependencies: "@babel/traverse" "^7.25.3" "@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3" "@babel/types" "^7.25.2" flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.83.0" + metro-symbolicate "0.83.1" nullthrows "^1.1.1" - ob1 "0.83.0" + ob1 "0.83.1" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.83.0.tgz#05938d2ecbf6c8318185d7b631f9938dcaa115d5" - integrity sha512-pPu73T3y4TWpmGgUIJBF8b4bPjxV9LHcqEqAc6Gd7xqN1Wquu6onhdmi72XLHxhk+mZBF2mtVIr/QKI3tOyRLg== +metro-symbolicate@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.83.1.tgz#c03edc8e7c0e8b44821f2a807c0a8342aaeb77eb" + integrity sha512-wPxYkONlq/Sv8Ji7vHEx5OzFouXAMQJjpcPW41ySKMLP/Ir18SsiJK2h4YkdKpYrTS1+0xf8oqF6nxCsT3uWtg== dependencies: flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.83.0" + metro-source-map "0.83.1" nullthrows "^1.1.1" source-map "^0.5.6" vlq "^1.0.0" -metro-transform-plugins@0.83.0, metro-transform-plugins@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.83.0.tgz#0204405be0f5ffbcd73443ac15408b1285052894" - integrity sha512-HLUB+CduKt9KOUwW6zS3YezcIAUal3mmxEi6PW6/SqpqQIqR7Ij83UswCy/LRhY2Lx6IwucR8Zg9Oo+d0cCvzA== +metro-transform-plugins@0.83.1, metro-transform-plugins@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.83.1.tgz#879b8ff34c3720d387889da60c03923394457988" + integrity sha512-1Y+I8oozXwhuS0qwC+ezaHXBf0jXW4oeYn4X39XWbZt9X2HfjodqY9bH9r6RUTsoiK7S4j8Ni2C91bUC+sktJQ== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.25.0" @@ -6970,29 +6970,29 @@ metro-transform-plugins@0.83.0, metro-transform-plugins@^0.83.0: flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-worker@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.83.0.tgz#40822fdaf7b37ed18478948e1714acbd4c2c8a92" - integrity sha512-z9ZGlVMcw562mFqcJrU12yAgjntdRCsQV98rOyIOLF00/ui9un+xbQjqarjYmXpO3fM8SMGD1EjhuSGFN6MmWA== +metro-transform-worker@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.83.1.tgz#47aa09f085fe4f859215506de886f1cb7deb300a" + integrity sha512-owCrhPyUxdLgXEEEAL2b14GWTPZ2zYuab1VQXcfEy0sJE71iciD7fuMcrngoufh7e7UHDZ56q4ktXg8wgiYA1Q== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.25.0" "@babel/parser" "^7.25.3" "@babel/types" "^7.25.2" flow-enums-runtime "^0.0.6" - metro "0.83.0" - metro-babel-transformer "0.83.0" - metro-cache "0.83.0" - metro-cache-key "0.83.0" - metro-minify-terser "0.83.0" - metro-source-map "0.83.0" - metro-transform-plugins "0.83.0" + metro "0.83.1" + metro-babel-transformer "0.83.1" + metro-cache "0.83.1" + metro-cache-key "0.83.1" + metro-minify-terser "0.83.1" + metro-source-map "0.83.1" + metro-transform-plugins "0.83.1" nullthrows "^1.1.1" -metro@0.83.0, metro@^0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.83.0.tgz#0837569b1c34e543fc3d4af262863c49725d9398" - integrity sha512-qQoLKhFzZH1AjO81BDftQBUUI5FNzpKC6Bv9QGcZf1YiK034yl6aLQWg6HnNEkKkGNiMwgGlEJAzn40HjQtZmw== +metro@0.83.1, metro@^0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.83.1.tgz#9f9c138793288cbf9fb26aa84e0693df85607875" + integrity sha512-UGKepmTxoGD4HkQV8YWvpvwef7fUujNtTgG4Ygf7m/M0qjvb9VuDmAsEU+UdriRX7F61pnVK/opz89hjKlYTXA== dependencies: "@babel/code-frame" "^7.24.7" "@babel/core" "^7.25.2" @@ -7015,18 +7015,18 @@ metro@0.83.0, metro@^0.83.0: jest-worker "^29.7.0" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.83.0" - metro-cache "0.83.0" - metro-cache-key "0.83.0" - metro-config "0.83.0" - metro-core "0.83.0" - metro-file-map "0.83.0" - metro-resolver "0.83.0" - metro-runtime "0.83.0" - metro-source-map "0.83.0" - metro-symbolicate "0.83.0" - metro-transform-plugins "0.83.0" - metro-transform-worker "0.83.0" + metro-babel-transformer "0.83.1" + metro-cache "0.83.1" + metro-cache-key "0.83.1" + metro-config "0.83.1" + metro-core "0.83.1" + metro-file-map "0.83.1" + metro-resolver "0.83.1" + metro-runtime "0.83.1" + metro-source-map "0.83.1" + metro-symbolicate "0.83.1" + metro-transform-plugins "0.83.1" + metro-transform-worker "0.83.1" mime-types "^2.1.27" nullthrows "^1.1.1" serialize-error "^2.1.0" @@ -7511,10 +7511,10 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -ob1@0.83.0: - version "0.83.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.83.0.tgz#4c3dda1fa32ae3ccfa2cf34a73624648b458c307" - integrity sha512-uLomnfaQcMEvUnvnf7frI8YO6qe8F4pDPvatBxqLuams9BYVA9YvZqM7xJjx7cw+nYgXjreOxsIJjNsM4a6A1A== +ob1@0.83.1: + version "0.83.1" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.83.1.tgz#32f5c9e3f8cc5a6ecb1cb344e87a6e39a93f848a" + integrity sha512-ngwqewtdUzFyycomdbdIhFLjePPSOt1awKMUXQ0L7iLHgWEPF3DsCerblzjzfAUHaXuvE9ccJymWQ/4PNNqvnQ== dependencies: flow-enums-runtime "^0.0.6" From 5f3d297eec50b76fe06ac88b8cd47b711d4d032d Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Mon, 21 Jul 2025 08:35:59 -0700 Subject: [PATCH 042/312] Restore flow dir in react-native package files (#52735) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52735 Changelog: [Internal] (Follow up to keep #50784 non-breaking) Reviewed By: cortinico Differential Revision: D78662770 fbshipit-source-id: 03d931c904c0092481dbd03e8420244639305610 --- packages/react-native/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 57b0376c095..98cdc69de4c 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -78,6 +78,7 @@ "files": [ "build.gradle.kts", "cli.js", + "flow", "gradle.properties", "gradle/libs.versions.toml", "index.js", From cb20a1cd32c5a9fa79e12223d03b7ade18a890c8 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 28 Jul 2025 14:38:54 +0100 Subject: [PATCH 043/312] [0.81] Clean up feature flag preventShadowTreeCommitExhaustionWithLocking (#52862) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Clean up feature flag preventShadowTreeCommitExhaustionWithLocking (#52791) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52791 Changelog: [internal] This cleans up this feature flag as it doesn't work as intended. We'll try another approach with a different flag instead. Reviewed By: sammy-SC Differential Revision: D78815892 fbshipit-source-id: 4c651a3a225de9cfb54d00346343c7f2e3bea1d5 * Implement solution for ShadowTree commmit exhaustion using recursive locks (behind a flag) (#52795) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52795 Changelog: [internal] This is another attempt to fix https://github.com/facebook/react-native/issues/51870, inspired by https://github.com/facebook/react-native/pull/52314 but gated behind a feature flag until we've tested it carefully. Reviewed By: sammy-SC Differential Revision: D78817100 fbshipit-source-id: 45e6cae019b212528f2b2e74b9f52fe43d07f537 * [LOCAL] Correctly sort preventShadowTreeCommitExhaustion after merge conflict --------- Co-authored-by: Rubén Norte --- .../featureflags/ReactNativeFeatureFlags.kt | 4 +- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 ++--- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +- .../ReactNativeFeatureFlagsDefaults.kt | 4 +- .../ReactNativeFeatureFlagsLocalAccessor.kt | 14 +++--- ...agsOverrides_RNOSS_Experimental_Android.kt | 4 +- .../ReactNativeFeatureFlagsProvider.kt | 4 +- .../JReactNativeFeatureFlagsCxxInterop.cpp | 14 +++--- .../JReactNativeFeatureFlagsCxxInterop.h | 4 +- .../featureflags/ReactNativeFeatureFlags.cpp | 6 +-- .../featureflags/ReactNativeFeatureFlags.h | 4 +- .../ReactNativeFeatureFlagsAccessor.cpp | 12 ++--- .../ReactNativeFeatureFlagsAccessor.h | 6 +-- .../ReactNativeFeatureFlagsDefaults.h | 4 +- .../ReactNativeFeatureFlagsDynamicProvider.h | 8 +-- ...tiveFeatureFlagsOverridesOSSExperimental.h | 4 +- .../ReactNativeFeatureFlagsProvider.h | 4 +- .../NativeReactNativeFeatureFlags.cpp | 6 +-- .../NativeReactNativeFeatureFlags.h | 4 +- .../react/renderer/mounting/ShadowTree.cpp | 50 +++++++++++-------- .../react/renderer/mounting/ShadowTree.h | 16 +++++- .../ReactNativeFeatureFlags.config.js | 4 +- .../featureflags/ReactNativeFeatureFlags.js | 6 +-- .../specs/NativeReactNativeFeatureFlags.js | 4 +- 24 files changed, 112 insertions(+), 90 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index 96f0ef3bf8b..b2fb68f5d37 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<3e4d74a17c15742d35db9e4247f3e1c1>> */ /** @@ -316,7 +316,7 @@ public object ReactNativeFeatureFlags { * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again. */ @JvmStatic - public fun preventShadowTreeCommitExhaustionWithLocking(): Boolean = accessor.preventShadowTreeCommitExhaustionWithLocking() + public fun preventShadowTreeCommitExhaustion(): Boolean = accessor.preventShadowTreeCommitExhaustion() /** * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 4a965f52687..9edc477ef4f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<773ddcede573164ba82db671341ddc3f>> + * @generated SignedSource<> */ /** @@ -67,7 +67,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var fuseboxNetworkInspectionEnabledCache: Boolean? = null private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null private var preparedTextCacheSizeCache: Double? = null - private var preventShadowTreeCommitExhaustionWithLockingCache: Boolean? = null + private var preventShadowTreeCommitExhaustionCache: Boolean? = null private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null @@ -503,11 +503,11 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } - override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean { - var cached = preventShadowTreeCommitExhaustionWithLockingCache + override fun preventShadowTreeCommitExhaustion(): Boolean { + var cached = preventShadowTreeCommitExhaustionCache if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.preventShadowTreeCommitExhaustionWithLocking() - preventShadowTreeCommitExhaustionWithLockingCache = cached + cached = ReactNativeFeatureFlagsCxxInterop.preventShadowTreeCommitExhaustion() + preventShadowTreeCommitExhaustionCache = cached } return cached } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index ac7ba42df0c..afd221a4bf2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<96fca46813d841eb7f4d043010513999>> + * @generated SignedSource<> */ /** @@ -122,7 +122,7 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun preparedTextCacheSize(): Double - @DoNotStrip @JvmStatic public external fun preventShadowTreeCommitExhaustionWithLocking(): Boolean + @DoNotStrip @JvmStatic public external fun preventShadowTreeCommitExhaustion(): Boolean @DoNotStrip @JvmStatic public external fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 7a559e2b388..e59da172aba 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8ebd61411e0e0ac8c8b307cf803f1206>> + * @generated SignedSource<<12c2727291b635ef7c3163d153669c2c>> */ /** @@ -117,7 +117,7 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun preparedTextCacheSize(): Double = 200.0 - override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean = false + override fun preventShadowTreeCommitExhaustion(): Boolean = false override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean = false diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index 3469d3ab04b..baa7b54af77 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<3ea9946ef21c8ac8bb9bb63712636e89>> */ /** @@ -71,7 +71,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var fuseboxNetworkInspectionEnabledCache: Boolean? = null private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null private var preparedTextCacheSizeCache: Double? = null - private var preventShadowTreeCommitExhaustionWithLockingCache: Boolean? = null + private var preventShadowTreeCommitExhaustionCache: Boolean? = null private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null @@ -554,12 +554,12 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } - override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean { - var cached = preventShadowTreeCommitExhaustionWithLockingCache + override fun preventShadowTreeCommitExhaustion(): Boolean { + var cached = preventShadowTreeCommitExhaustionCache if (cached == null) { - cached = currentProvider.preventShadowTreeCommitExhaustionWithLocking() - accessedFeatureFlags.add("preventShadowTreeCommitExhaustionWithLocking") - preventShadowTreeCommitExhaustionWithLockingCache = cached + cached = currentProvider.preventShadowTreeCommitExhaustion() + accessedFeatureFlags.add("preventShadowTreeCommitExhaustion") + preventShadowTreeCommitExhaustionCache = cached } return cached } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt index ecacb9c45ef..2d32fcd900e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<93aab733661b558c1701b728c18b3d00>> + * @generated SignedSource<<58da46268043f086730132430735b720>> */ /** @@ -23,5 +23,5 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android : // We could use JNI to get the defaults from C++, // but that is more expensive than just duplicating the defaults here. - override fun preventShadowTreeCommitExhaustionWithLocking(): Boolean = true + override fun preventShadowTreeCommitExhaustion(): Boolean = true } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index c18b292a933..1da19692aed 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<1e81de36735c6c9286b228c75c9a0228>> */ /** @@ -117,7 +117,7 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun preparedTextCacheSize(): Double - @DoNotStrip public fun preventShadowTreeCommitExhaustionWithLocking(): Boolean + @DoNotStrip public fun preventShadowTreeCommitExhaustion(): Boolean @DoNotStrip public fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 5e812f4a5d8..0bcbbc10fc9 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<7fac1c2c0c3ce131442319925e4231dc>> + * @generated SignedSource<> */ /** @@ -321,9 +321,9 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } - bool preventShadowTreeCommitExhaustionWithLocking() override { + bool preventShadowTreeCommitExhaustion() override { static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("preventShadowTreeCommitExhaustionWithLocking"); + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("preventShadowTreeCommitExhaustion"); return method(javaProvider_); } @@ -632,9 +632,9 @@ double JReactNativeFeatureFlagsCxxInterop::preparedTextCacheSize( return ReactNativeFeatureFlags::preparedTextCacheSize(); } -bool JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustionWithLocking( +bool JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion( facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking(); + return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion(); } bool JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid( @@ -865,8 +865,8 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { "preparedTextCacheSize", JReactNativeFeatureFlagsCxxInterop::preparedTextCacheSize), makeNativeMethod( - "preventShadowTreeCommitExhaustionWithLocking", - JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustionWithLocking), + "preventShadowTreeCommitExhaustion", + JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion), makeNativeMethod( "traceTurboModulePromiseRejectionsOnAndroid", JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid), diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index a384a3b0006..42312d4bf22 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<07daae0284829d56b7eaa330b1973e02>> + * @generated SignedSource<> */ /** @@ -171,7 +171,7 @@ class JReactNativeFeatureFlagsCxxInterop static double preparedTextCacheSize( facebook::jni::alias_ref); - static bool preventShadowTreeCommitExhaustionWithLocking( + static bool preventShadowTreeCommitExhaustion( facebook::jni::alias_ref); static bool traceTurboModulePromiseRejectionsOnAndroid( diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 262c68e63be..1feef568183 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<0179ba45718903d6fec6dcc19b0e1aaa>> + * @generated SignedSource<> */ /** @@ -214,8 +214,8 @@ double ReactNativeFeatureFlags::preparedTextCacheSize() { return getAccessor().preparedTextCacheSize(); } -bool ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking() { - return getAccessor().preventShadowTreeCommitExhaustionWithLocking(); +bool ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion() { + return getAccessor().preventShadowTreeCommitExhaustion(); } bool ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid() { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index df585d8c6e2..6663518acd8 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<5055890d2cb2fb46a940f8308f014f0b>> + * @generated SignedSource<> */ /** @@ -277,7 +277,7 @@ class ReactNativeFeatureFlags { /** * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again. */ - RN_EXPORT static bool preventShadowTreeCommitExhaustionWithLocking(); + RN_EXPORT static bool preventShadowTreeCommitExhaustion(); /** * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause. diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index fc18530eaa6..877131981d2 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<681bff71eb87886a108f67b3162b030c>> */ /** @@ -875,8 +875,8 @@ double ReactNativeFeatureFlagsAccessor::preparedTextCacheSize() { return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::preventShadowTreeCommitExhaustionWithLocking() { - auto flagValue = preventShadowTreeCommitExhaustionWithLocking_.load(); +bool ReactNativeFeatureFlagsAccessor::preventShadowTreeCommitExhaustion() { + auto flagValue = preventShadowTreeCommitExhaustion_.load(); if (!flagValue.has_value()) { // This block is not exclusive but it is not necessary. @@ -884,10 +884,10 @@ bool ReactNativeFeatureFlagsAccessor::preventShadowTreeCommitExhaustionWithLocki // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(47, "preventShadowTreeCommitExhaustionWithLocking"); + markFlagAsAccessed(47, "preventShadowTreeCommitExhaustion"); - flagValue = currentProvider_->preventShadowTreeCommitExhaustionWithLocking(); - preventShadowTreeCommitExhaustionWithLocking_ = flagValue; + flagValue = currentProvider_->preventShadowTreeCommitExhaustion(); + preventShadowTreeCommitExhaustion_ = flagValue; } return flagValue.value(); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 86dc5b3d7ea..c71e8133664 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<5ed90d5ed1a03a16f551cd1cf6cbdeb3>> + * @generated SignedSource<> */ /** @@ -79,7 +79,7 @@ class ReactNativeFeatureFlagsAccessor { bool fuseboxNetworkInspectionEnabled(); bool hideOffscreenVirtualViewsOnIOS(); double preparedTextCacheSize(); - bool preventShadowTreeCommitExhaustionWithLocking(); + bool preventShadowTreeCommitExhaustion(); bool traceTurboModulePromiseRejectionsOnAndroid(); bool updateRuntimeShadowNodeReferencesOnCommit(); bool useAlwaysAvailableJSErrorHandling(); @@ -151,7 +151,7 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> fuseboxNetworkInspectionEnabled_; std::atomic> hideOffscreenVirtualViewsOnIOS_; std::atomic> preparedTextCacheSize_; - std::atomic> preventShadowTreeCommitExhaustionWithLocking_; + std::atomic> preventShadowTreeCommitExhaustion_; std::atomic> traceTurboModulePromiseRejectionsOnAndroid_; std::atomic> updateRuntimeShadowNodeReferencesOnCommit_; std::atomic> useAlwaysAvailableJSErrorHandling_; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 57cd86951e5..0dc1de80ced 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<9832c18e4c7ccf232b7222e2356f99d9>> */ /** @@ -215,7 +215,7 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return 200.0; } - bool preventShadowTreeCommitExhaustionWithLocking() override { + bool preventShadowTreeCommitExhaustion() override { return false; } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index f283d6d641b..46ec128d23b 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<19f0a48bcfa8f8ffaf634e85301adc7e>> */ /** @@ -468,13 +468,13 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::preparedTextCacheSize(); } - bool preventShadowTreeCommitExhaustionWithLocking() override { - auto value = values_["preventShadowTreeCommitExhaustionWithLocking"]; + bool preventShadowTreeCommitExhaustion() override { + auto value = values_["preventShadowTreeCommitExhaustion"]; if (!value.isNull()) { return value.getBool(); } - return ReactNativeFeatureFlagsDefaults::preventShadowTreeCommitExhaustionWithLocking(); + return ReactNativeFeatureFlagsDefaults::preventShadowTreeCommitExhaustion(); } bool traceTurboModulePromiseRejectionsOnAndroid() override { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h index a9e9a58c800..c45e55ce07a 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<16c5fdf431579bbfd454a28c06f28c41>> + * @generated SignedSource<> */ /** @@ -27,7 +27,7 @@ class ReactNativeFeatureFlagsOverridesOSSExperimental : public ReactNativeFeatur public: ReactNativeFeatureFlagsOverridesOSSExperimental() = default; - bool preventShadowTreeCommitExhaustionWithLocking() override { + bool preventShadowTreeCommitExhaustion() override { return true; } }; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index ac2506e700f..3df0f3be4a1 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<815769cc8d08e19b2598dd1862ed5060>> */ /** @@ -72,7 +72,7 @@ class ReactNativeFeatureFlagsProvider { virtual bool fuseboxNetworkInspectionEnabled() = 0; virtual bool hideOffscreenVirtualViewsOnIOS() = 0; virtual double preparedTextCacheSize() = 0; - virtual bool preventShadowTreeCommitExhaustionWithLocking() = 0; + virtual bool preventShadowTreeCommitExhaustion() = 0; virtual bool traceTurboModulePromiseRejectionsOnAndroid() = 0; virtual bool updateRuntimeShadowNodeReferencesOnCommit() = 0; virtual bool useAlwaysAvailableJSErrorHandling() = 0; diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index f05433332df..cda934866a5 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<474a64af739969acebb4bb9bb1005168>> */ /** @@ -279,9 +279,9 @@ double NativeReactNativeFeatureFlags::preparedTextCacheSize( return ReactNativeFeatureFlags::preparedTextCacheSize(); } -bool NativeReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking( +bool NativeReactNativeFeatureFlags::preventShadowTreeCommitExhaustion( jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking(); + return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion(); } bool NativeReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid( diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index eb4e64ad071..5696d5a7c7f 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<03ab35c55476b69046e67235b66533a0>> + * @generated SignedSource<> */ /** @@ -130,7 +130,7 @@ class NativeReactNativeFeatureFlags double preparedTextCacheSize(jsi::Runtime& runtime); - bool preventShadowTreeCommitExhaustionWithLocking(jsi::Runtime& runtime); + bool preventShadowTreeCommitExhaustion(jsi::Runtime& runtime); bool traceTurboModulePromiseRejectionsOnAndroid(jsi::Runtime& runtime); diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index c803f80e027..483a1915fd6 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -22,12 +22,12 @@ namespace facebook::react { -using CommitStatus = ShadowTree::CommitStatus; -using CommitMode = ShadowTree::CommitMode; - namespace { const int MAX_COMMIT_ATTEMPTS_BEFORE_LOCKING = 3; -} +} // namespace + +using CommitStatus = ShadowTree::CommitStatus; +using CommitMode = ShadowTree::CommitMode; /* * Generates (possibly) a new tree where all nodes with non-obsolete `State` @@ -214,7 +214,8 @@ void ShadowTree::setCommitMode(CommitMode commitMode) const { auto revision = ShadowTreeRevision{}; { - std::unique_lock lock(commitMutex_); + ShadowTree::UniqueLock lock = uniqueCommitLock(); + if (commitMode_ == commitMode) { return; } @@ -231,7 +232,7 @@ void ShadowTree::setCommitMode(CommitMode commitMode) const { } CommitMode ShadowTree::getCommitMode() const { - std::shared_lock lock(commitMutex_); + SharedLock lock = sharedCommitLock(); return commitMode_; } @@ -245,7 +246,7 @@ CommitStatus ShadowTree::commit( const CommitOptions& commitOptions) const { [[maybe_unused]] int attempts = 0; - if (ReactNativeFeatureFlags::preventShadowTreeCommitExhaustionWithLocking()) { + if (ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion()) { while (attempts < MAX_COMMIT_ATTEMPTS_BEFORE_LOCKING) { auto status = tryCommit(transaction, commitOptions); if (status != CommitStatus::Failed) { @@ -255,8 +256,8 @@ CommitStatus ShadowTree::commit( } { - std::unique_lock lock(commitMutex_); - return tryCommit(transaction, commitOptions, true); + std::unique_lock lock(commitMutexRecursive_); + return tryCommit(transaction, commitOptions); } } else { while (true) { @@ -276,8 +277,7 @@ CommitStatus ShadowTree::commit( CommitStatus ShadowTree::tryCommit( const ShadowTreeCommitTransaction& transaction, - const CommitOptions& commitOptions, - bool hasLocked) const { + const CommitOptions& commitOptions) const { TraceSection s("ShadowTree::commit"); auto telemetry = TransactionTelemetry{}; @@ -289,10 +289,7 @@ CommitStatus ShadowTree::tryCommit( { // Reading `currentRevision_` in shared manner. - std::shared_lock lock(commitMutex_, std::defer_lock); - if (!hasLocked) { - lock.lock(); - } + SharedLock lock = sharedCommitLock(); commitMode = commitMode_; oldRevision = currentRevision_; } @@ -333,10 +330,7 @@ CommitStatus ShadowTree::tryCommit( { // Updating `currentRevision_` in unique manner if it hasn't changed. - std::unique_lock lock(commitMutex_, std::defer_lock); - if (!hasLocked) { - lock.lock(); - } + UniqueLock lock = uniqueCommitLock(); if (currentRevision_.number != oldRevision.number) { return CommitStatus::Failed; @@ -375,7 +369,7 @@ CommitStatus ShadowTree::tryCommit( } ShadowTreeRevision ShadowTree::getCurrentRevision() const { - std::shared_lock lock(commitMutex_); + SharedLock lock = sharedCommitLock(); return currentRevision_; } @@ -423,4 +417,20 @@ void ShadowTree::notifyDelegatesOfUpdates() const { delegate_.shadowTreeDidFinishTransaction(mountingCoordinator_, true); } +inline ShadowTree::UniqueLock ShadowTree::uniqueCommitLock() const { + if (ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion()) { + return std::unique_lock{commitMutexRecursive_}; + } else { + return std::unique_lock{commitMutex_}; + } +} + +inline ShadowTree::SharedLock ShadowTree::sharedCommitLock() const { + if (ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion()) { + return std::unique_lock{commitMutexRecursive_}; + } else { + return std::shared_lock{commitMutex_}; + } +} + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h index 6824ae9389c..33e10e102a8 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h @@ -8,6 +8,8 @@ #pragma once #include +#include +#include #include #include @@ -111,8 +113,7 @@ class ShadowTree final { */ CommitStatus tryCommit( const ShadowTreeCommitTransaction& transaction, - const CommitOptions& commitOptions, - bool hasLocked = false) const; + const CommitOptions& commitOptions) const; /* * Calls `tryCommit` in a loop until it finishes successfully. @@ -151,10 +152,21 @@ class ShadowTree final { const SurfaceId surfaceId_; const ShadowTreeDelegate& delegate_; mutable std::shared_mutex commitMutex_; + mutable std::recursive_mutex commitMutexRecursive_; mutable CommitMode commitMode_{ CommitMode::Normal}; // Protected by `commitMutex_`. mutable ShadowTreeRevision currentRevision_; // Protected by `commitMutex_`. std::shared_ptr mountingCoordinator_; + + using UniqueLock = std::variant< + std::unique_lock, + std::unique_lock>; + using SharedLock = std::variant< + std::shared_lock, + std::unique_lock>; + + inline UniqueLock uniqueCommitLock() const; + inline SharedLock sharedCommitLock() const; }; } // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index def532446ec..7bb81fa3bf0 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -543,10 +543,10 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, - preventShadowTreeCommitExhaustionWithLocking: { + preventShadowTreeCommitExhaustion: { defaultValue: false, metadata: { - dateAdded: '2025-07-14', + dateAdded: '2025-07-23', description: 'Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again.', expectedReleaseValue: true, diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index 5bd2bea3215..ee5043e87bc 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<595a51e39658c12aab12032f7b928615>> + * @generated SignedSource<<999a8d329cdab258ac64c03b24f1a516>> * @flow strict * @noformat */ @@ -98,7 +98,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{ fuseboxNetworkInspectionEnabled: Getter, hideOffscreenVirtualViewsOnIOS: Getter, preparedTextCacheSize: Getter, - preventShadowTreeCommitExhaustionWithLocking: Getter, + preventShadowTreeCommitExhaustion: Getter, traceTurboModulePromiseRejectionsOnAndroid: Getter, updateRuntimeShadowNodeReferencesOnCommit: Getter, useAlwaysAvailableJSErrorHandling: Getter, @@ -387,7 +387,7 @@ export const preparedTextCacheSize: Getter = createNativeFlagGetter('pre /** * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again. */ -export const preventShadowTreeCommitExhaustionWithLocking: Getter = createNativeFlagGetter('preventShadowTreeCommitExhaustionWithLocking', false); +export const preventShadowTreeCommitExhaustion: Getter = createNativeFlagGetter('preventShadowTreeCommitExhaustion', false); /** * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause. */ diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index 600adf6f8d4..e64f0920b3e 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<9d6574da819c190bed0458559c66a089>> + * @generated SignedSource<<1b84b6e04c214f6c2798010372937990>> * @flow strict * @noformat */ @@ -72,7 +72,7 @@ export interface Spec extends TurboModule { +fuseboxNetworkInspectionEnabled?: () => boolean; +hideOffscreenVirtualViewsOnIOS?: () => boolean; +preparedTextCacheSize?: () => number; - +preventShadowTreeCommitExhaustionWithLocking?: () => boolean; + +preventShadowTreeCommitExhaustion?: () => boolean; +traceTurboModulePromiseRejectionsOnAndroid?: () => boolean; +updateRuntimeShadowNodeReferencesOnCommit?: () => boolean; +useAlwaysAvailableJSErrorHandling?: () => boolean; From 2e52c1aab0c8671f6fd0acf6dfcc262fdb7fd2c0 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Thu, 17 Jul 2025 04:05:47 -0700 Subject: [PATCH 044/312] Make accessors inside HeadlessJsTaskService open again (#52660) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52660 The documentation for those methods mention that users should override them to provide their own implementation. However those vals are not `open` so users cannot really override them. This fixes it. See more context on https://github.com/facebook/react-native/pull/48800#issuecomment-3082665024 So this was practically a breaking change, that I'm attempting to mitigate. Changelog: [Android] [Fixed] - Make accessors inside HeadlessJsTaskService open again Reviewed By: cipolleschi Differential Revision: D78479162 fbshipit-source-id: eefc7332e2004198cd6bd64b60a66215f137ad4a --- packages/react-native/ReactAndroid/api/ReactAndroid.api | 4 ++-- .../src/main/java/com/facebook/react/HeadlessJsTaskService.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index fc5b2b28b8a..3a47b5a5303 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -31,8 +31,8 @@ public abstract class com/facebook/react/HeadlessJsTaskService : android/app/Ser public fun ()V public static final fun acquireWakeLockNow (Landroid/content/Context;)V protected final fun getReactContext ()Lcom/facebook/react/bridge/ReactContext; - protected final fun getReactHost ()Lcom/facebook/react/ReactHost; - protected final fun getReactNativeHost ()Lcom/facebook/react/ReactNativeHost; + protected fun getReactHost ()Lcom/facebook/react/ReactHost; + protected fun getReactNativeHost ()Lcom/facebook/react/ReactNativeHost; protected fun getTaskConfig (Landroid/content/Intent;)Lcom/facebook/react/jstasks/HeadlessJsTaskConfig; public fun onBind (Landroid/content/Intent;)Landroid/os/IBinder; public fun onDestroy ()V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt index e974a935798..09c33f45810 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt @@ -113,7 +113,7 @@ public abstract class HeadlessJsTaskService : Service(), HeadlessJsTaskEventList * somewhere. */ @Suppress("DEPRECATION") - protected val reactNativeHost: ReactNativeHost + protected open val reactNativeHost: ReactNativeHost get() = (application as ReactApplication).reactNativeHost /** @@ -121,7 +121,7 @@ public abstract class HeadlessJsTaskService : Service(), HeadlessJsTaskEventList * [ReactApplication] and calls [ReactApplication.reactHost]. This method assumes it is called in * new architecture and returns null if not. */ - protected val reactHost: ReactHost? + protected open val reactHost: ReactHost? get() = (application as ReactApplication).reactHost protected val reactContext: ReactContext? From b58e5facbde2f34a1c6c1245dc9a75f5271b0492 Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Mon, 28 Jul 2025 14:46:36 +0100 Subject: [PATCH 045/312] fix: View component does not have a displayName (#52688) (#52880) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Hello, I work on [Radon IDE](ide.swmansion.com) I encountered an issue while adding support for react native 81, this PR solves it: In https://github.com/facebook/react-native/issues/51023 EvanBacon removed `displayName` filed from `View` component adding the following comment: >Remove displayName in favor of component name. I'm not 100% sure this is a full fallback but it is valid according to react/display-name eslint rule—https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md Unfortunately the Fabric renderer uses the `displayName` property to generate the name of the component for the inspector functionality and in absence of it generates a name that might be confusing to the end user: Screenshot 2025-07-17 at 21 27 37 Problem is not specific to Radon and happens in chrome devtools as well: Screenshot 2025-07-17 at 22 16 52 This PR brings back the `displayName` property to fix that. [INTERNAL] [FIXED] - Bring back the displayName property to the View component Pull Request resolved: https://github.com/facebook/react-native/pull/52688 Test Plan: - Run the application - open chrome devtools and navigate to "components" tab - before changes the View components would show up as `View_withRef` after they are named `View` Rollback Plan: Reviewed By: lunaleaps, cortinico Differential Revision: D78512254 Pulled By: alanleedev fbshipit-source-id: 46e4a224b09fe3fb938c055a675f687c86d7ddcb Co-authored-by: filip131311 <159789821+filip131311@users.noreply.github.com> --- packages/react-native/Libraries/Components/View/View.js | 6 +++++- packages/react-native/ReactNativeApi.d.ts | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/react-native/Libraries/Components/View/View.js b/packages/react-native/Libraries/Components/View/View.js index a7177fccf15..94ffb6fea6d 100644 --- a/packages/react-native/Libraries/Components/View/View.js +++ b/packages/react-native/Libraries/Components/View/View.js @@ -23,7 +23,7 @@ import {use} from 'react'; * * @see https://reactnative.dev/docs/view */ -export default component View( +component View( ref?: React.RefSetter>, ...props: ViewProps ) { @@ -213,3 +213,7 @@ export default component View( } return actualView; } + +View.displayName = 'View'; + +export default View; diff --git a/packages/react-native/ReactNativeApi.d.ts b/packages/react-native/ReactNativeApi.d.ts index c02c6ddd74f..0ac0d5fe674 100644 --- a/packages/react-native/ReactNativeApi.d.ts +++ b/packages/react-native/ReactNativeApi.d.ts @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<0cdc59a5eb40a092a692cb81e76fe251>> * * This file was generated by scripts/build-types/index.js. */ @@ -559,6 +559,7 @@ declare const Vibration_default: { cancel: () => void vibrate: (pattern?: Array | number, repeat?: boolean) => void } +declare const View: typeof View_default declare const ViewNativeComponent_default: HostComponent declare const VirtualizedList: typeof VirtualizedListComponent_default declare const VirtualizedListComponent_default: VirtualizedListType @@ -5622,7 +5623,8 @@ declare type ValueXYListenerCallback = (value: { y: number }) => unknown declare type Vibration = typeof Vibration -declare function View( +declare type View = typeof View +declare function View_default( props: ViewProps & { ref?: React.Ref> }, @@ -6166,7 +6168,7 @@ export { UIManager, // 8d2c8281 UTFSequence, // baacd11b Vibration, // 315e131d - View, // 75d9e33b + View, // 39dd4de4 ViewProps, // 0ab8ceda ViewPropsAndroid, // f3d007c3 ViewPropsIOS, // 58ee19bf From 67f507a53f9b084345d74e7f2407cf494ad673f6 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 28 Jul 2025 07:11:12 -0700 Subject: [PATCH 046/312] Also test node 20.19.4 in the test_js matrix (#52878) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52878 Now that Metro is bumped to also support node >= 20.19.4 we should be able to run test_js on `main` against 20.19.4 Changelog: [Internal] [Changed] - Reviewed By: robhogan, motiz88 Differential Revision: D79087608 fbshipit-source-id: 2161a893ab2fd88dc7eb1b35aa385704962018e8 --- .github/workflows/test-all.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index da115d6030e..e68f9a81518 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -593,8 +593,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: ["24", "22"] - # node-version: ["24", "22", "20.19.4"] + node-version: ["24", "22", "20.19.4"] steps: - name: Checkout uses: actions/checkout@v4 From 5976618bf9f6503103280e978d9579352ab07b52 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Tue, 29 Jul 2025 10:14:18 +0100 Subject: [PATCH 047/312] Properly setup headers for FBReactNativeSpec in prebuilds (#52783) (#52897) Summary: bypass-github-export-checks Pull Request resolved: https://github.com/facebook/react-native/pull/52783 This change reverts D78158734 which was a patch to make the dynamic frameworks work properly because we were not exporting the FBReactNativeSpec headers in prebuilds correctly. This change fixes this, by exposritng those headers correctly. [Internal] - bypass-github-export-checks Reviewed By: cortinico Differential Revision: D78803425 fbshipit-source-id: 5613ed0c790455ea86668eeb436f7b78a0c80918 --- .github/workflows/prebuild-ios-core.yml | 8 ++++---- .../React-RCTPushNotification.podspec | 3 +-- .../react-native/scripts/ios-prebuild/setup.js | 6 ++++++ .../scripts/ios-prebuild/xcframework.js | 14 +++++++++++++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/.github/workflows/prebuild-ios-core.yml b/.github/workflows/prebuild-ios-core.yml index 4921aba754a..b2d05c5e88f 100644 --- a/.github/workflows/prebuild-ios-core.yml +++ b/.github/workflows/prebuild-ios-core.yml @@ -23,7 +23,7 @@ jobs: id: restore-ios-slice uses: actions/cache/restore@v4 with: - key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }} + key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }} path: packages/react-native/ - name: Setup node.js if: steps.restore-ios-slice.outputs.cache-hit != 'true' @@ -117,7 +117,7 @@ jobs: uses: actions/cache/save@v4 if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode with: - key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }} + key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }} path: | packages/react-native/.build/output/spm/${{ matrix.flavor }}/Build/Products packages/react-native/.build/headers @@ -140,7 +140,7 @@ jobs: uses: actions/cache/restore@v4 with: path: packages/react-native/.build/output/xcframeworks - key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }} + key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }} - name: Setup node.js if: steps.restore-ios-xcframework.outputs.cache-hit != 'true' uses: ./.github/actions/setup-node @@ -209,4 +209,4 @@ jobs: path: | packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.xcframework.tar.gz packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.framework.dSYM.tar.gz - key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }} + key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }} diff --git a/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec b/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec index 9e18e93b55f..ffdf21320f6 100644 --- a/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +++ b/packages/react-native/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec @@ -18,7 +18,6 @@ end header_search_paths = [ "\"${PODS_ROOT}/Headers/Public/ReactCodegen/react/renderer/components\"", - "\"${PODS_ROOT}/Headers/Public/React-RCTFBReactNativeSpec/FBReactNativeSpec\"", ] Pod::Spec.new do |s| @@ -46,7 +45,7 @@ Pod::Spec.new do |s| s.dependency "React-Core/RCTPushNotificationHeaders" s.dependency "React-jsi" - add_dependency(s, "React-RCTFBReactNativeSpec", :additional_framework_paths => ['FBReactNativeSpec']) + add_dependency(s, "React-RCTFBReactNativeSpec") add_dependency(s, "ReactCommon", :subspec => "turbomodule/core", :additional_framework_paths => ["react/nativemodule/core"]) add_dependency(s, "React-NativeModulesApple") diff --git a/packages/react-native/scripts/ios-prebuild/setup.js b/packages/react-native/scripts/ios-prebuild/setup.js index bd26c3634f4..65e34bb6e48 100644 --- a/packages/react-native/scripts/ios-prebuild/setup.js +++ b/packages/react-native/scripts/ios-prebuild/setup.js @@ -10,6 +10,9 @@ /*:: import type {BuildFlavor} from './types'; */ +const { + generateFBReactNativeSpecIOS, +} = require('../codegen/generate-artifacts-executor/generateFBReactNativeSpecIOS'); const {prepareHermesArtifactsAsync} = require('./hermes'); const { prepareReactNativeDependenciesArtifactsAsync, @@ -25,6 +28,9 @@ async function setup( currentVersion /*: string */, buildType /*: BuildFlavor */, ) { + // First of all, let's run codegen to make sure that we have the FBreactNativeSpec files in the prebuilds + generateFBReactNativeSpecIOS('.'); + const prebuildLog = createLogger('prebuild'); createFolderIfNotExists(buildFolder); diff --git a/packages/react-native/scripts/ios-prebuild/xcframework.js b/packages/react-native/scripts/ios-prebuild/xcframework.js index b57075acdf4..11a6c9bee21 100644 --- a/packages/react-native/scripts/ios-prebuild/xcframework.js +++ b/packages/react-native/scripts/ios-prebuild/xcframework.js @@ -10,6 +10,9 @@ /*:: import type {BuildFlavor} from './types'; */ +const { + generateFBReactNativeSpecIOS, +} = require('../codegen/generate-artifacts-executor/generateFBReactNativeSpecIOS'); const headers = require('./headers'); const utils = require('./utils'); const childProcess = require('child_process'); @@ -49,6 +52,9 @@ function buildXCFrameworks( buildType /*: BuildFlavor */, identity /*: ?string */, ) { + // Let's run codegen for FBReactNativeSpec otherwise some headers will be missing + generateFBReactNativeSpecIOS('.'); + const outputPath = path.join( buildFolder, 'output', @@ -106,10 +112,16 @@ function buildXCFrameworks( if (headerFiles.length > 0) { // Get podspec name without directory and extension and make sure it is a valid identifier // by replacing any non-alphanumeric characters with an underscore. - const podSpecName = path + let podSpecName = path .basename(podspec, '.podspec') .replace(/[^a-zA-Z0-9_]/g, '_'); + // Fix for FBReactNativeSpec. RN expect FBReactNative spec headers + // To be in a folder named FBReactNativeSpec. + if (podSpecName === 'React_RCTFBReactNativeSpec') { + podSpecName = 'FBReactNativeSpec'; + } + // Create a folder for the podspec in the output headers path const podSpecFolder = path.join(outputHeadersPath, podSpecName); createFolderIfNotExists(podSpecFolder); From bd94a13c5db739d8d6bfdd6fe210b750a9491446 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Thu, 24 Jul 2025 05:23:38 -0700 Subject: [PATCH 048/312] RNGP - Fix a race condition with codegen libraries missing sources (#52803) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52803 I've just realized that our build suffer from a race condition. Specifically libraries codegen needs to be executed before the app starts the evaluating CMake files. Otherwise this could lead to a lot of missing files or folders. Changelog: [Android] [Fixed] - **rngp:** Fix a race condition with codegen libraries missing sources Reviewed By: huntie Differential Revision: D78886347 fbshipit-source-id: f59c201d2eab651bc4a08cf5a795acd379d18186 --- .../com/facebook/react/ReactRootProjectPlugin.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactRootProjectPlugin.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactRootProjectPlugin.kt index 5f232cd0e58..f8aee12b822 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactRootProjectPlugin.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactRootProjectPlugin.kt @@ -26,5 +26,21 @@ class ReactRootProjectPlugin : Plugin { it.evaluationDependsOn(":app") } } + // We need to make sure that `:app:preBuild` task depends on all other subprojects' preBuild + // tasks. This is necessary in order to have all the codegen generated code before the CMake + // configuration build kicks in. + project.gradle.projectsEvaluated { + val appProject = project.rootProject.subprojects.find { it.name == "app" } + val appPreBuild = appProject?.tasks?.findByName("preBuild") + if (appPreBuild != null) { + // Find all other subprojects' preBuild tasks + val otherPreBuildTasks = + project.rootProject.subprojects + .filter { it != appProject } + .mapNotNull { it.tasks.findByName("preBuild") } + // Make :app:preBuild depend on all others + appPreBuild.dependsOn(otherPreBuildTasks) + } + } } } From 0e6009eecfeac71121a045f0f7e6bae94ffc11b0 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 29 Jul 2025 15:42:59 +0000 Subject: [PATCH 049/312] Release 0.81.0-rc.3 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index e0e4c453695..81cbb8648f0 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.2", - "@react-native/metro-config": "0.81.0-rc.2", + "@react-native/metro-babel-transformer": "0.81.0-rc.3", + "@react-native/metro-config": "0.81.0-rc.3", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 9bf621c14da..df7a6d818d9 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 20c630bd39e..b8bd8eae631 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.2" + "@react-native/codegen": "0.81.0-rc.3" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 91009bc6e49..61eab96baf4 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.2", + "@react-native/dev-middleware": "0.81.0-rc.3", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 1e16761e6e8..5254df85236 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 45fd700129d..f603568ae02 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 0f56d212f85..62b6a2a698c 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index f053c351faa..4c102fab8fe 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.2", + "@react-native/debugger-frontend": "0.81.0-rc.3", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index f43a525815b..dedf8ed1125 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.2", + "@react-native/eslint-plugin": "0.81.0-rc.3", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 674ba25e439..3aaf906a1aa 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 32c666dc5e6..bed0e13a97a 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.2", + "@react-native/codegen": "0.81.0-rc.3", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 58e8a317a4b..9b0d1ac78c2 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 533c0e0fdc9..91e08621fb2 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.2", + "@react-native/js-polyfills": "0.81.0-rc.3", + "@react-native/metro-babel-transformer": "0.81.0-rc.3", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index 23f3635812b..ac9ac4107d0 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 933c9c9bbba..2ca8e4453d5 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index d3545162841..c9a48dd34c1 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index cf9138ff299..99db9131012 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.2", + "@react-native/babel-plugin-codegen": "0.81.0-rc.3", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 1706e6b6d92..70ea6679e60 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.2", + "@react-native/babel-preset": "0.81.0-rc.3", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 87fa84b8dfb..e3b11f4daf3 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 9be3b433d0d..01c088de7f9 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.2" + "@react-native/codegen": "0.81.0-rc.3" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 4e50d0505fa..d6d27294668 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.2" + "@react-native/codegen": "0.81.0-rc.3" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index cbb37586f17..54a1f7ead20 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.2", - "react-native": "0.81.0-rc.2" + "@react-native/babel-preset": "0.81.0-rc.3", + "react-native": "0.81.0-rc.3" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 88f1a2aa15b..4f32b8505fa 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -18,5 +18,5 @@ export const version: $ReadOnly<{ major: 0, minor: 81, patch: 0, - prerelease: 'rc.2', + prerelease: 'rc.3', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 72daddca148..e69d85f3336 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.2", + RCTVersionPrerelease: @"rc.3", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 3008d258ad0..072b1bbf009 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.2 +VERSION_NAME=0.81.0-rc.3 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index a261452ab23..b1ebe2e5c72 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -15,6 +15,6 @@ public object ReactNativeVersion { "major" to 0, "minor" to 81, "patch" to 0, - "prerelease" to "rc.2" + "prerelease" to "rc.3" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 4b1df51f0f7..36c96a9f75e 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -22,7 +22,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = "rc.2"; + std::string_view Prerelease = "rc.3"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 98cdc69de4c..15810fa3127 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.2", - "@react-native/codegen": "0.81.0-rc.2", - "@react-native/community-cli-plugin": "0.81.0-rc.2", - "@react-native/gradle-plugin": "0.81.0-rc.2", - "@react-native/js-polyfills": "0.81.0-rc.2", - "@react-native/normalize-colors": "0.81.0-rc.2", - "@react-native/virtualized-lists": "0.81.0-rc.2", + "@react-native/assets-registry": "0.81.0-rc.3", + "@react-native/codegen": "0.81.0-rc.3", + "@react-native/community-cli-plugin": "0.81.0-rc.3", + "@react-native/gradle-plugin": "0.81.0-rc.3", + "@react-native/js-polyfills": "0.81.0-rc.3", + "@react-native/normalize-colors": "0.81.0-rc.3", + "@react-native/virtualized-lists": "0.81.0-rc.3", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 8b508843e88..bfe4b5e35dc 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.2\\" +version = \\"0.81.0-rc.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.2\\" +version = \\"0.81.0-rc.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -839,7 +839,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.2\\" +version = \\"0.81.0-rc.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -877,7 +877,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.2\\" +version = \\"0.81.0-rc.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 0e7ace08cda..dcd31ea6309 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.2", - "@react-native/popup-menu-android": "0.81.0-rc.2", + "@react-native/new-app-screen": "0.81.0-rc.3", + "@react-native/popup-menu-android": "0.81.0-rc.3", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 05531dec3b6..324588b6042 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index 971aebfbd72..0ae0aeb4f1a 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.2", + "version": "0.81.0-rc.3", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index d2e14fe4e5c..f2bf5487a9d 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.2" + "react-native": "0.81.0-rc.3" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.2", - "@react-native/core-cli-utils": "0.81.0-rc.2", - "@react-native/eslint-config": "0.81.0-rc.2", - "@react-native/metro-config": "0.81.0-rc.2", - "@react-native/typescript-config": "0.81.0-rc.2", + "@react-native/babel-preset": "0.81.0-rc.3", + "@react-native/core-cli-utils": "0.81.0-rc.3", + "@react-native/eslint-config": "0.81.0-rc.3", + "@react-native/metro-config": "0.81.0-rc.3", + "@react-native/typescript-config": "0.81.0-rc.3", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index c16d941bbe6..f7494494050 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.2" + "@react-native/codegen": "0.81.0-rc.3" }, "devDependencies": { "@babel/core": "^7.25.2", From 4bbc344ec8101b607063ce228c6074a4576e80b3 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 29 Jul 2025 17:25:32 +0000 Subject: [PATCH 050/312] [LOCAL] Bump Podfile.lock --- packages/rn-tester/Podfile.lock | 598 ++++++++++++++++---------------- 1 file changed, 299 insertions(+), 299 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 0b118bfe662..6d54a955221 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0-rc.2) + - FBLazyVector (0.81.0-rc.3) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.0-rc.2): - - hermes-engine/Pre-built (= 0.81.0-rc.2) - - hermes-engine/Pre-built (0.81.0-rc.2) + - hermes-engine (0.81.0-rc.3): + - hermes-engine/Pre-built (= 0.81.0-rc.3) + - hermes-engine/Pre-built (0.81.0-rc.3) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0-rc.2) - - RCTRequired (0.81.0-rc.2) - - RCTTypeSafety (0.81.0-rc.2): - - FBLazyVector (= 0.81.0-rc.2) - - RCTRequired (= 0.81.0-rc.2) - - React-Core (= 0.81.0-rc.2) - - React (0.81.0-rc.2): - - React-Core (= 0.81.0-rc.2) - - React-Core/DevSupport (= 0.81.0-rc.2) - - React-Core/RCTWebSocket (= 0.81.0-rc.2) - - React-RCTActionSheet (= 0.81.0-rc.2) - - React-RCTAnimation (= 0.81.0-rc.2) - - React-RCTBlob (= 0.81.0-rc.2) - - React-RCTImage (= 0.81.0-rc.2) - - React-RCTLinking (= 0.81.0-rc.2) - - React-RCTNetwork (= 0.81.0-rc.2) - - React-RCTSettings (= 0.81.0-rc.2) - - React-RCTText (= 0.81.0-rc.2) - - React-RCTVibration (= 0.81.0-rc.2) - - React-callinvoker (0.81.0-rc.2) - - React-Core (0.81.0-rc.2): + - RCTDeprecation (0.81.0-rc.3) + - RCTRequired (0.81.0-rc.3) + - RCTTypeSafety (0.81.0-rc.3): + - FBLazyVector (= 0.81.0-rc.3) + - RCTRequired (= 0.81.0-rc.3) + - React-Core (= 0.81.0-rc.3) + - React (0.81.0-rc.3): + - React-Core (= 0.81.0-rc.3) + - React-Core/DevSupport (= 0.81.0-rc.3) + - React-Core/RCTWebSocket (= 0.81.0-rc.3) + - React-RCTActionSheet (= 0.81.0-rc.3) + - React-RCTAnimation (= 0.81.0-rc.3) + - React-RCTBlob (= 0.81.0-rc.3) + - React-RCTImage (= 0.81.0-rc.3) + - React-RCTLinking (= 0.81.0-rc.3) + - React-RCTNetwork (= 0.81.0-rc.3) + - React-RCTSettings (= 0.81.0-rc.3) + - React-RCTText (= 0.81.0-rc.3) + - React-RCTVibration (= 0.81.0-rc.3) + - React-callinvoker (0.81.0-rc.3) + - React-Core (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.2) + - React-Core/Default (= 0.81.0-rc.3) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0-rc.2): + - React-Core/CoreModulesHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0-rc.2): + - React-Core/Default (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0-rc.2): + - React-Core/DevSupport (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.2) - - React-Core/RCTWebSocket (= 0.81.0-rc.2) + - React-Core/Default (= 0.81.0-rc.3) + - React-Core/RCTWebSocket (= 0.81.0-rc.3) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0-rc.2): + - React-Core/RCTActionSheetHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0-rc.2): + - React-Core/RCTAnimationHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0-rc.2): + - React-Core/RCTBlobHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0-rc.2): + - React-Core/RCTImageHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0-rc.2): + - React-Core/RCTLinkingHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0-rc.2): + - React-Core/RCTNetworkHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.0-rc.2): + - React-Core/RCTPushNotificationHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0-rc.2): + - React-Core/RCTSettingsHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0-rc.2): + - React-Core/RCTTextHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0-rc.2): + - React-Core/RCTVibrationHeaders (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0-rc.2): + - React-Core/RCTWebSocket (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.2) + - React-Core/Default (= 0.81.0-rc.3) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0-rc.2): + - React-CoreModules (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0-rc.2) - - React-Core/CoreModulesHeaders (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) + - RCTTypeSafety (= 0.81.0-rc.3) + - React-Core/CoreModulesHeaders (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0-rc.2) + - React-RCTImage (= 0.81.0-rc.3) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0-rc.2): + - React-cxxreact (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.2) - - React-debug (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) + - React-callinvoker (= 0.81.0-rc.3) + - React-debug (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0-rc.2) - - React-perflogger (= 0.81.0-rc.2) + - React-logger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.3) - React-runtimeexecutor - - React-timing (= 0.81.0-rc.2) + - React-timing (= 0.81.0-rc.3) - SocketRocket - - React-debug (0.81.0-rc.2) - - React-defaultsnativemodule (0.81.0-rc.2): + - React-debug (0.81.0-rc.3) + - React-defaultsnativemodule (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0-rc.2): + - React-domnativemodule (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0-rc.2): + - React-Fabric (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0-rc.2) - - React-Fabric/attributedstring (= 0.81.0-rc.2) - - React-Fabric/bridging (= 0.81.0-rc.2) - - React-Fabric/componentregistry (= 0.81.0-rc.2) - - React-Fabric/componentregistrynative (= 0.81.0-rc.2) - - React-Fabric/components (= 0.81.0-rc.2) - - React-Fabric/consistency (= 0.81.0-rc.2) - - React-Fabric/core (= 0.81.0-rc.2) - - React-Fabric/dom (= 0.81.0-rc.2) - - React-Fabric/imagemanager (= 0.81.0-rc.2) - - React-Fabric/leakchecker (= 0.81.0-rc.2) - - React-Fabric/mounting (= 0.81.0-rc.2) - - React-Fabric/observers (= 0.81.0-rc.2) - - React-Fabric/scheduler (= 0.81.0-rc.2) - - React-Fabric/telemetry (= 0.81.0-rc.2) - - React-Fabric/templateprocessor (= 0.81.0-rc.2) - - React-Fabric/uimanager (= 0.81.0-rc.2) + - React-Fabric/animations (= 0.81.0-rc.3) + - React-Fabric/attributedstring (= 0.81.0-rc.3) + - React-Fabric/bridging (= 0.81.0-rc.3) + - React-Fabric/componentregistry (= 0.81.0-rc.3) + - React-Fabric/componentregistrynative (= 0.81.0-rc.3) + - React-Fabric/components (= 0.81.0-rc.3) + - React-Fabric/consistency (= 0.81.0-rc.3) + - React-Fabric/core (= 0.81.0-rc.3) + - React-Fabric/dom (= 0.81.0-rc.3) + - React-Fabric/imagemanager (= 0.81.0-rc.3) + - React-Fabric/leakchecker (= 0.81.0-rc.3) + - React-Fabric/mounting (= 0.81.0-rc.3) + - React-Fabric/observers (= 0.81.0-rc.3) + - React-Fabric/scheduler (= 0.81.0-rc.3) + - React-Fabric/telemetry (= 0.81.0-rc.3) + - React-Fabric/templateprocessor (= 0.81.0-rc.3) + - React-Fabric/uimanager (= 0.81.0-rc.3) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0-rc.2): + - React-Fabric/animations (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0-rc.2): + - React-Fabric/attributedstring (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0-rc.2): + - React-Fabric/bridging (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0-rc.2): + - React-Fabric/componentregistry (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0-rc.2): + - React-Fabric/componentregistrynative (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0-rc.2): + - React-Fabric/components (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.2) - - React-Fabric/components/root (= 0.81.0-rc.2) - - React-Fabric/components/scrollview (= 0.81.0-rc.2) - - React-Fabric/components/view (= 0.81.0-rc.2) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.3) + - React-Fabric/components/root (= 0.81.0-rc.3) + - React-Fabric/components/scrollview (= 0.81.0-rc.3) + - React-Fabric/components/view (= 0.81.0-rc.3) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.2): + - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0-rc.2): + - React-Fabric/components/root (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0-rc.2): + - React-Fabric/components/scrollview (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0-rc.2): + - React-Fabric/components/view (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0-rc.2): + - React-Fabric/consistency (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0-rc.2): + - React-Fabric/core (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0-rc.2): + - React-Fabric/dom (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0-rc.2): + - React-Fabric/imagemanager (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0-rc.2): + - React-Fabric/leakchecker (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0-rc.2): + - React-Fabric/mounting (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0-rc.2): + - React-Fabric/observers (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0-rc.2) + - React-Fabric/observers/events (= 0.81.0-rc.3) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0-rc.2): + - React-Fabric/observers/events (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0-rc.2): + - React-Fabric/scheduler (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0-rc.2): + - React-Fabric/telemetry (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0-rc.2): + - React-Fabric/templateprocessor (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0-rc.2): + - React-Fabric/uimanager (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0-rc.2) + - React-Fabric/uimanager/consistency (= 0.81.0-rc.3) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0-rc.2): + - React-Fabric/uimanager/consistency (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0-rc.2): + - React-FabricComponents (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0-rc.2) - - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.2) + - React-FabricComponents/components (= 0.81.0-rc.3) + - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.3) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0-rc.2): + - React-FabricComponents/components (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1259,16 +1259,16 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.2) - - React-FabricComponents/components/iostextinput (= 0.81.0-rc.2) - - React-FabricComponents/components/modal (= 0.81.0-rc.2) - - React-FabricComponents/components/rncore (= 0.81.0-rc.2) - - React-FabricComponents/components/safeareaview (= 0.81.0-rc.2) - - React-FabricComponents/components/scrollview (= 0.81.0-rc.2) - - React-FabricComponents/components/text (= 0.81.0-rc.2) - - React-FabricComponents/components/textinput (= 0.81.0-rc.2) - - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.2) - - React-FabricComponents/components/virtualview (= 0.81.0-rc.2) + - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.3) + - React-FabricComponents/components/iostextinput (= 0.81.0-rc.3) + - React-FabricComponents/components/modal (= 0.81.0-rc.3) + - React-FabricComponents/components/rncore (= 0.81.0-rc.3) + - React-FabricComponents/components/safeareaview (= 0.81.0-rc.3) + - React-FabricComponents/components/scrollview (= 0.81.0-rc.3) + - React-FabricComponents/components/text (= 0.81.0-rc.3) + - React-FabricComponents/components/textinput (= 0.81.0-rc.3) + - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.3) + - React-FabricComponents/components/virtualview (= 0.81.0-rc.3) - React-featureflags - React-graphics - React-jsi @@ -1281,7 +1281,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0-rc.2): + - React-FabricComponents/components/inputaccessory (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1308,7 +1308,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0-rc.2): + - React-FabricComponents/components/iostextinput (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1335,7 +1335,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0-rc.2): + - React-FabricComponents/components/modal (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1362,7 +1362,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0-rc.2): + - React-FabricComponents/components/rncore (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1389,7 +1389,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0-rc.2): + - React-FabricComponents/components/safeareaview (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1416,7 +1416,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0-rc.2): + - React-FabricComponents/components/scrollview (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1443,7 +1443,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0-rc.2): + - React-FabricComponents/components/text (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1470,7 +1470,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0-rc.2): + - React-FabricComponents/components/textinput (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1497,7 +1497,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0-rc.2): + - React-FabricComponents/components/unimplementedview (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1524,7 +1524,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0-rc.2): + - React-FabricComponents/components/virtualview (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1551,7 +1551,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0-rc.2): + - React-FabricComponents/textlayoutmanager (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1578,7 +1578,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0-rc.2): + - React-FabricImage (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1587,21 +1587,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0-rc.2) - - RCTTypeSafety (= 0.81.0-rc.2) + - RCTRequired (= 0.81.0-rc.3) + - RCTTypeSafety (= 0.81.0-rc.3) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0-rc.2) + - React-jsiexecutor (= 0.81.0-rc.3) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0-rc.2): + - React-featureflags (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1610,7 +1610,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0-rc.2): + - React-featureflagsnativemodule (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1625,7 +1625,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0-rc.2): + - React-graphics (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0-rc.2): + - React-hermes (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1647,16 +1647,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.2) + - React-cxxreact (= 0.81.0-rc.3) - React-jsi - - React-jsiexecutor (= 0.81.0-rc.2) + - React-jsiexecutor (= 0.81.0-rc.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.3) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0-rc.2): + - React-idlecallbacksnativemodule (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1672,7 +1672,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0-rc.2): + - React-ImageManager (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1687,7 +1687,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0-rc.2): + - React-jserrorhandler (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1702,7 +1702,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0-rc.2): + - React-jsi (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1712,7 +1712,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0-rc.2): + - React-jsiexecutor (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1721,15 +1721,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) + - React-cxxreact (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.3) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0-rc.2): + - React-jsinspector (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1743,10 +1743,10 @@ PODS: - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.2) + - React-perflogger (= 0.81.0-rc.3) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0-rc.2): + - React-jsinspectorcdp (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1755,7 +1755,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0-rc.2): + - React-jsinspectornetwork (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1768,7 +1768,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0-rc.2): + - React-jsinspectortracing (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1779,7 +1779,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0-rc.2): + - React-jsitooling (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1787,16 +1787,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) + - React-cxxreact (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0-rc.2): + - React-jsitracing (0.81.0-rc.3): - React-jsi - - React-logger (0.81.0-rc.2): + - React-logger (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1805,7 +1805,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0-rc.2): + - React-Mapbuffer (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1815,7 +1815,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0-rc.2): + - React-microtasksnativemodule (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1829,7 +1829,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.0-rc.2): + - React-NativeModulesApple (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1849,8 +1849,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0-rc.2) - - React-perflogger (0.81.0-rc.2): + - React-oscompat (0.81.0-rc.3) + - React-perflogger (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1859,7 +1859,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0-rc.2): + - React-performancetimeline (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1872,9 +1872,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0-rc.2): - - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.2) - - React-RCTAnimation (0.81.0-rc.2): + - React-RCTActionSheet (0.81.0-rc.3): + - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.3) + - React-RCTAnimation (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1890,7 +1890,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0-rc.2): + - React-RCTAppDelegate (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1924,7 +1924,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0-rc.2): + - React-RCTBlob (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1943,7 +1943,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0-rc.2): + - React-RCTFabric (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1978,7 +1978,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0-rc.2): + - React-RCTFBReactNativeSpec (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -1992,10 +1992,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.2) + - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.3) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0-rc.2): + - React-RCTFBReactNativeSpec/components (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2018,7 +2018,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0-rc.2): + - React-RCTImage (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2034,14 +2034,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0-rc.2): - - React-Core/RCTLinkingHeaders (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) + - React-RCTLinking (0.81.0-rc.3): + - React-Core/RCTLinkingHeaders (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0-rc.2) - - React-RCTNetwork (0.81.0-rc.2): + - ReactCommon/turbomodule/core (= 0.81.0-rc.3) + - React-RCTNetwork (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2059,14 +2059,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.0-rc.2): + - React-RCTPushNotification (0.81.0-rc.3): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.0-rc.2): + - React-RCTRuntime (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2086,7 +2086,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0-rc.2): + - React-RCTSettings (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2101,7 +2101,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.0-rc.2): + - React-RCTTest (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2109,15 +2109,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.0-rc.2) - - React-CoreModules (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) - - ReactCommon/turbomodule/core (= 0.81.0-rc.2) + - React-Core (= 0.81.0-rc.3) + - React-CoreModules (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) + - ReactCommon/turbomodule/core (= 0.81.0-rc.3) - SocketRocket - - React-RCTText (0.81.0-rc.2): - - React-Core/RCTTextHeaders (= 0.81.0-rc.2) + - React-RCTText (0.81.0-rc.3): + - React-Core/RCTTextHeaders (= 0.81.0-rc.3) - Yoga - - React-RCTVibration (0.81.0-rc.2): + - React-RCTVibration (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2131,11 +2131,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0-rc.2) - - React-renderercss (0.81.0-rc.2): + - React-rendererconsistency (0.81.0-rc.3) + - React-renderercss (0.81.0-rc.3): - React-debug - React-utils - - React-rendererdebug (0.81.0-rc.2): + - React-rendererdebug (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2145,7 +2145,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0-rc.2): + - React-RuntimeApple (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0-rc.2): + - React-RuntimeCore (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2196,7 +2196,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0-rc.2): + - React-runtimeexecutor (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2206,10 +2206,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.3) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0-rc.2): + - React-RuntimeHermes (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2230,7 +2230,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0-rc.2): + - React-runtimescheduler (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2252,8 +2252,8 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0-rc.2) - - React-utils (0.81.0-rc.2): + - React-timing (0.81.0-rc.3) + - React-utils (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2263,11 +2263,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0-rc.2) + - React-jsi (= 0.81.0-rc.3) - SocketRocket - - ReactAppDependencyProvider (0.81.0-rc.2): + - ReactAppDependencyProvider (0.81.0-rc.3): - ReactCodegen - - ReactCodegen (0.81.0-rc.2): + - ReactCodegen (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2293,7 +2293,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0-rc.2): + - ReactCommon (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2301,9 +2301,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0-rc.2) + - ReactCommon/turbomodule (= 0.81.0-rc.3) - SocketRocket - - ReactCommon-Samples (0.81.0-rc.2): + - ReactCommon-Samples (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2319,7 +2319,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.0-rc.2): + - ReactCommon/turbomodule (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2328,15 +2328,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.2) - - React-cxxreact (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) - - React-logger (= 0.81.0-rc.2) - - React-perflogger (= 0.81.0-rc.2) - - ReactCommon/turbomodule/bridging (= 0.81.0-rc.2) - - ReactCommon/turbomodule/core (= 0.81.0-rc.2) + - React-callinvoker (= 0.81.0-rc.3) + - React-cxxreact (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) + - React-logger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.3) + - ReactCommon/turbomodule/bridging (= 0.81.0-rc.3) + - ReactCommon/turbomodule/core (= 0.81.0-rc.3) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0-rc.2): + - ReactCommon/turbomodule/bridging (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2345,13 +2345,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.2) - - React-cxxreact (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) - - React-logger (= 0.81.0-rc.2) - - React-perflogger (= 0.81.0-rc.2) + - React-callinvoker (= 0.81.0-rc.3) + - React-cxxreact (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) + - React-logger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.3) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0-rc.2): + - ReactCommon/turbomodule/core (0.81.0-rc.3): - boost - DoubleConversion - fast_float @@ -2360,14 +2360,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.2) - - React-cxxreact (= 0.81.0-rc.2) - - React-debug (= 0.81.0-rc.2) - - React-featureflags (= 0.81.0-rc.2) - - React-jsi (= 0.81.0-rc.2) - - React-logger (= 0.81.0-rc.2) - - React-perflogger (= 0.81.0-rc.2) - - React-utils (= 0.81.0-rc.2) + - React-callinvoker (= 0.81.0-rc.3) + - React-cxxreact (= 0.81.0-rc.3) + - React-debug (= 0.81.0-rc.3) + - React-featureflags (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.3) + - React-logger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.3) + - React-utils (= 0.81.0-rc.3) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2651,83 +2651,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 9915acaf61ca57c052d228802204e8e0456efe83 + FBLazyVector: dff72c497c0f6de7c979d9d4f87dbba5663a8c92 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 3be3e04cd57dac8336622aa8e19f9b6c1ad97fc0 + hermes-engine: cc20804c5f764b4c785deafa291b6fa77bbf71fd MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: bdc0c5e21b4efba93a67a6d5ec29fec4cabb6b1f - RCTRequired: cd7aa8fe1456d77523aee320dfeae3f179f3032a - RCTTypeSafety: 3ff37b465918f790b2ca97e21f2070e64a001410 - React: 94a9dcb20baa4d7600f1456927055e42cb4e3707 - React-callinvoker: 59811ef398e469c00f275035e3623172b6b747c9 - React-Core: 5aa5e081cca93ed93266bba058b4e46b635960eb - React-CoreModules: ed955e0cd9476f8ab4f690d3f246a6bc634781b8 - React-cxxreact: c4c36b1c8972276d6ac100dbf6baa46fc4f572de - React-debug: ae84d738d2335d1a39a91f7bd2c25cf2456dc7fe - React-defaultsnativemodule: 6540d5b60e1530ef74a96f43ee36a14e2ec23bbe - React-domnativemodule: fe4980341cad58d3713a7282cac7d95a4291ef21 - React-Fabric: 24208bb40803dd04412fea1d25bfd77db5b3a87f - React-FabricComponents: 6ef500e63b3577613754f0f7e95022549e390657 - React-FabricImage: 36d6d127c9ce256ec48266bd575639bbcaf2c2f5 - React-featureflags: d85c49febedd5f0597bcb51796d57833aef30e39 - React-featureflagsnativemodule: 9653f6c1c4419269e76990074184fb126406517c - React-graphics: 39c57564906edece6be65b678e90dba526bd56c4 - React-hermes: 881d3522fea05574632731691f8f667170a5d1b3 - React-idlecallbacksnativemodule: 0edda9ee6652809b2554e6a46984b9b9c3bf92d8 - React-ImageManager: 0f5ace4a664b8afe299b27d5b5d03a48b33323ee - React-jserrorhandler: 683f3f42346ae10a469dbd399b37fa27c01fa01a - React-jsi: 67435b0e122eb153b689c5cc962fc61e53d42125 - React-jsiexecutor: 761fbbcf806726f70dfba1af60987cf9af85bac0 - React-jsinspector: 3dca378f5081a2184ec1b5655be261e3457e77e3 - React-jsinspectorcdp: 0f8e78d21fb0595005e63cfd49504782d41c2d5c - React-jsinspectornetwork: faa3ed665491e3d37b5041aab4916cf33badf786 - React-jsinspectortracing: 26eccd941638ca1e20db56bd18a2ab8e21cdae00 - React-jsitooling: 18506a86bfa0280b89cb56fd995eb041ffcb7795 - React-jsitracing: c9f91e8af4a912688840b2e36f2087334ee39ce2 - React-logger: 614306fda5e39fda215af4c65b5fa3284ca67c34 - React-Mapbuffer: 9c62370d8bd55012524d8ad104c81c6d148fe925 - React-microtasksnativemodule: e4bab9fcd5a4a3a31c307627ba4da5de2270a609 - React-NativeModulesApple: 3313a38498be0dce0355705878374ca8eadca06d - React-oscompat: a422fccc91cc3e67f4bf59627eba1b38e5f79033 - React-perflogger: b6bb51d043aae261194390b79f3a296f8c5de62c - React-performancetimeline: 881a4b4dc0f93e9275ec7309cb1c28d8847686c4 - React-RCTActionSheet: 79f74605ec821d08716d40cfc0dd2eb0c7448fd9 - React-RCTAnimation: 483db3b0f9a60945553f6237fc14138beb9df771 - React-RCTAppDelegate: 13abd475cecfb241397be86effb75853c6456720 - React-RCTBlob: 4984372c50aab0b40ee7460080a3eae35f6a05d6 - React-RCTFabric: b7d595ad92ad6249136c43da57e6399d0864556a - React-RCTFBReactNativeSpec: 1c9e7497d106ee3b20a16932c36b6ce0b6db7829 - React-RCTImage: 2b6409f62dabbe04fecaa455fdd8bba782b07a46 - React-RCTLinking: 5be4d2ced06b9e9b24c9f7499eb0fbc64848ab29 - React-RCTNetwork: b41267c387de54821638c7e26265228d41ce9f0a - React-RCTPushNotification: 1bf64e58eea349348a0ebf900d0cb5479e96a784 - React-RCTRuntime: c113a3166d9b87bb6b37df5ee3312a8140a9b7dd - React-RCTSettings: fbbe0606f26337d797a7e3da74afd0243d969c55 - React-RCTTest: 7cf698ac37b01d1800c71569f15c31e20bf7b8d4 - React-RCTText: da2698af66ab02b3715b7d56576728b97e8c8b9c - React-RCTVibration: 70e299c05c8c1627e4c4a94196e96a788239d3dc - React-rendererconsistency: 8ffd9cadd4c919baf64e03875334f588341503d8 - React-renderercss: 261440ac366d11df0255e2ad5a0c08871f935e0a - React-rendererdebug: f45b20b35a794718db80c92d9a1c86d3c153265e - React-RuntimeApple: b6c037a003eb37205d1f1acc4fcb32652d69d2e0 - React-RuntimeCore: 9ad571c949c2572045c424140b2368b38e33f4fb - React-runtimeexecutor: 601f1859579175ac96a0237c4c86ef55bbb60662 - React-RuntimeHermes: 1e411089d5cad4f5406f0cc5545fa9d6a804cb10 - React-runtimescheduler: 29f058fd573464deac54b0c32ac0dfc615b7f228 - React-timing: bed1771e3f2dde14dc71f778564c68786b76ce8e - React-utils: d37a08688f23f7d263a3719f5692534cd12dbaf2 - ReactAppDependencyProvider: ba145f1c381299018032c57386bc01cf7da36a79 - ReactCodegen: b608ab77f5678470ae9cb5359138767aea093411 - ReactCommon: 61f2cc9427acc386355f0a1008ceacf35ab3eb21 - ReactCommon-Samples: 10f5a7d4fb0ff92d698264c3f68922080f3526a4 + RCTDeprecation: 0747b2210cc36cd9d327a276d046834a2471def5 + RCTRequired: 69fb68d08216b196c4ac982e3f4481532aeff4ab + RCTTypeSafety: 1e74a730ec76b072cd7226c5a29367187492cf89 + React: 9e56bb37bb46ce3cdbdf20fd64e44ed6e8b37e82 + React-callinvoker: 6e732fdd9322aa85920b7ab825b3a9a5d2f69ae7 + React-Core: 94861b1e766c00d5490c9f8cac4789f61d8f5ece + React-CoreModules: 757b4fde15a584ab4c9afeeb74001e4554c88ca6 + React-cxxreact: 70e27221b144291d076056bb4e286b3c5bb50e84 + React-debug: e780ad153ef3d2d6519d419391937a8c6b5308e0 + React-defaultsnativemodule: 0a612dd8cedea6f42dee5457b6dd13cac2e0d411 + React-domnativemodule: ecc5d0822b80bff5611884c6d0e1b1f00263f6ad + React-Fabric: 5c2d1aaf2fbb344dea6145da45ee88864f7b94e3 + React-FabricComponents: 2ca34ee5810141ff8d15b217c55fa87597819a29 + React-FabricImage: dccc7045206c359837cf3eea1f712da56a0359ce + React-featureflags: 256b2255579f53a2f7f554605cdf43387ba087af + React-featureflagsnativemodule: 9eee56ac75b53d1d5383778b62185fa577a785b4 + React-graphics: 2735f6ef6099621363bc485fb6b4887fe9f9dc10 + React-hermes: c377b75930653ad880fa5b821d69e8f7536f1fb6 + React-idlecallbacksnativemodule: 59eb3b672ed647234ee566d5a335179d37337a84 + React-ImageManager: d569955b4d7af5919b806dd003f78bf889cde5d1 + React-jserrorhandler: dc547e253366468a8c5ebcb5e65f762602f4cc43 + React-jsi: 9289dde3b9f546ad65678df430211e65e33637f9 + React-jsiexecutor: 1ce26a342f15b534b991fbfa6e34fa013cec3223 + React-jsinspector: 88305352e399887d2a4d60285a88a01a8ccc46e5 + React-jsinspectorcdp: acdaca1ae0f4aefa1be641f0b1f95dfd4659aa16 + React-jsinspectornetwork: fd0a5474b10651702c28f5662ea70fb3d8b6f24f + React-jsinspectortracing: 06c67ad6e498073413b0bbbc2248f62f1563ee04 + React-jsitooling: 57932b9f3cd94c3bf085844415415447c7a7bd5f + React-jsitracing: f4810da7c92da2c069b7309029eebe7ff6db4b41 + React-logger: abc08f7d246e3f3d7cd6b95ee3be80e53f0b6c26 + React-Mapbuffer: 38731add280ac38dc6e11ebdcbb93c23524291af + React-microtasksnativemodule: daff5f4e0a8cbb044641da42562d7848959c4053 + React-NativeModulesApple: 83712287e2dbaadbbd5594800e1cb11749029537 + React-oscompat: 414b30e47074beddcae34ee27e12a679a4977f24 + React-perflogger: e9ee0e94e1c5860e78d4345f9e01454978a47830 + React-performancetimeline: 677e8c82788f5411c7f07ecb5a6455fb6785e63a + React-RCTActionSheet: 3f0f8e164b87bd9882473de51858b89195671fe9 + React-RCTAnimation: f16e9d02324a69871a0d91db13f1caf02d9ff80f + React-RCTAppDelegate: 239bbb507bb7b129b192ff3367d32cc2143a95b2 + React-RCTBlob: 3f4573cfa8ad7a50556c0cfee551d10cfe8e90c0 + React-RCTFabric: 605e2fa34ad301ed06f662c8fbbf05290ca5fed9 + React-RCTFBReactNativeSpec: 7a078ec97e3925ea3b581cb44c8fa56289b3f963 + React-RCTImage: 39f8469ff2d0114f6c9ecc732c4c6fc3a4cbd753 + React-RCTLinking: 68996a6524d6da21d8e59e73c8c860a14c1a5be4 + React-RCTNetwork: 354927d11b7797bfe5e9b31f21f12e32fc617ef6 + React-RCTPushNotification: d695843ce0ca9974685c99e561ef1dfd50423acd + React-RCTRuntime: 48039d9b53242c5193a91bdc9be7203608e2880c + React-RCTSettings: 9a74e06c5df44a92e4a6576656d2a9782a17fd01 + React-RCTTest: c889b2f10f4efd3b551cfca6fc719b1e28667ad5 + React-RCTText: 6211f570f61e03c4c9d3e5ac3fbe21a28ab7c96b + React-RCTVibration: 81486e3912b7e364993d7504083c5cdd3415d30d + React-rendererconsistency: 15fecabe65cd94bef28ac54d3d51746d345b1114 + React-renderercss: 114ecf459ae5db8230c6458050f62ceea807d6fa + React-rendererdebug: df7afc9877169d55fbecfce74416cc6af662567b + React-RuntimeApple: 0c76864f92c00a5981d701827e330ec80f16bf63 + React-RuntimeCore: 77879f28adc341f480412b80a54cd84bd24ad75e + React-runtimeexecutor: bc16060a4c54090438429aaf78f202e0ac96c312 + React-RuntimeHermes: 8beb0059a1cd872962dd0c31af47571aa79a1679 + React-runtimescheduler: f93fc040efe0ea53a1a7084219e93cc51173662a + React-timing: e48ea4ff6e85c2535584362bf1e06f1dd72818e1 + React-utils: 9abfd64c6c7db115647e2a23579404af2df7aff9 + ReactAppDependencyProvider: 2a5ca010214ea35d7e2f4dd7dc3fb44dc932e164 + ReactCodegen: 9ea2a582b24e8187171a46503f2b8f0ece6afeaa + ReactCommon: ff72ee254f88c361ebf83c6b5f7a3f45bb58f989 + ReactCommon-Samples: 07df5b3c7c8778149aaaf71fb7a23093b2f510e4 ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 670c6752f06f48ee4e172a75988a963ea53ea2a5 + Yoga: 15c07d37869e68f295849c2af164cea21957f345 PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From aac7dbefe2442bef1a353951da80f328ea2ed5db Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Mon, 4 Aug 2025 03:33:14 -0700 Subject: [PATCH 051/312] Pin Node.js version in GitHub Actions to 24.4.1 (#53013) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53013 Quick fix to restore CI on `main`. `actions/setup-node` is now pulling Node.js `24.5.0`, which introduces a bug affecting `packages/dev-middleware/src/__tests__/` Jest tests. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D79551277 fbshipit-source-id: 51951ad8ffe376a478da268b50aa54ac2d9bba03 --- .github/workflows/test-all.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index e68f9a81518..7996d461d64 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -593,7 +593,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: ["24", "22", "20.19.4"] + node-version: ["24.4.1", "22", "20.19.4"] steps: - name: Checkout uses: actions/checkout@v4 From 812824cc646cd2890806b0b88334359fc15db399 Mon Sep 17 00:00:00 2001 From: lukmccall Date: Mon, 4 Aug 2025 04:46:56 -0700 Subject: [PATCH 052/312] Fix `ReactHostImpl.nativeModules` always returning an empty list (#52986) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: During the Expo QA process, we discovered that `ReactContext.reactApplicationContext.nativeModules` always returns an empty list (https://github.com/expo/expo/blob/4e2bbb23edda74d0e24756fd1735b8763e38f7a7/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/ReactExtensions.kt#L12). This happens because, during object creation, the `reactInstance` is always null. ## Changelog: [ANDROID] [FIXED] - Fix `ReactHostImpl.nativeModules` always returning an empty list Pull Request resolved: https://github.com/facebook/react-native/pull/52986 Test Plan: - RN tester compiles ✅ Reviewed By: mdvacca Differential Revision: D79451613 Pulled By: cortinico fbshipit-source-id: d5341bcc1193eb948db4e99f16ba32a63073a6db --- .../src/main/java/com/facebook/react/runtime/ReactHostImpl.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt index 536b0542f78..4ed8dd2738c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt @@ -514,7 +514,8 @@ public class ReactHostImpl( internal fun hasNativeModule(nativeModuleInterface: Class): Boolean = reactInstance?.hasNativeModule(nativeModuleInterface) ?: false - internal val nativeModules: Collection = reactInstance?.nativeModules ?: listOf() + internal val nativeModules: Collection + get() = reactInstance?.nativeModules ?: listOf() internal fun getNativeModule(nativeModuleInterface: Class): T? { if (!ReactBuildConfig.UNSTABLE_ENABLE_MINIFY_LEGACY_ARCHITECTURE && From 6e921b4c9ca63d2e3822c3e6e0faddf3a8652b07 Mon Sep 17 00:00:00 2001 From: Vitali Zaidman Date: Fri, 11 Jul 2025 01:57:14 -0700 Subject: [PATCH 053/312] renamed release testing scripts (#52541) Summary: Use a more suitable name for the [scripts used in the release process](https://github.com/reactwg/react-native-releases/blob/main/docs/guide-release-testing.md) to generate a testing project to test a new React Native release against. ```diff - test-e2e-local + test-release-local ``` ## Changelog: [INTERNAL] Pull Request resolved: https://github.com/facebook/react-native/pull/52541 Test Plan: `yarn test-release-local-clean` works the same way: Screenshot 2025-07-10 at 17 54 50 `yarn test-release-local` works the same way: Screenshot 2025-07-10 at 17 59 29 Reviewed By: cipolleschi Differential Revision: D78150648 Pulled By: vzaidman fbshipit-source-id: 471715da271d03bc2a35afbda02074bf71f62734 --- package.json | 4 ++-- scripts/release-testing/README.md | 4 ++-- .../{test-e2e-local-clean.js => test-release-local-clean.js} | 2 +- .../{test-e2e-local.js => test-release-local.js} | 0 4 files changed, 5 insertions(+), 5 deletions(-) rename scripts/release-testing/{test-e2e-local-clean.js => test-release-local-clean.js} (97%) rename scripts/release-testing/{test-e2e-local.js => test-release-local.js} (100%) diff --git a/package.json b/package.json index 81cbb8648f0..21b85ef2834 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "set-version": "node ./scripts/releases/set-version.js", "test-android": "./gradlew :packages:react-native:ReactAndroid:test", "test-ci": "jest --maxWorkers=2 --ci --reporters=\"default\" --reporters=\"jest-junit\"", - "test-e2e-local-clean": "node ./scripts/release-testing/test-e2e-local-clean.js", - "test-e2e-local": "node ./scripts/release-testing/test-e2e-local.js", + "test-release-local-clean": "node ./scripts/release-testing/test-release-local-clean.js", + "test-release-local": "node ./scripts/release-testing/test-release-local.js", "test-ios": "./scripts/objc-test.sh test", "test-typescript": "tsc -p packages/react-native/types/tsconfig.json", "test-generated-typescript": "tsc -p packages/react-native/types_generated/tsconfig.test.json", diff --git a/scripts/release-testing/README.md b/scripts/release-testing/README.md index 40fd2a13e72..5d7860f365d 100644 --- a/scripts/release-testing/README.md +++ b/scripts/release-testing/README.md @@ -6,10 +6,10 @@ Scripts supporting local manual release testing. See also [How to Test a Release For information on command arguments, run `node --help`. -### `test-e2e-local` +### `test-release-local` Set up, build, and install a given test app configuration. -### `test-e2e-local-clean` +### `test-release-local-clean` Clean up all file system and cache state between tests. diff --git a/scripts/release-testing/test-e2e-local-clean.js b/scripts/release-testing/test-release-local-clean.js similarity index 97% rename from scripts/release-testing/test-e2e-local-clean.js rename to scripts/release-testing/test-release-local-clean.js index 7d436ae692b..f273e4791f8 100644 --- a/scripts/release-testing/test-e2e-local-clean.js +++ b/scripts/release-testing/test-release-local-clean.js @@ -11,7 +11,7 @@ 'use strict'; /* - * This script, paired with test-e2e-local.js, is the full suite of + * This script, paired with test-release-local.js, is the full suite of * tooling needed for a successful local testing experience. * This script is an helper to clean up the environment fully * before running the test suite. diff --git a/scripts/release-testing/test-e2e-local.js b/scripts/release-testing/test-release-local.js similarity index 100% rename from scripts/release-testing/test-e2e-local.js rename to scripts/release-testing/test-release-local.js From df63c608b934c7eb050e22df10d3e50a98b2ddf5 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 5 Aug 2025 11:08:36 +0000 Subject: [PATCH 054/312] Release 0.81.0-rc.4 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index 21b85ef2834..b92b5cc9b54 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.3", - "@react-native/metro-config": "0.81.0-rc.3", + "@react-native/metro-babel-transformer": "0.81.0-rc.4", + "@react-native/metro-config": "0.81.0-rc.4", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index df7a6d818d9..7e416af3292 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index b8bd8eae631..b316db6106d 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.3" + "@react-native/codegen": "0.81.0-rc.4" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 61eab96baf4..c939e929841 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.3", + "@react-native/dev-middleware": "0.81.0-rc.4", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 5254df85236..4f89b61f7e8 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index f603568ae02..f5962438c5e 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 62b6a2a698c..89ac702a811 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 4c102fab8fe..22d3b9066ed 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.3", + "@react-native/debugger-frontend": "0.81.0-rc.4", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index dedf8ed1125..b7fd10cc2f8 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.3", + "@react-native/eslint-plugin": "0.81.0-rc.4", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 3aaf906a1aa..6abddf929fd 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index bed0e13a97a..faf5b22de8f 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.3", + "@react-native/codegen": "0.81.0-rc.4", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 9b0d1ac78c2..566c3e46074 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 91e08621fb2..707dd18ba6c 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.3", - "@react-native/metro-babel-transformer": "0.81.0-rc.3", + "@react-native/js-polyfills": "0.81.0-rc.4", + "@react-native/metro-babel-transformer": "0.81.0-rc.4", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index ac9ac4107d0..bfa6c30c53b 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 2ca8e4453d5..c8028c15612 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index c9a48dd34c1..2cd91b7acfc 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 99db9131012..6f180a11263 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.3", + "@react-native/babel-plugin-codegen": "0.81.0-rc.4", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 70ea6679e60..0454badb445 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.3", + "@react-native/babel-preset": "0.81.0-rc.4", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index e3b11f4daf3..23b792d15f9 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 01c088de7f9..a2f8d7d3d7a 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.3" + "@react-native/codegen": "0.81.0-rc.4" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index d6d27294668..5db8673b525 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.3" + "@react-native/codegen": "0.81.0-rc.4" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 54a1f7ead20..dad4883dff3 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.3", - "react-native": "0.81.0-rc.3" + "@react-native/babel-preset": "0.81.0-rc.4", + "react-native": "0.81.0-rc.4" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 4f32b8505fa..c2cfd138266 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -18,5 +18,5 @@ export const version: $ReadOnly<{ major: 0, minor: 81, patch: 0, - prerelease: 'rc.3', + prerelease: 'rc.4', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index e69d85f3336..0f1d9db9119 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.3", + RCTVersionPrerelease: @"rc.4", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 072b1bbf009..d5d9bea9cbb 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.3 +VERSION_NAME=0.81.0-rc.4 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index b1ebe2e5c72..f6168b7b529 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -15,6 +15,6 @@ public object ReactNativeVersion { "major" to 0, "minor" to 81, "patch" to 0, - "prerelease" to "rc.3" + "prerelease" to "rc.4" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 36c96a9f75e..c350947bb98 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -22,7 +22,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = "rc.3"; + std::string_view Prerelease = "rc.4"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 15810fa3127..b7598302ded 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.3", - "@react-native/codegen": "0.81.0-rc.3", - "@react-native/community-cli-plugin": "0.81.0-rc.3", - "@react-native/gradle-plugin": "0.81.0-rc.3", - "@react-native/js-polyfills": "0.81.0-rc.3", - "@react-native/normalize-colors": "0.81.0-rc.3", - "@react-native/virtualized-lists": "0.81.0-rc.3", + "@react-native/assets-registry": "0.81.0-rc.4", + "@react-native/codegen": "0.81.0-rc.4", + "@react-native/community-cli-plugin": "0.81.0-rc.4", + "@react-native/gradle-plugin": "0.81.0-rc.4", + "@react-native/js-polyfills": "0.81.0-rc.4", + "@react-native/normalize-colors": "0.81.0-rc.4", + "@react-native/virtualized-lists": "0.81.0-rc.4", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index bfe4b5e35dc..563b0499104 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.3\\" +version = \\"0.81.0-rc.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.3\\" +version = \\"0.81.0-rc.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -839,7 +839,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.3\\" +version = \\"0.81.0-rc.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -877,7 +877,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.3\\" +version = \\"0.81.0-rc.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index dcd31ea6309..b9234a26ad5 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.3", - "@react-native/popup-menu-android": "0.81.0-rc.3", + "@react-native/new-app-screen": "0.81.0-rc.4", + "@react-native/popup-menu-android": "0.81.0-rc.4", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 324588b6042..e128c4cdc67 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index 0ae0aeb4f1a..a584fb54ec8 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.3", + "version": "0.81.0-rc.4", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index f2bf5487a9d..4ba305dbf3b 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.3" + "react-native": "0.81.0-rc.4" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.3", - "@react-native/core-cli-utils": "0.81.0-rc.3", - "@react-native/eslint-config": "0.81.0-rc.3", - "@react-native/metro-config": "0.81.0-rc.3", - "@react-native/typescript-config": "0.81.0-rc.3", + "@react-native/babel-preset": "0.81.0-rc.4", + "@react-native/core-cli-utils": "0.81.0-rc.4", + "@react-native/eslint-config": "0.81.0-rc.4", + "@react-native/metro-config": "0.81.0-rc.4", + "@react-native/typescript-config": "0.81.0-rc.4", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index f7494494050..14ae960beb7 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.3" + "@react-native/codegen": "0.81.0-rc.4" }, "devDependencies": { "@babel/core": "^7.25.2", From 32effad9463a0e8180af724b10248392de010d68 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 5 Aug 2025 14:52:01 +0000 Subject: [PATCH 055/312] Release 0.81.0-rc.5 #publish-packages-to-npm&next --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index b92b5cc9b54..8c3a3973f1a 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.4", - "@react-native/metro-config": "0.81.0-rc.4", + "@react-native/metro-babel-transformer": "0.81.0-rc.5", + "@react-native/metro-config": "0.81.0-rc.5", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 7e416af3292..7bb77ef5c57 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index b316db6106d..59d7bf3a278 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.4" + "@react-native/codegen": "0.81.0-rc.5" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index c939e929841..462c5f1c2d1 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.4", + "@react-native/dev-middleware": "0.81.0-rc.5", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 4f89b61f7e8..556cd7e0749 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index f5962438c5e..553a9aa2eaf 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 89ac702a811..9aaa3898977 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 22d3b9066ed..45cbcbe5616 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.4", + "@react-native/debugger-frontend": "0.81.0-rc.5", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index b7fd10cc2f8..191b9c1a724 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.4", + "@react-native/eslint-plugin": "0.81.0-rc.5", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 6abddf929fd..1a3a6c390b1 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index faf5b22de8f..3ed4f165a25 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.4", + "@react-native/codegen": "0.81.0-rc.5", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 566c3e46074..a7632a97adb 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 707dd18ba6c..ae2e397d462 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.4", - "@react-native/metro-babel-transformer": "0.81.0-rc.4", + "@react-native/js-polyfills": "0.81.0-rc.5", + "@react-native/metro-babel-transformer": "0.81.0-rc.5", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index bfa6c30c53b..b6ebbccdaf7 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index c8028c15612..c0b5e8b5d46 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 2cd91b7acfc..3603693db58 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 6f180a11263..850ac8432a8 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.4", + "@react-native/babel-plugin-codegen": "0.81.0-rc.5", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 0454badb445..cce1e180ab6 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.4", + "@react-native/babel-preset": "0.81.0-rc.5", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 23b792d15f9..ad60124fb74 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index a2f8d7d3d7a..d4396895af5 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.4" + "@react-native/codegen": "0.81.0-rc.5" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 5db8673b525..bb5d4ee5d40 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.4" + "@react-native/codegen": "0.81.0-rc.5" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index dad4883dff3..2db95d7ed91 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.4", - "react-native": "0.81.0-rc.4" + "@react-native/babel-preset": "0.81.0-rc.5", + "react-native": "0.81.0-rc.5" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index c2cfd138266..6e58c4a2e43 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -18,5 +18,5 @@ export const version: $ReadOnly<{ major: 0, minor: 81, patch: 0, - prerelease: 'rc.4', + prerelease: 'rc.5', }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 0f1d9db9119..ffe5881c0ce 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.4", + RCTVersionPrerelease: @"rc.5", }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index d5d9bea9cbb..3451bcbf058 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.4 +VERSION_NAME=0.81.0-rc.5 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index f6168b7b529..06c2f897291 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -15,6 +15,6 @@ public object ReactNativeVersion { "major" to 0, "minor" to 81, "patch" to 0, - "prerelease" to "rc.4" + "prerelease" to "rc.5" ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index c350947bb98..e35a4d9019d 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -22,7 +22,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = "rc.4"; + std::string_view Prerelease = "rc.5"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index b7598302ded..22bb8245441 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.4", - "@react-native/codegen": "0.81.0-rc.4", - "@react-native/community-cli-plugin": "0.81.0-rc.4", - "@react-native/gradle-plugin": "0.81.0-rc.4", - "@react-native/js-polyfills": "0.81.0-rc.4", - "@react-native/normalize-colors": "0.81.0-rc.4", - "@react-native/virtualized-lists": "0.81.0-rc.4", + "@react-native/assets-registry": "0.81.0-rc.5", + "@react-native/codegen": "0.81.0-rc.5", + "@react-native/community-cli-plugin": "0.81.0-rc.5", + "@react-native/gradle-plugin": "0.81.0-rc.5", + "@react-native/js-polyfills": "0.81.0-rc.5", + "@react-native/normalize-colors": "0.81.0-rc.5", + "@react-native/virtualized-lists": "0.81.0-rc.5", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 563b0499104..01b0d127d79 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.4\\" +version = \\"0.81.0-rc.5\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.4\\" +version = \\"0.81.0-rc.5\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -839,7 +839,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.4\\" +version = \\"0.81.0-rc.5\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -877,7 +877,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.4\\" +version = \\"0.81.0-rc.5\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index b9234a26ad5..8ac0538da3d 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.4", - "@react-native/popup-menu-android": "0.81.0-rc.4", + "@react-native/new-app-screen": "0.81.0-rc.5", + "@react-native/popup-menu-android": "0.81.0-rc.5", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index e128c4cdc67..e27f4a64fe0 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index a584fb54ec8..3fe8b6f34aa 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.4", + "version": "0.81.0-rc.5", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 4ba305dbf3b..4af31dd14ad 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.4" + "react-native": "0.81.0-rc.5" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.4", - "@react-native/core-cli-utils": "0.81.0-rc.4", - "@react-native/eslint-config": "0.81.0-rc.4", - "@react-native/metro-config": "0.81.0-rc.4", - "@react-native/typescript-config": "0.81.0-rc.4", + "@react-native/babel-preset": "0.81.0-rc.5", + "@react-native/core-cli-utils": "0.81.0-rc.5", + "@react-native/eslint-config": "0.81.0-rc.5", + "@react-native/metro-config": "0.81.0-rc.5", + "@react-native/typescript-config": "0.81.0-rc.5", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index 14ae960beb7..5fd54ffe904 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.4" + "@react-native/codegen": "0.81.0-rc.5" }, "devDependencies": { "@babel/core": "^7.25.2", From fc65e3e48e9317f9169ca0239ad1938da0834451 Mon Sep 17 00:00:00 2001 From: Vitali Zaidman Date: Wed, 6 Aug 2025 11:20:21 +0100 Subject: [PATCH 056/312] Update Podfile.lock Changelog: [Internal] --- packages/rn-tester/Podfile.lock | 598 ++++++++++++++++---------------- 1 file changed, 299 insertions(+), 299 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 6d54a955221..c025ff3550e 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0-rc.3) + - FBLazyVector (0.81.0-rc.5) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.0-rc.3): - - hermes-engine/Pre-built (= 0.81.0-rc.3) - - hermes-engine/Pre-built (0.81.0-rc.3) + - hermes-engine (0.81.0-rc.5): + - hermes-engine/Pre-built (= 0.81.0-rc.5) + - hermes-engine/Pre-built (0.81.0-rc.5) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0-rc.3) - - RCTRequired (0.81.0-rc.3) - - RCTTypeSafety (0.81.0-rc.3): - - FBLazyVector (= 0.81.0-rc.3) - - RCTRequired (= 0.81.0-rc.3) - - React-Core (= 0.81.0-rc.3) - - React (0.81.0-rc.3): - - React-Core (= 0.81.0-rc.3) - - React-Core/DevSupport (= 0.81.0-rc.3) - - React-Core/RCTWebSocket (= 0.81.0-rc.3) - - React-RCTActionSheet (= 0.81.0-rc.3) - - React-RCTAnimation (= 0.81.0-rc.3) - - React-RCTBlob (= 0.81.0-rc.3) - - React-RCTImage (= 0.81.0-rc.3) - - React-RCTLinking (= 0.81.0-rc.3) - - React-RCTNetwork (= 0.81.0-rc.3) - - React-RCTSettings (= 0.81.0-rc.3) - - React-RCTText (= 0.81.0-rc.3) - - React-RCTVibration (= 0.81.0-rc.3) - - React-callinvoker (0.81.0-rc.3) - - React-Core (0.81.0-rc.3): + - RCTDeprecation (0.81.0-rc.5) + - RCTRequired (0.81.0-rc.5) + - RCTTypeSafety (0.81.0-rc.5): + - FBLazyVector (= 0.81.0-rc.5) + - RCTRequired (= 0.81.0-rc.5) + - React-Core (= 0.81.0-rc.5) + - React (0.81.0-rc.5): + - React-Core (= 0.81.0-rc.5) + - React-Core/DevSupport (= 0.81.0-rc.5) + - React-Core/RCTWebSocket (= 0.81.0-rc.5) + - React-RCTActionSheet (= 0.81.0-rc.5) + - React-RCTAnimation (= 0.81.0-rc.5) + - React-RCTBlob (= 0.81.0-rc.5) + - React-RCTImage (= 0.81.0-rc.5) + - React-RCTLinking (= 0.81.0-rc.5) + - React-RCTNetwork (= 0.81.0-rc.5) + - React-RCTSettings (= 0.81.0-rc.5) + - React-RCTText (= 0.81.0-rc.5) + - React-RCTVibration (= 0.81.0-rc.5) + - React-callinvoker (0.81.0-rc.5) + - React-Core (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.3) + - React-Core/Default (= 0.81.0-rc.5) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0-rc.3): + - React-Core/CoreModulesHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0-rc.3): + - React-Core/Default (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0-rc.3): + - React-Core/DevSupport (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.3) - - React-Core/RCTWebSocket (= 0.81.0-rc.3) + - React-Core/Default (= 0.81.0-rc.5) + - React-Core/RCTWebSocket (= 0.81.0-rc.5) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0-rc.3): + - React-Core/RCTActionSheetHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0-rc.3): + - React-Core/RCTAnimationHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0-rc.3): + - React-Core/RCTBlobHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0-rc.3): + - React-Core/RCTImageHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0-rc.3): + - React-Core/RCTLinkingHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0-rc.3): + - React-Core/RCTNetworkHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.0-rc.3): + - React-Core/RCTPushNotificationHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0-rc.3): + - React-Core/RCTSettingsHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0-rc.3): + - React-Core/RCTTextHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0-rc.3): + - React-Core/RCTVibrationHeaders (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0-rc.3): + - React-Core/RCTWebSocket (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.3) + - React-Core/Default (= 0.81.0-rc.5) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0-rc.3): + - React-CoreModules (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0-rc.3) - - React-Core/CoreModulesHeaders (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) + - RCTTypeSafety (= 0.81.0-rc.5) + - React-Core/CoreModulesHeaders (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0-rc.3) + - React-RCTImage (= 0.81.0-rc.5) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0-rc.3): + - React-cxxreact (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.3) - - React-debug (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) + - React-callinvoker (= 0.81.0-rc.5) + - React-debug (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0-rc.3) - - React-perflogger (= 0.81.0-rc.3) + - React-logger (= 0.81.0-rc.5) + - React-perflogger (= 0.81.0-rc.5) - React-runtimeexecutor - - React-timing (= 0.81.0-rc.3) + - React-timing (= 0.81.0-rc.5) - SocketRocket - - React-debug (0.81.0-rc.3) - - React-defaultsnativemodule (0.81.0-rc.3): + - React-debug (0.81.0-rc.5) + - React-defaultsnativemodule (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0-rc.3): + - React-domnativemodule (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0-rc.3): + - React-Fabric (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0-rc.3) - - React-Fabric/attributedstring (= 0.81.0-rc.3) - - React-Fabric/bridging (= 0.81.0-rc.3) - - React-Fabric/componentregistry (= 0.81.0-rc.3) - - React-Fabric/componentregistrynative (= 0.81.0-rc.3) - - React-Fabric/components (= 0.81.0-rc.3) - - React-Fabric/consistency (= 0.81.0-rc.3) - - React-Fabric/core (= 0.81.0-rc.3) - - React-Fabric/dom (= 0.81.0-rc.3) - - React-Fabric/imagemanager (= 0.81.0-rc.3) - - React-Fabric/leakchecker (= 0.81.0-rc.3) - - React-Fabric/mounting (= 0.81.0-rc.3) - - React-Fabric/observers (= 0.81.0-rc.3) - - React-Fabric/scheduler (= 0.81.0-rc.3) - - React-Fabric/telemetry (= 0.81.0-rc.3) - - React-Fabric/templateprocessor (= 0.81.0-rc.3) - - React-Fabric/uimanager (= 0.81.0-rc.3) + - React-Fabric/animations (= 0.81.0-rc.5) + - React-Fabric/attributedstring (= 0.81.0-rc.5) + - React-Fabric/bridging (= 0.81.0-rc.5) + - React-Fabric/componentregistry (= 0.81.0-rc.5) + - React-Fabric/componentregistrynative (= 0.81.0-rc.5) + - React-Fabric/components (= 0.81.0-rc.5) + - React-Fabric/consistency (= 0.81.0-rc.5) + - React-Fabric/core (= 0.81.0-rc.5) + - React-Fabric/dom (= 0.81.0-rc.5) + - React-Fabric/imagemanager (= 0.81.0-rc.5) + - React-Fabric/leakchecker (= 0.81.0-rc.5) + - React-Fabric/mounting (= 0.81.0-rc.5) + - React-Fabric/observers (= 0.81.0-rc.5) + - React-Fabric/scheduler (= 0.81.0-rc.5) + - React-Fabric/telemetry (= 0.81.0-rc.5) + - React-Fabric/templateprocessor (= 0.81.0-rc.5) + - React-Fabric/uimanager (= 0.81.0-rc.5) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0-rc.3): + - React-Fabric/animations (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0-rc.3): + - React-Fabric/attributedstring (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0-rc.3): + - React-Fabric/bridging (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0-rc.3): + - React-Fabric/componentregistry (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0-rc.3): + - React-Fabric/componentregistrynative (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0-rc.3): + - React-Fabric/components (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.3) - - React-Fabric/components/root (= 0.81.0-rc.3) - - React-Fabric/components/scrollview (= 0.81.0-rc.3) - - React-Fabric/components/view (= 0.81.0-rc.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.5) + - React-Fabric/components/root (= 0.81.0-rc.5) + - React-Fabric/components/scrollview (= 0.81.0-rc.5) + - React-Fabric/components/view (= 0.81.0-rc.5) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.3): + - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0-rc.3): + - React-Fabric/components/root (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0-rc.3): + - React-Fabric/components/scrollview (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0-rc.3): + - React-Fabric/components/view (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0-rc.3): + - React-Fabric/consistency (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0-rc.3): + - React-Fabric/core (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0-rc.3): + - React-Fabric/dom (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0-rc.3): + - React-Fabric/imagemanager (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0-rc.3): + - React-Fabric/leakchecker (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0-rc.3): + - React-Fabric/mounting (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0-rc.3): + - React-Fabric/observers (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0-rc.3) + - React-Fabric/observers/events (= 0.81.0-rc.5) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0-rc.3): + - React-Fabric/observers/events (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0-rc.3): + - React-Fabric/scheduler (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0-rc.3): + - React-Fabric/telemetry (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0-rc.3): + - React-Fabric/templateprocessor (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0-rc.3): + - React-Fabric/uimanager (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0-rc.3) + - React-Fabric/uimanager/consistency (= 0.81.0-rc.5) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0-rc.3): + - React-Fabric/uimanager/consistency (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0-rc.3): + - React-FabricComponents (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0-rc.3) - - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.3) + - React-FabricComponents/components (= 0.81.0-rc.5) + - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.5) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0-rc.3): + - React-FabricComponents/components (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1259,16 +1259,16 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.3) - - React-FabricComponents/components/iostextinput (= 0.81.0-rc.3) - - React-FabricComponents/components/modal (= 0.81.0-rc.3) - - React-FabricComponents/components/rncore (= 0.81.0-rc.3) - - React-FabricComponents/components/safeareaview (= 0.81.0-rc.3) - - React-FabricComponents/components/scrollview (= 0.81.0-rc.3) - - React-FabricComponents/components/text (= 0.81.0-rc.3) - - React-FabricComponents/components/textinput (= 0.81.0-rc.3) - - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.3) - - React-FabricComponents/components/virtualview (= 0.81.0-rc.3) + - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.5) + - React-FabricComponents/components/iostextinput (= 0.81.0-rc.5) + - React-FabricComponents/components/modal (= 0.81.0-rc.5) + - React-FabricComponents/components/rncore (= 0.81.0-rc.5) + - React-FabricComponents/components/safeareaview (= 0.81.0-rc.5) + - React-FabricComponents/components/scrollview (= 0.81.0-rc.5) + - React-FabricComponents/components/text (= 0.81.0-rc.5) + - React-FabricComponents/components/textinput (= 0.81.0-rc.5) + - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.5) + - React-FabricComponents/components/virtualview (= 0.81.0-rc.5) - React-featureflags - React-graphics - React-jsi @@ -1281,7 +1281,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0-rc.3): + - React-FabricComponents/components/inputaccessory (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1308,7 +1308,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0-rc.3): + - React-FabricComponents/components/iostextinput (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1335,7 +1335,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0-rc.3): + - React-FabricComponents/components/modal (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1362,7 +1362,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0-rc.3): + - React-FabricComponents/components/rncore (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1389,7 +1389,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0-rc.3): + - React-FabricComponents/components/safeareaview (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1416,7 +1416,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0-rc.3): + - React-FabricComponents/components/scrollview (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1443,7 +1443,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0-rc.3): + - React-FabricComponents/components/text (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1470,7 +1470,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0-rc.3): + - React-FabricComponents/components/textinput (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1497,7 +1497,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0-rc.3): + - React-FabricComponents/components/unimplementedview (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1524,7 +1524,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0-rc.3): + - React-FabricComponents/components/virtualview (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1551,7 +1551,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0-rc.3): + - React-FabricComponents/textlayoutmanager (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1578,7 +1578,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0-rc.3): + - React-FabricImage (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1587,21 +1587,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0-rc.3) - - RCTTypeSafety (= 0.81.0-rc.3) + - RCTRequired (= 0.81.0-rc.5) + - RCTTypeSafety (= 0.81.0-rc.5) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0-rc.3) + - React-jsiexecutor (= 0.81.0-rc.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0-rc.3): + - React-featureflags (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1610,7 +1610,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0-rc.3): + - React-featureflagsnativemodule (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1625,7 +1625,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0-rc.3): + - React-graphics (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0-rc.3): + - React-hermes (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1647,16 +1647,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.3) + - React-cxxreact (= 0.81.0-rc.5) - React-jsi - - React-jsiexecutor (= 0.81.0-rc.3) + - React-jsiexecutor (= 0.81.0-rc.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.5) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0-rc.3): + - React-idlecallbacksnativemodule (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1672,7 +1672,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0-rc.3): + - React-ImageManager (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1687,7 +1687,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0-rc.3): + - React-jserrorhandler (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1702,7 +1702,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0-rc.3): + - React-jsi (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1712,7 +1712,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0-rc.3): + - React-jsiexecutor (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1721,15 +1721,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) + - React-cxxreact (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.5) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0-rc.3): + - React-jsinspector (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1743,10 +1743,10 @@ PODS: - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.3) + - React-perflogger (= 0.81.0-rc.5) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0-rc.3): + - React-jsinspectorcdp (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1755,7 +1755,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0-rc.3): + - React-jsinspectornetwork (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1768,7 +1768,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0-rc.3): + - React-jsinspectortracing (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1779,7 +1779,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0-rc.3): + - React-jsitooling (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1787,16 +1787,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) + - React-cxxreact (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0-rc.3): + - React-jsitracing (0.81.0-rc.5): - React-jsi - - React-logger (0.81.0-rc.3): + - React-logger (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1805,7 +1805,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0-rc.3): + - React-Mapbuffer (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1815,7 +1815,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0-rc.3): + - React-microtasksnativemodule (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1829,7 +1829,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.0-rc.3): + - React-NativeModulesApple (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1849,8 +1849,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0-rc.3) - - React-perflogger (0.81.0-rc.3): + - React-oscompat (0.81.0-rc.5) + - React-perflogger (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1859,7 +1859,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0-rc.3): + - React-performancetimeline (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1872,9 +1872,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0-rc.3): - - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.3) - - React-RCTAnimation (0.81.0-rc.3): + - React-RCTActionSheet (0.81.0-rc.5): + - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.5) + - React-RCTAnimation (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1890,7 +1890,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0-rc.3): + - React-RCTAppDelegate (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1924,7 +1924,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0-rc.3): + - React-RCTBlob (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1943,7 +1943,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0-rc.3): + - React-RCTFabric (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1978,7 +1978,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0-rc.3): + - React-RCTFBReactNativeSpec (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -1992,10 +1992,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.3) + - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.5) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0-rc.3): + - React-RCTFBReactNativeSpec/components (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2018,7 +2018,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0-rc.3): + - React-RCTImage (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2034,14 +2034,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0-rc.3): - - React-Core/RCTLinkingHeaders (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) + - React-RCTLinking (0.81.0-rc.5): + - React-Core/RCTLinkingHeaders (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0-rc.3) - - React-RCTNetwork (0.81.0-rc.3): + - ReactCommon/turbomodule/core (= 0.81.0-rc.5) + - React-RCTNetwork (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2059,14 +2059,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.0-rc.3): + - React-RCTPushNotification (0.81.0-rc.5): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.0-rc.3): + - React-RCTRuntime (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2086,7 +2086,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0-rc.3): + - React-RCTSettings (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2101,7 +2101,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.0-rc.3): + - React-RCTTest (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2109,15 +2109,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.0-rc.3) - - React-CoreModules (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) - - ReactCommon/turbomodule/core (= 0.81.0-rc.3) + - React-Core (= 0.81.0-rc.5) + - React-CoreModules (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) + - ReactCommon/turbomodule/core (= 0.81.0-rc.5) - SocketRocket - - React-RCTText (0.81.0-rc.3): - - React-Core/RCTTextHeaders (= 0.81.0-rc.3) + - React-RCTText (0.81.0-rc.5): + - React-Core/RCTTextHeaders (= 0.81.0-rc.5) - Yoga - - React-RCTVibration (0.81.0-rc.3): + - React-RCTVibration (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2131,11 +2131,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0-rc.3) - - React-renderercss (0.81.0-rc.3): + - React-rendererconsistency (0.81.0-rc.5) + - React-renderercss (0.81.0-rc.5): - React-debug - React-utils - - React-rendererdebug (0.81.0-rc.3): + - React-rendererdebug (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2145,7 +2145,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0-rc.3): + - React-RuntimeApple (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0-rc.3): + - React-RuntimeCore (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2196,7 +2196,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0-rc.3): + - React-runtimeexecutor (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2206,10 +2206,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.5) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0-rc.3): + - React-RuntimeHermes (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2230,7 +2230,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0-rc.3): + - React-runtimescheduler (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2252,8 +2252,8 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0-rc.3) - - React-utils (0.81.0-rc.3): + - React-timing (0.81.0-rc.5) + - React-utils (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2263,11 +2263,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0-rc.3) + - React-jsi (= 0.81.0-rc.5) - SocketRocket - - ReactAppDependencyProvider (0.81.0-rc.3): + - ReactAppDependencyProvider (0.81.0-rc.5): - ReactCodegen - - ReactCodegen (0.81.0-rc.3): + - ReactCodegen (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2293,7 +2293,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0-rc.3): + - ReactCommon (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2301,9 +2301,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0-rc.3) + - ReactCommon/turbomodule (= 0.81.0-rc.5) - SocketRocket - - ReactCommon-Samples (0.81.0-rc.3): + - ReactCommon-Samples (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2319,7 +2319,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.0-rc.3): + - ReactCommon/turbomodule (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2328,15 +2328,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.3) - - React-cxxreact (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) - - React-logger (= 0.81.0-rc.3) - - React-perflogger (= 0.81.0-rc.3) - - ReactCommon/turbomodule/bridging (= 0.81.0-rc.3) - - ReactCommon/turbomodule/core (= 0.81.0-rc.3) + - React-callinvoker (= 0.81.0-rc.5) + - React-cxxreact (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) + - React-logger (= 0.81.0-rc.5) + - React-perflogger (= 0.81.0-rc.5) + - ReactCommon/turbomodule/bridging (= 0.81.0-rc.5) + - ReactCommon/turbomodule/core (= 0.81.0-rc.5) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0-rc.3): + - ReactCommon/turbomodule/bridging (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2345,13 +2345,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.3) - - React-cxxreact (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) - - React-logger (= 0.81.0-rc.3) - - React-perflogger (= 0.81.0-rc.3) + - React-callinvoker (= 0.81.0-rc.5) + - React-cxxreact (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) + - React-logger (= 0.81.0-rc.5) + - React-perflogger (= 0.81.0-rc.5) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0-rc.3): + - ReactCommon/turbomodule/core (0.81.0-rc.5): - boost - DoubleConversion - fast_float @@ -2360,14 +2360,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.3) - - React-cxxreact (= 0.81.0-rc.3) - - React-debug (= 0.81.0-rc.3) - - React-featureflags (= 0.81.0-rc.3) - - React-jsi (= 0.81.0-rc.3) - - React-logger (= 0.81.0-rc.3) - - React-perflogger (= 0.81.0-rc.3) - - React-utils (= 0.81.0-rc.3) + - React-callinvoker (= 0.81.0-rc.5) + - React-cxxreact (= 0.81.0-rc.5) + - React-debug (= 0.81.0-rc.5) + - React-featureflags (= 0.81.0-rc.5) + - React-jsi (= 0.81.0-rc.5) + - React-logger (= 0.81.0-rc.5) + - React-perflogger (= 0.81.0-rc.5) + - React-utils (= 0.81.0-rc.5) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2651,83 +2651,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: dff72c497c0f6de7c979d9d4f87dbba5663a8c92 + FBLazyVector: 64579c0203cbc859de4536d54b4c6ed28fd03d42 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: cc20804c5f764b4c785deafa291b6fa77bbf71fd + hermes-engine: 8b7ef0f4e8363c2dfd6fd133979dd58f57b95825 MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 0747b2210cc36cd9d327a276d046834a2471def5 - RCTRequired: 69fb68d08216b196c4ac982e3f4481532aeff4ab - RCTTypeSafety: 1e74a730ec76b072cd7226c5a29367187492cf89 - React: 9e56bb37bb46ce3cdbdf20fd64e44ed6e8b37e82 - React-callinvoker: 6e732fdd9322aa85920b7ab825b3a9a5d2f69ae7 - React-Core: 94861b1e766c00d5490c9f8cac4789f61d8f5ece - React-CoreModules: 757b4fde15a584ab4c9afeeb74001e4554c88ca6 - React-cxxreact: 70e27221b144291d076056bb4e286b3c5bb50e84 - React-debug: e780ad153ef3d2d6519d419391937a8c6b5308e0 - React-defaultsnativemodule: 0a612dd8cedea6f42dee5457b6dd13cac2e0d411 - React-domnativemodule: ecc5d0822b80bff5611884c6d0e1b1f00263f6ad - React-Fabric: 5c2d1aaf2fbb344dea6145da45ee88864f7b94e3 - React-FabricComponents: 2ca34ee5810141ff8d15b217c55fa87597819a29 - React-FabricImage: dccc7045206c359837cf3eea1f712da56a0359ce - React-featureflags: 256b2255579f53a2f7f554605cdf43387ba087af - React-featureflagsnativemodule: 9eee56ac75b53d1d5383778b62185fa577a785b4 - React-graphics: 2735f6ef6099621363bc485fb6b4887fe9f9dc10 - React-hermes: c377b75930653ad880fa5b821d69e8f7536f1fb6 - React-idlecallbacksnativemodule: 59eb3b672ed647234ee566d5a335179d37337a84 - React-ImageManager: d569955b4d7af5919b806dd003f78bf889cde5d1 - React-jserrorhandler: dc547e253366468a8c5ebcb5e65f762602f4cc43 - React-jsi: 9289dde3b9f546ad65678df430211e65e33637f9 - React-jsiexecutor: 1ce26a342f15b534b991fbfa6e34fa013cec3223 - React-jsinspector: 88305352e399887d2a4d60285a88a01a8ccc46e5 - React-jsinspectorcdp: acdaca1ae0f4aefa1be641f0b1f95dfd4659aa16 - React-jsinspectornetwork: fd0a5474b10651702c28f5662ea70fb3d8b6f24f - React-jsinspectortracing: 06c67ad6e498073413b0bbbc2248f62f1563ee04 - React-jsitooling: 57932b9f3cd94c3bf085844415415447c7a7bd5f - React-jsitracing: f4810da7c92da2c069b7309029eebe7ff6db4b41 - React-logger: abc08f7d246e3f3d7cd6b95ee3be80e53f0b6c26 - React-Mapbuffer: 38731add280ac38dc6e11ebdcbb93c23524291af - React-microtasksnativemodule: daff5f4e0a8cbb044641da42562d7848959c4053 - React-NativeModulesApple: 83712287e2dbaadbbd5594800e1cb11749029537 - React-oscompat: 414b30e47074beddcae34ee27e12a679a4977f24 - React-perflogger: e9ee0e94e1c5860e78d4345f9e01454978a47830 - React-performancetimeline: 677e8c82788f5411c7f07ecb5a6455fb6785e63a - React-RCTActionSheet: 3f0f8e164b87bd9882473de51858b89195671fe9 - React-RCTAnimation: f16e9d02324a69871a0d91db13f1caf02d9ff80f - React-RCTAppDelegate: 239bbb507bb7b129b192ff3367d32cc2143a95b2 - React-RCTBlob: 3f4573cfa8ad7a50556c0cfee551d10cfe8e90c0 - React-RCTFabric: 605e2fa34ad301ed06f662c8fbbf05290ca5fed9 - React-RCTFBReactNativeSpec: 7a078ec97e3925ea3b581cb44c8fa56289b3f963 - React-RCTImage: 39f8469ff2d0114f6c9ecc732c4c6fc3a4cbd753 - React-RCTLinking: 68996a6524d6da21d8e59e73c8c860a14c1a5be4 - React-RCTNetwork: 354927d11b7797bfe5e9b31f21f12e32fc617ef6 - React-RCTPushNotification: d695843ce0ca9974685c99e561ef1dfd50423acd - React-RCTRuntime: 48039d9b53242c5193a91bdc9be7203608e2880c - React-RCTSettings: 9a74e06c5df44a92e4a6576656d2a9782a17fd01 - React-RCTTest: c889b2f10f4efd3b551cfca6fc719b1e28667ad5 - React-RCTText: 6211f570f61e03c4c9d3e5ac3fbe21a28ab7c96b - React-RCTVibration: 81486e3912b7e364993d7504083c5cdd3415d30d - React-rendererconsistency: 15fecabe65cd94bef28ac54d3d51746d345b1114 - React-renderercss: 114ecf459ae5db8230c6458050f62ceea807d6fa - React-rendererdebug: df7afc9877169d55fbecfce74416cc6af662567b - React-RuntimeApple: 0c76864f92c00a5981d701827e330ec80f16bf63 - React-RuntimeCore: 77879f28adc341f480412b80a54cd84bd24ad75e - React-runtimeexecutor: bc16060a4c54090438429aaf78f202e0ac96c312 - React-RuntimeHermes: 8beb0059a1cd872962dd0c31af47571aa79a1679 - React-runtimescheduler: f93fc040efe0ea53a1a7084219e93cc51173662a - React-timing: e48ea4ff6e85c2535584362bf1e06f1dd72818e1 - React-utils: 9abfd64c6c7db115647e2a23579404af2df7aff9 - ReactAppDependencyProvider: 2a5ca010214ea35d7e2f4dd7dc3fb44dc932e164 - ReactCodegen: 9ea2a582b24e8187171a46503f2b8f0ece6afeaa - ReactCommon: ff72ee254f88c361ebf83c6b5f7a3f45bb58f989 - ReactCommon-Samples: 07df5b3c7c8778149aaaf71fb7a23093b2f510e4 + RCTDeprecation: 3a51da4c0e2a533c893971c2171d164974bc5214 + RCTRequired: d26a2245fa986ca16a6c93d91e41beeeb7a8aa3f + RCTTypeSafety: e9598921dd4338d6dcb7b4ba0b7b92f84cdcc25e + React: 713c6b114dfaddd4e58bc0e3804334f2a170b754 + React-callinvoker: 4441303f80922bcab09bd3e401738c1a7f3ffe11 + React-Core: 1647c97526fa4f1ea42365283e03649a53297d2e + React-CoreModules: 4c3d70d404ab9b87c7775e0293f53f9926663039 + React-cxxreact: a51f7392e614e975f03845504cc253c812014a95 + React-debug: 77c881c70aef8f5787761005eeb57e437a7d0a5b + React-defaultsnativemodule: e6b4fadf89fd6c8b8f5a3e04d5c2643ccdfe82b8 + React-domnativemodule: 935765aae2d5cee829e14ef7f68bae607b985262 + React-Fabric: 51b47e25e8ea701e0de18df49ecfacde647dcef0 + React-FabricComponents: 3563263621533b915a6634cd7634f3bac316c302 + React-FabricImage: 81f78d0cc89a824c6842493b19c20d50d5e0eacd + React-featureflags: ccf1419c575fa7fd7cc558781bdd71ef9f671735 + React-featureflagsnativemodule: 6e11d8ae01637ee30a2be5c65cb9363c672f4e7c + React-graphics: 211215400fa45680369a528e33f8a1bd0c53e06c + React-hermes: bdbe62b8a2faee475a82783785a4dc5d523d86fc + React-idlecallbacksnativemodule: 1a569d82993b763b2fabe1e1632bb733f9d67f30 + React-ImageManager: 7ec5c6e6cd9b9025f2c0a5ac60469fd5a41b87a0 + React-jserrorhandler: 98669ab3fc66c77862c5e757a44f8d7a6569ee3a + React-jsi: dfa0088e5654a951995d4deac1bb9fcdb3f4caf7 + React-jsiexecutor: 2afac999079f68d80d3af10bfff584f52c754a13 + React-jsinspector: ed95bb4e7e40f5b217007635dd138b0bec18ee5c + React-jsinspectorcdp: ceba155d82ef6be17948c6dd719af7d76ccc7849 + React-jsinspectornetwork: 3d24ed2f68f45e644a2cd1b58a2e7f2a6c2362bf + React-jsinspectortracing: 16f01f653a451f0180e0dd9c3d18adf35611bb89 + React-jsitooling: 4bd008cf273ba5615f3d27ea29cbd984dd22c0d7 + React-jsitracing: d2ee2605ab10432c31c42a3b1a8c7dd2d387f3d3 + React-logger: ce833a4ee1f377d1b27d6a70db5e49f539dd3fc6 + React-Mapbuffer: f0c91e870f86a23ccf80ab9527d95f37e834e24e + React-microtasksnativemodule: be6fa55f64e8de5a53f3e9d01feb91d6682af78d + React-NativeModulesApple: f75e771a53921934a0c6120e2bc7ee7dfb7c8728 + React-oscompat: e324ee1ba89eb09d59c8e346748c758cb87a2ce3 + React-perflogger: 08d464e4b97e53f74e6d8a1e4199e96f6ef8fd97 + React-performancetimeline: b35d1855146b516a8a45639ea2809379d6990a50 + React-RCTActionSheet: e995bcd8831351318c94bfa3e585178dc15934c8 + React-RCTAnimation: 0bf88d7b156c5c47cdb74fe630e521bcbb9baa9c + React-RCTAppDelegate: 910087f517dc84af72c85d17973ccc1c1118a297 + React-RCTBlob: 57f0deea9e2b6acc4165c4fd85d1515ed572da82 + React-RCTFabric: 93ce57846073175be95690ea04cd31326b05ed58 + React-RCTFBReactNativeSpec: 1aeba7991a5dcead5b2698f43b0f6c7f43105109 + React-RCTImage: 07f30e864a1329886d3f1b870e795c2be9bee4a6 + React-RCTLinking: d1431042ba333062262e0238f8337afb929976d8 + React-RCTNetwork: 5e4f2515221b263a2131fb34382c6c4486f8b31b + React-RCTPushNotification: 851b46f34487ead85ecff7a1f88b4e96b920d6fb + React-RCTRuntime: adde7ead94b95216b2ed43923dd6111c4a9b9bbd + React-RCTSettings: 7f123bcbf1feb7747dd62343231bdfaba42542bc + React-RCTTest: 2f828e7e801cc79410c53d28a36c7ee20d956d28 + React-RCTText: fb56147304f7e3ffc790310a83a099ade9d1f930 + React-RCTVibration: 12044b012f28bcdf52d1b3bcef0c2645a56dda1b + React-rendererconsistency: fde6f437f72fb837be955c7d287c5f1a1fe47212 + React-renderercss: c57968265fbec6bbd00af273bac6f795874b3148 + React-rendererdebug: a28985b812b04903f7e13d9aff7748bc3ec7a72d + React-RuntimeApple: f4888b94562b29f18ff96b18f6e3cf958dfbc1a9 + React-RuntimeCore: c49192fe880e0452d96b16c729064d1d489a0e8e + React-runtimeexecutor: 15eb9796b1efe4eee86e020799026723dc4c99cc + React-RuntimeHermes: 41b97445036fc60f2447c5c69b9f1639de65292b + React-runtimescheduler: eee88df3c5fb6a30a220e524fd282e44a282a1ca + React-timing: c6ce3a683af45aecee166b49348cd094170a7e36 + React-utils: 082cd4a9663f63b4138bc2e068a5a93dc7e0adff + ReactAppDependencyProvider: 3b7ece00025ce3482570139b0dbe115e639688ca + ReactCodegen: 8e3c013e0eb89c074ead06a423def5ea2db1156d + ReactCommon: 61fd53636b15a5dc300d5e31105a76f773a918fd + ReactCommon-Samples: 790cf726ab1550f9cdc8682ad2af2e3394e4eb9f ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 15c07d37869e68f295849c2af164cea21957f345 + Yoga: 72ab8318e9f1910fbdd236b045eb5455c8415d92 PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From 7404fb620bb609dddd788bef16fdb9390ef2478b Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 12 Aug 2025 09:47:45 +0000 Subject: [PATCH 057/312] Release 0.81.0 #publish-packages-to-npm&latest --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index 8c3a3973f1a..1f9e3a85f66 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0-rc.5", - "@react-native/metro-config": "0.81.0-rc.5", + "@react-native/metro-babel-transformer": "0.81.0", + "@react-native/metro-config": "0.81.0", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 7bb77ef5c57..0f003391b90 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 59d7bf3a278..f8f7e02e6b1 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0-rc.5" + "@react-native/codegen": "0.81.0" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 462c5f1c2d1..3bd526bcb6b 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0-rc.5", + "@react-native/dev-middleware": "0.81.0", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 556cd7e0749..adf8c463431 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 553a9aa2eaf..d3bf406fb34 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 9aaa3898977..ae0af8a00b9 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 45cbcbe5616..e91cdbdc23a 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0-rc.5", + "@react-native/debugger-frontend": "0.81.0", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 191b9c1a724..1fbbb922e89 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0-rc.5", + "@react-native/eslint-plugin": "0.81.0", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 1a3a6c390b1..8fab78a52b5 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 3ed4f165a25..083659f9ea6 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0-rc.5", + "@react-native/codegen": "0.81.0", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index a7632a97adb..43f5f4b4db7 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index ae2e397d462..81da581acb7 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0-rc.5", - "@react-native/metro-babel-transformer": "0.81.0-rc.5", + "@react-native/js-polyfills": "0.81.0", + "@react-native/metro-babel-transformer": "0.81.0", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index b6ebbccdaf7..840e71427ae 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index c0b5e8b5d46..198d66492b9 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 3603693db58..898267641eb 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 850ac8432a8..70a99976c20 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0-rc.5", + "@react-native/babel-plugin-codegen": "0.81.0", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index cce1e180ab6..d725b713c5c 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.5", + "@react-native/babel-preset": "0.81.0", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index ad60124fb74..4d3cf476859 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index d4396895af5..f520abf077a 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0-rc.5" + "@react-native/codegen": "0.81.0" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index bb5d4ee5d40..3511f853d17 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0-rc.5" + "@react-native/codegen": "0.81.0" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 2db95d7ed91..d481370abaa 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0-rc.5", - "react-native": "0.81.0-rc.5" + "@react-native/babel-preset": "0.81.0", + "react-native": "0.81.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 6e58c4a2e43..9027e907258 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -18,5 +18,5 @@ export const version: $ReadOnly<{ major: 0, minor: 81, patch: 0, - prerelease: 'rc.5', + prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index ffe5881c0ce..cf6ecb87ce3 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(81), RCTVersionPatch: @(0), - RCTVersionPrerelease: @"rc.5", + RCTVersionPrerelease: [NSNull null], }; }); return __rnVersion; diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 3451bcbf058..1ce215e65ca 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0-rc.5 +VERSION_NAME=0.81.0 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 06c2f897291..c4df682e795 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -15,6 +15,6 @@ public object ReactNativeVersion { "major" to 0, "minor" to 81, "patch" to 0, - "prerelease" to "rc.5" + "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index e35a4d9019d..144429eca42 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -22,7 +22,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 81; int32_t Patch = 0; - std::string_view Prerelease = "rc.5"; + std::string_view Prerelease = ""; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 22bb8245441..0618645c4af 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0-rc.5", - "@react-native/codegen": "0.81.0-rc.5", - "@react-native/community-cli-plugin": "0.81.0-rc.5", - "@react-native/gradle-plugin": "0.81.0-rc.5", - "@react-native/js-polyfills": "0.81.0-rc.5", - "@react-native/normalize-colors": "0.81.0-rc.5", - "@react-native/virtualized-lists": "0.81.0-rc.5", + "@react-native/assets-registry": "0.81.0", + "@react-native/codegen": "0.81.0", + "@react-native/community-cli-plugin": "0.81.0", + "@react-native/gradle-plugin": "0.81.0", + "@react-native/js-polyfills": "0.81.0", + "@react-native/normalize-colors": "0.81.0", + "@react-native/virtualized-lists": "0.81.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 01b0d127d79..ec7a9355843 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.5\\" +version = \\"0.81.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.5\\" +version = \\"0.81.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -839,7 +839,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.5\\" +version = \\"0.81.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -877,7 +877,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0-rc.5\\" +version = \\"0.81.0\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 8ac0538da3d..03ca65609de 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0-rc.5", - "@react-native/popup-menu-android": "0.81.0-rc.5", + "@react-native/new-app-screen": "0.81.0", + "@react-native/popup-menu-android": "0.81.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index e27f4a64fe0..1d1045612db 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index 3fe8b6f34aa..a9982c8082b 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0-rc.5", + "version": "0.81.0", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 4af31dd14ad..56d7603a99e 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0-rc.5" + "react-native": "0.81.0" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0-rc.5", - "@react-native/core-cli-utils": "0.81.0-rc.5", - "@react-native/eslint-config": "0.81.0-rc.5", - "@react-native/metro-config": "0.81.0-rc.5", - "@react-native/typescript-config": "0.81.0-rc.5", + "@react-native/babel-preset": "0.81.0", + "@react-native/core-cli-utils": "0.81.0", + "@react-native/eslint-config": "0.81.0", + "@react-native/metro-config": "0.81.0", + "@react-native/typescript-config": "0.81.0", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index 5fd54ffe904..b4fea5faec4 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0-rc.5" + "@react-native/codegen": "0.81.0" }, "devDependencies": { "@babel/core": "^7.25.2", From 6526a98d68dbc8578ea15cbf117c0a216c6e9af0 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 27 Aug 2025 10:24:51 +0100 Subject: [PATCH 058/312] [iOS][precompile] Support dynamic static linkage with prebuilts (#53477) * [ios][precompile] Add use_frameworks resolve method To be able to handle cocoapods USE_FRAMEWORKS with both dynamic/static linkage and precompiled we needed a common way to resolve this. The issue was that when using precompiled and USE_FRAMEWORKS our precompiled framework caused the resulting Pods project to only include header files - hence there where no need to change the header_mappings_dir which a lot of the podspecs did. A method was added that handles this in a common way. * [ios][precompile] added resolve_use_frameworks to podspecs Replaced logic for resolving header mappings and module name using the new method `resolve_use_frameworks` in all podspecs. Also added `React-oscompat` dependency on `React-jsiinspector_modern` which failed when linkage was "dynamic". * [ios][precompile] added explicit handling of ReactCoden When using precompiled and building with frameworks (USE_FRAMEWORKS) we need to explicitly add the correct path to ReactCodegen when calling `create_header_search_path_for_frameworks` to ensure libraries can access their codegen files. This commit adds an explicit check to make sure we add the correct path when using frameworks and the pod is ReactCodegen. Added includes in the NativeCXXModuleExample.cpp file to test this. * Update packages/react-native/scripts/cocoapods/utils.rb Co-authored-by: Riccardo Cipolleschi * codereview: removed test include files * codereview: fixed issue in ruby.rb After a github `suggestion` we had a superfluous `end`. Sorry for that. --------- Co-authored-by: Christian Falch Co-authored-by: Christian Falch <875252+chrfalch@users.noreply.github.com> --- .../React/React-RCTFBReactNativeSpec.podspec | 5 +---- .../React/Runtime/React-RCTRuntime.podspec | 4 +--- .../react-native/ReactCommon/React-Fabric.podspec | 5 +---- .../ReactCommon/React-FabricComponents.podspec | 5 +---- .../ReactCommon/React-FabricImage.podspec | 5 +---- .../ReactCommon/React-Mapbuffer.podspec | 5 +---- .../react-native/ReactCommon/ReactCommon.podspec | 5 ++--- .../hermes/executor/React-jsitracing.podspec | 5 +---- .../jserrorhandler/React-jserrorhandler.podspec | 6 ++---- .../jsinspector-modern/React-jsinspector.podspec | 5 ++--- .../cdp/React-jsinspectorcdp.podspec | 5 +---- .../network/React-jsinspectornetwork.podspec | 5 +---- .../tracing/React-jsinspectortracing.podspec | 5 +---- .../jsitooling/React-jsitooling.podspec | 5 +---- .../ReactCommon/react/debug/React-debug.podspec | 5 +---- .../react/featureflags/React-featureflags.podspec | 5 +---- .../platform/ios/React-NativeModulesApple.podspec | 5 ++--- .../defaults/React-defaultsnativemodule.podspec | 5 +---- .../nativemodule/dom/React-domnativemodule.podspec | 5 +---- .../React-featureflagsnativemodule.podspec | 5 +---- .../React-idlecallbacksnativemodule.podspec | 5 +---- .../React-microtasksnativemodule.podspec | 5 +---- .../samples/ReactCommon-Samples.podspec | 2 ++ .../timeline/React-performancetimeline.podspec | 5 +---- .../consistency/React-rendererconsistency.podspec | 6 ++---- .../react/renderer/css/React-renderercss.podspec | 7 ++----- .../renderer/debug/React-rendererdebug.podspec | 5 +---- .../react/renderer/graphics/React-graphics.podspec | 6 +++--- .../platform/ios/React-ImageManager.podspec | 5 +---- .../React-runtimescheduler.podspec | 5 +---- .../react/runtime/React-RuntimeCore.podspec | 5 +---- .../react/runtime/React-RuntimeHermes.podspec | 5 +---- .../platform/ios/React-RuntimeApple.podspec | 5 +---- .../ReactCommon/react/timing/React-timing.podspec | 7 +++---- .../ReactCommon/react/utils/React-utils.podspec | 6 +++--- .../runtimeexecutor/React-runtimeexecutor.podspec | 5 +++-- packages/react-native/scripts/cocoapods/utils.rb | 14 +++++++++++++- packages/react-native/scripts/react_native_pods.rb | 14 ++++++++++++++ 38 files changed, 78 insertions(+), 134 deletions(-) diff --git a/packages/react-native/React/React-RCTFBReactNativeSpec.podspec b/packages/react-native/React/React-RCTFBReactNativeSpec.podspec index f5ebc834cbe..1abb84e7e47 100644 --- a/packages/react-native/React/React-RCTFBReactNativeSpec.podspec +++ b/packages/react-native/React/React-RCTFBReactNativeSpec.podspec @@ -45,10 +45,7 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), } - if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = 'FBReactNativeSpec' - s.module_name = 'React_RCTFBReactNativeSpec' - end + resolve_use_frameworks(s, header_mappings_dir: 'FBReactNativeSpec', module_name: "React_RCTFBReactNativeSpec") s.dependency "React-jsi" s.dependency "RCTRequired" diff --git a/packages/react-native/React/Runtime/React-RCTRuntime.podspec b/packages/react-native/React/Runtime/React-RCTRuntime.podspec index 2b1ca69d69e..cd5f7f8bd3b 100644 --- a/packages/react-native/React/Runtime/React-RCTRuntime.podspec +++ b/packages/react-native/React/Runtime/React-RCTRuntime.podspec @@ -35,9 +35,7 @@ Pod::Spec.new do |s| s.header_dir = header_dir s.module_name = module_name - if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = "./" - end + resolve_use_frameworks(s, header_mappings_dir: "./") s.pod_target_xcconfig = { "OTHER_CFLAGS" => "$(inherited) " + new_arch_flags, diff --git a/packages/react-native/ReactCommon/React-Fabric.podspec b/packages/react-native/ReactCommon/React-Fabric.podspec index 0a213adb955..28a6fc6e78b 100644 --- a/packages/react-native/ReactCommon/React-Fabric.podspec +++ b/packages/react-native/ReactCommon/React-Fabric.podspec @@ -32,10 +32,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = './' - s.module_name = 'React_Fabric' - end + resolve_use_frameworks(s, header_mappings_dir: "./", module_name: "React_Fabric") s.dependency "React-jsiexecutor" s.dependency "RCTRequired" diff --git a/packages/react-native/ReactCommon/React-FabricComponents.podspec b/packages/react-native/ReactCommon/React-FabricComponents.podspec index 3448123ee3f..9ee30be053f 100644 --- a/packages/react-native/ReactCommon/React-FabricComponents.podspec +++ b/packages/react-native/ReactCommon/React-FabricComponents.podspec @@ -49,10 +49,7 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_path.join(" "), } - if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' - s.module_name = 'React_FabricComponents' - end + resolve_use_frameworks(s, header_mappings_dir: "./", module_name: "React_FabricComponents") s.dependency "React-jsiexecutor" s.dependency "RCTRequired" diff --git a/packages/react-native/ReactCommon/React-FabricImage.podspec b/packages/react-native/ReactCommon/React-FabricImage.podspec index 0a20f733523..588b4c4d104 100644 --- a/packages/react-native/ReactCommon/React-FabricImage.podspec +++ b/packages/react-native/ReactCommon/React-FabricImage.podspec @@ -50,10 +50,7 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_path.join(" ") } - if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' - s.module_name = 'React_FabricImage' - end + resolve_use_frameworks(s, header_mappings_dir: './', module_name: "React_FabricImage") s.dependency "React-jsiexecutor", version s.dependency "RCTRequired", version diff --git a/packages/react-native/ReactCommon/React-Mapbuffer.podspec b/packages/react-native/ReactCommon/React-Mapbuffer.podspec index 29de1623771..6df5afd9f1e 100644 --- a/packages/react-native/ReactCommon/React-Mapbuffer.podspec +++ b/packages/react-native/ReactCommon/React-Mapbuffer.podspec @@ -32,10 +32,7 @@ Pod::Spec.new do |s| s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => ["\"$(PODS_TARGET_SRCROOT)\""], "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard() } - if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' - s.module_name = 'React_Mapbuffer' - end + resolve_use_frameworks(s, header_mappings_dir: './', module_name: "React_Mapbuffer") add_dependency(s, "React-debug") add_rn_third_party_dependencies(s) diff --git a/packages/react-native/ReactCommon/ReactCommon.podspec b/packages/react-native/ReactCommon/ReactCommon.podspec index b672e27c3a6..83e81864640 100644 --- a/packages/react-native/ReactCommon/ReactCommon.podspec +++ b/packages/react-native/ReactCommon/ReactCommon.podspec @@ -32,9 +32,8 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = './' - end + + resolve_use_frameworks(s, header_mappings_dir: './') add_rn_third_party_dependencies(s) add_rncore_dependency(s) diff --git a/packages/react-native/ReactCommon/hermes/executor/React-jsitracing.podspec b/packages/react-native/ReactCommon/hermes/executor/React-jsitracing.podspec index 9bfa3d1ef78..9ee322ba448 100644 --- a/packages/react-native/ReactCommon/hermes/executor/React-jsitracing.podspec +++ b/packages/react-native/ReactCommon/hermes/executor/React-jsitracing.podspec @@ -32,10 +32,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' - s.module_name = 'React_jsitracing' - end + resolve_use_frameworks(s, header_mappings_dir: './', module_name: "React_jsitracing") s.dependency "React-jsi" end diff --git a/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec b/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec index 9433e579bdc..a5cc33ecc99 100644 --- a/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +++ b/packages/react-native/ReactCommon/jserrorhandler/React-jserrorhandler.podspec @@ -33,10 +33,8 @@ Pod::Spec.new do |s| "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard() } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = '../' - s.module_name = 'React_jserrorhandler' - end + + resolve_use_frameworks(s, header_mappings_dir: '../', module_name: "React_jserrorhandler") s.dependency "React-jsi" s.dependency "React-cxxreact" diff --git a/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec b/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec index 443088bcad4..78d77ffa539 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec @@ -44,10 +44,9 @@ Pod::Spec.new do |s| "PUBLIC_HEADERS_FOLDER_PATH" => "#{module_name}.framework/Headers/#{header_dir}" } : {}) - if ENV['USE_FRAMEWORKS'] - s.module_name = module_name - end + resolve_use_frameworks(s, module_name: module_name) + add_dependency(s, "React-oscompat") # Needed for USE_FRAMEWORKS=dynamic s.dependency "React-featureflags" add_dependency(s, "React-runtimeexecutor", :additional_framework_paths => ["platform/ios"]) s.dependency "React-jsi" diff --git a/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec b/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec index 224c512030e..cff367fda21 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec @@ -41,10 +41,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES"} - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = module_name - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: module_name) add_rn_third_party_dependencies(s) add_rncore_dependency(s) diff --git a/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec b/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec index 6f79020f0c3..d17a80a0b00 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec @@ -41,10 +41,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES"} - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = module_name - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: module_name) add_dependency(s, "React-jsinspectorcdp", :framework_name => 'jsinspector_moderncdp') add_dependency(s, "React-featureflags") diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec b/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec index 21206aba7aa..8e3c2d61b93 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec @@ -41,10 +41,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES"} - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = module_name - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: module_name) s.dependency "React-oscompat" s.dependency "React-timing" diff --git a/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec b/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec index 03e9ad0896c..4b73c020dce 100644 --- a/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec +++ b/packages/react-native/ReactCommon/jsitooling/React-jsitooling.podspec @@ -28,10 +28,7 @@ Pod::Spec.new do |s| s.source_files = podspec_sources("react/runtime/*.{cpp,h}", "react/runtime/*.h") s.header_dir = "react/runtime" - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "JSITooling" - s.header_mappings_dir = "./" - end + resolve_use_frameworks(s, header_mappings_dir: "./", module_name: "JSITooling") s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), diff --git a/packages/react-native/ReactCommon/react/debug/React-debug.podspec b/packages/react-native/ReactCommon/react/debug/React-debug.podspec index b68c407a2f4..7b61bc7d0be 100644 --- a/packages/react-native/ReactCommon/react/debug/React-debug.podspec +++ b/packages/react-native/ReactCommon/react/debug/React-debug.podspec @@ -30,8 +30,5 @@ Pod::Spec.new do |s| s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_debug" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_debug") end diff --git a/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec b/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec index b5335894e5b..27417799517 100644 --- a/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec +++ b/packages/react-native/ReactCommon/react/featureflags/React-featureflags.podspec @@ -37,10 +37,7 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_featureflags" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_featureflags") add_rn_third_party_dependencies(s) add_rncore_dependency(s) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec index 063f0de34fc..089f80ea3c9 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec @@ -31,9 +31,8 @@ Pod::Spec.new do |s| "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = './' - end + + resolve_use_frameworks(s, header_mappings_dir: './') s.source_files = podspec_sources("ReactCommon/**/*.{mm,cpp,h}", "ReactCommon/**/*.{h}") diff --git a/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec index 3c97b10ea0c..88cfdc7f30c 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "OTHER_CFLAGS" => "$(inherited)", "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_defaultsnativemodule" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_defaultsnativemodule") s.dependency "React-jsi" s.dependency "React-jsiexecutor" diff --git a/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec index ca55e1a8a24..6119ccb4105 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec @@ -40,10 +40,7 @@ Pod::Spec.new do |s| "OTHER_CFLAGS" => "$(inherited)", "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_domnativemodule" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_domnativemodule") s.dependency "React-jsi" s.dependency "React-jsiexecutor" diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec index 3be0cac40b5..6d4dafcc707 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "OTHER_CFLAGS" => "$(inherited)", "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_featureflagsnativemodule" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_featureflagsnativemodule") s.dependency "React-jsi" s.dependency "React-jsiexecutor" diff --git a/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec index d6bc746f77b..46327b2c74d 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "OTHER_CFLAGS" => "$(inherited)", "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.module_name = "idlecallbacksnativemodule" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "idlecallbacksnativemodule") s.dependency "React-jsi" s.dependency "React-jsiexecutor" diff --git a/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec b/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec index df364406aff..a41e3d3a352 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_microtasksnativemodule" - s.header_mappings_dir = "../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_microtasksnativemodule") s.dependency "React-jsi" s.dependency "React-jsiexecutor" diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec b/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec index fc5b29a94b0..051ee3fc86c 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec @@ -40,6 +40,8 @@ Pod::Spec.new do |s| s.framework = "UIKit" if ENV['USE_FRAMEWORKS'] + # Do not use resolve_use_frameworks here - since we're including source files. + # Then it is not needed. s.header_mappings_dir = './' end diff --git a/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec b/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec index 9f518ff6e8b..6e190bbfe6d 100644 --- a/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec +++ b/packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' ')} - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_performancetimeline" - s.header_mappings_dir = "../../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_performancetimeline") s.dependency "React-featureflags" add_dependency(s, "React-jsinspectortracing", :framework_name => 'jsinspector_moderntracing') diff --git a/packages/react-native/ReactCommon/react/renderer/consistency/React-rendererconsistency.podspec b/packages/react-native/ReactCommon/react/renderer/consistency/React-rendererconsistency.podspec index 3dd85feeb2c..216fd443ad3 100644 --- a/packages/react-native/ReactCommon/react/renderer/consistency/React-rendererconsistency.podspec +++ b/packages/react-native/ReactCommon/react/renderer/consistency/React-rendererconsistency.podspec @@ -38,8 +38,6 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' ')} - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_rendererconsistency" - s.header_mappings_dir = "../../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_rendererconsistency") + end diff --git a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec index 17f1d012023..c16a9a875b2 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec +++ b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec @@ -18,7 +18,7 @@ end header_search_paths = [] -if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() +if ENV['USE_FRAMEWORKS'] header_search_paths << "\"$(PODS_TARGET_SRCROOT)/../../..\"" # this is needed to allow the renderer/css access its own files end @@ -40,10 +40,7 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES", } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_renderercss" - s.header_mappings_dir = "../../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_renderercss") add_dependency(s, "React-debug") add_dependency(s, "React-utils") diff --git a/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec b/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec index fe20e606387..41df93a4f64 100644 --- a/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec +++ b/packages/react-native/ReactCommon/react/renderer/debug/React-rendererdebug.podspec @@ -40,10 +40,7 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_rendererdebug" - s.header_mappings_dir = "../../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_rendererdebug") add_dependency(s, "React-debug") add_rn_third_party_dependencies(s) diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec index 1af95039868..87e7cb21045 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec +++ b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec @@ -34,12 +34,12 @@ Pod::Spec.new do |s| s.header_dir = "react/renderer/graphics" s.framework = "UIKit" - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_graphics" - s.header_mappings_dir = "../../.." + if ENV['USE_FRAMEWORKS'] header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_graphics") + s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", "HEADER_SEARCH_PATHS" => header_search_paths.join(" "), "DEFINES_MODULE" => "YES", diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec index b21eb5b7c10..50862be6838 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec @@ -34,10 +34,7 @@ Pod::Spec.new do |s| s.source_files = podspec_sources(source_files, "**/*.h") s.header_dir = "react/renderer/imagemanager" - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_ImageManager" - s.header_mappings_dir = "./" - end + resolve_use_frameworks(s, header_mappings_dir: "./", module_name: "React_ImageManager") s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec index ca21eafd2c0..56823e61d62 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' ')} - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_runtimescheduler" - s.header_mappings_dir = "../../.." - end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_runtimescheduler") add_dependency(s, "React-runtimeexecutor", :additional_framework_paths => ["platform/ios"]) s.dependency "React-callinvoker" diff --git a/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec b/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec index 46c3c994495..24b163f5e4d 100644 --- a/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec +++ b/packages/react-native/ReactCommon/react/runtime/React-RuntimeCore.podspec @@ -33,10 +33,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = '../../' - s.module_name = 'React_RuntimeCore' - end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_RuntimeCore") s.dependency "React-jsiexecutor" s.dependency "React-cxxreact" diff --git a/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec b/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec index c213513db89..ac7d4419db2 100644 --- a/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec +++ b/packages/react-native/ReactCommon/react/runtime/React-RuntimeHermes.podspec @@ -32,10 +32,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = '../../' - s.module_name = 'React_RuntimeHermes' - end + resolve_use_frameworks(s, header_mappings_dir: "../../", module_name: "React_RuntimeHermes") s.dependency "React-jsitracing" s.dependency "React-jsi" diff --git a/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec b/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec index c40bcd43d51..7c84db0bca9 100644 --- a/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec +++ b/packages/react-native/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec @@ -38,10 +38,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "GCC_WARN_PEDANTIC" => "YES" } - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = './' - s.module_name = 'React_RuntimeApple' - end + resolve_use_frameworks(s, header_mappings_dir: "./", module_name: "React_RuntimeApple") s.dependency "React-jsiexecutor" s.dependency "React-cxxreact" diff --git a/packages/react-native/ReactCommon/react/timing/React-timing.podspec b/packages/react-native/ReactCommon/react/timing/React-timing.podspec index cb781783c81..8168f2b4635 100644 --- a/packages/react-native/ReactCommon/react/timing/React-timing.podspec +++ b/packages/react-native/ReactCommon/react/timing/React-timing.podspec @@ -37,8 +37,7 @@ Pod::Spec.new do |s| "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), "DEFINES_MODULE" => "YES" } - if ENV['USE_FRAMEWORKS'] - s.module_name = "React_timing" - s.header_mappings_dir = "./" - end + resolve_use_frameworks(s, header_mappings_dir: "./", module_name: "React_timing") + + add_dependency(s, "React-debug") end diff --git a/packages/react-native/ReactCommon/react/utils/React-utils.podspec b/packages/react-native/ReactCommon/react/utils/React-utils.podspec index 27eeb6b40b6..d3061f63bb0 100644 --- a/packages/react-native/ReactCommon/react/utils/React-utils.podspec +++ b/packages/react-native/ReactCommon/react/utils/React-utils.podspec @@ -34,12 +34,12 @@ Pod::Spec.new do |s| s.header_dir = "react/utils" s.exclude_files = "tests" - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.module_name = "React_utils" - s.header_mappings_dir = "../.." + if ENV['USE_FRAMEWORKS'] header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] end + resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_utils") + s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), diff --git a/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec b/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec index 86216f7d89b..155735ca9d8 100644 --- a/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +++ b/packages/react-native/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec @@ -33,11 +33,12 @@ Pod::Spec.new do |s| s.source_files = podspec_sources(["ReactCommon/*.{m,mm,cpp,h}", "platform/ios/**/*.{m,mm,cpp,h}"], ["ReactCommon/*.h", "platform/ios/**/*.h"]) s.header_dir = "ReactCommon" - if ENV['USE_FRAMEWORKS'] && ReactNativeCoreUtils.build_rncore_from_source() - s.header_mappings_dir = '.' + if ENV['USE_FRAMEWORKS'] header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] end + resolve_use_frameworks(s, header_mappings_dir: ".") + s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), diff --git a/packages/react-native/scripts/cocoapods/utils.rb b/packages/react-native/scripts/cocoapods/utils.rb index 2cd7ef43725..29464f1bc56 100644 --- a/packages/react-native/scripts/cocoapods/utils.rb +++ b/packages/react-native/scripts/cocoapods/utils.rb @@ -258,7 +258,8 @@ def self.create_header_search_path_for_frameworks(base_folder, pod_name, framewo search_paths = [] # When building using the prebuilt rncore we can't use framework folders as search paths since these aren't created - if ReactNativeCoreUtils.build_rncore_from_source() + # Except for when adding search path for ReactCodegen since it contains source code. + if ReactNativeCoreUtils.build_rncore_from_source() || pod_name === "ReactCodegen" platforms = $RN_PLATFORMS != nil ? $RN_PLATFORMS : [] if platforms.empty?() || platforms.length() == 1 @@ -699,4 +700,15 @@ def self.add_flag_to_map_with_inheritance(map, field, flag) end end end + + def self.resolve_use_frameworks(spec, header_mappings_dir: nil, module_name: nil) + return unless ENV['USE_FRAMEWORKS'] + if module_name + spec.module_name = module_name + end + + if header_mappings_dir != nil && ReactNativeCoreUtils.build_rncore_from_source() + spec.header_mappings_dir = header_mappings_dir + end + end end diff --git a/packages/react-native/scripts/react_native_pods.rb b/packages/react-native/scripts/react_native_pods.rb index 676d8b80eb4..707b0f0bd69 100644 --- a/packages/react-native/scripts/react_native_pods.rb +++ b/packages/react-native/scripts/react_native_pods.rb @@ -229,6 +229,20 @@ def folly_flags() return NewArchitectureHelper.folly_compiler_flags end +# Resolve the spec for use with the USE_FRAMEWORKS environment variable. To avoid each podspec +# to manually specify the header mappings and module name, we can use this helper function. +# This helper will also resolve header mappings if we're building from source. Precompiled +# React-Core will not generate frameworks since their podspec files only contains the +# header files and no source code - so header_mappings should be the same as for without USE_FRAMEWORKS +# +# Parameters: +# - s: the spec to modify +# - header_mappings_dir: the directory to map headers when building Pod header structure +# - module_name: the name of the module when exposed to swift +def resolve_use_frameworks(spec, header_mappings_dir: nil, module_name: nil) + ReactNativePodsUtils.resolve_use_frameworks(spec, :header_mappings_dir => header_mappings_dir, :module_name => module_name) +end + # Add a dependency to a spec, making sure that the HEADER_SERACH_PATHS are set properly. # This function automate the requirement to specify the HEADER_SEARCH_PATHS which was error prone # and hard to pull out properly to begin with. From 5f7542d3a0a36791590a5900e83bf0af77e10b0d Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Sun, 24 Aug 2025 14:18:42 -0700 Subject: [PATCH 059/312] Mark `@react-native/metro-config` as optional peer to fix warning (#53314) Summary: The `react-native/metro-config` peer was added in https://github.com/facebook/react-native/commit/fe2bcbf4ba7ce983fac0cd09727c165517b6337f / https://github.com/facebook/react-native/issues/51836 by robhogan Side-note: It's pulled in via `react-native/community-cli-plugin` which is a direct dependency of `react-native` for the `scripts/bundle.js` script. While, for expo, we'd love to find a way to make this an optional dependency (to avoid excessive deps that `expo` replaces otherwise), for now, it's a direct dependency. The problem here is that this isn't optional, which means: - with auto-installing peer dependencies it is directly fulfilled (while `react-native-community/cli` is already marked as optional and skipped) - with legacy/non-auto peer-dependencies it is flagged as missing, but in an Expo project it wouldn't make sense to install directly This causes a **package manager regression in the form of either a peer dependency warning**, that shouldn't be fulfilled in an Expo project, or (in the best case scenario) pulls in dependencies [that a user does not need](https://npmgraph.js.org/?q=%40react-native%2Fmetro-config#zoom=w&select=exact%3A%40react-native%2Fmetro-config%400.81.0). An error message is already in place to inform the user of this being missing when it's not installed, so marking it as optional seems appropriate. ## Changelog: [INTERNAL] [FIXED] Mark added `react-native/metro-config` peer dependency as optional [GENERAL] [FIXED] - a11y: fix `aria-label` on `TextInput` Pull Request resolved: https://github.com/facebook/react-native/pull/53051 Test Plan: Run RNTester => TextInput => Accessibility section under Accessibility Inspector or screen reader. iOS fixed: https://github.com/user-attachments/assets/68c3a2ef-7dfe-479c-97fc-cbe72108c45c iOS baseline: https://github.com/user-attachments/assets/2e8372ba-10dc-47d2-b6b1-9f664000de7d Reviewed By: andrewdacenko Differential Revision: D79635413 Pulled By: rshest fbshipit-source-id: dd2f583d67c6c6c6393e02c5fe534308e1e2f921 --- .../Components/TextInput/TextInput.js | 7 +++++- .../TextInput/__tests__/TextInput-test.js | 1 + .../Modal/RCTModalHostViewComponentView.mm | 22 +++++++++++++++++++ .../TextInput/TextInputExample.android.js | 13 +++++++++++ .../TextInput/TextInputExample.ios.js | 15 +++++++++++++ 5 files changed, 57 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/Components/TextInput/TextInput.js b/packages/react-native/Libraries/Components/TextInput/TextInput.js index 8bd86ccc2f0..1e95eb6d44a 100644 --- a/packages/react-native/Libraries/Components/TextInput/TextInput.js +++ b/packages/react-native/Libraries/Components/TextInput/TextInput.js @@ -618,6 +618,9 @@ function InternalTextInput(props: TextInputProps): React.Node { // so omitting onBlur and onFocus pressability handlers here. const {onBlur, onFocus, ...eventHandlers} = usePressability(config); + const _accessibilityLabel = + props?.['aria-label'] ?? props?.accessibilityLabel; + let _accessibilityState; if ( accessibilityState != null || @@ -681,6 +684,7 @@ function InternalTextInput(props: TextInputProps): React.Node { {...otherProps} {...eventHandlers} acceptDragAndDropTypes={props.experimental_acceptDragAndDropTypes} + accessibilityLabel={_accessibilityLabel} accessibilityState={_accessibilityState} accessible={accessible} submitBehavior={submitBehavior} @@ -744,8 +748,9 @@ function InternalTextInput(props: TextInputProps): React.Node { {...otherProps} {...colorProps} {...eventHandlers} - accessibilityState={_accessibilityState} + accessibilityLabel={_accessibilityLabel} accessibilityLabelledBy={_accessibilityLabelledBy} + accessibilityState={_accessibilityState} accessible={accessible} acceptDragAndDropTypes={props.experimental_acceptDragAndDropTypes} autoCapitalize={autoCapitalize} diff --git a/packages/react-native/Libraries/Components/TextInput/__tests__/TextInput-test.js b/packages/react-native/Libraries/Components/TextInput/__tests__/TextInput-test.js index bf63d695721..a33757e1e15 100644 --- a/packages/react-native/Libraries/Components/TextInput/__tests__/TextInput-test.js +++ b/packages/react-native/Libraries/Components/TextInput/__tests__/TextInput-test.js @@ -432,6 +432,7 @@ jest.unmock('../TextInput'); expect(instance.toJSON()).toMatchInlineSnapshot(` +@property (nonatomic, weak) UIView *accessibilityFocusedView; + @end @implementation RCTModalHostViewComponentView { @@ -148,6 +150,7 @@ - (void)ensurePresentedOnlyIfNeeded { BOOL shouldBePresented = !_isPresented && _shouldPresent && self.window; if (shouldBePresented) { + [self saveAccessibilityFocusedView]; self.viewController.presentationController.delegate = self; _isPresented = YES; @@ -179,6 +182,8 @@ - (void)ensurePresentedOnlyIfNeeded if (eventEmitter) { eventEmitter->onDismiss(ModalHostViewEventEmitter::OnDismiss{}); } + + [self restoreAccessibilityFocusedView]; }]; } } @@ -207,6 +212,23 @@ - (void)didMoveToSuperview [self ensurePresentedOnlyIfNeeded]; } +- (void)saveAccessibilityFocusedView +{ + id focusedElement = UIAccessibilityFocusedElement(nil); + if (focusedElement && [focusedElement isKindOfClass:[UIView class]]) { + self.accessibilityFocusedView = (UIView *)focusedElement; + } +} + +- (void)restoreAccessibilityFocusedView +{ + id viewToFocus = self.accessibilityFocusedView; + if (viewToFocus) { + UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, viewToFocus); + self.accessibilityFocusedView = nil; + } +} + #pragma mark - RCTFabricModalHostViewControllerDelegate - (void)boundsDidChange:(CGRect)newBounds diff --git a/packages/rn-tester/js/examples/TextInput/TextInputExample.android.js b/packages/rn-tester/js/examples/TextInput/TextInputExample.android.js index 930b241647b..eda21cd69be 100644 --- a/packages/rn-tester/js/examples/TextInput/TextInputExample.android.js +++ b/packages/rn-tester/js/examples/TextInput/TextInputExample.android.js @@ -451,6 +451,19 @@ const examples: Array = [ return ; }, }, + { + title: 'Accessibility', + render: function (): React.Node { + return ( + + accessibilityLabel prop + + aria-label prop + + + ); + }, + }, ]; module.exports = ({ diff --git a/packages/rn-tester/js/examples/TextInput/TextInputExample.ios.js b/packages/rn-tester/js/examples/TextInput/TextInputExample.ios.js index 62f9607de9e..0994b851ed0 100644 --- a/packages/rn-tester/js/examples/TextInput/TextInputExample.ios.js +++ b/packages/rn-tester/js/examples/TextInput/TextInputExample.ios.js @@ -1036,6 +1036,21 @@ const textInputExamples: Array = [ ); }, }, + { + title: 'Accessibility', + render: function (): React.Node { + return ( + + + + + + + + + ); + }, + }, ]; module.exports = ({ From e6e814cfc503aea0cdf661f4925436b7b30835e1 Mon Sep 17 00:00:00 2001 From: Vojtech Novak Date: Mon, 11 Aug 2025 06:36:15 -0700 Subject: [PATCH 062/312] fix cp command in ReactNativeDependencies.podspec (#53136) Summary: When running `RCT_USE_PREBUILT_RNCORE=1 RCT_USE_RN_DEP=1 pod install` I'm getting an error: `cp: framework/packages/react-native/..: File exists` This is not seen consistently by everyone but I've seen in reported one more time at Expo. Could be related to running MacOS 26. Somehow, apparently, the `..` is being treated as a literal directory name and cp is trying to create a directory named `..` inside `framework/packages/react-native/` which is not what we want. Using `/.` avoids that. --- What also seemed to work(around) was to change `mkdir -p framework/packages/react-native` to `mkdir -p framework/packages/` and then `cp` can create the `framework/packages/react-native/..` folder. But this is definitely more confusing. ## Changelog: Pick one each for the category and type tags: [IOS] [FIXED] - fix "file exists" error in `ReactNativeDependencies.podspec` Pull Request resolved: https://github.com/facebook/react-native/pull/53136 Test Plan: tested locally, and in CI on older macOS: https://github.com/expo/expo/pull/38631 (the ios build succeeds) Reviewed By: rshest Differential Revision: D79990895 Pulled By: cipolleschi fbshipit-source-id: 44ff9034800d3acd4e55ec39aabfb326382372cb --- .../third-party-podspecs/ReactNativeDependencies.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/third-party-podspecs/ReactNativeDependencies.podspec b/packages/react-native/third-party-podspecs/ReactNativeDependencies.podspec index 32ebe58e05f..c10c2a2f622 100644 --- a/packages/react-native/third-party-podspecs/ReactNativeDependencies.podspec +++ b/packages/react-native/third-party-podspecs/ReactNativeDependencies.podspec @@ -64,7 +64,7 @@ Pod::Spec.new do |spec| cp -R "$HEADERS_PATH/" Headers mkdir -p framework/packages/react-native - cp -R "$XCFRAMEWORK_PATH/.." framework/packages/react-native/ + cp -R "$XCFRAMEWORK_PATH/../." framework/packages/react-native/ find "$XCFRAMEWORK_PATH/.." -type f -exec rm {} + find "$CURRENT_PATH" -type d -empty -delete CMD From fcb86cca4e1975e0a094b4594e756b29fb1232c4 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Tue, 26 Aug 2025 03:39:49 -0700 Subject: [PATCH 063/312] add SWIFT_ENABLE_EXPLICIT_MODULES to xcode 26 (#53457) Summary: XCode 26 introduces building explicit swift modules turned on (SWIFT_ENABLE_EXPLICIT_MODULES). This breaks building with precompiled binaries. This commit fixes this by adding a step when not building from source where we explicitly set the `SWIFT_ENABLE_EXPLICIT_MODULES` flag to `NO`. ## Changelog: [IOS] [FIXED] - Added setting SWIFT_ENABLE_EXPLICIT_MODULES=NO when using precompiled to support Xcode 26 Pull Request resolved: https://github.com/facebook/react-native/pull/53457 Test Plan: ```bash npx react-native-community/cli init MyApp --version nightly --skip-install cd MyApp yarn cd ios bundle install RCT_USE_RN_DEP=1 RCT_USE_PREBUILT_RNCORE=1 bundle exec pod install ``` Build above app with Xcode 26 and verify that it no longer fails Reviewed By: motiz88 Differential Revision: D81025367 Pulled By: cipolleschi fbshipit-source-id: 1db7c4d7de07d62f43b355aa784d7d9de478023c --- packages/react-native/scripts/react_native_pods.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/react-native/scripts/react_native_pods.rb b/packages/react-native/scripts/react_native_pods.rb index 707b0f0bd69..e9f5a89fd92 100644 --- a/packages/react-native/scripts/react_native_pods.rb +++ b/packages/react-native/scripts/react_native_pods.rb @@ -497,6 +497,13 @@ def react_native_post_install( ReactNativePodsUtils.updateOSDeploymentTarget(installer) ReactNativePodsUtils.set_dynamic_frameworks_flags(installer) ReactNativePodsUtils.add_ndebug_flag_to_pods_in_release(installer) + + if !ReactNativeCoreUtils.build_rncore_from_source() + # In XCode 26 we need to revert the new setting SWIFT_ENABLE_EXPLICIT_MODULES when building + # with precompiled binaries. + ReactNativePodsUtils.set_build_setting(installer, build_setting: "SWIFT_ENABLE_EXPLICIT_MODULES", value: "NO") + end + SPM.apply_on_post_install(installer) if privacy_file_aggregation_enabled From f21d4151d021774d0603f01c862da6e446e8299b Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Fri, 22 Aug 2025 03:23:24 -0700 Subject: [PATCH 064/312] aligned symbol folders with RNdeps (#53354) Summary: After fixing an isssue with ReactnativeDependencies and how it built symbols (https://github.com/facebook/react-native/issues/53353) this commit will align the output of the Symbols folder for the two frameworks. Previously we had an output in the Symbols folder that looked like this (from a local build on my machine) - catalyst - iphone - iphonesimulator After this we now have the more correct arcitecture names on these folders: - ios-arm64 - ios-arm64_x86_64-simulator - ios-arm64_x86_64-maccatalyst This is in line with how the ReactNativeDependencies Symbol folder is set up. ## Changelog: [IOS] [FIXED] - Aligned Symbols folder in React.xcframework symbols with ReactNativeDependencies.xcframework symbols. Pull Request resolved: https://github.com/facebook/react-native/pull/53354 Test Plan: Nightlies Reviewed By: cortinico Differential Revision: D80692098 Pulled By: cipolleschi fbshipit-source-id: e952b087d5dbdeb929b45d9e6d3d7e077c9d05cc --- .../scripts/ios-prebuild/xcframework.js | 93 +++++++++++++------ 1 file changed, 66 insertions(+), 27 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/xcframework.js b/packages/react-native/scripts/ios-prebuild/xcframework.js index 11a6c9bee21..236103b1a36 100644 --- a/packages/react-native/scripts/ios-prebuild/xcframework.js +++ b/packages/react-native/scripts/ios-prebuild/xcframework.js @@ -185,24 +185,68 @@ function buildXCFrameworks( ); // Copy Symbols to symbols folder - const symbolPaths = frameworkFolders.map(framework => - path.join(framework, `..`, `..`, `React.framework.dSYM`), - ); - - frameworkLog('Copying symbols to symbols folder...'); - const symbolOutput = path.join(outputPath, '..', 'Symbols'); - symbolPaths.forEach(symbol => { - const destination = extractDestinationFromPath(symbol); - const outputFolder = path.join(symbolOutput, destination); - fs.mkdirSync(outputFolder, {recursive: true}); - execSync(`cp -r ${symbol} ${outputFolder}`); - }); + copySymbols(outputPath, frameworkFolders); if (identity) { signXCFramework(identity, outputPath); } } +function copySymbols( + outputPath /*:string*/, + frameworkFolders /*:Array*/, +) { + frameworkLog('Copying symbols to symbols folder...'); + const targetArchFolders = fs + .readdirSync(outputPath) + .map(p => path.join(outputPath, p)) + .filter(folder => { + return ( + fs.statSync(folder).isDirectory() && + !folder.endsWith('Headers') && + !folder.endsWith('Modules') + ); + }); + + const symbolOutput = path.join(outputPath, '..', 'Symbols'); + frameworkFolders.forEach(frameworkFolder => { + // Get archs for current symbol slice + const frameworkPlatforms = getArchsFromFramework( + path.join(frameworkFolder, 'React'), + ); + if (frameworkPlatforms) { + const targetFolder = targetArchFolders.find( + targetArchFolder => + getArchsFromFramework( + path.join(targetArchFolder, 'React.framework', 'React'), + ) === frameworkPlatforms, + ); + if (!targetFolder) { + frameworkLog( + `No target folder found for symbol slice: ${frameworkFolder}`, + 'error', + ); + return; + } + const targetSymbolPath = path.join( + symbolOutput, + path.basename(targetFolder), + ); + const sourceSymbolPath = path.join( + frameworkFolder, + '..', + '..', + 'React.framework.dSYM', + ); + console.log( + ` ${path.relative(outputPath, sourceSymbolPath)} → ${path.basename(targetFolder)}`, + ); + fs.mkdirSync(targetSymbolPath, {recursive: true}); + execSync(`cp -r ${sourceSymbolPath} ${targetSymbolPath}`); + } + }); +} + function linkArchFolders( outputPath /*:string*/, moduleMapFile /*:string*/, @@ -319,22 +363,17 @@ function createModuleMapFile(outputPath /*: string */) { } } -function extractDestinationFromPath(symbolPath /*: string */) /*: string */ { - if (symbolPath.includes('iphoneos')) { - return 'iphoneos'; - } - - if (symbolPath.includes('iphonesimulator')) { - return 'iphonesimulator'; - } - - if (symbolPath.includes('maccatalyst')) { - return 'catalyst'; +function getArchsFromFramework(frameworkPath /*:string*/) { + try { + return execSync(`vtool -show-build ${frameworkPath}|grep platform`) + .toString() + .split('\n') + .map(p => p.trim().split(' ')[1]) + .sort((a, b) => a.localeCompare(b)) + .join(' '); + } catch (error) { + return ''; } - - throw new Error( - `Impossible to extract destination from ${symbolPath}. Valid destinations are iphoneos, iphonesimulator and catalyst.`, - ); } function signXCFramework( From cfd06d8f0899b86092d9b6d5a4485318e2865bf4 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Tue, 19 Aug 2025 02:47:40 -0700 Subject: [PATCH 065/312] fixed copying bundles correctly (#53325) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: When copying bundle files from the platform folders in the .build output, the script had a bug where all bundles were copied - meaning that only the last one would be in the resulting xcframework output. This caused an issue when we tried to publish an app built with precompiled binaries to AppStore where the field `CFBundleSupportedPlatforms` was wrong and caused the submission to be rejected. This was caused by the script copying the wrong bundle file into the final xcframework outputs. This issue is described here: https://github.com/react-native-community/discussions-and-proposals/discussions/923#discussioncomment-14089245 This commit fixes the above error by using the iOS 15 `vtool` to show the actual platform for a given framework and then making sure we don't copy bundles in the wrong way. Testing this on my local machine for iOS/iOS-simulator/MacOS/catalyst yields the following results (before/after this fix): **Before:** ```bash Copying bundles to the framework... ../.build/Build/Products/Debug/ReactNativeDependencies_glog.bundle → ios-arm64 ../.build/Build/Products/Debug/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug/ReactNativeDependencies_glog.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug/ReactNativeDependencies_boost.bundle → ios-arm64 ../.build/Build/Products/Debug/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug/ReactNativeDependencies_boost.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug/ReactNativeDependencies_folly.bundle → ios-arm64 ../.build/Build/Products/Debug/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug/ReactNativeDependencies_folly.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_glog.bundle → ios-arm64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_glog.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_boost.bundle → ios-arm64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_boost.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_folly.bundle → ios-arm64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_folly.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_glog.bundle → ios-arm64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_glog.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_boost.bundle → ios-arm64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_boost.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_folly.bundle → ios-arm64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_folly.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_glog.bundle → ios-arm64 ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_glog.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_boost.bundle → ios-arm64 ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_boost.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_folly.bundle → ios-arm64 ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_folly.bundle → macos-arm64_x86_64 ``` **After:** ```bash Copying bundles to the framework... ../.build/Build/Products/Debug/ReactNativeDependencies_glog.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug/ReactNativeDependencies_boost.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug/ReactNativeDependencies_folly.bundle → macos-arm64_x86_64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_glog.bundle → ios-arm64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_boost.bundle → ios-arm64 ../.build/Build/Products/Debug-iphoneos/ReactNativeDependencies_folly.bundle → ios-arm64 ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-iphonesimulator/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-simulator ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_glog.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_boost.bundle → ios-arm64_x86_64-maccatalyst ../.build/Build/Products/Debug-maccatalyst/ReactNativeDependencies_folly.bundle → ios-arm64_x86_64-maccatalyst ``` ## Changelog: [IOS] [FIXED] - Fixed copying bundles correctly to xcframeworks when precompiling ReactNativeDependencies.xcframework Pull Request resolved: https://github.com/facebook/react-native/pull/53325 Test Plan: Ensure that the info.plist files in the nightlies for the ReactNativeDepdendencies.xcframework has the correct bundles for its targets. Reviewed By: andrewdacenko Differential Revision: D80457335 Pulled By: cipolleschi fbshipit-source-id: aeb4166f66218f72bdd29b6fc579fcc7b6d12844 --- .../ios-prebuild/compose-framework.js | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/scripts/releases/ios-prebuild/compose-framework.js b/scripts/releases/ios-prebuild/compose-framework.js index aee76f07a9f..e3887b38365 100644 --- a/scripts/releases/ios-prebuild/compose-framework.js +++ b/scripts/releases/ios-prebuild/compose-framework.js @@ -134,6 +134,9 @@ function copyBundles( // A bundle is the name of the framework + _ + target name + .bundle. We can // check if the target has a bundle by checking if it defines one or more resources. frameworkPaths.forEach(frameworkPath => { + const frameworkPlatforms = execSync( + `vtool -show-build ${path.join(frameworkPath, 'PackageFrameworks', scheme + '.framework', scheme)}|grep platform`, + ).toString(); dependencies.forEach(dep => { const resources = dep.files.resources; if (!resources || resources.length === 0) { @@ -144,16 +147,33 @@ function copyBundles( const sourceBundlePath = path.join(frameworkPath, bundleName); if (fs.existsSync(sourceBundlePath)) { // Target folder - needs to be copied to the resulting framework + let targetArchFolderFound = false; targetArchFolders.forEach(targetArchFolder => { - const targetBundlePath = path.join( - targetArchFolder, - `${scheme}.framework`, - bundleName, - ); - - // A bundle is a directory, so we need to copy the whole directory - execSync(`cp -r "${sourceBundlePath}/" "${targetBundlePath}"`); + const targetPlatforms = execSync( + `vtool -show-build ${path.join(targetArchFolder, scheme + '.framework', scheme)}|grep platform`, + ).toString(); + + if (targetPlatforms === frameworkPlatforms) { + console.log( + ` ${path.relative(outputFolder, sourceBundlePath)} → ${path.basename(targetArchFolder)}`, + ); + const targetBundlePath = path.join( + targetArchFolder, + `${scheme}.framework`, + bundleName, + ); + + // A bundle is a directory, so we need to copy the whole directory + execSync(`cp -r "${sourceBundlePath}/" "${targetBundlePath}"`); + targetArchFolderFound = true; + } }); + + if (!targetArchFolderFound) { + throw Error( + `Could not find target architecture for folder ${path.relative(outputFolder, frameworkPath)}. Expected to find ${frameworkPlatforms}`, + ); + } } else { console.warn(`Bundle ${sourceBundlePath} not found`); } From 495b307ad5072266cc28a4084791574aa40871a7 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Thu, 14 Aug 2025 07:06:48 -0700 Subject: [PATCH 066/312] Use correct version of jsi.cpp (#53266) Summary: When building the xcframeworks on iOS we're including the file `jsi/jsi.cpp` in the Swift Package. This file is also included in Hermes and React Native should use the hermes version of these symbols. This is even described (but overlooked) in the React-jsi podspec file. This causes the error seen in the bug addressed by this commit. The fix is to exclude the `jsi/jsi.cpp` file from the jsi target in our swift package. Fixes https://github.com/facebook/react-native/issues/53257 ## Changelog: [IOS] [FIXED] - Fixed wrong jsi symbols in use when using React.xcframework Pull Request resolved: https://github.com/facebook/react-native/pull/53266 Test Plan: Tested using a precompiled xcframework in the reproduction repository. Reviewed By: rshest Differential Revision: D80252131 Pulled By: cipolleschi fbshipit-source-id: 915e94a1d80c2f45575e58d8054239484e861285 --- packages/react-native/Package.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Package.swift b/packages/react-native/Package.swift index c387085ea23..3e482703932 100644 --- a/packages/react-native/Package.swift +++ b/packages/react-native/Package.swift @@ -84,7 +84,10 @@ let reactDebug = RNTarget( let jsi = RNTarget( name: .jsi, path: "ReactCommon/jsi", - excludedPaths: ["jsi/test", "CMakeLists.txt", "jsi/CMakeLists.txt"], + // JSI is a part of hermes-engine. Including them also in react-native will violate the One Definition Rule. + // Precompiled binaries are only supported with hermes - so we can safely exclude the jsi.cpp file. + // https://github.com/facebook/react-native/issues/53257 + excludedPaths: ["jsi/test", "jsi/jsi.cpp", "CMakeLists.txt", "jsi/CMakeLists.txt"], dependencies: [.reactNativeDependencies] ) From 7d4196cf052765bbc7bb763f084d0b1118d5b1a2 Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Wed, 27 Aug 2025 10:55:47 +0100 Subject: [PATCH 067/312] fix(codegen): fix missing dependencies (#52884) (#53478) Summary: `react-native/codegen` uses `babel/parser` and `babel/core` but does not declare dependency on them. Depending on how packages are hoisted (and especially in pnpm setups), this causes crashes during codegen. Resolves https://github.com/facebook/react-native/issues/52883 ## Changelog: [GENERAL] [FIXED] - Add missing Babel dependencies Pull Request resolved: https://github.com/facebook/react-native/pull/52884 Test Plan: See https://github.com/facebook/react-native/issues/52883 Reviewed By: cortinico, christophpurrer Differential Revision: D79103092 Pulled By: robhogan fbshipit-source-id: ecaf690f994393a652ea7f0d4f30bbabeb23a434 Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com> --- packages/react-native-codegen/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 4d3cf476859..0a2adfb7496 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -29,6 +29,8 @@ "lib" ], "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", "glob": "^7.1.1", "hermes-parser": "0.29.1", "invariant": "^2.2.4", From ba221e1015f5269ea5093c289896a35ce721fff4 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Fri, 22 Aug 2025 03:26:54 -0700 Subject: [PATCH 068/312] Fix copy symbol files in RNDeps precompile (#53353) Summary: Symbol files wasn't copied correctly when building - as with bundles we did overwrite the files and ended up with only the last symbol file. This commit fixes this by mapping the framework build folder architecture type to the xcframework slices creating the correct file structure under the Symbols folder. - Each slice gets a folder with the architecture name under Symbols containing the dSym folder for that slice - Refactored getting correct architecture folder into a separate function. - Refactored target folder lookup in copyBundles - Removed unused async modifier on function ## Changelog: [IOS] [FIXED] - Fixed how we copy and build the Symbols folder when precompiling ReactNativeDependencies Pull Request resolved: https://github.com/facebook/react-native/pull/53353 Test Plan: Run nightlies and verify that ReactNativeDependencies.framework.dSym files contains symbol files for all architectures. Reviewed By: cortinico Differential Revision: D80692019 Pulled By: cipolleschi fbshipit-source-id: 77983bc29d1965edf3bc0fcbd9cb3177071991d3 --- .../workflows/prebuild-ios-dependencies.yml | 5 +- .../ios-prebuild/compose-framework.js | 140 +++++++++++++----- 2 files changed, 106 insertions(+), 39 deletions(-) diff --git a/.github/workflows/prebuild-ios-dependencies.yml b/.github/workflows/prebuild-ios-dependencies.yml index 3ae43889238..70ca3fe2a5c 100644 --- a/.github/workflows/prebuild-ios-dependencies.yml +++ b/.github/workflows/prebuild-ios-dependencies.yml @@ -179,8 +179,9 @@ jobs: - name: Compress and Rename dSYM if: steps.restore-xcframework.outputs.cache-hit != 'true' run: | - tar -cz -f packages/react-native/third-party/Symbols/ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz \ - packages/react-native/third-party/Symbols/ReactNativeDependencies.framework.dSYM + cd packages/react-native/third-party/Symbols/ + tar -cz -f ../ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz . + mv ../ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz ./ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz - name: Upload XCFramework Artifact uses: actions/upload-artifact@v4 with: diff --git a/scripts/releases/ios-prebuild/compose-framework.js b/scripts/releases/ios-prebuild/compose-framework.js index e3887b38365..599622af6bc 100644 --- a/scripts/releases/ios-prebuild/compose-framework.js +++ b/scripts/releases/ios-prebuild/compose-framework.js @@ -63,17 +63,12 @@ async function createFramework( // Copy bundles into the framework copyBundles(scheme, dependencies, output, frameworkPaths); - // Copy headers to the framework - start by building the Header folder - await copyHeaders(scheme, dependencies, rootFolder); + // Copy Symbols to symbols folder - copy before headers since we're using the folders inside the xcframework + // to get the arch slices. + copySymbols(scheme, output, frameworkPaths); - // Copy Symbols to symbols folder - const symbolPaths = frameworkPaths.map(framework => - path.join(framework, `${scheme}.framework.dSYM`), - ); - console.log('Copying symbols to symbols folder...'); - const symbolOutput = path.join(rootFolder, 'Symbols'); - fs.mkdirSync(symbolOutput, {recursive: true}); - symbolPaths.forEach(symbol => execSync(`cp -r ${symbol} ${symbolOutput}`)); + // Copy headers to the framework - start by building the Header folder + copyHeaders(scheme, dependencies, rootFolder); if (identity) { signXCFramework(identity, output); @@ -84,7 +79,7 @@ async function createFramework( * Copies headers needed from the package to a Header folder that we'll pass to * each framework arch type */ -async function copyHeaders( +function copyHeaders( scheme /*: string */, dependencies /*: $ReadOnlyArray */, rootFolder /*: string */, @@ -134,9 +129,15 @@ function copyBundles( // A bundle is the name of the framework + _ + target name + .bundle. We can // check if the target has a bundle by checking if it defines one or more resources. frameworkPaths.forEach(frameworkPath => { - const frameworkPlatforms = execSync( - `vtool -show-build ${path.join(frameworkPath, 'PackageFrameworks', scheme + '.framework', scheme)}|grep platform`, - ).toString(); + const frameworkPlatforms = getArchsFromFramework( + path.join( + frameworkPath, + 'PackageFrameworks', + scheme + '.framework', + scheme, + ), + ); + dependencies.forEach(dep => { const resources = dep.files.resources; if (!resources || resources.length === 0) { @@ -147,29 +148,25 @@ function copyBundles( const sourceBundlePath = path.join(frameworkPath, bundleName); if (fs.existsSync(sourceBundlePath)) { // Target folder - needs to be copied to the resulting framework - let targetArchFolderFound = false; - targetArchFolders.forEach(targetArchFolder => { - const targetPlatforms = execSync( - `vtool -show-build ${path.join(targetArchFolder, scheme + '.framework', scheme)}|grep platform`, - ).toString(); - - if (targetPlatforms === frameworkPlatforms) { - console.log( - ` ${path.relative(outputFolder, sourceBundlePath)} → ${path.basename(targetArchFolder)}`, - ); - const targetBundlePath = path.join( - targetArchFolder, - `${scheme}.framework`, - bundleName, - ); - - // A bundle is a directory, so we need to copy the whole directory - execSync(`cp -r "${sourceBundlePath}/" "${targetBundlePath}"`); - targetArchFolderFound = true; - } - }); - - if (!targetArchFolderFound) { + const targetFolder = targetArchFolders.find( + targetArchFolder => + getArchsFromFramework( + path.join(targetArchFolder, scheme + '.framework', scheme), + ) === frameworkPlatforms, + ); + if (targetFolder) { + console.log( + ` ${path.relative(outputFolder, sourceBundlePath)} → ${path.basename(targetFolder)}`, + ); + const targetBundlePath = path.join( + targetFolder, + `${scheme}.framework`, + bundleName, + ); + + // A bundle is a directory, so we need to copy the whole directory + execSync(`cp -r "${sourceBundlePath}/" "${targetBundlePath}"`); + } else { throw Error( `Could not find target architecture for folder ${path.relative(outputFolder, frameworkPath)}. Expected to find ${frameworkPlatforms}`, ); @@ -181,6 +178,75 @@ function copyBundles( }); } +function copySymbols( + scheme /*: string */, + outputFolder /*:string*/, + frameworkPaths /*:Array*/, +) { + console.log('Copying dSym files...'); + + const targetArchFolders = fs + .readdirSync(outputFolder) + .map(p => path.join(outputFolder, p)) + .filter(p => fs.statSync(p).isDirectory()); + + // For each framework (in frameworkPaths), copy the symbols from the source folder. + frameworkPaths.forEach(frameworkPath => { + const frameworkPlatforms = getArchsFromFramework( + path.join( + frameworkPath, + 'PackageFrameworks', + scheme + '.framework', + scheme, + ), + ); + + // Find the correct target folder based on the current architectures + const targetFolder = targetArchFolders.find( + targetArchFolder => + frameworkPlatforms === + getArchsFromFramework( + path.join(targetArchFolder, scheme + '.framework', scheme), + ), + ); + + if (!targetFolder) { + throw new Error(`Could not find target folder for ${frameworkPath}`); + } + const sourceSymbolPath = path.join( + frameworkPath, + scheme + '.framework.dSYM', + ); + if (!fs.existsSync(sourceSymbolPath)) { + throw new Error(`dSYM folder ${sourceSymbolPath} not found`); + } + + const archName = path.basename(targetFolder); + console.log( + ` ${path.relative(outputFolder, sourceSymbolPath)} → ${archName}`, + ); + + const targetSymbolPath = path.join( + outputFolder, + '..', + 'Symbols', + archName, + scheme + '.framework.dSYM', + ); + fs.mkdirSync(targetSymbolPath, {recursive: true}); + execSync(`cp -r "${sourceSymbolPath}/" "${targetSymbolPath}"`); + }); +} + +function getArchsFromFramework(frameworkPath /*:string*/) { + return execSync(`vtool -show-build ${frameworkPath}|grep platform`) + .toString() + .split('\n') + .map(p => p.trim().split(' ')[1]) + .sort((a, b) => a.localeCompare(b)) + .join(' '); +} + function signXCFramework( identity /*: string */, xcframeworkPath /*: string */, From 6da5e665223b3e3a08332337f57951bccbd47963 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 27 Aug 2025 12:26:01 +0100 Subject: [PATCH 069/312] [LOCAL] Bump Podfile.lock --- packages/rn-tester/Podfile.lock | 600 ++++++++++++++++---------------- 1 file changed, 301 insertions(+), 299 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index c025ff3550e..731203dd921 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0-rc.5) + - FBLazyVector (0.81.0) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.0-rc.5): - - hermes-engine/Pre-built (= 0.81.0-rc.5) - - hermes-engine/Pre-built (0.81.0-rc.5) + - hermes-engine (0.81.0): + - hermes-engine/Pre-built (= 0.81.0) + - hermes-engine/Pre-built (0.81.0) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0-rc.5) - - RCTRequired (0.81.0-rc.5) - - RCTTypeSafety (0.81.0-rc.5): - - FBLazyVector (= 0.81.0-rc.5) - - RCTRequired (= 0.81.0-rc.5) - - React-Core (= 0.81.0-rc.5) - - React (0.81.0-rc.5): - - React-Core (= 0.81.0-rc.5) - - React-Core/DevSupport (= 0.81.0-rc.5) - - React-Core/RCTWebSocket (= 0.81.0-rc.5) - - React-RCTActionSheet (= 0.81.0-rc.5) - - React-RCTAnimation (= 0.81.0-rc.5) - - React-RCTBlob (= 0.81.0-rc.5) - - React-RCTImage (= 0.81.0-rc.5) - - React-RCTLinking (= 0.81.0-rc.5) - - React-RCTNetwork (= 0.81.0-rc.5) - - React-RCTSettings (= 0.81.0-rc.5) - - React-RCTText (= 0.81.0-rc.5) - - React-RCTVibration (= 0.81.0-rc.5) - - React-callinvoker (0.81.0-rc.5) - - React-Core (0.81.0-rc.5): + - RCTDeprecation (0.81.0) + - RCTRequired (0.81.0) + - RCTTypeSafety (0.81.0): + - FBLazyVector (= 0.81.0) + - RCTRequired (= 0.81.0) + - React-Core (= 0.81.0) + - React (0.81.0): + - React-Core (= 0.81.0) + - React-Core/DevSupport (= 0.81.0) + - React-Core/RCTWebSocket (= 0.81.0) + - React-RCTActionSheet (= 0.81.0) + - React-RCTAnimation (= 0.81.0) + - React-RCTBlob (= 0.81.0) + - React-RCTImage (= 0.81.0) + - React-RCTLinking (= 0.81.0) + - React-RCTNetwork (= 0.81.0) + - React-RCTSettings (= 0.81.0) + - React-RCTText (= 0.81.0) + - React-RCTVibration (= 0.81.0) + - React-callinvoker (0.81.0) + - React-Core (0.81.0): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.5) + - React-Core/Default (= 0.81.0) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0-rc.5): + - React-Core/CoreModulesHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0-rc.5): + - React-Core/Default (0.81.0): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0-rc.5): + - React-Core/DevSupport (0.81.0): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.5) - - React-Core/RCTWebSocket (= 0.81.0-rc.5) + - React-Core/Default (= 0.81.0) + - React-Core/RCTWebSocket (= 0.81.0) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0-rc.5): + - React-Core/RCTActionSheetHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0-rc.5): + - React-Core/RCTAnimationHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0-rc.5): + - React-Core/RCTBlobHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0-rc.5): + - React-Core/RCTImageHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0-rc.5): + - React-Core/RCTLinkingHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0-rc.5): + - React-Core/RCTNetworkHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.0-rc.5): + - React-Core/RCTPushNotificationHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0-rc.5): + - React-Core/RCTSettingsHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0-rc.5): + - React-Core/RCTTextHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0-rc.5): + - React-Core/RCTVibrationHeaders (0.81.0): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0-rc.5): + - React-Core/RCTWebSocket (0.81.0): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0-rc.5) + - React-Core/Default (= 0.81.0) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0-rc.5): + - React-CoreModules (0.81.0): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0-rc.5) - - React-Core/CoreModulesHeaders (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) + - RCTTypeSafety (= 0.81.0) + - React-Core/CoreModulesHeaders (= 0.81.0) + - React-jsi (= 0.81.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0-rc.5) + - React-RCTImage (= 0.81.0) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0-rc.5): + - React-cxxreact (0.81.0): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.5) - - React-debug (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) + - React-callinvoker (= 0.81.0) + - React-debug (= 0.81.0) + - React-jsi (= 0.81.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0-rc.5) - - React-perflogger (= 0.81.0-rc.5) + - React-logger (= 0.81.0) + - React-perflogger (= 0.81.0) - React-runtimeexecutor - - React-timing (= 0.81.0-rc.5) + - React-timing (= 0.81.0) - SocketRocket - - React-debug (0.81.0-rc.5) - - React-defaultsnativemodule (0.81.0-rc.5): + - React-debug (0.81.0) + - React-defaultsnativemodule (0.81.0): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0-rc.5): + - React-domnativemodule (0.81.0): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0-rc.5): + - React-Fabric (0.81.0): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0-rc.5) - - React-Fabric/attributedstring (= 0.81.0-rc.5) - - React-Fabric/bridging (= 0.81.0-rc.5) - - React-Fabric/componentregistry (= 0.81.0-rc.5) - - React-Fabric/componentregistrynative (= 0.81.0-rc.5) - - React-Fabric/components (= 0.81.0-rc.5) - - React-Fabric/consistency (= 0.81.0-rc.5) - - React-Fabric/core (= 0.81.0-rc.5) - - React-Fabric/dom (= 0.81.0-rc.5) - - React-Fabric/imagemanager (= 0.81.0-rc.5) - - React-Fabric/leakchecker (= 0.81.0-rc.5) - - React-Fabric/mounting (= 0.81.0-rc.5) - - React-Fabric/observers (= 0.81.0-rc.5) - - React-Fabric/scheduler (= 0.81.0-rc.5) - - React-Fabric/telemetry (= 0.81.0-rc.5) - - React-Fabric/templateprocessor (= 0.81.0-rc.5) - - React-Fabric/uimanager (= 0.81.0-rc.5) + - React-Fabric/animations (= 0.81.0) + - React-Fabric/attributedstring (= 0.81.0) + - React-Fabric/bridging (= 0.81.0) + - React-Fabric/componentregistry (= 0.81.0) + - React-Fabric/componentregistrynative (= 0.81.0) + - React-Fabric/components (= 0.81.0) + - React-Fabric/consistency (= 0.81.0) + - React-Fabric/core (= 0.81.0) + - React-Fabric/dom (= 0.81.0) + - React-Fabric/imagemanager (= 0.81.0) + - React-Fabric/leakchecker (= 0.81.0) + - React-Fabric/mounting (= 0.81.0) + - React-Fabric/observers (= 0.81.0) + - React-Fabric/scheduler (= 0.81.0) + - React-Fabric/telemetry (= 0.81.0) + - React-Fabric/templateprocessor (= 0.81.0) + - React-Fabric/uimanager (= 0.81.0) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0-rc.5): + - React-Fabric/animations (0.81.0): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0-rc.5): + - React-Fabric/attributedstring (0.81.0): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0-rc.5): + - React-Fabric/bridging (0.81.0): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0-rc.5): + - React-Fabric/componentregistry (0.81.0): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0-rc.5): + - React-Fabric/componentregistrynative (0.81.0): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0-rc.5): + - React-Fabric/components (0.81.0): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0-rc.5) - - React-Fabric/components/root (= 0.81.0-rc.5) - - React-Fabric/components/scrollview (= 0.81.0-rc.5) - - React-Fabric/components/view (= 0.81.0-rc.5) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0) + - React-Fabric/components/root (= 0.81.0) + - React-Fabric/components/scrollview (= 0.81.0) + - React-Fabric/components/view (= 0.81.0) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0-rc.5): + - React-Fabric/components/legacyviewmanagerinterop (0.81.0): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0-rc.5): + - React-Fabric/components/root (0.81.0): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0-rc.5): + - React-Fabric/components/scrollview (0.81.0): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0-rc.5): + - React-Fabric/components/view (0.81.0): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0-rc.5): + - React-Fabric/consistency (0.81.0): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0-rc.5): + - React-Fabric/core (0.81.0): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0-rc.5): + - React-Fabric/dom (0.81.0): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0-rc.5): + - React-Fabric/imagemanager (0.81.0): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0-rc.5): + - React-Fabric/leakchecker (0.81.0): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0-rc.5): + - React-Fabric/mounting (0.81.0): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0-rc.5): + - React-Fabric/observers (0.81.0): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0-rc.5) + - React-Fabric/observers/events (= 0.81.0) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0-rc.5): + - React-Fabric/observers/events (0.81.0): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0-rc.5): + - React-Fabric/scheduler (0.81.0): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0-rc.5): + - React-Fabric/telemetry (0.81.0): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0-rc.5): + - React-Fabric/templateprocessor (0.81.0): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0-rc.5): + - React-Fabric/uimanager (0.81.0): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0-rc.5) + - React-Fabric/uimanager/consistency (= 0.81.0) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0-rc.5): + - React-Fabric/uimanager/consistency (0.81.0): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0-rc.5): + - React-FabricComponents (0.81.0): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0-rc.5) - - React-FabricComponents/textlayoutmanager (= 0.81.0-rc.5) + - React-FabricComponents/components (= 0.81.0) + - React-FabricComponents/textlayoutmanager (= 0.81.0) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0-rc.5): + - React-FabricComponents/components (0.81.0): - boost - DoubleConversion - fast_float @@ -1259,16 +1259,16 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0-rc.5) - - React-FabricComponents/components/iostextinput (= 0.81.0-rc.5) - - React-FabricComponents/components/modal (= 0.81.0-rc.5) - - React-FabricComponents/components/rncore (= 0.81.0-rc.5) - - React-FabricComponents/components/safeareaview (= 0.81.0-rc.5) - - React-FabricComponents/components/scrollview (= 0.81.0-rc.5) - - React-FabricComponents/components/text (= 0.81.0-rc.5) - - React-FabricComponents/components/textinput (= 0.81.0-rc.5) - - React-FabricComponents/components/unimplementedview (= 0.81.0-rc.5) - - React-FabricComponents/components/virtualview (= 0.81.0-rc.5) + - React-FabricComponents/components/inputaccessory (= 0.81.0) + - React-FabricComponents/components/iostextinput (= 0.81.0) + - React-FabricComponents/components/modal (= 0.81.0) + - React-FabricComponents/components/rncore (= 0.81.0) + - React-FabricComponents/components/safeareaview (= 0.81.0) + - React-FabricComponents/components/scrollview (= 0.81.0) + - React-FabricComponents/components/text (= 0.81.0) + - React-FabricComponents/components/textinput (= 0.81.0) + - React-FabricComponents/components/unimplementedview (= 0.81.0) + - React-FabricComponents/components/virtualview (= 0.81.0) - React-featureflags - React-graphics - React-jsi @@ -1281,7 +1281,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0-rc.5): + - React-FabricComponents/components/inputaccessory (0.81.0): - boost - DoubleConversion - fast_float @@ -1308,7 +1308,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0-rc.5): + - React-FabricComponents/components/iostextinput (0.81.0): - boost - DoubleConversion - fast_float @@ -1335,7 +1335,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0-rc.5): + - React-FabricComponents/components/modal (0.81.0): - boost - DoubleConversion - fast_float @@ -1362,7 +1362,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0-rc.5): + - React-FabricComponents/components/rncore (0.81.0): - boost - DoubleConversion - fast_float @@ -1389,7 +1389,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0-rc.5): + - React-FabricComponents/components/safeareaview (0.81.0): - boost - DoubleConversion - fast_float @@ -1416,7 +1416,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0-rc.5): + - React-FabricComponents/components/scrollview (0.81.0): - boost - DoubleConversion - fast_float @@ -1443,7 +1443,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0-rc.5): + - React-FabricComponents/components/text (0.81.0): - boost - DoubleConversion - fast_float @@ -1470,7 +1470,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0-rc.5): + - React-FabricComponents/components/textinput (0.81.0): - boost - DoubleConversion - fast_float @@ -1497,7 +1497,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0-rc.5): + - React-FabricComponents/components/unimplementedview (0.81.0): - boost - DoubleConversion - fast_float @@ -1524,7 +1524,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0-rc.5): + - React-FabricComponents/components/virtualview (0.81.0): - boost - DoubleConversion - fast_float @@ -1551,7 +1551,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0-rc.5): + - React-FabricComponents/textlayoutmanager (0.81.0): - boost - DoubleConversion - fast_float @@ -1578,7 +1578,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0-rc.5): + - React-FabricImage (0.81.0): - boost - DoubleConversion - fast_float @@ -1587,21 +1587,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0-rc.5) - - RCTTypeSafety (= 0.81.0-rc.5) + - RCTRequired (= 0.81.0) + - RCTTypeSafety (= 0.81.0) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0-rc.5) + - React-jsiexecutor (= 0.81.0) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0-rc.5): + - React-featureflags (0.81.0): - boost - DoubleConversion - fast_float @@ -1610,7 +1610,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0-rc.5): + - React-featureflagsnativemodule (0.81.0): - boost - DoubleConversion - fast_float @@ -1625,7 +1625,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0-rc.5): + - React-graphics (0.81.0): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0-rc.5): + - React-hermes (0.81.0): - boost - DoubleConversion - fast_float @@ -1647,16 +1647,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.5) + - React-cxxreact (= 0.81.0) - React-jsi - - React-jsiexecutor (= 0.81.0-rc.5) + - React-jsiexecutor (= 0.81.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.5) + - React-perflogger (= 0.81.0) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0-rc.5): + - React-idlecallbacksnativemodule (0.81.0): - boost - DoubleConversion - fast_float @@ -1672,7 +1672,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0-rc.5): + - React-ImageManager (0.81.0): - boost - DoubleConversion - fast_float @@ -1687,7 +1687,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0-rc.5): + - React-jserrorhandler (0.81.0): - boost - DoubleConversion - fast_float @@ -1702,7 +1702,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0-rc.5): + - React-jsi (0.81.0): - boost - DoubleConversion - fast_float @@ -1712,7 +1712,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0-rc.5): + - React-jsiexecutor (0.81.0): - boost - DoubleConversion - fast_float @@ -1721,15 +1721,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) + - React-cxxreact (= 0.81.0) + - React-jsi (= 0.81.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.5) + - React-perflogger (= 0.81.0) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0-rc.5): + - React-jsinspector (0.81.0): - boost - DoubleConversion - fast_float @@ -1743,10 +1743,11 @@ PODS: - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 0.81.0-rc.5) + - React-oscompat + - React-perflogger (= 0.81.0) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0-rc.5): + - React-jsinspectorcdp (0.81.0): - boost - DoubleConversion - fast_float @@ -1755,7 +1756,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0-rc.5): + - React-jsinspectornetwork (0.81.0): - boost - DoubleConversion - fast_float @@ -1768,7 +1769,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0-rc.5): + - React-jsinspectortracing (0.81.0): - boost - DoubleConversion - fast_float @@ -1779,7 +1780,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0-rc.5): + - React-jsitooling (0.81.0): - boost - DoubleConversion - fast_float @@ -1787,16 +1788,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) + - React-cxxreact (= 0.81.0) + - React-jsi (= 0.81.0) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0-rc.5): + - React-jsitracing (0.81.0): - React-jsi - - React-logger (0.81.0-rc.5): + - React-logger (0.81.0): - boost - DoubleConversion - fast_float @@ -1805,7 +1806,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0-rc.5): + - React-Mapbuffer (0.81.0): - boost - DoubleConversion - fast_float @@ -1815,7 +1816,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0-rc.5): + - React-microtasksnativemodule (0.81.0): - boost - DoubleConversion - fast_float @@ -1829,7 +1830,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.0-rc.5): + - React-NativeModulesApple (0.81.0): - boost - DoubleConversion - fast_float @@ -1849,8 +1850,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0-rc.5) - - React-perflogger (0.81.0-rc.5): + - React-oscompat (0.81.0) + - React-perflogger (0.81.0): - boost - DoubleConversion - fast_float @@ -1859,7 +1860,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0-rc.5): + - React-performancetimeline (0.81.0): - boost - DoubleConversion - fast_float @@ -1872,9 +1873,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0-rc.5): - - React-Core/RCTActionSheetHeaders (= 0.81.0-rc.5) - - React-RCTAnimation (0.81.0-rc.5): + - React-RCTActionSheet (0.81.0): + - React-Core/RCTActionSheetHeaders (= 0.81.0) + - React-RCTAnimation (0.81.0): - boost - DoubleConversion - fast_float @@ -1890,7 +1891,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0-rc.5): + - React-RCTAppDelegate (0.81.0): - boost - DoubleConversion - fast_float @@ -1924,7 +1925,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0-rc.5): + - React-RCTBlob (0.81.0): - boost - DoubleConversion - fast_float @@ -1943,7 +1944,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0-rc.5): + - React-RCTFabric (0.81.0): - boost - DoubleConversion - fast_float @@ -1978,7 +1979,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0-rc.5): + - React-RCTFBReactNativeSpec (0.81.0): - boost - DoubleConversion - fast_float @@ -1992,10 +1993,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0-rc.5) + - React-RCTFBReactNativeSpec/components (= 0.81.0) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0-rc.5): + - React-RCTFBReactNativeSpec/components (0.81.0): - boost - DoubleConversion - fast_float @@ -2018,7 +2019,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0-rc.5): + - React-RCTImage (0.81.0): - boost - DoubleConversion - fast_float @@ -2034,14 +2035,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0-rc.5): - - React-Core/RCTLinkingHeaders (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) + - React-RCTLinking (0.81.0): + - React-Core/RCTLinkingHeaders (= 0.81.0) + - React-jsi (= 0.81.0) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0-rc.5) - - React-RCTNetwork (0.81.0-rc.5): + - ReactCommon/turbomodule/core (= 0.81.0) + - React-RCTNetwork (0.81.0): - boost - DoubleConversion - fast_float @@ -2059,14 +2060,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.0-rc.5): + - React-RCTPushNotification (0.81.0): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.0-rc.5): + - React-RCTRuntime (0.81.0): - boost - DoubleConversion - fast_float @@ -2086,7 +2087,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0-rc.5): + - React-RCTSettings (0.81.0): - boost - DoubleConversion - fast_float @@ -2101,7 +2102,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.0-rc.5): + - React-RCTTest (0.81.0): - boost - DoubleConversion - fast_float @@ -2109,15 +2110,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.0-rc.5) - - React-CoreModules (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) - - ReactCommon/turbomodule/core (= 0.81.0-rc.5) + - React-Core (= 0.81.0) + - React-CoreModules (= 0.81.0) + - React-jsi (= 0.81.0) + - ReactCommon/turbomodule/core (= 0.81.0) - SocketRocket - - React-RCTText (0.81.0-rc.5): - - React-Core/RCTTextHeaders (= 0.81.0-rc.5) + - React-RCTText (0.81.0): + - React-Core/RCTTextHeaders (= 0.81.0) - Yoga - - React-RCTVibration (0.81.0-rc.5): + - React-RCTVibration (0.81.0): - boost - DoubleConversion - fast_float @@ -2131,11 +2132,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0-rc.5) - - React-renderercss (0.81.0-rc.5): + - React-rendererconsistency (0.81.0) + - React-renderercss (0.81.0): - React-debug - React-utils - - React-rendererdebug (0.81.0-rc.5): + - React-rendererdebug (0.81.0): - boost - DoubleConversion - fast_float @@ -2145,7 +2146,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0-rc.5): + - React-RuntimeApple (0.81.0): - boost - DoubleConversion - fast_float @@ -2174,7 +2175,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0-rc.5): + - React-RuntimeCore (0.81.0): - boost - DoubleConversion - fast_float @@ -2196,7 +2197,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0-rc.5): + - React-runtimeexecutor (0.81.0): - boost - DoubleConversion - fast_float @@ -2206,10 +2207,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0-rc.5) + - React-jsi (= 0.81.0) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0-rc.5): + - React-RuntimeHermes (0.81.0): - boost - DoubleConversion - fast_float @@ -2230,7 +2231,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0-rc.5): + - React-runtimescheduler (0.81.0): - boost - DoubleConversion - fast_float @@ -2252,8 +2253,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0-rc.5) - - React-utils (0.81.0-rc.5): + - React-timing (0.81.0): + - React-debug + - React-utils (0.81.0): - boost - DoubleConversion - fast_float @@ -2263,11 +2265,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0-rc.5) + - React-jsi (= 0.81.0) - SocketRocket - - ReactAppDependencyProvider (0.81.0-rc.5): + - ReactAppDependencyProvider (0.81.0): - ReactCodegen - - ReactCodegen (0.81.0-rc.5): + - ReactCodegen (0.81.0): - boost - DoubleConversion - fast_float @@ -2293,7 +2295,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0-rc.5): + - ReactCommon (0.81.0): - boost - DoubleConversion - fast_float @@ -2301,9 +2303,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0-rc.5) + - ReactCommon/turbomodule (= 0.81.0) - SocketRocket - - ReactCommon-Samples (0.81.0-rc.5): + - ReactCommon-Samples (0.81.0): - boost - DoubleConversion - fast_float @@ -2319,7 +2321,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.0-rc.5): + - ReactCommon/turbomodule (0.81.0): - boost - DoubleConversion - fast_float @@ -2328,15 +2330,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.5) - - React-cxxreact (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) - - React-logger (= 0.81.0-rc.5) - - React-perflogger (= 0.81.0-rc.5) - - ReactCommon/turbomodule/bridging (= 0.81.0-rc.5) - - ReactCommon/turbomodule/core (= 0.81.0-rc.5) + - React-callinvoker (= 0.81.0) + - React-cxxreact (= 0.81.0) + - React-jsi (= 0.81.0) + - React-logger (= 0.81.0) + - React-perflogger (= 0.81.0) + - ReactCommon/turbomodule/bridging (= 0.81.0) + - ReactCommon/turbomodule/core (= 0.81.0) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0-rc.5): + - ReactCommon/turbomodule/bridging (0.81.0): - boost - DoubleConversion - fast_float @@ -2345,13 +2347,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.5) - - React-cxxreact (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) - - React-logger (= 0.81.0-rc.5) - - React-perflogger (= 0.81.0-rc.5) + - React-callinvoker (= 0.81.0) + - React-cxxreact (= 0.81.0) + - React-jsi (= 0.81.0) + - React-logger (= 0.81.0) + - React-perflogger (= 0.81.0) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0-rc.5): + - ReactCommon/turbomodule/core (0.81.0): - boost - DoubleConversion - fast_float @@ -2360,14 +2362,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0-rc.5) - - React-cxxreact (= 0.81.0-rc.5) - - React-debug (= 0.81.0-rc.5) - - React-featureflags (= 0.81.0-rc.5) - - React-jsi (= 0.81.0-rc.5) - - React-logger (= 0.81.0-rc.5) - - React-perflogger (= 0.81.0-rc.5) - - React-utils (= 0.81.0-rc.5) + - React-callinvoker (= 0.81.0) + - React-cxxreact (= 0.81.0) + - React-debug (= 0.81.0) + - React-featureflags (= 0.81.0) + - React-jsi (= 0.81.0) + - React-logger (= 0.81.0) + - React-perflogger (= 0.81.0) + - React-utils (= 0.81.0) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2651,83 +2653,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 64579c0203cbc859de4536d54b4c6ed28fd03d42 + FBLazyVector: a867936a67af0d09c37935a1b900a1a3c795b6d1 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 8b7ef0f4e8363c2dfd6fd133979dd58f57b95825 + hermes-engine: e7491a2038f2618c8cd444ed411a6deb350a3742 MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 3a51da4c0e2a533c893971c2171d164974bc5214 - RCTRequired: d26a2245fa986ca16a6c93d91e41beeeb7a8aa3f - RCTTypeSafety: e9598921dd4338d6dcb7b4ba0b7b92f84cdcc25e - React: 713c6b114dfaddd4e58bc0e3804334f2a170b754 - React-callinvoker: 4441303f80922bcab09bd3e401738c1a7f3ffe11 - React-Core: 1647c97526fa4f1ea42365283e03649a53297d2e - React-CoreModules: 4c3d70d404ab9b87c7775e0293f53f9926663039 - React-cxxreact: a51f7392e614e975f03845504cc253c812014a95 - React-debug: 77c881c70aef8f5787761005eeb57e437a7d0a5b - React-defaultsnativemodule: e6b4fadf89fd6c8b8f5a3e04d5c2643ccdfe82b8 - React-domnativemodule: 935765aae2d5cee829e14ef7f68bae607b985262 - React-Fabric: 51b47e25e8ea701e0de18df49ecfacde647dcef0 - React-FabricComponents: 3563263621533b915a6634cd7634f3bac316c302 - React-FabricImage: 81f78d0cc89a824c6842493b19c20d50d5e0eacd - React-featureflags: ccf1419c575fa7fd7cc558781bdd71ef9f671735 - React-featureflagsnativemodule: 6e11d8ae01637ee30a2be5c65cb9363c672f4e7c - React-graphics: 211215400fa45680369a528e33f8a1bd0c53e06c - React-hermes: bdbe62b8a2faee475a82783785a4dc5d523d86fc - React-idlecallbacksnativemodule: 1a569d82993b763b2fabe1e1632bb733f9d67f30 - React-ImageManager: 7ec5c6e6cd9b9025f2c0a5ac60469fd5a41b87a0 - React-jserrorhandler: 98669ab3fc66c77862c5e757a44f8d7a6569ee3a - React-jsi: dfa0088e5654a951995d4deac1bb9fcdb3f4caf7 - React-jsiexecutor: 2afac999079f68d80d3af10bfff584f52c754a13 - React-jsinspector: ed95bb4e7e40f5b217007635dd138b0bec18ee5c - React-jsinspectorcdp: ceba155d82ef6be17948c6dd719af7d76ccc7849 - React-jsinspectornetwork: 3d24ed2f68f45e644a2cd1b58a2e7f2a6c2362bf - React-jsinspectortracing: 16f01f653a451f0180e0dd9c3d18adf35611bb89 - React-jsitooling: 4bd008cf273ba5615f3d27ea29cbd984dd22c0d7 - React-jsitracing: d2ee2605ab10432c31c42a3b1a8c7dd2d387f3d3 - React-logger: ce833a4ee1f377d1b27d6a70db5e49f539dd3fc6 - React-Mapbuffer: f0c91e870f86a23ccf80ab9527d95f37e834e24e - React-microtasksnativemodule: be6fa55f64e8de5a53f3e9d01feb91d6682af78d - React-NativeModulesApple: f75e771a53921934a0c6120e2bc7ee7dfb7c8728 - React-oscompat: e324ee1ba89eb09d59c8e346748c758cb87a2ce3 - React-perflogger: 08d464e4b97e53f74e6d8a1e4199e96f6ef8fd97 - React-performancetimeline: b35d1855146b516a8a45639ea2809379d6990a50 - React-RCTActionSheet: e995bcd8831351318c94bfa3e585178dc15934c8 - React-RCTAnimation: 0bf88d7b156c5c47cdb74fe630e521bcbb9baa9c - React-RCTAppDelegate: 910087f517dc84af72c85d17973ccc1c1118a297 - React-RCTBlob: 57f0deea9e2b6acc4165c4fd85d1515ed572da82 - React-RCTFabric: 93ce57846073175be95690ea04cd31326b05ed58 - React-RCTFBReactNativeSpec: 1aeba7991a5dcead5b2698f43b0f6c7f43105109 - React-RCTImage: 07f30e864a1329886d3f1b870e795c2be9bee4a6 - React-RCTLinking: d1431042ba333062262e0238f8337afb929976d8 - React-RCTNetwork: 5e4f2515221b263a2131fb34382c6c4486f8b31b - React-RCTPushNotification: 851b46f34487ead85ecff7a1f88b4e96b920d6fb - React-RCTRuntime: adde7ead94b95216b2ed43923dd6111c4a9b9bbd - React-RCTSettings: 7f123bcbf1feb7747dd62343231bdfaba42542bc - React-RCTTest: 2f828e7e801cc79410c53d28a36c7ee20d956d28 - React-RCTText: fb56147304f7e3ffc790310a83a099ade9d1f930 - React-RCTVibration: 12044b012f28bcdf52d1b3bcef0c2645a56dda1b - React-rendererconsistency: fde6f437f72fb837be955c7d287c5f1a1fe47212 - React-renderercss: c57968265fbec6bbd00af273bac6f795874b3148 - React-rendererdebug: a28985b812b04903f7e13d9aff7748bc3ec7a72d - React-RuntimeApple: f4888b94562b29f18ff96b18f6e3cf958dfbc1a9 - React-RuntimeCore: c49192fe880e0452d96b16c729064d1d489a0e8e - React-runtimeexecutor: 15eb9796b1efe4eee86e020799026723dc4c99cc - React-RuntimeHermes: 41b97445036fc60f2447c5c69b9f1639de65292b - React-runtimescheduler: eee88df3c5fb6a30a220e524fd282e44a282a1ca - React-timing: c6ce3a683af45aecee166b49348cd094170a7e36 - React-utils: 082cd4a9663f63b4138bc2e068a5a93dc7e0adff - ReactAppDependencyProvider: 3b7ece00025ce3482570139b0dbe115e639688ca - ReactCodegen: 8e3c013e0eb89c074ead06a423def5ea2db1156d - ReactCommon: 61fd53636b15a5dc300d5e31105a76f773a918fd - ReactCommon-Samples: 790cf726ab1550f9cdc8682ad2af2e3394e4eb9f + RCTDeprecation: 0735ab4f6b3ec93a7f98187b5da74d7916e2cf4c + RCTRequired: 8fcc7801bfc433072287b0f24a662e2816e89d0c + RCTTypeSafety: 2b2be515d6b968bcba7a68c4179d8199bd8c9b58 + React: 1000c0e96d8fb9fbdaf13f7d31d0b09db3cbb4ac + React-callinvoker: 7e52661bfaf5d8881a9cee049792627a00001fbe + React-Core: 949b436ddfe76cf47ac96375152de2f3506a8421 + React-CoreModules: 0f27580d0d82d430fa4f2cf4d970b6ad1120d63a + React-cxxreact: 48754f11f47a29ea4800cbdd694c10f874a26b9b + React-debug: 7a23d96f709f437c5e08973d6e06d0a54dd180a1 + React-defaultsnativemodule: 569d9222a701ed3dc60a60b2ce066b5bd88da059 + React-domnativemodule: 34474bda3973bfd0ca2ea9f1b3db20db5d504cc7 + React-Fabric: 45c3e9b112075451e592f0e008cabd4b82575355 + React-FabricComponents: a428f23938c27a073baacc069d484b3478df85f3 + React-FabricImage: 4375129ba8a26e8a7074af1c2468870fb8aab723 + React-featureflags: ed973a134993f3be204d0b2d385d386603c9a0af + React-featureflagsnativemodule: aa3e1dc86bc185344d4875e7cb40cce0bd28de76 + React-graphics: b5b8709a8216075bb6a5f9e7bb68881212d924ee + React-hermes: c543ffa2866304c582bdcb135c184e0f776f0d0b + React-idlecallbacksnativemodule: f19c4060b12fffc3ad33ce5de190338751b462ef + React-ImageManager: ecaf317aa5dff5eebba178b0813ef998c62547ea + React-jserrorhandler: 92eea1ee4f8c56b466b34e0065def59805e5d3a9 + React-jsi: 7336786a4a14c473d104e6b37df935620d218fcd + React-jsiexecutor: 7c750f5b63fbc071d0f0e56e86f1a1589914f7b1 + React-jsinspector: eee10f78208f7995d26e05efd97610c8980a6df3 + React-jsinspectorcdp: 0e807e4c2dc8ae8a07f0a6bfe50377f442079ba3 + React-jsinspectornetwork: 3399384f2b6b70b287d8b9675452af4cec21dc65 + React-jsinspectortracing: 030af0e9dca9a4eaa1d0ba258c7bd859fb90f61d + React-jsitooling: f8ed67814b17ebb124c48fccdf587ee1e02f16f4 + React-jsitracing: 5cf6b84d46a4653895e30956a0ce3a315244c10a + React-logger: 04ce9229cb57db2c2a8164eaec1105f89da7fb22 + React-Mapbuffer: e402e7a0535b2213c50727553621480fe8cd8ade + React-microtasksnativemodule: a63ce5595016996a9bac1f10c70a7a7fe6506649 + React-NativeModulesApple: b3766e1f87b08064ebc459b9e1538da2447ca874 + React-oscompat: 34f3d3c06cadcbc470bc4509c717fb9b919eaa8b + React-perflogger: a1edb025fd5d44f61bf09307e248f7608d7b2dcf + React-performancetimeline: 1f86dc9782e3fe78727c5fbb3e2178b9fd1aa6fd + React-RCTActionSheet: 550c9c6c2e7dcd85a51954dc08e2f3837a148e7c + React-RCTAnimation: 19d4bb6d2190983d1354b096b7b65dbd591924da + React-RCTAppDelegate: 6c71d16eef920831a312ff363355fc3b99c02a98 + React-RCTBlob: b81a0cffe1a083bcf9d8aa9f27f4d37864579e90 + React-RCTFabric: 01005d2fa799bba6e21aae18820498f56fe0be5f + React-RCTFBReactNativeSpec: 5adb84a81c4ed7a1f2661835d166e4b2c4320cd4 + React-RCTImage: 607e5e373fb56d72417464bd82e8046af81ab502 + React-RCTLinking: 301434c7bf1100458be5a3866326ba33491e3687 + React-RCTNetwork: a118a47bd123ac96c9877e04f5731a1d6545aba5 + React-RCTPushNotification: 067cbcf749a2961d650808d07294e05a33aabb4e + React-RCTRuntime: 85fdbf469fe8a12c4db6c836731b190efc33d11d + React-RCTSettings: 5a5aa2cf9ac40f7a8897cc0f9d945ac803886604 + React-RCTTest: cb3c5d40f213c69d5feadff6ebad9d1050340c6f + React-RCTText: e6e00bee9847a8af1218079b73c8bfed16c75b8d + React-RCTVibration: 5a05fa0ef05ee73d074a3314e57586afc969f1ba + React-rendererconsistency: c2cb23365f4a7b511893748fe8cad1830bbae637 + React-renderercss: 0c1472d6572c05e493aee476598c3ed6234b6c33 + React-rendererdebug: d6335da9730fa5a151537aa976a16d48de6135e2 + React-RuntimeApple: 5684c2a5d8768e5728a5817c21e5dba798d54c58 + React-RuntimeCore: 52428a1b48fb3c50ddf4dd5eee494486e4ecffc6 + React-runtimeexecutor: 1b4e99e5c27d2cb8bdeca9773ff5f1a8eac7709c + React-RuntimeHermes: a688639233a3ea44b4f8e4d448f51943d7e00815 + React-runtimescheduler: b833f0fc8c788329a497e93f55ce30508f56307a + React-timing: c87270986afd695a426f51a5fa126785dc6911da + React-utils: 068cec677032ba78ca0700f2dcbe6d08a0939647 + ReactAppDependencyProvider: c91900fa724baee992f01c05eeb4c9e01a807f78 + ReactCodegen: 322fcab445165c70083e9b69a4fce4dc33c12c02 + ReactCommon: 116d6ee71679243698620d8cd9a9042541e44aa6 + ReactCommon-Samples: db4136c7e5d6ef9be1e967598ce71254fe6ee7fa ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 72ab8318e9f1910fbdd236b045eb5455c8415d92 + Yoga: 00013dd9cde63a2d98e8002fcc4f5ddb66c10782 PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From dffbfe6fd98977930dfe6eb87cc754c523b45bfe Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 27 Aug 2025 12:27:24 +0100 Subject: [PATCH 070/312] [LOCAL] Fix Switch layout for iOS 26 (#53389) * Fix Switch layout with iOS26 (#53247) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53247 Apple changed the sizes of the UISwitchComponent and now, if you build an iOs app using the component, the layout of the app will be broken because of wrong layout measurements. This has been reported also by [https://github.com/facebook/react-native/issues/52823](https://github.com/facebook/react-native/issues/52823). The `` component was using hardcoded values for its size. This change fixes the problem by: - Using codegen for interface only - Implementing a custom Sadow Node to ask the platform for the Switch measurements - Updating the JS layout to wrap the size around the native component. [iOS][Fixed] - Fix Switch layout to work with iOS26 Pull Request resolved: https://github.com/facebook/react-native/pull/53067 Test Plan: Tested locally with RNTester. | iOS Version | Before | After | | --- | --- | --- | | < iOS 26 | https://github.com/user-attachments/assets/91d73ea3-30ba-4a5c-948e-ea5c63aa7c6d | https://github.com/user-attachments/assets/76061bc8-0f14-412a-a8fb-d1c3951772e6 | | >= iOS 26 | https://github.com/user-attachments/assets/1abc477f-bc0a-4762-938e-98814fb2a054 | https://github.com/user-attachments/assets/77e562e1-b803-46ac-9cf6-102f062a1cd4 | Rollback Plan: Reviewed By: sammy-SC Differential Revision: D79653120 Pulled By: cipolleschi fbshipit-source-id: d99b353b7b7b5496b148779de4abe3e57dd38156 * feat: update js layout * fix crash for feature flag --- .../Libraries/Components/Switch/Switch.js | 2 +- packages/react-native/Package.swift | 3 +- packages/react-native/React/Base/RCTUtils.h | 1 + packages/react-native/React/Base/RCTUtils.mm | 12 ++++++ .../Switch/RCTSwitchComponentView.mm | 2 +- .../React/React-RCTFabric.podspec | 1 + .../React-FabricComponents.podspec | 8 ++++ .../switch/AppleSwitchComponentDescriptor.h | 30 +++++++++++++ .../components/switch/AppleSwitchShadowNode.h | 42 +++++++++++++++++++ .../components/switch/IOSSwitchShadowNode.mm | 28 +++++++++++++ .../switch/MacOSSwitchShadowNode.mm | 32 ++++++++++++++ .../platform/ios/ReactCommon/RCTInstance.mm | 1 + .../components/SwitchNativeComponent.js | 1 + 13 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchComponentDescriptor.h create mode 100644 packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchShadowNode.h create mode 100644 packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/IOSSwitchShadowNode.mm create mode 100644 packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/MacOSSwitchShadowNode.mm diff --git a/packages/react-native/Libraries/Components/Switch/Switch.js b/packages/react-native/Libraries/Components/Switch/Switch.js index 24db0a95029..d3b88afad78 100644 --- a/packages/react-native/Libraries/Components/Switch/Switch.js +++ b/packages/react-native/Libraries/Components/Switch/Switch.js @@ -264,7 +264,7 @@ const Switch: component( disabled, onTintColor: trackColorForTrue, style: StyleSheet.compose( - {height: 31, width: 51}, + {alignSelf: 'flex-start' as const}, StyleSheet.compose( style, ios_backgroundColor == null diff --git a/packages/react-native/Package.swift b/packages/react-native/Package.swift index 3e482703932..c748b549463 100644 --- a/packages/react-native/Package.swift +++ b/packages/react-native/Package.swift @@ -424,6 +424,7 @@ let reactFabricComponents = RNTarget( "components/view/platform/android", "components/view/platform/windows", "components/view/platform/macos", + "components/switch/iosswitch/react/renderer/components/switch/MacOSSwitchShadowNode.mm", "components/textinput/platform/android", "components/text/platform/android", "components/textinput/platform/macos", @@ -436,7 +437,7 @@ let reactFabricComponents = RNTarget( "conponents/rncore", // this was the old folder where RN Core Components were generated. If you ran codegen in the past, you might have some files in it that might make the build fail. ], dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging], - sources: ["components/inputaccessory", "components/modal", "components/safeareaview", "components/text", "components/text/platform/cxx", "components/textinput", "components/textinput/platform/ios/", "components/unimplementedview", "components/virtualview", "textlayoutmanager", "textlayoutmanager/platform/ios"] + sources: ["components/inputaccessory", "components/modal", "components/safeareaview", "components/text", "components/text/platform/cxx", "components/textinput", "components/textinput/platform/ios/", "components/unimplementedview", "components/virtualview", "textlayoutmanager", "textlayoutmanager/platform/ios", "components/switch/iosswitch"] ) /// React-FabricImage.podspec diff --git a/packages/react-native/React/Base/RCTUtils.h b/packages/react-native/React/Base/RCTUtils.h index 1f3c29b0062..9df03fb29d8 100644 --- a/packages/react-native/React/Base/RCTUtils.h +++ b/packages/react-native/React/Base/RCTUtils.h @@ -54,6 +54,7 @@ RCT_EXTERN CGFloat RCTScreenScale(void); RCT_EXTERN CGFloat RCTFontSizeMultiplier(void); RCT_EXTERN CGSize RCTScreenSize(void); RCT_EXTERN CGSize RCTViewportSize(void); +RCT_EXTERN CGSize RCTSwitchSize(void); // Round float coordinates to nearest whole screen pixel (not point) RCT_EXTERN CGFloat RCTRoundPixelValue(CGFloat value); diff --git a/packages/react-native/React/Base/RCTUtils.mm b/packages/react-native/React/Base/RCTUtils.mm index dffe4dc800e..6d89ba62303 100644 --- a/packages/react-native/React/Base/RCTUtils.mm +++ b/packages/react-native/React/Base/RCTUtils.mm @@ -426,6 +426,18 @@ CGSize RCTViewportSize(void) return window ? window.bounds.size : RCTScreenSize(); } +CGSize RCTSwitchSize(void) +{ + static CGSize rctSwitchSize; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + RCTUnsafeExecuteOnMainQueueSync(^{ + rctSwitchSize = [UISwitch new].intrinsicContentSize; + }); + }); + return rctSwitchSize; +} + CGFloat RCTRoundPixelValue(CGFloat value) { CGFloat scale = RCTScreenScale(); diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm index 552dd5def91..ba836bf5fd4 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm @@ -9,10 +9,10 @@ #import -#import #import #import #import +#import #import "RCTFabricComponentsPlugins.h" diff --git a/packages/react-native/React/React-RCTFabric.podspec b/packages/react-native/React/React-RCTFabric.podspec index 974f046fef1..5a453686011 100644 --- a/packages/react-native/React/React-RCTFabric.podspec +++ b/packages/react-native/React/React-RCTFabric.podspec @@ -75,6 +75,7 @@ Pod::Spec.new do |s| "react/renderer/components/scrollview/platform/cxx", "react/renderer/components/text/platform/cxx", "react/renderer/components/textinput/platform/ios", + "react/renderer/components/switch/iosswitch", ]); add_dependency(s, "React-graphics", :additional_framework_paths => ["react/renderer/graphics/platform/ios"]) diff --git a/packages/react-native/ReactCommon/React-FabricComponents.podspec b/packages/react-native/ReactCommon/React-FabricComponents.podspec index 9ee30be053f..a501b020470 100644 --- a/packages/react-native/ReactCommon/React-FabricComponents.podspec +++ b/packages/react-native/ReactCommon/React-FabricComponents.podspec @@ -124,6 +124,14 @@ Pod::Spec.new do |s| sss.header_dir = "react/renderer/components/iostextinput" end + ss.subspec "switch" do |sss| + sss.source_files = podspec_sources( + ["react/renderer/components/switch/iosswitch/**/*.{m,mm,cpp,h}"], + ["react/renderer/components/switch/iosswitch/**/*.h"]) + sss.exclude_files = "react/renderer/components/switch/iosswitch/**/MacOS*.{m,mm,cpp,h}" + sss.header_dir = "react/renderer/components/switch/" + end + ss.subspec "textinput" do |sss| sss.source_files = podspec_sources("react/renderer/components/textinput/*.{m,mm,cpp,h}", "react/renderer/components/textinput/**/*.h") sss.header_dir = "react/renderer/components/textinput" diff --git a/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchComponentDescriptor.h b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchComponentDescriptor.h new file mode 100644 index 00000000000..de4cef29aaa --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchComponentDescriptor.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include "AppleSwitchShadowNode.h" + +#include + +namespace facebook::react { + +/* + * Descriptor for component. + */ +class SwitchComponentDescriptor final + : public ConcreteComponentDescriptor { + public: + SwitchComponentDescriptor(const ComponentDescriptorParameters& parameters) + : ConcreteComponentDescriptor(parameters) {} + + void adopt(ShadowNode& shadowNode) const override { + ConcreteComponentDescriptor::adopt(shadowNode); + } +}; + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchShadowNode.h b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchShadowNode.h new file mode 100644 index 00000000000..2cffdf139f5 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/AppleSwitchShadowNode.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include + +namespace facebook::react { + +extern const char AppleSwitchComponentName[]; + +/* + * `ShadowNode` for component. + */ +class SwitchShadowNode final : public ConcreteViewShadowNode< + AppleSwitchComponentName, + SwitchProps, + SwitchEventEmitter> { + public: + using ConcreteViewShadowNode::ConcreteViewShadowNode; + + static ShadowNodeTraits BaseTraits() { + auto traits = ConcreteViewShadowNode::BaseTraits(); + traits.set(ShadowNodeTraits::Trait::LeafYogaNode); + traits.set(ShadowNodeTraits::Trait::MeasurableYogaNode); + return traits; + } + +#pragma mark - LayoutableShadowNode + + Size measureContent( + const LayoutContext& layoutContext, + const LayoutConstraints& layoutConstraints) const override; +}; + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/IOSSwitchShadowNode.mm b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/IOSSwitchShadowNode.mm new file mode 100644 index 00000000000..d1981f17c06 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/IOSSwitchShadowNode.mm @@ -0,0 +1,28 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import +#include "AppleSwitchShadowNode.h" + +namespace facebook::react { + +extern const char AppleSwitchComponentName[] = "Switch"; + +#pragma mark - LayoutableShadowNode + +Size SwitchShadowNode::measureContent( + const LayoutContext & /*layoutContext*/, + const LayoutConstraints & /*layoutConstraints*/) const +{ + CGSize uiSwitchSize = RCTSwitchSize(); + // Apple has some error when returning the width of the component and it doesn't + // account for the borders. + return {.width = uiSwitchSize.width + 2, .height = uiSwitchSize.height}; +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/MacOSSwitchShadowNode.mm b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/MacOSSwitchShadowNode.mm new file mode 100644 index 00000000000..cd62f626ba6 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/switch/iosswitch/react/renderer/components/switch/MacOSSwitchShadowNode.mm @@ -0,0 +1,32 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#include "AppleSwitchShadowNode.h" + +namespace facebook::react { + +extern const char AppleSwitchComponentName[] = "Switch"; + +#pragma mark - LayoutableShadowNode + +Size SwitchShadowNode::measureContent( + const LayoutContext & /*layoutContext*/, + const LayoutConstraints & /*layoutConstraints*/) const +{ + static CGSize nsSwitchSize = CGSizeZero; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + dispatch_sync(dispatch_get_main_queue(), ^{ + nsSwitchSize = [NSSwitch new].intrinsicContentSize; + }); + }); + + return {.width = nsSwitchSize.width, .height = nsSwitchSize.height}; +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm b/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm index 029c4cf7964..7d621ac6bf8 100644 --- a/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +++ b/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm @@ -366,6 +366,7 @@ - (void)_start RCTScreenSize(); RCTScreenScale(); + RCTSwitchSize(); std::lock_guard lock(*mutex); *isReady = true; diff --git a/packages/react-native/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js b/packages/react-native/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js index 6ddb0cb20d9..1f9f75a3bb4 100644 --- a/packages/react-native/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +++ b/packages/react-native/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js @@ -58,4 +58,5 @@ export const Commands: NativeCommands = codegenNativeCommands({ export default (codegenNativeComponent('Switch', { paperComponentName: 'RCTSwitch', excludedPlatforms: ['android'], + interfaceOnly: true, }): ComponentType); From 8ace21f15732e8453d082e3f538f1e4636bd5301 Mon Sep 17 00:00:00 2001 From: riteshshukla04 Date: Wed, 13 Aug 2025 07:23:30 -0700 Subject: [PATCH 071/312] Fix: Setting maxLength to 0 in TextInput still allows typing on iOS (#52890) Summary: Trying to fix https://github.com/facebook/react-native/issues/52860 ## Changelog: [IOS][FIXED] Setting maxLength to 0 in TextInput still allows typing on iOS Pull Request resolved: https://github.com/facebook/react-native/pull/52890 Test Plan: https://github.com/user-attachments/assets/56549e0f-6bbf-461e-815c-794abdee2018 Tested on Android too Rollback Plan: Reviewed By: cortinico Differential Revision: D80095701 Pulled By: cipolleschi fbshipit-source-id: 5e76f88798e32097e6a619c44ff6240b4f01fc6f --- .../ComponentViews/TextInput/RCTTextInputComponentView.mm | 3 ++- .../react/renderer/components/textinput/BaseTextInputProps.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm index b5d724226fb..577bebe144b 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm @@ -22,6 +22,7 @@ #import "RCTTextInputNativeCommands.h" #import "RCTTextInputUtils.h" +#import #import "RCTFabricComponentsPlugins.h" /** Native iOS text field bottom keyboard offset amount */ @@ -447,7 +448,7 @@ - (NSString *)textInputShouldChangeText:(NSString *)text inRange:(NSRange)range } } - if (props.maxLength) { + if (props.maxLength < std::numeric_limits::max()) { NSInteger allowedLength = props.maxLength - _backedTextInputView.attributedText.string.length + range.length; if (allowedLength > 0 && text.length > allowedLength) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.h b/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.h index 150f3e5fd55..5802350a2ee 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.h @@ -13,6 +13,7 @@ #include #include #include +#include #include namespace facebook::react { @@ -60,7 +61,7 @@ class BaseTextInputProps : public ViewProps, public BaseTextProps { // TODO: Rename to `tintColor` and make universal. SharedColor underlineColorAndroid{}; - int maxLength{}; + int maxLength = std::numeric_limits::max(); /* * "Private" (only used by TextInput.js) props From 03952ba3dfd94e2e752ca0e36c49eb9a126787ac Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Mon, 11 Aug 2025 05:12:43 -0700 Subject: [PATCH 072/312] Fix missing path escape patterns in Xcode scripts for projects with spaces (#53194) Summary: When running a project in a path that contains any spaces, the scripts have several escape patterns that don't handle this path correctly. For example, `"/absolute/path/with spaces"` may be rendered as `/absolute/path/with spaces` and this shows as an output error such as `No such file or directory /absolute/path/with` This was likely a longstanding issue, but is unexpected for some beginners that first try out React Native. While it's not recommended to create a path like this, it's certainly not hard to make this mistake. ## Changelog: [IOS] [FIXED] - fix scripts for paths containing whitespaces Pull Request resolved: https://github.com/facebook/react-native/pull/53194 Test Plan: tested locally; create a React Native or Expo project in a folder containing a space (e.g. `/my/path/with spaces/new-app` and build the project. With changes applied, the build should succeed. (There's related failures in `expo/expo` that need fixing too) Reviewed By: robhogan Differential Revision: D79993537 Pulled By: cipolleschi fbshipit-source-id: b32697ce2405c403c410b3ceaed7e161e4a48537 --- .../generate-artifacts-executor-test.js.snap | 12 ++++++------ .../generateReactCodegenPodspec.js | 6 +++--- packages/react-native/scripts/react-native-xcode.sh | 4 ++-- .../react-native/scripts/xcode/with-environment.sh | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index a2c4e530b21..acb69b45e62 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -497,9 +497,9 @@ export RCT_SCRIPT_APP_PATH=\\"$RCT_SCRIPT_POD_INSTALLATION_ROOT/..\\" export RCT_SCRIPT_OUTPUT_DIR=\\"$RCT_SCRIPT_POD_INSTALLATION_ROOT\\" export RCT_SCRIPT_TYPE=\\"withCodegenDiscovery\\" -SCRIPT_PHASES_SCRIPT=\\"$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh\\" -WITH_ENVIRONMENT=\\"$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh\\" -/bin/sh -c \\"$WITH_ENVIRONMENT $SCRIPT_PHASES_SCRIPT\\" +export SCRIPT_PHASES_SCRIPT=\\"$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh\\" +export WITH_ENVIRONMENT=\\"$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh\\" +/bin/sh -c '\\"$WITH_ENVIRONMENT\\" \\"$SCRIPT_PHASES_SCRIPT\\"' SCRIPT } @@ -976,9 +976,9 @@ export RCT_SCRIPT_APP_PATH=\\"$RCT_SCRIPT_POD_INSTALLATION_ROOT/..\\" export RCT_SCRIPT_OUTPUT_DIR=\\"$RCT_SCRIPT_POD_INSTALLATION_ROOT\\" export RCT_SCRIPT_TYPE=\\"withCodegenDiscovery\\" -SCRIPT_PHASES_SCRIPT=\\"$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh\\" -WITH_ENVIRONMENT=\\"$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh\\" -/bin/sh -c \\"$WITH_ENVIRONMENT $SCRIPT_PHASES_SCRIPT\\" +export SCRIPT_PHASES_SCRIPT=\\"$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh\\" +export WITH_ENVIRONMENT=\\"$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh\\" +/bin/sh -c '\\"$WITH_ENVIRONMENT\\" \\"$SCRIPT_PHASES_SCRIPT\\"' SCRIPT } diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js index d5d932229dc..554dbca091f 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js @@ -83,9 +83,9 @@ export RCT_SCRIPT_APP_PATH="$RCT_SCRIPT_POD_INSTALLATION_ROOT/${relativeAppPath. export RCT_SCRIPT_OUTPUT_DIR="$RCT_SCRIPT_POD_INSTALLATION_ROOT" export RCT_SCRIPT_TYPE="withCodegenDiscovery" -SCRIPT_PHASES_SCRIPT="$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh" -WITH_ENVIRONMENT="$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh" -/bin/sh -c "$WITH_ENVIRONMENT $SCRIPT_PHASES_SCRIPT" +export SCRIPT_PHASES_SCRIPT="$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh" +export WITH_ENVIRONMENT="$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh" +/bin/sh -c '"$WITH_ENVIRONMENT" "$SCRIPT_PHASES_SCRIPT"' SCRIPT`; } diff --git a/packages/react-native/scripts/react-native-xcode.sh b/packages/react-native/scripts/react-native-xcode.sh index b5d50ccb4bb..1dcdf55e190 100755 --- a/packages/react-native/scripts/react-native-xcode.sh +++ b/packages/react-native/scripts/react-native-xcode.sh @@ -10,7 +10,7 @@ # Print commands before executing them (useful for troubleshooting) set -x -e -DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH +DEST="$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH" # Enables iOS devices to get the IP address of the machine running Metro if [[ ! "$SKIP_BUNDLING_METRO_IP" && "$CONFIGURATION" = *Debug* && ! "$PLATFORM_NAME" == *simulator ]]; then @@ -59,7 +59,7 @@ esac # Path to react-native folder inside node_modules REACT_NATIVE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # Most projects have their project root, one level up from their Xcode project dir (the "ios" directory) -PROJECT_ROOT=${PROJECT_ROOT:-"$PROJECT_DIR/.."} +PROJECT_ROOT="${PROJECT_ROOT:-"$PROJECT_DIR/.."}" cd "$PROJECT_ROOT" || exit diff --git a/packages/react-native/scripts/xcode/with-environment.sh b/packages/react-native/scripts/xcode/with-environment.sh index c6bd62c87fc..d2ddf3c02ca 100755 --- a/packages/react-native/scripts/xcode/with-environment.sh +++ b/packages/react-native/scripts/xcode/with-environment.sh @@ -43,5 +43,5 @@ fi # Execute argument, if present if [ -n "$1" ]; then - $1 + "$1" fi From 277a075b71989cc7ec1fdd9d668e03deae624d87 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Wed, 27 Aug 2025 14:32:35 +0000 Subject: [PATCH 073/312] Release 0.81.1 #publish-packages-to-npm&latest --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 4 ++-- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 64 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 1f9e3a85f66..6c10d825126 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.0", - "@react-native/metro-config": "0.81.0", + "@react-native/metro-babel-transformer": "0.81.1", + "@react-native/metro-config": "0.81.1", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 0f003391b90..32ce296816e 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.0", + "version": "0.81.1", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index f8f7e02e6b1..d0b9fa76bd2 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.0", + "version": "0.81.1", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.0" + "@react-native/codegen": "0.81.1" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index e2b0d02e7b2..979ed0caae9 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.0", + "version": "0.81.1", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.0", + "@react-native/dev-middleware": "0.81.1", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index adf8c463431..4ee4b56d02c 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.0", + "version": "0.81.1", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index d3bf406fb34..d7584852d6e 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.0", + "version": "0.81.1", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index ae0af8a00b9..0fa622ee4f6 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.0", + "version": "0.81.1", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index e91cdbdc23a..558fcdfce2f 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.0", + "version": "0.81.1", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.0", + "@react-native/debugger-frontend": "0.81.1", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 1fbbb922e89..db993f2d63d 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.0", + "version": "0.81.1", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.0", + "@react-native/eslint-plugin": "0.81.1", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 8fab78a52b5..e5b617b1fd0 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.0", + "version": "0.81.1", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 083659f9ea6..be8b024ea30 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.0", + "version": "0.81.1", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.0", + "@react-native/codegen": "0.81.1", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 43f5f4b4db7..ae1e679d329 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.0", + "version": "0.81.1", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 81da581acb7..1a03a33ee93 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.0", + "version": "0.81.1", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.0", - "@react-native/metro-babel-transformer": "0.81.0", + "@react-native/js-polyfills": "0.81.1", + "@react-native/metro-babel-transformer": "0.81.1", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index 840e71427ae..0975a6e6e7d 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.0", + "version": "0.81.1", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 198d66492b9..6fe7294ece0 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.0", + "version": "0.81.1", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 898267641eb..ffbd587f5e0 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.0", + "version": "0.81.1", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 70a99976c20..ae3f8dcc8e0 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.0", + "version": "0.81.1", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.0", + "@react-native/babel-plugin-codegen": "0.81.1", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index d725b713c5c..643411348dd 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.0", + "version": "0.81.1", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0", + "@react-native/babel-preset": "0.81.1", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 0a2adfb7496..b4f1a40970a 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.0", + "version": "0.81.1", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index f520abf077a..0971a92040a 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.0", + "version": "0.81.1", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.0" + "@react-native/codegen": "0.81.1" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 3511f853d17..f207e21361f 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.0", + "version": "0.81.1", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.0" + "@react-native/codegen": "0.81.1" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index d481370abaa..ec7f66c4f7b 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.0", - "react-native": "0.81.0" + "@react-native/babel-preset": "0.81.1", + "react-native": "0.81.1" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 9027e907258..3e7f9b0ada3 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -17,6 +17,6 @@ export const version: $ReadOnly<{ }> = { major: 0, minor: 81, - patch: 0, + patch: 1, prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index cf6ecb87ce3..1d67bf46a27 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -23,7 +23,7 @@ __rnVersion = @{ RCTVersionMajor: @(0), RCTVersionMinor: @(81), - RCTVersionPatch: @(0), + RCTVersionPatch: @(1), RCTVersionPrerelease: [NSNull null], }; }); diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 1ce215e65ca..2202547db7e 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.0 +VERSION_NAME=0.81.1 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index c4df682e795..61662cd759d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -14,7 +14,7 @@ public object ReactNativeVersion { public val VERSION: Map = mapOf( "major" to 0, "minor" to 81, - "patch" to 0, + "patch" to 1, "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 144429eca42..68dba56b018 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -14,14 +14,14 @@ #define REACT_NATIVE_VERSION_MAJOR 0 #define REACT_NATIVE_VERSION_MINOR 81 -#define REACT_NATIVE_VERSION_PATCH 0 +#define REACT_NATIVE_VERSION_PATCH 1 namespace facebook::react { constexpr struct { int32_t Major = 0; int32_t Minor = 81; - int32_t Patch = 0; + int32_t Patch = 1; std::string_view Prerelease = ""; } ReactNativeVersion; diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 0618645c4af..ac44ae59135 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.0", + "version": "0.81.1", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.0", - "@react-native/codegen": "0.81.0", - "@react-native/community-cli-plugin": "0.81.0", - "@react-native/gradle-plugin": "0.81.0", - "@react-native/js-polyfills": "0.81.0", - "@react-native/normalize-colors": "0.81.0", - "@react-native/virtualized-lists": "0.81.0", + "@react-native/assets-registry": "0.81.1", + "@react-native/codegen": "0.81.1", + "@react-native/community-cli-plugin": "0.81.1", + "@react-native/gradle-plugin": "0.81.1", + "@react-native/js-polyfills": "0.81.1", + "@react-native/normalize-colors": "0.81.1", + "@react-native/virtualized-lists": "0.81.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index acb69b45e62..77f3e252786 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0\\" +version = \\"0.81.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0\\" +version = \\"0.81.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -840,7 +840,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0\\" +version = \\"0.81.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -878,7 +878,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.0\\" +version = \\"0.81.1\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 03ca65609de..c417a1b3ee0 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.0", - "@react-native/popup-menu-android": "0.81.0", + "@react-native/new-app-screen": "0.81.1", + "@react-native/popup-menu-android": "0.81.1", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 1d1045612db..36b57d86f36 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.0", + "version": "0.81.1", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index a9982c8082b..aace891ee45 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.0", + "version": "0.81.1", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 56d7603a99e..8954a3886bd 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.0" + "react-native": "0.81.1" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.0", - "@react-native/core-cli-utils": "0.81.0", - "@react-native/eslint-config": "0.81.0", - "@react-native/metro-config": "0.81.0", - "@react-native/typescript-config": "0.81.0", + "@react-native/babel-preset": "0.81.1", + "@react-native/core-cli-utils": "0.81.1", + "@react-native/eslint-config": "0.81.1", + "@react-native/metro-config": "0.81.1", + "@react-native/typescript-config": "0.81.1", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index b4fea5faec4..fd40e4e3eb4 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.0" + "@react-native/codegen": "0.81.1" }, "devDependencies": { "@babel/core": "^7.25.2", From cc493fc8ff34eac03733d635da46812adbfa7d6a Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Mon, 1 Sep 2025 10:47:12 +0100 Subject: [PATCH 074/312] Update Podfile.lock Changelog: [Internal] --- packages/rn-tester/Podfile.lock | 626 +++++++++++++++++--------------- 1 file changed, 327 insertions(+), 299 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 731203dd921..94d015e6076 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0) + - FBLazyVector (0.81.1) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.0): - - hermes-engine/Pre-built (= 0.81.0) - - hermes-engine/Pre-built (0.81.0) + - hermes-engine (0.81.1): + - hermes-engine/Pre-built (= 0.81.1) + - hermes-engine/Pre-built (0.81.1) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0) - - RCTRequired (0.81.0) - - RCTTypeSafety (0.81.0): - - FBLazyVector (= 0.81.0) - - RCTRequired (= 0.81.0) - - React-Core (= 0.81.0) - - React (0.81.0): - - React-Core (= 0.81.0) - - React-Core/DevSupport (= 0.81.0) - - React-Core/RCTWebSocket (= 0.81.0) - - React-RCTActionSheet (= 0.81.0) - - React-RCTAnimation (= 0.81.0) - - React-RCTBlob (= 0.81.0) - - React-RCTImage (= 0.81.0) - - React-RCTLinking (= 0.81.0) - - React-RCTNetwork (= 0.81.0) - - React-RCTSettings (= 0.81.0) - - React-RCTText (= 0.81.0) - - React-RCTVibration (= 0.81.0) - - React-callinvoker (0.81.0) - - React-Core (0.81.0): + - RCTDeprecation (0.81.1) + - RCTRequired (0.81.1) + - RCTTypeSafety (0.81.1): + - FBLazyVector (= 0.81.1) + - RCTRequired (= 0.81.1) + - React-Core (= 0.81.1) + - React (0.81.1): + - React-Core (= 0.81.1) + - React-Core/DevSupport (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) + - React-RCTActionSheet (= 0.81.1) + - React-RCTAnimation (= 0.81.1) + - React-RCTBlob (= 0.81.1) + - React-RCTImage (= 0.81.1) + - React-RCTLinking (= 0.81.1) + - React-RCTNetwork (= 0.81.1) + - React-RCTSettings (= 0.81.1) + - React-RCTText (= 0.81.1) + - React-RCTVibration (= 0.81.1) + - React-callinvoker (0.81.1) + - React-Core (0.81.1): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0) + - React-Core/Default (= 0.81.1) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0): + - React-Core/CoreModulesHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0): + - React-Core/Default (0.81.1): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0): + - React-Core/DevSupport (0.81.1): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0) - - React-Core/RCTWebSocket (= 0.81.0) + - React-Core/Default (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0): + - React-Core/RCTActionSheetHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0): + - React-Core/RCTAnimationHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0): + - React-Core/RCTBlobHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0): + - React-Core/RCTImageHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0): + - React-Core/RCTLinkingHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0): + - React-Core/RCTNetworkHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.0): + - React-Core/RCTPushNotificationHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0): + - React-Core/RCTSettingsHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0): + - React-Core/RCTTextHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0): + - React-Core/RCTVibrationHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0): + - React-Core/RCTWebSocket (0.81.1): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0) + - React-Core/Default (= 0.81.1) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0): + - React-CoreModules (0.81.1): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0) - - React-Core/CoreModulesHeaders (= 0.81.0) - - React-jsi (= 0.81.0) + - RCTTypeSafety (= 0.81.1) + - React-Core/CoreModulesHeaders (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0) + - React-RCTImage (= 0.81.1) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0): + - React-cxxreact (0.81.1): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-debug (= 0.81.0) - - React-jsi (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-debug (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - - React-timing (= 0.81.0) + - React-timing (= 0.81.1) - SocketRocket - - React-debug (0.81.0) - - React-defaultsnativemodule (0.81.0): + - React-debug (0.81.1) + - React-defaultsnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0): + - React-domnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0): + - React-Fabric (0.81.1): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0) - - React-Fabric/attributedstring (= 0.81.0) - - React-Fabric/bridging (= 0.81.0) - - React-Fabric/componentregistry (= 0.81.0) - - React-Fabric/componentregistrynative (= 0.81.0) - - React-Fabric/components (= 0.81.0) - - React-Fabric/consistency (= 0.81.0) - - React-Fabric/core (= 0.81.0) - - React-Fabric/dom (= 0.81.0) - - React-Fabric/imagemanager (= 0.81.0) - - React-Fabric/leakchecker (= 0.81.0) - - React-Fabric/mounting (= 0.81.0) - - React-Fabric/observers (= 0.81.0) - - React-Fabric/scheduler (= 0.81.0) - - React-Fabric/telemetry (= 0.81.0) - - React-Fabric/templateprocessor (= 0.81.0) - - React-Fabric/uimanager (= 0.81.0) + - React-Fabric/animations (= 0.81.1) + - React-Fabric/attributedstring (= 0.81.1) + - React-Fabric/bridging (= 0.81.1) + - React-Fabric/componentregistry (= 0.81.1) + - React-Fabric/componentregistrynative (= 0.81.1) + - React-Fabric/components (= 0.81.1) + - React-Fabric/consistency (= 0.81.1) + - React-Fabric/core (= 0.81.1) + - React-Fabric/dom (= 0.81.1) + - React-Fabric/imagemanager (= 0.81.1) + - React-Fabric/leakchecker (= 0.81.1) + - React-Fabric/mounting (= 0.81.1) + - React-Fabric/observers (= 0.81.1) + - React-Fabric/scheduler (= 0.81.1) + - React-Fabric/telemetry (= 0.81.1) + - React-Fabric/templateprocessor (= 0.81.1) + - React-Fabric/uimanager (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0): + - React-Fabric/animations (0.81.1): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0): + - React-Fabric/attributedstring (0.81.1): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0): + - React-Fabric/bridging (0.81.1): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0): + - React-Fabric/componentregistry (0.81.1): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0): + - React-Fabric/componentregistrynative (0.81.1): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0): + - React-Fabric/components (0.81.1): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0) - - React-Fabric/components/root (= 0.81.0) - - React-Fabric/components/scrollview (= 0.81.0) - - React-Fabric/components/view (= 0.81.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.1) + - React-Fabric/components/root (= 0.81.1) + - React-Fabric/components/scrollview (= 0.81.1) + - React-Fabric/components/view (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0): + - React-Fabric/components/legacyviewmanagerinterop (0.81.1): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0): + - React-Fabric/components/root (0.81.1): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0): + - React-Fabric/components/scrollview (0.81.1): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0): + - React-Fabric/components/view (0.81.1): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0): + - React-Fabric/consistency (0.81.1): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0): + - React-Fabric/core (0.81.1): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0): + - React-Fabric/dom (0.81.1): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0): + - React-Fabric/imagemanager (0.81.1): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0): + - React-Fabric/leakchecker (0.81.1): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0): + - React-Fabric/mounting (0.81.1): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0): + - React-Fabric/observers (0.81.1): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0) + - React-Fabric/observers/events (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0): + - React-Fabric/observers/events (0.81.1): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0): + - React-Fabric/scheduler (0.81.1): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0): + - React-Fabric/telemetry (0.81.1): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0): + - React-Fabric/templateprocessor (0.81.1): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0): + - React-Fabric/uimanager (0.81.1): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0) + - React-Fabric/uimanager/consistency (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0): + - React-Fabric/uimanager/consistency (0.81.1): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0): + - React-FabricComponents (0.81.1): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0) - - React-FabricComponents/textlayoutmanager (= 0.81.0) + - React-FabricComponents/components (= 0.81.1) + - React-FabricComponents/textlayoutmanager (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0): + - React-FabricComponents/components (0.81.1): - boost - DoubleConversion - fast_float @@ -1259,16 +1259,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0) - - React-FabricComponents/components/iostextinput (= 0.81.0) - - React-FabricComponents/components/modal (= 0.81.0) - - React-FabricComponents/components/rncore (= 0.81.0) - - React-FabricComponents/components/safeareaview (= 0.81.0) - - React-FabricComponents/components/scrollview (= 0.81.0) - - React-FabricComponents/components/text (= 0.81.0) - - React-FabricComponents/components/textinput (= 0.81.0) - - React-FabricComponents/components/unimplementedview (= 0.81.0) - - React-FabricComponents/components/virtualview (= 0.81.0) + - React-FabricComponents/components/inputaccessory (= 0.81.1) + - React-FabricComponents/components/iostextinput (= 0.81.1) + - React-FabricComponents/components/modal (= 0.81.1) + - React-FabricComponents/components/rncore (= 0.81.1) + - React-FabricComponents/components/safeareaview (= 0.81.1) + - React-FabricComponents/components/scrollview (= 0.81.1) + - React-FabricComponents/components/switch (= 0.81.1) + - React-FabricComponents/components/text (= 0.81.1) + - React-FabricComponents/components/textinput (= 0.81.1) + - React-FabricComponents/components/unimplementedview (= 0.81.1) + - React-FabricComponents/components/virtualview (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1281,7 +1282,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0): + - React-FabricComponents/components/inputaccessory (0.81.1): - boost - DoubleConversion - fast_float @@ -1308,7 +1309,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0): + - React-FabricComponents/components/iostextinput (0.81.1): - boost - DoubleConversion - fast_float @@ -1335,7 +1336,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0): + - React-FabricComponents/components/modal (0.81.1): - boost - DoubleConversion - fast_float @@ -1362,7 +1363,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0): + - React-FabricComponents/components/rncore (0.81.1): - boost - DoubleConversion - fast_float @@ -1389,7 +1390,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0): + - React-FabricComponents/components/safeareaview (0.81.1): - boost - DoubleConversion - fast_float @@ -1416,7 +1417,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0): + - React-FabricComponents/components/scrollview (0.81.1): - boost - DoubleConversion - fast_float @@ -1443,7 +1444,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0): + - React-FabricComponents/components/switch (0.81.1): - boost - DoubleConversion - fast_float @@ -1470,7 +1471,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0): + - React-FabricComponents/components/text (0.81.1): - boost - DoubleConversion - fast_float @@ -1497,7 +1498,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0): + - React-FabricComponents/components/textinput (0.81.1): - boost - DoubleConversion - fast_float @@ -1524,7 +1525,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0): + - React-FabricComponents/components/unimplementedview (0.81.1): - boost - DoubleConversion - fast_float @@ -1551,7 +1552,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0): + - React-FabricComponents/components/virtualview (0.81.1): - boost - DoubleConversion - fast_float @@ -1578,7 +1579,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0): + - React-FabricComponents/textlayoutmanager (0.81.1): - boost - DoubleConversion - fast_float @@ -1587,21 +1588,48 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0) - - RCTTypeSafety (= 0.81.0) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricImage (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired (= 0.81.1) + - RCTTypeSafety (= 0.81.1) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0) + - React-jsiexecutor (= 0.81.1) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0): + - React-featureflags (0.81.1): - boost - DoubleConversion - fast_float @@ -1610,7 +1638,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0): + - React-featureflagsnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -1625,7 +1653,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0): + - React-graphics (0.81.1): - boost - DoubleConversion - fast_float @@ -1638,7 +1666,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0): + - React-hermes (0.81.1): - boost - DoubleConversion - fast_float @@ -1647,16 +1675,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0) + - React-cxxreact (= 0.81.1) - React-jsi - - React-jsiexecutor (= 0.81.0) + - React-jsiexecutor (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0): + - React-idlecallbacksnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -1672,7 +1700,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0): + - React-ImageManager (0.81.1): - boost - DoubleConversion - fast_float @@ -1687,7 +1715,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0): + - React-jserrorhandler (0.81.1): - boost - DoubleConversion - fast_float @@ -1702,7 +1730,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0): + - React-jsi (0.81.1): - boost - DoubleConversion - fast_float @@ -1712,7 +1740,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0): + - React-jsiexecutor (0.81.1): - boost - DoubleConversion - fast_float @@ -1721,15 +1749,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0): + - React-jsinspector (0.81.1): - boost - DoubleConversion - fast_float @@ -1744,10 +1772,10 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.0) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0): + - React-jsinspectorcdp (0.81.1): - boost - DoubleConversion - fast_float @@ -1756,7 +1784,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0): + - React-jsinspectornetwork (0.81.1): - boost - DoubleConversion - fast_float @@ -1769,7 +1797,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0): + - React-jsinspectortracing (0.81.1): - boost - DoubleConversion - fast_float @@ -1780,7 +1808,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0): + - React-jsitooling (0.81.1): - boost - DoubleConversion - fast_float @@ -1788,16 +1816,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0): + - React-jsitracing (0.81.1): - React-jsi - - React-logger (0.81.0): + - React-logger (0.81.1): - boost - DoubleConversion - fast_float @@ -1806,7 +1834,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0): + - React-Mapbuffer (0.81.1): - boost - DoubleConversion - fast_float @@ -1816,7 +1844,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0): + - React-microtasksnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -1830,7 +1858,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.0): + - React-NativeModulesApple (0.81.1): - boost - DoubleConversion - fast_float @@ -1850,8 +1878,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0) - - React-perflogger (0.81.0): + - React-oscompat (0.81.1) + - React-perflogger (0.81.1): - boost - DoubleConversion - fast_float @@ -1860,7 +1888,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0): + - React-performancetimeline (0.81.1): - boost - DoubleConversion - fast_float @@ -1873,9 +1901,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0): - - React-Core/RCTActionSheetHeaders (= 0.81.0) - - React-RCTAnimation (0.81.0): + - React-RCTActionSheet (0.81.1): + - React-Core/RCTActionSheetHeaders (= 0.81.1) + - React-RCTAnimation (0.81.1): - boost - DoubleConversion - fast_float @@ -1891,7 +1919,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0): + - React-RCTAppDelegate (0.81.1): - boost - DoubleConversion - fast_float @@ -1925,7 +1953,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0): + - React-RCTBlob (0.81.1): - boost - DoubleConversion - fast_float @@ -1944,7 +1972,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0): + - React-RCTFabric (0.81.1): - boost - DoubleConversion - fast_float @@ -1979,7 +2007,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0): + - React-RCTFBReactNativeSpec (0.81.1): - boost - DoubleConversion - fast_float @@ -1993,10 +2021,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0) + - React-RCTFBReactNativeSpec/components (= 0.81.1) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0): + - React-RCTFBReactNativeSpec/components (0.81.1): - boost - DoubleConversion - fast_float @@ -2019,7 +2047,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0): + - React-RCTImage (0.81.1): - boost - DoubleConversion - fast_float @@ -2035,14 +2063,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0): - - React-Core/RCTLinkingHeaders (= 0.81.0) - - React-jsi (= 0.81.0) + - React-RCTLinking (0.81.1): + - React-Core/RCTLinkingHeaders (= 0.81.1) + - React-jsi (= 0.81.1) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0) - - React-RCTNetwork (0.81.0): + - ReactCommon/turbomodule/core (= 0.81.1) + - React-RCTNetwork (0.81.1): - boost - DoubleConversion - fast_float @@ -2060,14 +2088,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.0): + - React-RCTPushNotification (0.81.1): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.0): + - React-RCTRuntime (0.81.1): - boost - DoubleConversion - fast_float @@ -2087,7 +2115,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0): + - React-RCTSettings (0.81.1): - boost - DoubleConversion - fast_float @@ -2102,7 +2130,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.0): + - React-RCTTest (0.81.1): - boost - DoubleConversion - fast_float @@ -2110,15 +2138,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.0) - - React-CoreModules (= 0.81.0) - - React-jsi (= 0.81.0) - - ReactCommon/turbomodule/core (= 0.81.0) + - React-Core (= 0.81.1) + - React-CoreModules (= 0.81.1) + - React-jsi (= 0.81.1) + - ReactCommon/turbomodule/core (= 0.81.1) - SocketRocket - - React-RCTText (0.81.0): - - React-Core/RCTTextHeaders (= 0.81.0) + - React-RCTText (0.81.1): + - React-Core/RCTTextHeaders (= 0.81.1) - Yoga - - React-RCTVibration (0.81.0): + - React-RCTVibration (0.81.1): - boost - DoubleConversion - fast_float @@ -2132,11 +2160,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0) - - React-renderercss (0.81.0): + - React-rendererconsistency (0.81.1) + - React-renderercss (0.81.1): - React-debug - React-utils - - React-rendererdebug (0.81.0): + - React-rendererdebug (0.81.1): - boost - DoubleConversion - fast_float @@ -2146,7 +2174,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0): + - React-RuntimeApple (0.81.1): - boost - DoubleConversion - fast_float @@ -2175,7 +2203,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0): + - React-RuntimeCore (0.81.1): - boost - DoubleConversion - fast_float @@ -2197,7 +2225,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0): + - React-runtimeexecutor (0.81.1): - boost - DoubleConversion - fast_float @@ -2207,10 +2235,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0) + - React-jsi (= 0.81.1) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0): + - React-RuntimeHermes (0.81.1): - boost - DoubleConversion - fast_float @@ -2231,7 +2259,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0): + - React-runtimescheduler (0.81.1): - boost - DoubleConversion - fast_float @@ -2253,9 +2281,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0): + - React-timing (0.81.1): - React-debug - - React-utils (0.81.0): + - React-utils (0.81.1): - boost - DoubleConversion - fast_float @@ -2265,11 +2293,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0) + - React-jsi (= 0.81.1) - SocketRocket - - ReactAppDependencyProvider (0.81.0): + - ReactAppDependencyProvider (0.81.1): - ReactCodegen - - ReactCodegen (0.81.0): + - ReactCodegen (0.81.1): - boost - DoubleConversion - fast_float @@ -2295,7 +2323,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0): + - ReactCommon (0.81.1): - boost - DoubleConversion - fast_float @@ -2303,9 +2331,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0) + - ReactCommon/turbomodule (= 0.81.1) - SocketRocket - - ReactCommon-Samples (0.81.0): + - ReactCommon-Samples (0.81.1): - boost - DoubleConversion - fast_float @@ -2321,7 +2349,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.0): + - ReactCommon/turbomodule (0.81.1): - boost - DoubleConversion - fast_float @@ -2330,15 +2358,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) - - ReactCommon/turbomodule/bridging (= 0.81.0) - - ReactCommon/turbomodule/core (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - ReactCommon/turbomodule/bridging (= 0.81.1) + - ReactCommon/turbomodule/core (= 0.81.1) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0): + - ReactCommon/turbomodule/bridging (0.81.1): - boost - DoubleConversion - fast_float @@ -2347,13 +2375,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0): + - ReactCommon/turbomodule/core (0.81.1): - boost - DoubleConversion - fast_float @@ -2362,14 +2390,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-cxxreact (= 0.81.0) - - React-debug (= 0.81.0) - - React-featureflags (= 0.81.0) - - React-jsi (= 0.81.0) - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) - - React-utils (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-debug (= 0.81.1) + - React-featureflags (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - React-utils (= 0.81.1) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2653,83 +2681,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: a867936a67af0d09c37935a1b900a1a3c795b6d1 + FBLazyVector: b8f1312d48447cca7b4abc21ed155db14742bd03 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: e7491a2038f2618c8cd444ed411a6deb350a3742 + hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 0735ab4f6b3ec93a7f98187b5da74d7916e2cf4c - RCTRequired: 8fcc7801bfc433072287b0f24a662e2816e89d0c - RCTTypeSafety: 2b2be515d6b968bcba7a68c4179d8199bd8c9b58 - React: 1000c0e96d8fb9fbdaf13f7d31d0b09db3cbb4ac - React-callinvoker: 7e52661bfaf5d8881a9cee049792627a00001fbe - React-Core: 949b436ddfe76cf47ac96375152de2f3506a8421 - React-CoreModules: 0f27580d0d82d430fa4f2cf4d970b6ad1120d63a - React-cxxreact: 48754f11f47a29ea4800cbdd694c10f874a26b9b - React-debug: 7a23d96f709f437c5e08973d6e06d0a54dd180a1 - React-defaultsnativemodule: 569d9222a701ed3dc60a60b2ce066b5bd88da059 - React-domnativemodule: 34474bda3973bfd0ca2ea9f1b3db20db5d504cc7 - React-Fabric: 45c3e9b112075451e592f0e008cabd4b82575355 - React-FabricComponents: a428f23938c27a073baacc069d484b3478df85f3 - React-FabricImage: 4375129ba8a26e8a7074af1c2468870fb8aab723 - React-featureflags: ed973a134993f3be204d0b2d385d386603c9a0af - React-featureflagsnativemodule: aa3e1dc86bc185344d4875e7cb40cce0bd28de76 - React-graphics: b5b8709a8216075bb6a5f9e7bb68881212d924ee - React-hermes: c543ffa2866304c582bdcb135c184e0f776f0d0b - React-idlecallbacksnativemodule: f19c4060b12fffc3ad33ce5de190338751b462ef - React-ImageManager: ecaf317aa5dff5eebba178b0813ef998c62547ea - React-jserrorhandler: 92eea1ee4f8c56b466b34e0065def59805e5d3a9 - React-jsi: 7336786a4a14c473d104e6b37df935620d218fcd - React-jsiexecutor: 7c750f5b63fbc071d0f0e56e86f1a1589914f7b1 - React-jsinspector: eee10f78208f7995d26e05efd97610c8980a6df3 - React-jsinspectorcdp: 0e807e4c2dc8ae8a07f0a6bfe50377f442079ba3 - React-jsinspectornetwork: 3399384f2b6b70b287d8b9675452af4cec21dc65 - React-jsinspectortracing: 030af0e9dca9a4eaa1d0ba258c7bd859fb90f61d - React-jsitooling: f8ed67814b17ebb124c48fccdf587ee1e02f16f4 - React-jsitracing: 5cf6b84d46a4653895e30956a0ce3a315244c10a - React-logger: 04ce9229cb57db2c2a8164eaec1105f89da7fb22 - React-Mapbuffer: e402e7a0535b2213c50727553621480fe8cd8ade - React-microtasksnativemodule: a63ce5595016996a9bac1f10c70a7a7fe6506649 - React-NativeModulesApple: b3766e1f87b08064ebc459b9e1538da2447ca874 - React-oscompat: 34f3d3c06cadcbc470bc4509c717fb9b919eaa8b - React-perflogger: a1edb025fd5d44f61bf09307e248f7608d7b2dcf - React-performancetimeline: 1f86dc9782e3fe78727c5fbb3e2178b9fd1aa6fd - React-RCTActionSheet: 550c9c6c2e7dcd85a51954dc08e2f3837a148e7c - React-RCTAnimation: 19d4bb6d2190983d1354b096b7b65dbd591924da - React-RCTAppDelegate: 6c71d16eef920831a312ff363355fc3b99c02a98 - React-RCTBlob: b81a0cffe1a083bcf9d8aa9f27f4d37864579e90 - React-RCTFabric: 01005d2fa799bba6e21aae18820498f56fe0be5f - React-RCTFBReactNativeSpec: 5adb84a81c4ed7a1f2661835d166e4b2c4320cd4 - React-RCTImage: 607e5e373fb56d72417464bd82e8046af81ab502 - React-RCTLinking: 301434c7bf1100458be5a3866326ba33491e3687 - React-RCTNetwork: a118a47bd123ac96c9877e04f5731a1d6545aba5 - React-RCTPushNotification: 067cbcf749a2961d650808d07294e05a33aabb4e - React-RCTRuntime: 85fdbf469fe8a12c4db6c836731b190efc33d11d - React-RCTSettings: 5a5aa2cf9ac40f7a8897cc0f9d945ac803886604 - React-RCTTest: cb3c5d40f213c69d5feadff6ebad9d1050340c6f - React-RCTText: e6e00bee9847a8af1218079b73c8bfed16c75b8d - React-RCTVibration: 5a05fa0ef05ee73d074a3314e57586afc969f1ba - React-rendererconsistency: c2cb23365f4a7b511893748fe8cad1830bbae637 - React-renderercss: 0c1472d6572c05e493aee476598c3ed6234b6c33 - React-rendererdebug: d6335da9730fa5a151537aa976a16d48de6135e2 - React-RuntimeApple: 5684c2a5d8768e5728a5817c21e5dba798d54c58 - React-RuntimeCore: 52428a1b48fb3c50ddf4dd5eee494486e4ecffc6 - React-runtimeexecutor: 1b4e99e5c27d2cb8bdeca9773ff5f1a8eac7709c - React-RuntimeHermes: a688639233a3ea44b4f8e4d448f51943d7e00815 - React-runtimescheduler: b833f0fc8c788329a497e93f55ce30508f56307a - React-timing: c87270986afd695a426f51a5fa126785dc6911da - React-utils: 068cec677032ba78ca0700f2dcbe6d08a0939647 - ReactAppDependencyProvider: c91900fa724baee992f01c05eeb4c9e01a807f78 - ReactCodegen: 322fcab445165c70083e9b69a4fce4dc33c12c02 - ReactCommon: 116d6ee71679243698620d8cd9a9042541e44aa6 - ReactCommon-Samples: db4136c7e5d6ef9be1e967598ce71254fe6ee7fa + RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 + RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a + RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 + React: f1486d005993b0af01943af1850d3d4f3b597545 + React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe + React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 + React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e + React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b + React-debug: e01581e1589f329e61c95b332bf7f4969b10564b + React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa + React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb + React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e + React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d + React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 + React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 + React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 + React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 + React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e + React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 + React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 + React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 + React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e + React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 + React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b + React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 + React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee + React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 + React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 + React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d + React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 + React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e + React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb + React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac + React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 + React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 + React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e + React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 + React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 + React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 + React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a + React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a + React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf + React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add + React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 + React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b + React-RCTPushNotification: 66c869bf2de89b3973b30503603fdeabdacacbd7 + React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a + React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 + React-RCTTest: 4aca44430553e42d4ba9ed4a8b975d0089e5f4f7 + React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 + React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b + React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd + React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 + React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b + React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 + React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e + React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 + React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac + React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 + React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 + React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a + ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 + ReactCodegen: e4992c1c4bd62fb086b33eb315929b77a0f29e26 + ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 + ReactCommon-Samples: 59e79b6b4527aaa1130d658a19e5928235958514 ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 00013dd9cde63a2d98e8002fcc4f5ddb66c10782 + Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0 PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From a2eb29e5e7aef8bbdf4c647c8467b5292b013b20 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Wed, 3 Sep 2025 05:34:11 -0700 Subject: [PATCH 075/312] Use autolinking react-native-config output in iOS artifacts generator (#53503) Summary: Resolves https://github.com/facebook/react-native/issues/53501 This is a pretty major oversight of (presumably) the old autolinking refactor. The iOS autolinking's second stage, invoked in `use_react_native!` does not accept the `react-native-config` sub-command's `react-native-config` output. This is only invoked and used in the prior step, `use_native_modules`. The second step instead invokes old code that does something _similar_ to the new autolinking in `scripts/generate-artifacts-executor`, and happens to align in most cases. (But it does "autolinking" from scratch). tl;dr: When the results don't match up, things go wrong. Instead, we now write the autolinking (react native config) results to a file, then read the output back in the second step. This doesn't affect Android/Gradle, which are implemented correctly. [IOS] [FIXED] - Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source Pull Request resolved: https://github.com/facebook/react-native/pull/53503 Test Plan: - See https://github.com/facebook/react-native/issues/53501 for failing repro - Clone for working repro: https://github.com/byCedric/react-native-codegen-ios-autolinking/tree/fix-54503 - Note: Contains this PR's changes as a patch - `bun install` - `bun expo run:ios` Reviewed By: cortinico Differential Revision: D81490755 Pulled By: cipolleschi fbshipit-source-id: eefe786a116404f4ed24bd7125dfb108a811f71e --- .../scripts/cocoapods/autolinking.rb | 6 +++ .../scripts/cocoapods/codegen_utils.rb | 2 +- .../generate-artifacts-executor/index.js | 6 ++- .../generate-artifacts-executor/utils.js | 51 +++++++++++++++---- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/packages/react-native/scripts/cocoapods/autolinking.rb b/packages/react-native/scripts/cocoapods/autolinking.rb index b2e5600bc5d..d8e9c7cec2f 100644 --- a/packages/react-native/scripts/cocoapods/autolinking.rb +++ b/packages/react-native/scripts/cocoapods/autolinking.rb @@ -40,6 +40,12 @@ def list_native_modules!(config_command) packages = config["dependencies"] ios_project_root = Pathname.new(config["project"]["ios"]["sourceDir"]) react_native_path = Pathname.new(config["reactNativePath"]) + codegen_output_path = ios_project_root.join("build/generated/autolinking/autolinking.json") + + # Write autolinking react-native-config output to codegen folder + FileUtils.mkdir_p(File.dirname(codegen_output_path)) + File.write(codegen_output_path, json) + found_pods = [] packages.each do |package_name, package| diff --git a/packages/react-native/scripts/cocoapods/codegen_utils.rb b/packages/react-native/scripts/cocoapods/codegen_utils.rb index 3ce12e28ebc..3c51ad584e1 100644 --- a/packages/react-native/scripts/cocoapods/codegen_utils.rb +++ b/packages/react-native/scripts/cocoapods/codegen_utils.rb @@ -87,7 +87,7 @@ def self.clean_up_build_folder(rn_path, codegen_dir, dir_manager: Dir, file_mana codegen_path = file_manager.join(ios_folder, codegen_dir) return if !dir_manager.exist?(codegen_path) - FileUtils.rm_rf(dir_manager.glob("#{codegen_path}/*")) + FileUtils.rm_rf("#{codegen_path}") base_provider_path = file_manager.join(rn_path, 'React', 'Fabric', 'RCTThirdPartyFabricComponentsProvider') FileUtils.rm_rf("#{base_provider_path}.h") FileUtils.rm_rf("#{base_provider_path}.mm") diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js index 002273410bd..a3c52e39f38 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js @@ -86,10 +86,14 @@ function execute( buildCodegenIfNeeded(); } - const reactNativeConfig = readReactNativeConfig(projectRoot); + const reactNativeConfig = readReactNativeConfig( + projectRoot, + baseOutputPath, + ); const codegenEnabledLibraries = findCodegenEnabledLibraries( pkgJson, projectRoot, + baseOutputPath, reactNativeConfig, ); diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js index db611c8db17..f2fa2fc852f 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js @@ -97,15 +97,40 @@ function cleanupEmptyFilesAndFolders(filepath /*: string */) { } } -function readReactNativeConfig(projectRoot /*: string */) /*: $FlowFixMe */ { - const rnConfigFilePath = path.resolve(projectRoot, 'react-native.config.js'); +function readGeneratedAutolinkingOutput( + baseOutputPath /*: string */, +) /*: $FlowFixMe */ { + // NOTE: Generated by scripts/cocoapods/autolinking.rb in list_native_modules (called by use_native_modules) + const autolinkingGeneratedPath = path.resolve( + baseOutputPath, + 'build/generated/autolinking/autolinking.json', + ); + if (fs.existsSync(autolinkingGeneratedPath)) { + // $FlowFixMe[unsupported-syntax] + return require(autolinkingGeneratedPath); + } else { + codegenLog( + `Could not find generated autolinking output at: ${autolinkingGeneratedPath}`, + ); + return null; + } +} - if (!fs.existsSync(rnConfigFilePath)) { +function readReactNativeConfig( + projectRoot /*: string */, + baseOutputPath /*: string */, +) /*: $FlowFixMe */ { + const autolinkingOutput = readGeneratedAutolinkingOutput(baseOutputPath); + const rnConfigFilePath = path.resolve(projectRoot, 'react-native.config.js'); + if (autolinkingOutput) { + return autolinkingOutput; + } else if (fs.existsSync(rnConfigFilePath)) { + // $FlowIgnore[unsupported-syntax] + return require(rnConfigFilePath); + } else { + codegenLog(`Could not find React Native config at: ${rnConfigFilePath}`); return {}; } - - // $FlowIgnore[unsupported-syntax] - return require(rnConfigFilePath); } /** @@ -114,17 +139,23 @@ function readReactNativeConfig(projectRoot /*: string */) /*: $FlowFixMe */ { function findCodegenEnabledLibraries( pkgJson /*: $FlowFixMe */, projectRoot /*: string */, + baseOutputPath /*: string */, reactNativeConfig /*: $FlowFixMe */, ) /*: Array<$FlowFixMe> */ { const projectLibraries = findProjectRootLibraries(pkgJson, projectRoot); if (pkgJsonIncludesGeneratedCode(pkgJson)) { return projectLibraries; } else { - return [ - ...projectLibraries, - ...findExternalLibraries(pkgJson, projectRoot), + const libraries = [...projectLibraries]; + // If we ran autolinking, we shouldn't try to run our own "autolinking-like" + // library discovery + if (!readGeneratedAutolinkingOutput(baseOutputPath)) { + libraries.push(...findExternalLibraries(pkgJson, projectRoot)); + } + libraries.push( ...findLibrariesFromReactNativeConfig(projectRoot, reactNativeConfig), - ]; + ); + return libraries; } } From 366f2ad5057ffecc1f5b211f6aae29567ae6b7e5 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Mon, 1 Sep 2025 13:32:10 -0700 Subject: [PATCH 076/312] Replace `execSync` with `spawnSync` for tarball extraction paths that need to be escaped (#53540) Summary: Follow-up to https://github.com/facebook/react-native/issues/53194 This wasn't previously visible in testing without prebuilds and without a release build. This doesn't show up in debug builds. When testing more against paths that contain spaces, I noticed that release builds can still run into trouble due to the use of `execSync` without escaping paths. While, in other scripts that aren't used in user-projects (afaict), we often escape with quotes and rely on `execSync` calling the shell (due to its `shell: true` default), in some scripts we don't have quote escapes. That said, since paths could in theory contain quotes, adding quotes wouldn't be sufficient. Instead, since the affected `tar` calls are really trivial, we can instead use `spawnSync` with the `shell: false` default, which escapes arguments automatically. ## Changelog: [IOS] [FIXED] - fix Node scripts related to prebuilt tarball extraction for paths containing whitespaces Pull Request resolved: https://github.com/facebook/react-native/pull/53540 Test Plan: - Create a project in a folder `with spaces` and build a release build Reviewed By: cipolleschi, cortinico Differential Revision: D81406841 Pulled By: robhogan fbshipit-source-id: 08bb06b2cd2b15dc17c2f95fab9024129deca6f3 --- packages/react-native/scripts/replace-rncore-version.js | 6 ++++-- .../sdks/hermes-engine/utils/replace_hermes_version.js | 6 ++++-- .../third-party-podspecs/replace_dependencies_version.js | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/react-native/scripts/replace-rncore-version.js b/packages/react-native/scripts/replace-rncore-version.js index 16c2d762150..1385b71ffb4 100644 --- a/packages/react-native/scripts/replace-rncore-version.js +++ b/packages/react-native/scripts/replace-rncore-version.js @@ -10,7 +10,7 @@ 'use strict'; -const {execSync} = require('child_process'); +const {spawnSync} = require('child_process'); const fs = require('fs'); const yargs = require('yargs'); @@ -67,7 +67,9 @@ function replaceRNCoreConfiguration( fs.mkdirSync(finalLocation, {recursive: true}); console.log('Extracting the tarball', tarballURLPath); - execSync(`tar -xf ${tarballURLPath} -C ${finalLocation}`); + spawnSync('tar', ['-xf', tarballURLPath, '-C', finalLocation], { + stdio: 'inherit', + }); } function updateLastBuildConfiguration(configuration /*: string */) { diff --git a/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js b/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js index 3dc99647131..18ef3877b56 100644 --- a/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js +++ b/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js @@ -10,7 +10,7 @@ 'use strict'; -const {execSync} = require('child_process'); +const {spawnSync} = require('child_process'); const fs = require('fs'); const yargs = require('yargs'); @@ -62,7 +62,9 @@ function replaceHermesConfiguration(configuration, version, podsRoot) { fs.mkdirSync(finalLocation, {recursive: true}); console.log('Extracting the tarball'); - execSync(`tar -xf ${tarballURLPath} -C ${finalLocation}`); + spawnSync('tar', ['-xf', tarballURLPath, '-C', finalLocation], { + stdio: 'inherit', + }); } function updateLastBuildConfiguration(configuration) { diff --git a/packages/react-native/third-party-podspecs/replace_dependencies_version.js b/packages/react-native/third-party-podspecs/replace_dependencies_version.js index 56d0b9f2706..66fa888758e 100644 --- a/packages/react-native/third-party-podspecs/replace_dependencies_version.js +++ b/packages/react-native/third-party-podspecs/replace_dependencies_version.js @@ -10,7 +10,7 @@ 'use strict'; -const {execSync} = require('child_process'); +const {spawnSync} = require('child_process'); const fs = require('fs'); const yargs = require('yargs'); @@ -66,7 +66,9 @@ function replaceRNDepsConfiguration( fs.mkdirSync(finalLocation, {recursive: true}); console.log('Extracting the tarball', tarballURLPath); - execSync(`tar -xf ${tarballURLPath} -C ${finalLocation}`); + spawnSync('tar', ['-xf', tarballURLPath, '-C', finalLocation], { + stdio: 'inherit', + }); // Now we need to remove the extra third-party folder as we do in the podspec's prepare-script // We need to take the ReactNativeDependencies.xcframework folder and move it up one level From ed92bd67f48fc9918656a84a39a8510cfad93f83 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Tue, 9 Sep 2025 14:22:13 +0100 Subject: [PATCH 077/312] [0.81] Backport: Create a `debugOptimized` buildType for Android (#53568) * Migrate RNTester to use `{usesCleartextTraffic}` Manifest Placeholder (#52620) Summary: This creates a `debugOptimized` build type for React Native Android, meaning that we can run C++ optimization on the debug build, while still having the debugger enabled. This is aimed at improving the developer experience for folks developing on low-end devices or emulators. Users that intend to debug can still use the `debug` variant where the full debug symbols are shipped. ## Changelog: [ANDROID] [ADDED] - Create a debugOptimized buildType for Android Pull Request resolved: https://github.com/facebook/react-native/pull/52620 Test Plan: Tested locally with RNTester by doing: ``` ./gradlew installDebugOptimized ``` This is the output of the 3 generated .aar. The size difference is a proof that we're correctly stripping out the C++ debug symbols: Screenshot 2025-07-15 at 17 49 50 Screenshot 2025-07-15 at 17 49 39 Screenshot 2025-07-15 at 17 49 32 Rollback Plan: Reviewed By: cipolleschi Differential Revision: D78351347 Pulled By: cortinico fbshipit-source-id: 568a484ba8d2ee6e089cabc95451938e853fbc54 * Create a debugOptimized buildType for Android (#52648) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52648 This creates a `debugOptimized` build type for React Native Android, meaning that we can run C++ optimization on the debug build, while still having the debugger enabled. This is aimed at improving the developer experience for folks developing on low-end devices or emulators. Users that intend to debug can still use the `debug` variant where the full debug symbols are shipped. Changelog: [ANDROID] [ADDED] - Create a debugOptimized buildType for Android Reviewed By: cipolleschi Differential Revision: D78425138 fbshipit-source-id: c1e9ea3608e7df10fb871a5584352f0747cf560b --- .../com/facebook/react/ReactExtension.kt | 4 +-- .../kotlin/com/facebook/react/ReactPlugin.kt | 2 ++ .../react/utils/AgpConfiguratorUtils.kt | 31 +++++++++++++++++++ .../ReactAndroid/build.gradle.kts | 11 ++++++- .../hermes-engine/build.gradle.kts | 6 ++++ .../react/hermes/reactexecutor/CMakeLists.txt | 4 ++- .../react/runtime/hermes/jni/CMakeLists.txt | 4 ++- .../main/jni/react/runtime/jni/CMakeLists.txt | 4 ++- .../hermes/executor/CMakeLists.txt | 2 +- .../hermes/inspector-modern/CMakeLists.txt | 2 +- .../jsinspector-modern/CMakeLists.txt | 10 +++--- .../ReactCommon/react/debug/CMakeLists.txt | 2 +- .../ReactCommon/react/runtime/CMakeLists.txt | 4 ++- .../react/runtime/hermes/CMakeLists.txt | 2 +- .../android/app/src/debug/AndroidManifest.xml | 8 ----- .../android/app/src/main/AndroidManifest.xml | 1 + 16 files changed, 74 insertions(+), 23 deletions(-) delete mode 100644 packages/rn-tester/android/app/src/debug/AndroidManifest.xml diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactExtension.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactExtension.kt index fa9c9373611..2e89b8c281d 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactExtension.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactExtension.kt @@ -100,10 +100,10 @@ abstract class ReactExtension @Inject constructor(val project: Project) { * Allows to specify the debuggable variants (by default just 'debug'). Variants in this list will * not be bundled (the bundle file will not be created and won't be copied over). * - * Default: ['debug'] + * Default: ['debug', 'debugOptimized'] */ val debuggableVariants: ListProperty = - objects.listProperty(String::class.java).convention(listOf("debug")) + objects.listProperty(String::class.java).convention(listOf("debug", "debugOptimized")) /** Hermes Config */ diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt index 85f8ca32aaf..3d40455a43a 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt @@ -18,6 +18,7 @@ import com.facebook.react.tasks.GenerateEntryPointTask import com.facebook.react.tasks.GeneratePackageListTask import com.facebook.react.utils.AgpConfiguratorUtils.configureBuildConfigFieldsForApp import com.facebook.react.utils.AgpConfiguratorUtils.configureBuildConfigFieldsForLibraries +import com.facebook.react.utils.AgpConfiguratorUtils.configureBuildTypesForApp import com.facebook.react.utils.AgpConfiguratorUtils.configureDevServerLocation import com.facebook.react.utils.AgpConfiguratorUtils.configureNamespaceForLibraries import com.facebook.react.utils.BackwardCompatUtils.configureBackwardCompatibilityReactMap @@ -84,6 +85,7 @@ class ReactPlugin : Plugin { configureAutolinking(project, extension) configureCodegen(project, extension, rootExtension, isLibrary = false) configureResources(project, extension) + configureBuildTypesForApp(project) } // Library Only Configuration diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt index f8bee6923f9..c11d0ccf163 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt @@ -19,6 +19,7 @@ import java.net.Inet4Address import java.net.NetworkInterface import javax.xml.parsers.DocumentBuilder import javax.xml.parsers.DocumentBuilderFactory +import kotlin.plus import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.plugins.AppliedPlugin @@ -27,6 +28,36 @@ import org.w3c.dom.Element @Suppress("UnstableApiUsage") internal object AgpConfiguratorUtils { + fun configureBuildTypesForApp(project: Project) { + val action = + Action { + project.extensions + .getByType(ApplicationAndroidComponentsExtension::class.java) + .finalizeDsl { ext -> + ext.buildTypes { + val debug = + getByName("debug").apply { + manifestPlaceholders["usesCleartextTraffic"] = "true" + } + getByName("release").apply { + manifestPlaceholders["usesCleartextTraffic"] = "false" + } + maybeCreate("debugOptimized").apply { + manifestPlaceholders["usesCleartextTraffic"] = "true" + initWith(debug) + externalNativeBuild { + cmake { + arguments("-DCMAKE_BUILD_TYPE=Release") + matchingFallbacks += listOf("release") + } + } + } + } + } + } + project.pluginManager.withPlugin("com.android.application", action) + } + fun configureBuildConfigFieldsForApp(project: Project, extension: ReactExtension) { val action = Action { diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index a24a08ceed9..e593c2dc32a 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -598,7 +598,7 @@ android { publishing { multipleVariants { withSourcesJar() - includeBuildTypeValues("debug", "release") + includeBuildTypeValues("debug", "release", "debugOptimized") } } @@ -606,6 +606,15 @@ android { unitTests { isIncludeAndroidResources = true } targetSdk = libs.versions.targetSdk.get().toInt() } + + buildTypes { + create("debugOptimized") { + initWith(getByName("debug")) + externalNativeBuild { + cmake { arguments("-DCMAKE_BUILD_TYPE=Release", "-DREACT_NATIVE_DEBUG_OPTIMIZED=True") } + } + } + } } tasks.withType().configureEach { diff --git a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts index d0228e0d4d9..69814d86625 100644 --- a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts +++ b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts @@ -306,6 +306,12 @@ android { } } } + buildTypes { + create("debugOptimized") { + initWith(getByName("debug")) + externalNativeBuild { cmake { arguments("-DCMAKE_BUILD_TYPE=Release") } } + } + } } sourceSets.getByName("main") { diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt index d0d015ccc55..aa973151b94 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt @@ -25,4 +25,6 @@ target_link_libraries( reactnative ) target_compile_reactnative_options(hermes_executor PRIVATE) -target_compile_options(hermes_executor PRIVATE $<$:-DHERMES_ENABLE_DEBUGGER=1>) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) + target_compile_options(hermes_executor PRIVATE -DHERMES_ENABLE_DEBUGGER=1) +endif() diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/hermes/jni/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/hermes/jni/CMakeLists.txt index 6b182daa3ac..63c1a937341 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/hermes/jni/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/hermes/jni/CMakeLists.txt @@ -27,4 +27,6 @@ target_link_libraries(hermesinstancejni ) target_compile_reactnative_options(hermesinstancejni PRIVATE) -target_compile_options(hermesinstancejni PRIVATE $<$:-DHERMES_ENABLE_DEBUGGER=1>) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) + target_compile_options(hermesinstancejni PRIVATE -DHERMES_ENABLE_DEBUGGER=1) +endif () diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/CMakeLists.txt index 0633be11254..8987aed0376 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/CMakeLists.txt @@ -17,7 +17,9 @@ add_library(rninstance ) target_compile_reactnative_options(rninstance PRIVATE) -target_compile_options(rninstance PRIVATE $<$:-DHERMES_ENABLE_DEBUGGER=1>) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) + target_compile_options(rninstance PRIVATE -DHERMES_ENABLE_DEBUGGER=1) +endif () target_merge_so(rninstance) target_include_directories(rninstance PUBLIC .) diff --git a/packages/react-native/ReactCommon/hermes/executor/CMakeLists.txt b/packages/react-native/ReactCommon/hermes/executor/CMakeLists.txt index b512daeafd8..4c1d72be560 100644 --- a/packages/react-native/ReactCommon/hermes/executor/CMakeLists.txt +++ b/packages/react-native/ReactCommon/hermes/executor/CMakeLists.txt @@ -26,7 +26,7 @@ target_link_libraries(hermes_executor_common ) target_compile_reactnative_options(hermes_executor_common PRIVATE) -if(${CMAKE_BUILD_TYPE} MATCHES Debug) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) target_compile_options( hermes_executor_common PRIVATE diff --git a/packages/react-native/ReactCommon/hermes/inspector-modern/CMakeLists.txt b/packages/react-native/ReactCommon/hermes/inspector-modern/CMakeLists.txt index 37dbf64c187..3344bf7c4d8 100644 --- a/packages/react-native/ReactCommon/hermes/inspector-modern/CMakeLists.txt +++ b/packages/react-native/ReactCommon/hermes/inspector-modern/CMakeLists.txt @@ -17,7 +17,7 @@ add_library(hermes_inspector_modern target_compile_reactnative_options(hermes_inspector_modern PRIVATE) -if(${CMAKE_BUILD_TYPE} MATCHES Debug) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) target_compile_options( hermes_inspector_modern PRIVATE diff --git a/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt b/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt index 67168982baa..bb3a461c8a1 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt +++ b/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt @@ -27,7 +27,9 @@ target_link_libraries(jsinspector runtimeexecutor ) target_compile_reactnative_options(jsinspector PRIVATE) -target_compile_options(jsinspector PRIVATE - $<$:-DREACT_NATIVE_DEBUGGER_ENABLED=1> - $<$:-DREACT_NATIVE_DEBUGGER_ENABLED_DEVONLY=1> -) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) + target_compile_options(jsinspector PRIVATE + -DREACT_NATIVE_DEBUGGER_ENABLED=1 + -DREACT_NATIVE_DEBUGGER_ENABLED_DEVONLY=1 + ) +endif () diff --git a/packages/react-native/ReactCommon/react/debug/CMakeLists.txt b/packages/react-native/ReactCommon/react/debug/CMakeLists.txt index 35e81ec6350..448f163308c 100644 --- a/packages/react-native/ReactCommon/react/debug/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/debug/CMakeLists.txt @@ -21,6 +21,6 @@ endif() target_compile_reactnative_options(react_debug PRIVATE) target_compile_options(react_debug PRIVATE -Wpedantic) -if(NOT ${CMAKE_BUILD_TYPE} MATCHES Debug) +if(NOT ${CMAKE_BUILD_TYPE} MATCHES Debug AND NOT REACT_NATIVE_DEBUG_OPTIMIZED) target_compile_options(react_debug PUBLIC -DNDEBUG) endif() diff --git a/packages/react-native/ReactCommon/react/runtime/CMakeLists.txt b/packages/react-native/ReactCommon/react/runtime/CMakeLists.txt index 51ffc864b16..0cf910be5bf 100644 --- a/packages/react-native/ReactCommon/react/runtime/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/runtime/CMakeLists.txt @@ -16,7 +16,9 @@ add_library(bridgeless ${bridgeless_SRC} ) target_compile_reactnative_options(bridgeless PRIVATE) -target_compile_options(bridgeless PRIVATE $<$:-DHERMES_ENABLE_DEBUGGER=1>) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) + target_compile_options(bridgeless PRIVATE -DHERMES_ENABLE_DEBUGGER=1) +endif () target_include_directories(bridgeless PUBLIC .) react_native_android_selector(fabricjni fabricjni "") diff --git a/packages/react-native/ReactCommon/react/runtime/hermes/CMakeLists.txt b/packages/react-native/ReactCommon/react/runtime/hermes/CMakeLists.txt index d531e870b85..dc1a5dd9cab 100644 --- a/packages/react-native/ReactCommon/react/runtime/hermes/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/runtime/hermes/CMakeLists.txt @@ -29,7 +29,7 @@ target_link_libraries(bridgelesshermes ) target_compile_reactnative_options(bridgelesshermes PRIVATE) -if(${CMAKE_BUILD_TYPE} MATCHES Debug) +if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED) target_compile_options( bridgelesshermes PRIVATE diff --git a/packages/rn-tester/android/app/src/debug/AndroidManifest.xml b/packages/rn-tester/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index fa26aa56e1c..00000000000 --- a/packages/rn-tester/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/packages/rn-tester/android/app/src/main/AndroidManifest.xml b/packages/rn-tester/android/app/src/main/AndroidManifest.xml index bd35388167b..a842f3a0d29 100644 --- a/packages/rn-tester/android/app/src/main/AndroidManifest.xml +++ b/packages/rn-tester/android/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ Date: Tue, 9 Sep 2025 14:25:02 +0100 Subject: [PATCH 078/312] [0.81] Backport `useNativeEqualsInNativeReadableArrayAndroid` and `useNativeTransformHelperAndroid` in the experimental channel (#53567) * Use native implementation of equals in ReadableNativeArray (#52611) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52611 We compare the current transform (represented as a ReadableArray) with the incoming one to know whether to invalidate. This can be expensive as it requires to materialize the entire transform data structure over JNI. Instead, we can delegate this comparison to native code, which can compare the underlying folly::dynamic directly. Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D78340288 fbshipit-source-id: f44a054e234694c316fb080fe2dbc2017780123a * Use native helpers to accelerate transform processing (#52603) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52603 Processing transforms is expensive in Java, as it requires bridging the entire ReadableNativeArray/Map. Instead, we can use the existing parser logic `resolveTransform` logic to perform this operation in C++. Ideally, we actually re-use the existing parsed transform from Props, that could be something we revisit after Props 2.0. As a follow-up, we should consider also moving the matrix decomposition logic from MatrixMathHelper here, and make that the only information we send back to Java. Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D78298588 fbshipit-source-id: a698ac8587ccfb2be04665747082398ccdde9294 * Add TransformHelper.cpp to `reactnativejni_common` (#52640) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52640 Not having `TransformHelper.cpp` included in CMake is causing the C++ code to fail compiling. This diff fixes it. Changelog: [Internal] [Changed] - Reviewed By: cipolleschi, javache Differential Revision: D78414015 fbshipit-source-id: 4900427a86eb38bfec10e5e385296d89c73e9051 * [LOCAL] Unbreak compilation due to CMake dependencies --------- Co-authored-by: Pieter De Baets --- .../react/bridge/ReadableNativeArray.kt | 10 +++- .../featureflags/ReactNativeFeatureFlags.kt | 14 ++++- .../ReactNativeFeatureFlagsCxxAccessor.kt | 22 ++++++- .../ReactNativeFeatureFlagsCxxInterop.kt | 6 +- .../ReactNativeFeatureFlagsDefaults.kt | 6 +- .../ReactNativeFeatureFlagsLocalAccessor.kt | 24 +++++++- ...agsOverrides_RNOSS_Experimental_Android.kt | 6 +- .../ReactNativeFeatureFlagsProvider.kt | 6 +- .../react/uimanager/TransformHelper.kt | 19 ++++++ .../JReactNativeFeatureFlagsCxxInterop.cpp | 30 +++++++++- .../JReactNativeFeatureFlagsCxxInterop.h | 8 ++- .../src/main/jni/react/jni/CMakeLists.txt | 3 +- .../src/main/jni/react/jni/NativeArray.h | 4 ++ .../src/main/jni/react/jni/OnLoad-common.cpp | 2 + .../jni/react/jni/ReadableNativeArray.cpp | 6 ++ .../main/jni/react/jni/ReadableNativeArray.h | 1 + .../main/jni/react/jni/TransformHelper.cpp | 60 +++++++++++++++++++ .../src/main/jni/react/jni/TransformHelper.h | 22 +++++++ .../featureflags/ReactNativeFeatureFlags.cpp | 10 +++- .../featureflags/ReactNativeFeatureFlags.h | 12 +++- .../ReactNativeFeatureFlagsAccessor.cpp | 52 +++++++++++++--- .../ReactNativeFeatureFlagsAccessor.h | 8 ++- .../ReactNativeFeatureFlagsDefaults.h | 10 +++- .../ReactNativeFeatureFlagsDynamicProvider.h | 20 ++++++- ...tiveFeatureFlagsOverridesOSSExperimental.h | 10 +++- .../ReactNativeFeatureFlagsProvider.h | 4 +- .../NativeReactNativeFeatureFlags.cpp | 12 +++- .../NativeReactNativeFeatureFlags.h | 6 +- .../components/view/BaseViewProps.cpp | 10 +++- .../renderer/components/view/BaseViewProps.h | 5 ++ .../ReactNativeFeatureFlags.config.js | 21 +++++++ .../featureflags/ReactNativeFeatureFlags.js | 12 +++- .../specs/NativeReactNativeFeatureFlags.js | 4 +- 33 files changed, 412 insertions(+), 33 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.cpp create mode 100644 packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.h diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.kt index 22be6e092cd..764dec3d0fb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.kt @@ -8,6 +8,7 @@ package com.facebook.react.bridge import com.facebook.proguard.annotations.DoNotStrip +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags import java.util.ArrayList import java.util.Arrays import kotlin.jvm.JvmStatic @@ -65,9 +66,16 @@ public open class ReadableNativeArray protected constructor() : NativeArray(), R if (other !is ReadableNativeArray) { return false } - return localArray.contentDeepEquals(other.localArray) + + return if (ReactNativeFeatureFlags.useNativeEqualsInNativeReadableArrayAndroid()) { + nativeEquals(other) + } else { + localArray.contentDeepEquals(other.localArray) + } } + private external fun nativeEquals(other: ReadableNativeArray): Boolean + override fun toArrayList(): ArrayList { val arrayList = ArrayList() repeat(size()) { i -> diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index b2fb68f5d37..8a10052cd03 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<3e4d74a17c15742d35db9e4247f3e1c1>> + * @generated SignedSource<> */ /** @@ -342,6 +342,18 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun useFabricInterop(): Boolean = accessor.useFabricInterop() + /** + * Use a native implementation of equals in NativeReadableArray. + */ + @JvmStatic + public fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean = accessor.useNativeEqualsInNativeReadableArrayAndroid() + + /** + * Use a native implementation of TransformHelper + */ + @JvmStatic + public fun useNativeTransformHelperAndroid(): Boolean = accessor.useNativeTransformHelperAndroid() + /** * When enabled, the native view configs are used in bridgeless mode. */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 9edc477ef4f..4c31c559aa4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<8e0125e82b359e6a175ffc49a4df5537>> */ /** @@ -72,6 +72,8 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null private var useFabricInteropCache: Boolean? = null + private var useNativeEqualsInNativeReadableArrayAndroidCache: Boolean? = null + private var useNativeTransformHelperAndroidCache: Boolean? = null private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null private var useOptimizedEventBatchingOnAndroidCache: Boolean? = null private var useRawPropsJsiValueCache: Boolean? = null @@ -548,6 +550,24 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean { + var cached = useNativeEqualsInNativeReadableArrayAndroidCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.useNativeEqualsInNativeReadableArrayAndroid() + useNativeEqualsInNativeReadableArrayAndroidCache = cached + } + return cached + } + + override fun useNativeTransformHelperAndroid(): Boolean { + var cached = useNativeTransformHelperAndroidCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.useNativeTransformHelperAndroid() + useNativeTransformHelperAndroidCache = cached + } + return cached + } + override fun useNativeViewConfigsInBridgelessMode(): Boolean { var cached = useNativeViewConfigsInBridgelessModeCache if (cached == null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index afd221a4bf2..915e42883fc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -132,6 +132,10 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun useFabricInterop(): Boolean + @DoNotStrip @JvmStatic public external fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean + + @DoNotStrip @JvmStatic public external fun useNativeTransformHelperAndroid(): Boolean + @DoNotStrip @JvmStatic public external fun useNativeViewConfigsInBridgelessMode(): Boolean @DoNotStrip @JvmStatic public external fun useOptimizedEventBatchingOnAndroid(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index e59da172aba..70dc144b28f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<12c2727291b635ef7c3163d153669c2c>> + * @generated SignedSource<<10d708ce4449eede46d750a1ed48d02e>> */ /** @@ -127,6 +127,10 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useFabricInterop(): Boolean = true + override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean = false + + override fun useNativeTransformHelperAndroid(): Boolean = false + override fun useNativeViewConfigsInBridgelessMode(): Boolean = false override fun useOptimizedEventBatchingOnAndroid(): Boolean = false diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index baa7b54af77..b5aa6b46dd7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<3ea9946ef21c8ac8bb9bb63712636e89>> + * @generated SignedSource<> */ /** @@ -76,6 +76,8 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null private var useFabricInteropCache: Boolean? = null + private var useNativeEqualsInNativeReadableArrayAndroidCache: Boolean? = null + private var useNativeTransformHelperAndroidCache: Boolean? = null private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null private var useOptimizedEventBatchingOnAndroidCache: Boolean? = null private var useRawPropsJsiValueCache: Boolean? = null @@ -604,6 +606,26 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } + override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean { + var cached = useNativeEqualsInNativeReadableArrayAndroidCache + if (cached == null) { + cached = currentProvider.useNativeEqualsInNativeReadableArrayAndroid() + accessedFeatureFlags.add("useNativeEqualsInNativeReadableArrayAndroid") + useNativeEqualsInNativeReadableArrayAndroidCache = cached + } + return cached + } + + override fun useNativeTransformHelperAndroid(): Boolean { + var cached = useNativeTransformHelperAndroidCache + if (cached == null) { + cached = currentProvider.useNativeTransformHelperAndroid() + accessedFeatureFlags.add("useNativeTransformHelperAndroid") + useNativeTransformHelperAndroidCache = cached + } + return cached + } + override fun useNativeViewConfigsInBridgelessMode(): Boolean { var cached = useNativeViewConfigsInBridgelessModeCache if (cached == null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt index 2d32fcd900e..1b8ad3bdc5c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<58da46268043f086730132430735b720>> + * @generated SignedSource<<0bafb0a2fb79c4220d21f1736894af14>> */ /** @@ -24,4 +24,8 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android : // but that is more expensive than just duplicating the defaults here. override fun preventShadowTreeCommitExhaustion(): Boolean = true + + override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean = true + + override fun useNativeTransformHelperAndroid(): Boolean = true } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index 1da19692aed..de14fb57768 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<1e81de36735c6c9286b228c75c9a0228>> + * @generated SignedSource<<21704207ce520def05b05f89dfba1048>> */ /** @@ -127,6 +127,10 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun useFabricInterop(): Boolean + @DoNotStrip public fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean + + @DoNotStrip public fun useNativeTransformHelperAndroid(): Boolean + @DoNotStrip public fun useNativeViewConfigsInBridgelessMode(): Boolean @DoNotStrip public fun useOptimizedEventBatchingOnAndroid(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt index 88313b35fea..f72ab667427 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt @@ -8,10 +8,12 @@ package com.facebook.react.uimanager import com.facebook.common.logging.FLog +import com.facebook.react.bridge.NativeArray import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.ReadableType import com.facebook.react.common.ReactConstants +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags public object TransformHelper { @@ -69,6 +71,14 @@ public object TransformHelper { transformOrigin: ReadableArray?, allowPercentageResolution: Boolean ) { + if (allowPercentageResolution && + ReactNativeFeatureFlags.useNativeTransformHelperAndroid() && + transforms is NativeArray && + transformOrigin is NativeArray?) { + nativeProcessTransform(transforms, result, viewWidth, viewHeight, transformOrigin) + return + } + val helperMatrix = helperMatrix.get()!! MatrixMathHelper.resetIdentityMatrix(result) val offsets = @@ -220,4 +230,13 @@ public object TransformHelper { return doubleArrayOf(newTranslateX, newTranslateY, newTranslateZ) } + + @JvmStatic + private external fun nativeProcessTransform( + transforms: NativeArray, + result: DoubleArray, + viewWidth: Float, + viewHeight: Float, + transformOrigin: NativeArray? + ) } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 0bcbbc10fc9..5ae6ba010df 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -351,6 +351,18 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } + bool useNativeEqualsInNativeReadableArrayAndroid() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useNativeEqualsInNativeReadableArrayAndroid"); + return method(javaProvider_); + } + + bool useNativeTransformHelperAndroid() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useNativeTransformHelperAndroid"); + return method(javaProvider_); + } + bool useNativeViewConfigsInBridgelessMode() override { static const auto method = getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useNativeViewConfigsInBridgelessMode"); @@ -657,6 +669,16 @@ bool JReactNativeFeatureFlagsCxxInterop::useFabricInterop( return ReactNativeFeatureFlags::useFabricInterop(); } +bool JReactNativeFeatureFlagsCxxInterop::useNativeEqualsInNativeReadableArrayAndroid( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::useNativeEqualsInNativeReadableArrayAndroid(); +} + +bool JReactNativeFeatureFlagsCxxInterop::useNativeTransformHelperAndroid( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::useNativeTransformHelperAndroid(); +} + bool JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode( facebook::jni::alias_ref /*unused*/) { return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode(); @@ -879,6 +901,12 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "useFabricInterop", JReactNativeFeatureFlagsCxxInterop::useFabricInterop), + makeNativeMethod( + "useNativeEqualsInNativeReadableArrayAndroid", + JReactNativeFeatureFlagsCxxInterop::useNativeEqualsInNativeReadableArrayAndroid), + makeNativeMethod( + "useNativeTransformHelperAndroid", + JReactNativeFeatureFlagsCxxInterop::useNativeTransformHelperAndroid), makeNativeMethod( "useNativeViewConfigsInBridgelessMode", JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode), diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index 42312d4bf22..a04ebe7fc0e 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<57f2dcf4b71512c6b15e8021258d6036>> */ /** @@ -186,6 +186,12 @@ class JReactNativeFeatureFlagsCxxInterop static bool useFabricInterop( facebook::jni::alias_ref); + static bool useNativeEqualsInNativeReadableArrayAndroid( + facebook::jni::alias_ref); + + static bool useNativeTransformHelperAndroid( + facebook::jni::alias_ref); + static bool useNativeViewConfigsInBridgelessMode( facebook::jni::alias_ref); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt index f315cca6dd1..61cc16c0834 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt @@ -31,13 +31,14 @@ add_library( OnLoad-common.cpp ReadableNativeArray.cpp ReadableNativeMap.cpp + TransformHelper.cpp WritableNativeArray.cpp WritableNativeMap.cpp ) target_merge_so(reactnativejni_common) target_include_directories(reactnativejni_common PUBLIC ../../) -target_link_libraries(reactnativejni_common fbjni folly_runtime react_cxxreact) +target_link_libraries(reactnativejni_common fbjni folly_runtime react_cxxreact yoga react_renderer_graphics) target_compile_reactnative_options(reactnativejni_common PRIVATE) target_compile_options(reactnativejni_common PRIVATE -Wno-unused-lambda-capture) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/NativeArray.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/NativeArray.h index c7087485521..738738437b0 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/NativeArray.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/NativeArray.h @@ -21,6 +21,10 @@ class NativeArray : public jni::HybridClass { jni::local_ref toString(); + const folly::dynamic& getArray() const { + return array_; + } + RN_EXPORT folly::dynamic consume(); // Whether this array has been added to another array or map and no longer diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp index 293d2ffc8ab..ef069ed7e41 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp @@ -11,6 +11,7 @@ #include "JReactMarker.h" #include "NativeArray.h" #include "NativeMap.h" +#include "TransformHelper.h" #include "WritableNativeArray.h" #include "WritableNativeMap.h" @@ -27,6 +28,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { ReadableNativeMap::registerNatives(); WritableNativeArray::registerNatives(); WritableNativeMap::registerNatives(); + TransformHelper::registerNatives(); }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.cpp index 9add683e2a4..bdc4d6bbbbb 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.cpp @@ -40,10 +40,16 @@ local_ref> ReadableNativeArray::importTypeArray() { return jarray; } +bool ReadableNativeArray::equals( + jni::alias_ref other) { + return array_ == other->cthis()->array_; +} + void ReadableNativeArray::registerNatives() { registerHybrid({ makeNativeMethod("importArray", ReadableNativeArray::importArray), makeNativeMethod("importTypeArray", ReadableNativeArray::importTypeArray), + makeNativeMethod("nativeEquals", ReadableNativeArray::equals), }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h index 02d9445192e..1ab3243ad12 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h @@ -35,6 +35,7 @@ class ReadableNativeArray static void mapException(std::exception_ptr ex); static void registerNatives(); + bool equals(jni::alias_ref other); jni::local_ref> importArray(); jni::local_ref> importTypeArray(); }; diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.cpp new file mode 100644 index 00000000000..b33d269ac29 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "TransformHelper.h" + +#include +#include + +#include "NativeArray.h" + +using namespace facebook::jni; + +namespace facebook::react { + +namespace { +void processTransform( + jni::alias_ref /*unused*/, + NativeArray* jTransforms, + jni::alias_ref jResult, + float viewWidth, + float viewHeight, + NativeArray* jTransformOrigin) { + // Assuming parsing transforms doesn't require a real PropsParserContext + static ContextContainer contextContainer; + static PropsParserContext context(0, contextContainer); + + RawValue transformValue(jTransforms->getArray()); + Transform transform; + fromRawValue(context, transformValue, transform); + + TransformOrigin transformOrigin; + if (jTransformOrigin != nullptr) { + RawValue transformOriginValue(jTransformOrigin->getArray()); + fromRawValue(context, transformOriginValue, transformOrigin); + } + + auto result = BaseViewProps::resolveTransform( + Size(viewWidth, viewHeight), transform, transformOrigin); + + // Convert from matrix of floats to double matrix + constexpr size_t MatrixSize = std::tuple_size_v; + std::array doubleTransform{}; + std::copy( + result.matrix.begin(), result.matrix.end(), doubleTransform.begin()); + jResult->setRegion(0, MatrixSize, doubleTransform.data()); +} + +} // namespace + +void TransformHelper::registerNatives() { + javaClassLocal()->registerNatives({ + makeNativeMethod("nativeProcessTransform", processTransform), + }); +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.h new file mode 100644 index 00000000000..342a8ee1100 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/TransformHelper.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace facebook::react { + +class TransformHelper : public jni::JavaClass { + public: + static auto constexpr* kJavaDescriptor = + "Lcom/facebook/react/uimanager/TransformHelper;"; + + static void registerNatives(); +}; + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 1feef568183..667aec1cb3f 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<2cabd888b74b84201ff027457efc6007>> */ /** @@ -234,6 +234,14 @@ bool ReactNativeFeatureFlags::useFabricInterop() { return getAccessor().useFabricInterop(); } +bool ReactNativeFeatureFlags::useNativeEqualsInNativeReadableArrayAndroid() { + return getAccessor().useNativeEqualsInNativeReadableArrayAndroid(); +} + +bool ReactNativeFeatureFlags::useNativeTransformHelperAndroid() { + return getAccessor().useNativeTransformHelperAndroid(); +} + bool ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode() { return getAccessor().useNativeViewConfigsInBridgelessMode(); } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index 6663518acd8..564d82bba30 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -299,6 +299,16 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static bool useFabricInterop(); + /** + * Use a native implementation of equals in NativeReadableArray. + */ + RN_EXPORT static bool useNativeEqualsInNativeReadableArrayAndroid(); + + /** + * Use a native implementation of TransformHelper + */ + RN_EXPORT static bool useNativeTransformHelperAndroid(); + /** * When enabled, the native view configs are used in bridgeless mode. */ diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index 877131981d2..d3b0351a093 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<681bff71eb87886a108f67b3162b030c>> + * @generated SignedSource<<7ae9a203a94e3a22197bc9eda69b741c>> */ /** @@ -965,6 +965,42 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() { return flagValue.value(); } +bool ReactNativeFeatureFlagsAccessor::useNativeEqualsInNativeReadableArrayAndroid() { + auto flagValue = useNativeEqualsInNativeReadableArrayAndroid_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(52, "useNativeEqualsInNativeReadableArrayAndroid"); + + flagValue = currentProvider_->useNativeEqualsInNativeReadableArrayAndroid(); + useNativeEqualsInNativeReadableArrayAndroid_ = flagValue; + } + + return flagValue.value(); +} + +bool ReactNativeFeatureFlagsAccessor::useNativeTransformHelperAndroid() { + auto flagValue = useNativeTransformHelperAndroid_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(53, "useNativeTransformHelperAndroid"); + + flagValue = currentProvider_->useNativeTransformHelperAndroid(); + useNativeTransformHelperAndroid_ = flagValue; + } + + return flagValue.value(); +} + bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { auto flagValue = useNativeViewConfigsInBridgelessMode_.load(); @@ -974,7 +1010,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(52, "useNativeViewConfigsInBridgelessMode"); + markFlagAsAccessed(54, "useNativeViewConfigsInBridgelessMode"); flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode(); useNativeViewConfigsInBridgelessMode_ = flagValue; @@ -992,7 +1028,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(53, "useOptimizedEventBatchingOnAndroid"); + markFlagAsAccessed(55, "useOptimizedEventBatchingOnAndroid"); flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid(); useOptimizedEventBatchingOnAndroid_ = flagValue; @@ -1010,7 +1046,7 @@ bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(54, "useRawPropsJsiValue"); + markFlagAsAccessed(56, "useRawPropsJsiValue"); flagValue = currentProvider_->useRawPropsJsiValue(); useRawPropsJsiValue_ = flagValue; @@ -1028,7 +1064,7 @@ bool ReactNativeFeatureFlagsAccessor::useShadowNodeStateOnClone() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(55, "useShadowNodeStateOnClone"); + markFlagAsAccessed(57, "useShadowNodeStateOnClone"); flagValue = currentProvider_->useShadowNodeStateOnClone(); useShadowNodeStateOnClone_ = flagValue; @@ -1046,7 +1082,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(56, "useTurboModuleInterop"); + markFlagAsAccessed(58, "useTurboModuleInterop"); flagValue = currentProvider_->useTurboModuleInterop(); useTurboModuleInterop_ = flagValue; @@ -1064,7 +1100,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(57, "useTurboModules"); + markFlagAsAccessed(59, "useTurboModules"); flagValue = currentProvider_->useTurboModules(); useTurboModules_ = flagValue; @@ -1082,7 +1118,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(58, "virtualViewPrerenderRatio"); + markFlagAsAccessed(60, "virtualViewPrerenderRatio"); flagValue = currentProvider_->virtualViewPrerenderRatio(); virtualViewPrerenderRatio_ = flagValue; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index c71e8133664..8e2acc5b241 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<74560113d0b23c05d7822eeba1c0dee4>> */ /** @@ -84,6 +84,8 @@ class ReactNativeFeatureFlagsAccessor { bool updateRuntimeShadowNodeReferencesOnCommit(); bool useAlwaysAvailableJSErrorHandling(); bool useFabricInterop(); + bool useNativeEqualsInNativeReadableArrayAndroid(); + bool useNativeTransformHelperAndroid(); bool useNativeViewConfigsInBridgelessMode(); bool useOptimizedEventBatchingOnAndroid(); bool useRawPropsJsiValue(); @@ -102,7 +104,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 59> accessedFeatureFlags_; + std::array, 61> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> animatedShouldSignalBatch_; @@ -156,6 +158,8 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> updateRuntimeShadowNodeReferencesOnCommit_; std::atomic> useAlwaysAvailableJSErrorHandling_; std::atomic> useFabricInterop_; + std::atomic> useNativeEqualsInNativeReadableArrayAndroid_; + std::atomic> useNativeTransformHelperAndroid_; std::atomic> useNativeViewConfigsInBridgelessMode_; std::atomic> useOptimizedEventBatchingOnAndroid_; std::atomic> useRawPropsJsiValue_; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 0dc1de80ced..e0742c9c5c9 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<9832c18e4c7ccf232b7222e2356f99d9>> + * @generated SignedSource<<1a54000b8eb51cb91304902c7f722d45>> */ /** @@ -235,6 +235,14 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return true; } + bool useNativeEqualsInNativeReadableArrayAndroid() override { + return false; + } + + bool useNativeTransformHelperAndroid() override { + return false; + } + bool useNativeViewConfigsInBridgelessMode() override { return false; } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index 46ec128d23b..f5c85f530a4 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<19f0a48bcfa8f8ffaf634e85301adc7e>> + * @generated SignedSource<<244db790cc754f31402981967cd902b5>> */ /** @@ -513,6 +513,24 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::useFabricInterop(); } + bool useNativeEqualsInNativeReadableArrayAndroid() override { + auto value = values_["useNativeEqualsInNativeReadableArrayAndroid"]; + if (!value.isNull()) { + return value.getBool(); + } + + return ReactNativeFeatureFlagsDefaults::useNativeEqualsInNativeReadableArrayAndroid(); + } + + bool useNativeTransformHelperAndroid() override { + auto value = values_["useNativeTransformHelperAndroid"]; + if (!value.isNull()) { + return value.getBool(); + } + + return ReactNativeFeatureFlagsDefaults::useNativeTransformHelperAndroid(); + } + bool useNativeViewConfigsInBridgelessMode() override { auto value = values_["useNativeViewConfigsInBridgelessMode"]; if (!value.isNull()) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h index c45e55ce07a..230dc476cef 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -30,6 +30,14 @@ class ReactNativeFeatureFlagsOverridesOSSExperimental : public ReactNativeFeatur bool preventShadowTreeCommitExhaustion() override { return true; } + + bool useNativeEqualsInNativeReadableArrayAndroid() override { + return true; + } + + bool useNativeTransformHelperAndroid() override { + return true; + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index 3df0f3be4a1..e9dd92d9494 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<815769cc8d08e19b2598dd1862ed5060>> + * @generated SignedSource<<2387ed12fe46fb5b606ad13a17511f03>> */ /** @@ -77,6 +77,8 @@ class ReactNativeFeatureFlagsProvider { virtual bool updateRuntimeShadowNodeReferencesOnCommit() = 0; virtual bool useAlwaysAvailableJSErrorHandling() = 0; virtual bool useFabricInterop() = 0; + virtual bool useNativeEqualsInNativeReadableArrayAndroid() = 0; + virtual bool useNativeTransformHelperAndroid() = 0; virtual bool useNativeViewConfigsInBridgelessMode() = 0; virtual bool useOptimizedEventBatchingOnAndroid() = 0; virtual bool useRawPropsJsiValue() = 0; diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index cda934866a5..1e9e0ffc9b2 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<474a64af739969acebb4bb9bb1005168>> + * @generated SignedSource<<45e1b08fd2438b27af82591b5cfa5744>> */ /** @@ -304,6 +304,16 @@ bool NativeReactNativeFeatureFlags::useFabricInterop( return ReactNativeFeatureFlags::useFabricInterop(); } +bool NativeReactNativeFeatureFlags::useNativeEqualsInNativeReadableArrayAndroid( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::useNativeEqualsInNativeReadableArrayAndroid(); +} + +bool NativeReactNativeFeatureFlags::useNativeTransformHelperAndroid( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::useNativeTransformHelperAndroid(); +} + bool NativeReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode( jsi::Runtime& /*runtime*/) { return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode(); diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index 5696d5a7c7f..bc8014a5d80 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -140,6 +140,10 @@ class NativeReactNativeFeatureFlags bool useFabricInterop(jsi::Runtime& runtime); + bool useNativeEqualsInNativeReadableArrayAndroid(jsi::Runtime& runtime); + + bool useNativeTransformHelperAndroid(jsi::Runtime& runtime); + bool useNativeViewConfigsInBridgelessMode(jsi::Runtime& runtime); bool useOptimizedEventBatchingOnAndroid(jsi::Runtime& runtime); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp index 690aedc3501..5bf3c6e4179 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp @@ -550,6 +550,13 @@ BorderMetrics BaseViewProps::resolveBorderMetrics( Transform BaseViewProps::resolveTransform( const LayoutMetrics& layoutMetrics) const { const auto& frameSize = layoutMetrics.frame.size; + return resolveTransform(frameSize, transform, transformOrigin); +} + +Transform BaseViewProps::resolveTransform( + const Size& frameSize, + const Transform& transform, + const TransformOrigin& transformOrigin) { auto transformMatrix = Transform{}; if (frameSize.width == 0 && frameSize.height == 0) { return transformMatrix; @@ -562,8 +569,7 @@ Transform BaseViewProps::resolveTransform( } else { for (const auto& operation : transform.operations) { transformMatrix = transformMatrix * - Transform::FromTransformOperation( - operation, layoutMetrics.frame.size, transform); + Transform::FromTransformOperation(operation, frameSize, transform); } } diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h index f7e56418ef0..6258d1375da 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h @@ -115,6 +115,11 @@ class BaseViewProps : public YogaStylableProps, public AccessibilityProps { Transform resolveTransform(const LayoutMetrics& layoutMetrics) const; bool getClipsContentToBounds() const; + static Transform resolveTransform( + const Size& frameSize, + const Transform& transform, + const TransformOrigin& transformOrigin); + #if RN_DEBUG_STRING_CONVERTIBLE SharedDebugStringConvertibleList getDebugProps() const override; #endif diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 7bb81fa3bf0..feb33a2d55d 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -595,6 +595,27 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, + useNativeEqualsInNativeReadableArrayAndroid: { + defaultValue: false, + metadata: { + dateAdded: '2025-07-15', + description: + 'Use a native implementation of equals in NativeReadableArray.', + expectedReleaseValue: true, + purpose: 'experimentation', + }, + ossReleaseStage: 'experimental', + }, + useNativeTransformHelperAndroid: { + defaultValue: false, + metadata: { + dateAdded: '2025-07-15', + description: 'Use a native implementation of TransformHelper', + expectedReleaseValue: true, + purpose: 'experimentation', + }, + ossReleaseStage: 'experimental', + }, useNativeViewConfigsInBridgelessMode: { defaultValue: false, metadata: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index ee5043e87bc..108ed513497 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<999a8d329cdab258ac64c03b24f1a516>> + * @generated SignedSource<> * @flow strict * @noformat */ @@ -103,6 +103,8 @@ export type ReactNativeFeatureFlags = $ReadOnly<{ updateRuntimeShadowNodeReferencesOnCommit: Getter, useAlwaysAvailableJSErrorHandling: Getter, useFabricInterop: Getter, + useNativeEqualsInNativeReadableArrayAndroid: Getter, + useNativeTransformHelperAndroid: Getter, useNativeViewConfigsInBridgelessMode: Getter, useOptimizedEventBatchingOnAndroid: Getter, useRawPropsJsiValue: Getter, @@ -404,6 +406,14 @@ export const useAlwaysAvailableJSErrorHandling: Getter = createNativeFl * Should this application enable the Fabric Interop Layer for Android? If yes, the application will behave so that it can accept non-Fabric components and render them on Fabric. This toggle is controlling extra logic such as custom event dispatching that are needed for the Fabric Interop Layer to work correctly. */ export const useFabricInterop: Getter = createNativeFlagGetter('useFabricInterop', true); +/** + * Use a native implementation of equals in NativeReadableArray. + */ +export const useNativeEqualsInNativeReadableArrayAndroid: Getter = createNativeFlagGetter('useNativeEqualsInNativeReadableArrayAndroid', false); +/** + * Use a native implementation of TransformHelper + */ +export const useNativeTransformHelperAndroid: Getter = createNativeFlagGetter('useNativeTransformHelperAndroid', false); /** * When enabled, the native view configs are used in bridgeless mode. */ diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index e64f0920b3e..4558b60203c 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<1b84b6e04c214f6c2798010372937990>> + * @generated SignedSource<<8b4f1275a16d5b83f5594da1eb89c6c1>> * @flow strict * @noformat */ @@ -77,6 +77,8 @@ export interface Spec extends TurboModule { +updateRuntimeShadowNodeReferencesOnCommit?: () => boolean; +useAlwaysAvailableJSErrorHandling?: () => boolean; +useFabricInterop?: () => boolean; + +useNativeEqualsInNativeReadableArrayAndroid?: () => boolean; + +useNativeTransformHelperAndroid?: () => boolean; +useNativeViewConfigsInBridgelessMode?: () => boolean; +useOptimizedEventBatchingOnAndroid?: () => boolean; +useRawPropsJsiValue?: () => boolean; From 65119b0107200115a31f084d4695891b6541762e Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 9 Sep 2025 16:43:27 +0000 Subject: [PATCH 079/312] Release 0.81.2 #publish-packages-to-npm&0.81-stable --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 4 ++-- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 64 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 6c10d825126..ec837008837 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.1", - "@react-native/metro-config": "0.81.1", + "@react-native/metro-babel-transformer": "0.81.2", + "@react-native/metro-config": "0.81.2", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 32ce296816e..e1443431cb3 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.1", + "version": "0.81.2", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index d0b9fa76bd2..601a31fb707 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.1", + "version": "0.81.2", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.1" + "@react-native/codegen": "0.81.2" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 979ed0caae9..6866f961b4b 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.1", + "version": "0.81.2", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.1", + "@react-native/dev-middleware": "0.81.2", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 4ee4b56d02c..c39c1272c60 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.1", + "version": "0.81.2", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index d7584852d6e..31beb057336 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.1", + "version": "0.81.2", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 0fa622ee4f6..8f7bbadde26 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.1", + "version": "0.81.2", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 558fcdfce2f..66ae3c54c60 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.1", + "version": "0.81.2", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.1", + "@react-native/debugger-frontend": "0.81.2", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index db993f2d63d..42f4fe12f00 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.1", + "version": "0.81.2", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.1", + "@react-native/eslint-plugin": "0.81.2", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index e5b617b1fd0..c56194f5838 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.1", + "version": "0.81.2", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index be8b024ea30..943036e3ae8 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.1", + "version": "0.81.2", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.1", + "@react-native/codegen": "0.81.2", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index ae1e679d329..c34efd63e18 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.1", + "version": "0.81.2", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 1a03a33ee93..a90177b9f43 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.1", + "version": "0.81.2", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.1", - "@react-native/metro-babel-transformer": "0.81.1", + "@react-native/js-polyfills": "0.81.2", + "@react-native/metro-babel-transformer": "0.81.2", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index 0975a6e6e7d..a4c18a9efd7 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.1", + "version": "0.81.2", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 6fe7294ece0..c91bd95f33b 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.1", + "version": "0.81.2", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index ffbd587f5e0..79ff2c2f993 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.1", + "version": "0.81.2", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index ae3f8dcc8e0..8ea994d7aa9 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.1", + "version": "0.81.2", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.1", + "@react-native/babel-plugin-codegen": "0.81.2", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 643411348dd..f043cde4a8c 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.1", + "version": "0.81.2", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.1", + "@react-native/babel-preset": "0.81.2", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index b4f1a40970a..e0ccb56ec8d 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.1", + "version": "0.81.2", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 0971a92040a..34387ce5a79 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.1", + "version": "0.81.2", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.1" + "@react-native/codegen": "0.81.2" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index f207e21361f..bc506ff6871 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.1", + "version": "0.81.2", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.1" + "@react-native/codegen": "0.81.2" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index ec7f66c4f7b..876178aef26 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.1", - "react-native": "0.81.1" + "@react-native/babel-preset": "0.81.2", + "react-native": "0.81.2" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 3e7f9b0ada3..a5a70e7de88 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -17,6 +17,6 @@ export const version: $ReadOnly<{ }> = { major: 0, minor: 81, - patch: 1, + patch: 2, prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 1d67bf46a27..7ac77378511 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -23,7 +23,7 @@ __rnVersion = @{ RCTVersionMajor: @(0), RCTVersionMinor: @(81), - RCTVersionPatch: @(1), + RCTVersionPatch: @(2), RCTVersionPrerelease: [NSNull null], }; }); diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 2202547db7e..422ca566411 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.1 +VERSION_NAME=0.81.2 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 61662cd759d..3fbe72762f3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -14,7 +14,7 @@ public object ReactNativeVersion { public val VERSION: Map = mapOf( "major" to 0, "minor" to 81, - "patch" to 1, + "patch" to 2, "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 68dba56b018..3a8ca681b01 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -14,14 +14,14 @@ #define REACT_NATIVE_VERSION_MAJOR 0 #define REACT_NATIVE_VERSION_MINOR 81 -#define REACT_NATIVE_VERSION_PATCH 1 +#define REACT_NATIVE_VERSION_PATCH 2 namespace facebook::react { constexpr struct { int32_t Major = 0; int32_t Minor = 81; - int32_t Patch = 1; + int32_t Patch = 2; std::string_view Prerelease = ""; } ReactNativeVersion; diff --git a/packages/react-native/package.json b/packages/react-native/package.json index ac44ae59135..c4923de74a6 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.1", + "version": "0.81.2", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.1", - "@react-native/codegen": "0.81.1", - "@react-native/community-cli-plugin": "0.81.1", - "@react-native/gradle-plugin": "0.81.1", - "@react-native/js-polyfills": "0.81.1", - "@react-native/normalize-colors": "0.81.1", - "@react-native/virtualized-lists": "0.81.1", + "@react-native/assets-registry": "0.81.2", + "@react-native/codegen": "0.81.2", + "@react-native/community-cli-plugin": "0.81.2", + "@react-native/gradle-plugin": "0.81.2", + "@react-native/js-polyfills": "0.81.2", + "@react-native/normalize-colors": "0.81.2", + "@react-native/virtualized-lists": "0.81.2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 77f3e252786..dddef0e6656 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.1\\" +version = \\"0.81.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.1\\" +version = \\"0.81.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -840,7 +840,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.1\\" +version = \\"0.81.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -878,7 +878,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.1\\" +version = \\"0.81.2\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index c417a1b3ee0..dd1b4dccce0 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.1", - "@react-native/popup-menu-android": "0.81.1", + "@react-native/new-app-screen": "0.81.2", + "@react-native/popup-menu-android": "0.81.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 36b57d86f36..f5741f2a35b 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.1", + "version": "0.81.2", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index aace891ee45..9aac43c5dd3 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.1", + "version": "0.81.2", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 8954a3886bd..49f50cad47b 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.1" + "react-native": "0.81.2" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.1", - "@react-native/core-cli-utils": "0.81.1", - "@react-native/eslint-config": "0.81.1", - "@react-native/metro-config": "0.81.1", - "@react-native/typescript-config": "0.81.1", + "@react-native/babel-preset": "0.81.2", + "@react-native/core-cli-utils": "0.81.2", + "@react-native/eslint-config": "0.81.2", + "@react-native/metro-config": "0.81.2", + "@react-native/typescript-config": "0.81.2", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index fd40e4e3eb4..a2343874cf2 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.1" + "@react-native/codegen": "0.81.2" }, "devDependencies": { "@babel/core": "^7.25.2", From 63619bcbad76b417eeab323f25784fda9adae144 Mon Sep 17 00:00:00 2001 From: Gabriel Donadel Date: Tue, 9 Sep 2025 19:13:29 -0300 Subject: [PATCH 080/312] Update Podfile.lock Changelog: [Internal] --- packages/rn-tester/Podfile.lock | 604 ++++++++++++++++---------------- 1 file changed, 302 insertions(+), 302 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 94d015e6076..b16bb084478 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.1) + - FBLazyVector (0.81.2) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.1): - - hermes-engine/Pre-built (= 0.81.1) - - hermes-engine/Pre-built (0.81.1) + - hermes-engine (0.81.2): + - hermes-engine/Pre-built (= 0.81.2) + - hermes-engine/Pre-built (0.81.2) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.1) - - RCTRequired (0.81.1) - - RCTTypeSafety (0.81.1): - - FBLazyVector (= 0.81.1) - - RCTRequired (= 0.81.1) - - React-Core (= 0.81.1) - - React (0.81.1): - - React-Core (= 0.81.1) - - React-Core/DevSupport (= 0.81.1) - - React-Core/RCTWebSocket (= 0.81.1) - - React-RCTActionSheet (= 0.81.1) - - React-RCTAnimation (= 0.81.1) - - React-RCTBlob (= 0.81.1) - - React-RCTImage (= 0.81.1) - - React-RCTLinking (= 0.81.1) - - React-RCTNetwork (= 0.81.1) - - React-RCTSettings (= 0.81.1) - - React-RCTText (= 0.81.1) - - React-RCTVibration (= 0.81.1) - - React-callinvoker (0.81.1) - - React-Core (0.81.1): + - RCTDeprecation (0.81.2) + - RCTRequired (0.81.2) + - RCTTypeSafety (0.81.2): + - FBLazyVector (= 0.81.2) + - RCTRequired (= 0.81.2) + - React-Core (= 0.81.2) + - React (0.81.2): + - React-Core (= 0.81.2) + - React-Core/DevSupport (= 0.81.2) + - React-Core/RCTWebSocket (= 0.81.2) + - React-RCTActionSheet (= 0.81.2) + - React-RCTAnimation (= 0.81.2) + - React-RCTBlob (= 0.81.2) + - React-RCTImage (= 0.81.2) + - React-RCTLinking (= 0.81.2) + - React-RCTNetwork (= 0.81.2) + - React-RCTSettings (= 0.81.2) + - React-RCTText (= 0.81.2) + - React-RCTVibration (= 0.81.2) + - React-callinvoker (0.81.2) + - React-Core (0.81.2): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.1) + - React-Core/Default (= 0.81.2) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.1): + - React-Core/CoreModulesHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.1): + - React-Core/Default (0.81.2): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.1): + - React-Core/DevSupport (0.81.2): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.1) - - React-Core/RCTWebSocket (= 0.81.1) + - React-Core/Default (= 0.81.2) + - React-Core/RCTWebSocket (= 0.81.2) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.1): + - React-Core/RCTActionSheetHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.1): + - React-Core/RCTAnimationHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.1): + - React-Core/RCTBlobHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.1): + - React-Core/RCTImageHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.1): + - React-Core/RCTLinkingHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.1): + - React-Core/RCTNetworkHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.1): + - React-Core/RCTPushNotificationHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.1): + - React-Core/RCTSettingsHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.1): + - React-Core/RCTTextHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.1): + - React-Core/RCTVibrationHeaders (0.81.2): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.1): + - React-Core/RCTWebSocket (0.81.2): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.1) + - React-Core/Default (= 0.81.2) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.1): + - React-CoreModules (0.81.2): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.1) - - React-Core/CoreModulesHeaders (= 0.81.1) - - React-jsi (= 0.81.1) + - RCTTypeSafety (= 0.81.2) + - React-Core/CoreModulesHeaders (= 0.81.2) + - React-jsi (= 0.81.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.1) + - React-RCTImage (= 0.81.2) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.1): + - React-cxxreact (0.81.2): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-debug (= 0.81.1) - - React-jsi (= 0.81.1) + - React-callinvoker (= 0.81.2) + - React-debug (= 0.81.2) + - React-jsi (= 0.81.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) + - React-logger (= 0.81.2) + - React-perflogger (= 0.81.2) - React-runtimeexecutor - - React-timing (= 0.81.1) + - React-timing (= 0.81.2) - SocketRocket - - React-debug (0.81.1) - - React-defaultsnativemodule (0.81.1): + - React-debug (0.81.2) + - React-defaultsnativemodule (0.81.2): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.1): + - React-domnativemodule (0.81.2): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.1): + - React-Fabric (0.81.2): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.1) - - React-Fabric/attributedstring (= 0.81.1) - - React-Fabric/bridging (= 0.81.1) - - React-Fabric/componentregistry (= 0.81.1) - - React-Fabric/componentregistrynative (= 0.81.1) - - React-Fabric/components (= 0.81.1) - - React-Fabric/consistency (= 0.81.1) - - React-Fabric/core (= 0.81.1) - - React-Fabric/dom (= 0.81.1) - - React-Fabric/imagemanager (= 0.81.1) - - React-Fabric/leakchecker (= 0.81.1) - - React-Fabric/mounting (= 0.81.1) - - React-Fabric/observers (= 0.81.1) - - React-Fabric/scheduler (= 0.81.1) - - React-Fabric/telemetry (= 0.81.1) - - React-Fabric/templateprocessor (= 0.81.1) - - React-Fabric/uimanager (= 0.81.1) + - React-Fabric/animations (= 0.81.2) + - React-Fabric/attributedstring (= 0.81.2) + - React-Fabric/bridging (= 0.81.2) + - React-Fabric/componentregistry (= 0.81.2) + - React-Fabric/componentregistrynative (= 0.81.2) + - React-Fabric/components (= 0.81.2) + - React-Fabric/consistency (= 0.81.2) + - React-Fabric/core (= 0.81.2) + - React-Fabric/dom (= 0.81.2) + - React-Fabric/imagemanager (= 0.81.2) + - React-Fabric/leakchecker (= 0.81.2) + - React-Fabric/mounting (= 0.81.2) + - React-Fabric/observers (= 0.81.2) + - React-Fabric/scheduler (= 0.81.2) + - React-Fabric/telemetry (= 0.81.2) + - React-Fabric/templateprocessor (= 0.81.2) + - React-Fabric/uimanager (= 0.81.2) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.1): + - React-Fabric/animations (0.81.2): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.1): + - React-Fabric/attributedstring (0.81.2): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.1): + - React-Fabric/bridging (0.81.2): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.1): + - React-Fabric/componentregistry (0.81.2): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.1): + - React-Fabric/componentregistrynative (0.81.2): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.1): + - React-Fabric/components (0.81.2): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.1) - - React-Fabric/components/root (= 0.81.1) - - React-Fabric/components/scrollview (= 0.81.1) - - React-Fabric/components/view (= 0.81.1) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.2) + - React-Fabric/components/root (= 0.81.2) + - React-Fabric/components/scrollview (= 0.81.2) + - React-Fabric/components/view (= 0.81.2) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.1): + - React-Fabric/components/legacyviewmanagerinterop (0.81.2): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.1): + - React-Fabric/components/root (0.81.2): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.1): + - React-Fabric/components/scrollview (0.81.2): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.1): + - React-Fabric/components/view (0.81.2): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.1): + - React-Fabric/consistency (0.81.2): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.1): + - React-Fabric/core (0.81.2): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.1): + - React-Fabric/dom (0.81.2): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.1): + - React-Fabric/imagemanager (0.81.2): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.1): + - React-Fabric/leakchecker (0.81.2): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.1): + - React-Fabric/mounting (0.81.2): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.1): + - React-Fabric/observers (0.81.2): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.1) + - React-Fabric/observers/events (= 0.81.2) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.1): + - React-Fabric/observers/events (0.81.2): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.1): + - React-Fabric/scheduler (0.81.2): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.1): + - React-Fabric/telemetry (0.81.2): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.1): + - React-Fabric/templateprocessor (0.81.2): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.1): + - React-Fabric/uimanager (0.81.2): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.1) + - React-Fabric/uimanager/consistency (= 0.81.2) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.1): + - React-Fabric/uimanager/consistency (0.81.2): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.1): + - React-FabricComponents (0.81.2): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.1) - - React-FabricComponents/textlayoutmanager (= 0.81.1) + - React-FabricComponents/components (= 0.81.2) + - React-FabricComponents/textlayoutmanager (= 0.81.2) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.1): + - React-FabricComponents/components (0.81.2): - boost - DoubleConversion - fast_float @@ -1259,17 +1259,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.1) - - React-FabricComponents/components/iostextinput (= 0.81.1) - - React-FabricComponents/components/modal (= 0.81.1) - - React-FabricComponents/components/rncore (= 0.81.1) - - React-FabricComponents/components/safeareaview (= 0.81.1) - - React-FabricComponents/components/scrollview (= 0.81.1) - - React-FabricComponents/components/switch (= 0.81.1) - - React-FabricComponents/components/text (= 0.81.1) - - React-FabricComponents/components/textinput (= 0.81.1) - - React-FabricComponents/components/unimplementedview (= 0.81.1) - - React-FabricComponents/components/virtualview (= 0.81.1) + - React-FabricComponents/components/inputaccessory (= 0.81.2) + - React-FabricComponents/components/iostextinput (= 0.81.2) + - React-FabricComponents/components/modal (= 0.81.2) + - React-FabricComponents/components/rncore (= 0.81.2) + - React-FabricComponents/components/safeareaview (= 0.81.2) + - React-FabricComponents/components/scrollview (= 0.81.2) + - React-FabricComponents/components/switch (= 0.81.2) + - React-FabricComponents/components/text (= 0.81.2) + - React-FabricComponents/components/textinput (= 0.81.2) + - React-FabricComponents/components/unimplementedview (= 0.81.2) + - React-FabricComponents/components/virtualview (= 0.81.2) - React-featureflags - React-graphics - React-jsi @@ -1282,7 +1282,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.1): + - React-FabricComponents/components/inputaccessory (0.81.2): - boost - DoubleConversion - fast_float @@ -1309,7 +1309,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.1): + - React-FabricComponents/components/iostextinput (0.81.2): - boost - DoubleConversion - fast_float @@ -1336,7 +1336,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.1): + - React-FabricComponents/components/modal (0.81.2): - boost - DoubleConversion - fast_float @@ -1363,7 +1363,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.1): + - React-FabricComponents/components/rncore (0.81.2): - boost - DoubleConversion - fast_float @@ -1390,7 +1390,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.1): + - React-FabricComponents/components/safeareaview (0.81.2): - boost - DoubleConversion - fast_float @@ -1417,7 +1417,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.1): + - React-FabricComponents/components/scrollview (0.81.2): - boost - DoubleConversion - fast_float @@ -1444,7 +1444,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/switch (0.81.1): + - React-FabricComponents/components/switch (0.81.2): - boost - DoubleConversion - fast_float @@ -1471,7 +1471,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.1): + - React-FabricComponents/components/text (0.81.2): - boost - DoubleConversion - fast_float @@ -1498,7 +1498,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.1): + - React-FabricComponents/components/textinput (0.81.2): - boost - DoubleConversion - fast_float @@ -1525,7 +1525,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.1): + - React-FabricComponents/components/unimplementedview (0.81.2): - boost - DoubleConversion - fast_float @@ -1552,7 +1552,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.1): + - React-FabricComponents/components/virtualview (0.81.2): - boost - DoubleConversion - fast_float @@ -1579,7 +1579,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.1): + - React-FabricComponents/textlayoutmanager (0.81.2): - boost - DoubleConversion - fast_float @@ -1606,7 +1606,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.1): + - React-FabricImage (0.81.2): - boost - DoubleConversion - fast_float @@ -1615,21 +1615,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.1) - - RCTTypeSafety (= 0.81.1) + - RCTRequired (= 0.81.2) + - RCTTypeSafety (= 0.81.2) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.1) + - React-jsiexecutor (= 0.81.2) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.1): + - React-featureflags (0.81.2): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.1): + - React-featureflagsnativemodule (0.81.2): - boost - DoubleConversion - fast_float @@ -1653,7 +1653,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.1): + - React-graphics (0.81.2): - boost - DoubleConversion - fast_float @@ -1666,7 +1666,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.1): + - React-hermes (0.81.2): - boost - DoubleConversion - fast_float @@ -1675,16 +1675,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.1) + - React-cxxreact (= 0.81.2) - React-jsi - - React-jsiexecutor (= 0.81.1) + - React-jsiexecutor (= 0.81.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.1) + - React-perflogger (= 0.81.2) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.1): + - React-idlecallbacksnativemodule (0.81.2): - boost - DoubleConversion - fast_float @@ -1700,7 +1700,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.1): + - React-ImageManager (0.81.2): - boost - DoubleConversion - fast_float @@ -1715,7 +1715,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.1): + - React-jserrorhandler (0.81.2): - boost - DoubleConversion - fast_float @@ -1730,7 +1730,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.1): + - React-jsi (0.81.2): - boost - DoubleConversion - fast_float @@ -1740,7 +1740,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.1): + - React-jsiexecutor (0.81.2): - boost - DoubleConversion - fast_float @@ -1749,15 +1749,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) + - React-cxxreact (= 0.81.2) + - React-jsi (= 0.81.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.1) + - React-perflogger (= 0.81.2) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.1): + - React-jsinspector (0.81.2): - boost - DoubleConversion - fast_float @@ -1772,10 +1772,10 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.1) + - React-perflogger (= 0.81.2) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.1): + - React-jsinspectorcdp (0.81.2): - boost - DoubleConversion - fast_float @@ -1784,7 +1784,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.1): + - React-jsinspectornetwork (0.81.2): - boost - DoubleConversion - fast_float @@ -1797,7 +1797,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.1): + - React-jsinspectortracing (0.81.2): - boost - DoubleConversion - fast_float @@ -1808,7 +1808,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.1): + - React-jsitooling (0.81.2): - boost - DoubleConversion - fast_float @@ -1816,16 +1816,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) + - React-cxxreact (= 0.81.2) + - React-jsi (= 0.81.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.1): + - React-jsitracing (0.81.2): - React-jsi - - React-logger (0.81.1): + - React-logger (0.81.2): - boost - DoubleConversion - fast_float @@ -1834,7 +1834,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.1): + - React-Mapbuffer (0.81.2): - boost - DoubleConversion - fast_float @@ -1844,7 +1844,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.1): + - React-microtasksnativemodule (0.81.2): - boost - DoubleConversion - fast_float @@ -1858,7 +1858,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.1): + - React-NativeModulesApple (0.81.2): - boost - DoubleConversion - fast_float @@ -1878,8 +1878,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.1) - - React-perflogger (0.81.1): + - React-oscompat (0.81.2) + - React-perflogger (0.81.2): - boost - DoubleConversion - fast_float @@ -1888,7 +1888,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.1): + - React-performancetimeline (0.81.2): - boost - DoubleConversion - fast_float @@ -1901,9 +1901,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.1): - - React-Core/RCTActionSheetHeaders (= 0.81.1) - - React-RCTAnimation (0.81.1): + - React-RCTActionSheet (0.81.2): + - React-Core/RCTActionSheetHeaders (= 0.81.2) + - React-RCTAnimation (0.81.2): - boost - DoubleConversion - fast_float @@ -1919,7 +1919,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.1): + - React-RCTAppDelegate (0.81.2): - boost - DoubleConversion - fast_float @@ -1953,7 +1953,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.1): + - React-RCTBlob (0.81.2): - boost - DoubleConversion - fast_float @@ -1972,7 +1972,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.1): + - React-RCTFabric (0.81.2): - boost - DoubleConversion - fast_float @@ -2007,7 +2007,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.1): + - React-RCTFBReactNativeSpec (0.81.2): - boost - DoubleConversion - fast_float @@ -2021,10 +2021,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.1) + - React-RCTFBReactNativeSpec/components (= 0.81.2) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.1): + - React-RCTFBReactNativeSpec/components (0.81.2): - boost - DoubleConversion - fast_float @@ -2047,7 +2047,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.1): + - React-RCTImage (0.81.2): - boost - DoubleConversion - fast_float @@ -2063,14 +2063,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.1): - - React-Core/RCTLinkingHeaders (= 0.81.1) - - React-jsi (= 0.81.1) + - React-RCTLinking (0.81.2): + - React-Core/RCTLinkingHeaders (= 0.81.2) + - React-jsi (= 0.81.2) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.1) - - React-RCTNetwork (0.81.1): + - ReactCommon/turbomodule/core (= 0.81.2) + - React-RCTNetwork (0.81.2): - boost - DoubleConversion - fast_float @@ -2088,14 +2088,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.1): + - React-RCTPushNotification (0.81.2): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.1): + - React-RCTRuntime (0.81.2): - boost - DoubleConversion - fast_float @@ -2115,7 +2115,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.1): + - React-RCTSettings (0.81.2): - boost - DoubleConversion - fast_float @@ -2130,7 +2130,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.1): + - React-RCTTest (0.81.2): - boost - DoubleConversion - fast_float @@ -2138,15 +2138,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.1) - - React-CoreModules (= 0.81.1) - - React-jsi (= 0.81.1) - - ReactCommon/turbomodule/core (= 0.81.1) + - React-Core (= 0.81.2) + - React-CoreModules (= 0.81.2) + - React-jsi (= 0.81.2) + - ReactCommon/turbomodule/core (= 0.81.2) - SocketRocket - - React-RCTText (0.81.1): - - React-Core/RCTTextHeaders (= 0.81.1) + - React-RCTText (0.81.2): + - React-Core/RCTTextHeaders (= 0.81.2) - Yoga - - React-RCTVibration (0.81.1): + - React-RCTVibration (0.81.2): - boost - DoubleConversion - fast_float @@ -2160,11 +2160,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.1) - - React-renderercss (0.81.1): + - React-rendererconsistency (0.81.2) + - React-renderercss (0.81.2): - React-debug - React-utils - - React-rendererdebug (0.81.1): + - React-rendererdebug (0.81.2): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.1): + - React-RuntimeApple (0.81.2): - boost - DoubleConversion - fast_float @@ -2203,7 +2203,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.1): + - React-RuntimeCore (0.81.2): - boost - DoubleConversion - fast_float @@ -2225,7 +2225,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.1): + - React-runtimeexecutor (0.81.2): - boost - DoubleConversion - fast_float @@ -2235,10 +2235,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.1) + - React-jsi (= 0.81.2) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.1): + - React-RuntimeHermes (0.81.2): - boost - DoubleConversion - fast_float @@ -2259,7 +2259,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.1): + - React-runtimescheduler (0.81.2): - boost - DoubleConversion - fast_float @@ -2281,9 +2281,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.1): + - React-timing (0.81.2): - React-debug - - React-utils (0.81.1): + - React-utils (0.81.2): - boost - DoubleConversion - fast_float @@ -2293,11 +2293,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.1) + - React-jsi (= 0.81.2) - SocketRocket - - ReactAppDependencyProvider (0.81.1): + - ReactAppDependencyProvider (0.81.2): - ReactCodegen - - ReactCodegen (0.81.1): + - ReactCodegen (0.81.2): - boost - DoubleConversion - fast_float @@ -2323,7 +2323,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.1): + - ReactCommon (0.81.2): - boost - DoubleConversion - fast_float @@ -2331,9 +2331,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.1) + - ReactCommon/turbomodule (= 0.81.2) - SocketRocket - - ReactCommon-Samples (0.81.1): + - ReactCommon-Samples (0.81.2): - boost - DoubleConversion - fast_float @@ -2349,7 +2349,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.1): + - ReactCommon/turbomodule (0.81.2): - boost - DoubleConversion - fast_float @@ -2358,15 +2358,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) - - ReactCommon/turbomodule/bridging (= 0.81.1) - - ReactCommon/turbomodule/core (= 0.81.1) + - React-callinvoker (= 0.81.2) + - React-cxxreact (= 0.81.2) + - React-jsi (= 0.81.2) + - React-logger (= 0.81.2) + - React-perflogger (= 0.81.2) + - ReactCommon/turbomodule/bridging (= 0.81.2) + - ReactCommon/turbomodule/core (= 0.81.2) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.1): + - ReactCommon/turbomodule/bridging (0.81.2): - boost - DoubleConversion - fast_float @@ -2375,13 +2375,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) + - React-callinvoker (= 0.81.2) + - React-cxxreact (= 0.81.2) + - React-jsi (= 0.81.2) + - React-logger (= 0.81.2) + - React-perflogger (= 0.81.2) - SocketRocket - - ReactCommon/turbomodule/core (0.81.1): + - ReactCommon/turbomodule/core (0.81.2): - boost - DoubleConversion - fast_float @@ -2390,14 +2390,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-cxxreact (= 0.81.1) - - React-debug (= 0.81.1) - - React-featureflags (= 0.81.1) - - React-jsi (= 0.81.1) - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) - - React-utils (= 0.81.1) + - React-callinvoker (= 0.81.2) + - React-cxxreact (= 0.81.2) + - React-debug (= 0.81.2) + - React-featureflags (= 0.81.2) + - React-jsi (= 0.81.2) + - React-logger (= 0.81.2) + - React-perflogger (= 0.81.2) + - React-utils (= 0.81.2) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2681,83 +2681,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: b8f1312d48447cca7b4abc21ed155db14742bd03 + FBLazyVector: 89a8574f4a4ea67295ad2e8f84b764e4b1162f64 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca + hermes-engine: ceacb56b83367e3c4f7ed5ab0e93f92a89e4575b MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 - RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a - RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 - React: f1486d005993b0af01943af1850d3d4f3b597545 - React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe - React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 - React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e - React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b - React-debug: e01581e1589f329e61c95b332bf7f4969b10564b - React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa - React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb - React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e - React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d - React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 - React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 - React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 - React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 - React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e - React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 - React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 - React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 - React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e - React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 - React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b - React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 - React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee - React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 - React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 - React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d - React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 - React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e - React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb - React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac - React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 - React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 - React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e - React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 - React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 - React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 - React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a - React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a - React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf - React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add - React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 - React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b - React-RCTPushNotification: 66c869bf2de89b3973b30503603fdeabdacacbd7 - React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a - React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 - React-RCTTest: 4aca44430553e42d4ba9ed4a8b975d0089e5f4f7 - React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 - React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b - React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd - React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 - React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b - React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 - React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e - React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 - React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac - React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 - React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 - React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a - ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 - ReactCodegen: e4992c1c4bd62fb086b33eb315929b77a0f29e26 - ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 - ReactCommon-Samples: 59e79b6b4527aaa1130d658a19e5928235958514 + RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f + RCTDeprecation: b60b889eafa75f46c3d6be5332681efbb16ad0c7 + RCTRequired: fbdcc9ee2826c0a2ed5bd77a8375b3613d087e99 + RCTTypeSafety: e1fa82493c521eba295c7ed0d2de80e3d4f22853 + React: 7cee6da22b893d581d51397032d4a3951c03cb17 + React-callinvoker: 58d4d5a586a1523752a9fa58ef3fc6d0b7fbcbad + React-Core: 1e4b6ae48592bcd0e54e72ea882eee4e904ccbe5 + React-CoreModules: c2db53b5b9c154db460a4635c5ee6e8e90ff50e6 + React-cxxreact: 6dab30f4c4b27464b50cad1921d946ac211f6142 + React-debug: f86bd380de1d8bc8a3ba13eed20f7a7c10290e3a + React-defaultsnativemodule: 6c7423ed8b36c7f4f0a1a464b1fab5d11d5ff905 + React-domnativemodule: 5a0da6e9d18521531291d4f22590fc9c86e37d12 + React-Fabric: a227617faf03288475618fc90d7c08472317d8ce + React-FabricComponents: b3920681e01f7e80a024c58e57b14e593807d263 + React-FabricImage: b8d140d31db7f30b7719ecf888ea8e59c44b1804 + React-featureflags: da925f6ab33a18c7318daab6e520753286697034 + React-featureflagsnativemodule: a56ad30748c8a8941ad79c7bb1ca0acf826be5b0 + React-graphics: 01785de1d679e8e54e075640d40412b6a58ac63d + React-hermes: 0acf46ca1f065f74ec8774bf23e2999462528665 + React-idlecallbacksnativemodule: 3cda164d13500c70c1b282f13eafe7ad9fe3ec6e + React-ImageManager: 353dd041086c46c94653df1151b5a19f38cded6f + React-jserrorhandler: e0d625f1b60e35134938935bf7a7a32adccbcdf8 + React-jsi: 2aeae994239f9b48433ad3d260f0803a2f18aaf1 + React-jsiexecutor: 6c672b4668b111a089097b676b3d57606ccbedf7 + React-jsinspector: eead9fcb09832724bfb1a01950cca87f6bdf4104 + React-jsinspectorcdp: 38bc4fe281a16086ee1d81fe3c0de87f4e672b69 + React-jsinspectornetwork: 7d28801e69cd172402ea64f14f91ce9145b7300d + React-jsinspectortracing: 7ec9050524c88d1d06faa09b653f5d889ec08a99 + React-jsitooling: 0d3ec8d5439332663d85e85682e07614eca2aa35 + React-jsitracing: 62974bd5aae0cf253eead372d38620e029f9a965 + React-logger: 69fc3e530536cc9174f61d56d45f6866fa9d9ade + React-Mapbuffer: c421f4c7c0ec8d8b3154aa0e8a1f4c4eb981ca20 + React-microtasksnativemodule: 4fdbaa32a5196ee3e25fb796d6c355a7cd4d2406 + React-NativeModulesApple: 8394dff5d7fe6612b861b2778e63b1445827442f + React-oscompat: 1b3446acd10cdfd739655206b912db37f5e5a80f + React-perflogger: 8dda747eda29349839d46a6f63cedf8d3256c780 + React-performancetimeline: 139a68fa70e9c314b8bd497dfbabfa9363ca27ef + React-RCTActionSheet: fc83c5b18f638ba92ad22005da9d82fb1ba29ab4 + React-RCTAnimation: 82b6c2334e03f2923d67ed81e4dd95eb225258a8 + React-RCTAppDelegate: 0fea1a3a9c1abd0bd83520f69e1c55395369fac5 + React-RCTBlob: 9ea7cd2994669968719061b1850599d0eb9c1e5f + React-RCTFabric: b602736bc1b6ba83720917bb1a54c328735e62e1 + React-RCTFBReactNativeSpec: c2c664178173ad58ab87a1f9d7383ded89b26ae9 + React-RCTImage: a244358d5b4f68ab3d96b57b32bae209bfc2cf13 + React-RCTLinking: b983a1730d7178aab4781a381093ad44750787b3 + React-RCTNetwork: 4fb5f3deacccf5f8d3f52a8b4155aa54b26e3599 + React-RCTPushNotification: a303379a4defb0c0b6d6e01316f063aa3d7c3691 + React-RCTRuntime: 63f4b9a4ef418cdf7d50da9ae6036cd3c9c6d278 + React-RCTSettings: 7113cc3c69e6fe51b77c285fd4c9280e6af6956b + React-RCTTest: c08828db0ce61b8fa38d7176519101619984c82b + React-RCTText: 7445b365a10c34511bf237a277a0dd755d4ab124 + React-RCTVibration: de90527ef3a4adb757e61819f76f7ef310b806ee + React-rendererconsistency: fb8d9afcedef714822676c17fa47f782eb690ec4 + React-renderercss: e64318d601de402b6478a8b100c055178798ff72 + React-rendererdebug: feee157c454c312ac4c71c53c203efa24ec9d147 + React-RuntimeApple: 44c0d03ce579fe4ea4cd1e0be5fb3221d76e2934 + React-RuntimeCore: 9c52a753d086c5bfc044b0545f3fe85660df425b + React-runtimeexecutor: a5213c03a64ddf38cf0d7480d70bc4eec109972b + React-RuntimeHermes: f990d60a6760b6c6f9a9c98d324ae110a7ab7045 + React-runtimescheduler: 98cce8b8b420b709b65a91c6cb94f43ef81b1f75 + React-timing: 5c80ee90f4c34951af092a6ec5b5d41e9fd8450f + React-utils: a62378b387e24d65338876c1acabc4f8f4c25201 + ReactAppDependencyProvider: f4438c2055222c4d98cdd08d33f24b50c58e46a4 + ReactCodegen: 8d26857bfd4e9c50b5a5cda36900efbb4df08385 + ReactCommon: 59832f9261a5cd478d4f89ab3b8feccafd3aa3dc + ReactCommon-Samples: 869ed29f889243d1b14dde121d287c498a1fc6ac ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0 + Yoga: b9dc6c508cca59caf2f7462189a74359c6c680b6 PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From 537e3ad93041c0cef959f0d20586fe97818900a6 Mon Sep 17 00:00:00 2001 From: Gabriel Donadel Date: Tue, 9 Sep 2025 19:14:11 -0300 Subject: [PATCH 081/312] Revert "Use autolinking react-native-config output in iOS artifacts generator (#53503)" This reverts commit a2eb29e5e7aef8bbdf4c647c8467b5292b013b20. --- .../scripts/cocoapods/autolinking.rb | 6 --- .../scripts/cocoapods/codegen_utils.rb | 2 +- .../generate-artifacts-executor/index.js | 6 +-- .../generate-artifacts-executor/utils.js | 51 ++++--------------- 4 files changed, 12 insertions(+), 53 deletions(-) diff --git a/packages/react-native/scripts/cocoapods/autolinking.rb b/packages/react-native/scripts/cocoapods/autolinking.rb index d8e9c7cec2f..b2e5600bc5d 100644 --- a/packages/react-native/scripts/cocoapods/autolinking.rb +++ b/packages/react-native/scripts/cocoapods/autolinking.rb @@ -40,12 +40,6 @@ def list_native_modules!(config_command) packages = config["dependencies"] ios_project_root = Pathname.new(config["project"]["ios"]["sourceDir"]) react_native_path = Pathname.new(config["reactNativePath"]) - codegen_output_path = ios_project_root.join("build/generated/autolinking/autolinking.json") - - # Write autolinking react-native-config output to codegen folder - FileUtils.mkdir_p(File.dirname(codegen_output_path)) - File.write(codegen_output_path, json) - found_pods = [] packages.each do |package_name, package| diff --git a/packages/react-native/scripts/cocoapods/codegen_utils.rb b/packages/react-native/scripts/cocoapods/codegen_utils.rb index 3c51ad584e1..3ce12e28ebc 100644 --- a/packages/react-native/scripts/cocoapods/codegen_utils.rb +++ b/packages/react-native/scripts/cocoapods/codegen_utils.rb @@ -87,7 +87,7 @@ def self.clean_up_build_folder(rn_path, codegen_dir, dir_manager: Dir, file_mana codegen_path = file_manager.join(ios_folder, codegen_dir) return if !dir_manager.exist?(codegen_path) - FileUtils.rm_rf("#{codegen_path}") + FileUtils.rm_rf(dir_manager.glob("#{codegen_path}/*")) base_provider_path = file_manager.join(rn_path, 'React', 'Fabric', 'RCTThirdPartyFabricComponentsProvider') FileUtils.rm_rf("#{base_provider_path}.h") FileUtils.rm_rf("#{base_provider_path}.mm") diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js index a3c52e39f38..002273410bd 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js @@ -86,14 +86,10 @@ function execute( buildCodegenIfNeeded(); } - const reactNativeConfig = readReactNativeConfig( - projectRoot, - baseOutputPath, - ); + const reactNativeConfig = readReactNativeConfig(projectRoot); const codegenEnabledLibraries = findCodegenEnabledLibraries( pkgJson, projectRoot, - baseOutputPath, reactNativeConfig, ); diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js index f2fa2fc852f..db611c8db17 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js @@ -97,40 +97,15 @@ function cleanupEmptyFilesAndFolders(filepath /*: string */) { } } -function readGeneratedAutolinkingOutput( - baseOutputPath /*: string */, -) /*: $FlowFixMe */ { - // NOTE: Generated by scripts/cocoapods/autolinking.rb in list_native_modules (called by use_native_modules) - const autolinkingGeneratedPath = path.resolve( - baseOutputPath, - 'build/generated/autolinking/autolinking.json', - ); - if (fs.existsSync(autolinkingGeneratedPath)) { - // $FlowFixMe[unsupported-syntax] - return require(autolinkingGeneratedPath); - } else { - codegenLog( - `Could not find generated autolinking output at: ${autolinkingGeneratedPath}`, - ); - return null; - } -} - -function readReactNativeConfig( - projectRoot /*: string */, - baseOutputPath /*: string */, -) /*: $FlowFixMe */ { - const autolinkingOutput = readGeneratedAutolinkingOutput(baseOutputPath); +function readReactNativeConfig(projectRoot /*: string */) /*: $FlowFixMe */ { const rnConfigFilePath = path.resolve(projectRoot, 'react-native.config.js'); - if (autolinkingOutput) { - return autolinkingOutput; - } else if (fs.existsSync(rnConfigFilePath)) { - // $FlowIgnore[unsupported-syntax] - return require(rnConfigFilePath); - } else { - codegenLog(`Could not find React Native config at: ${rnConfigFilePath}`); + + if (!fs.existsSync(rnConfigFilePath)) { return {}; } + + // $FlowIgnore[unsupported-syntax] + return require(rnConfigFilePath); } /** @@ -139,23 +114,17 @@ function readReactNativeConfig( function findCodegenEnabledLibraries( pkgJson /*: $FlowFixMe */, projectRoot /*: string */, - baseOutputPath /*: string */, reactNativeConfig /*: $FlowFixMe */, ) /*: Array<$FlowFixMe> */ { const projectLibraries = findProjectRootLibraries(pkgJson, projectRoot); if (pkgJsonIncludesGeneratedCode(pkgJson)) { return projectLibraries; } else { - const libraries = [...projectLibraries]; - // If we ran autolinking, we shouldn't try to run our own "autolinking-like" - // library discovery - if (!readGeneratedAutolinkingOutput(baseOutputPath)) { - libraries.push(...findExternalLibraries(pkgJson, projectRoot)); - } - libraries.push( + return [ + ...projectLibraries, + ...findExternalLibraries(pkgJson, projectRoot), ...findLibrariesFromReactNativeConfig(projectRoot, reactNativeConfig), - ); - return libraries; + ]; } } From 503f0e9ec9b216e8e00a96e192b893c073c9da61 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Wed, 10 Sep 2025 00:51:28 +0000 Subject: [PATCH 082/312] Release 0.81.3 #publish-packages-to-npm&0.81-stable --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 4 ++-- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 64 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index ec837008837..8379e423cd1 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.2", - "@react-native/metro-config": "0.81.2", + "@react-native/metro-babel-transformer": "0.81.3", + "@react-native/metro-config": "0.81.3", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index e1443431cb3..de912c5621f 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.2", + "version": "0.81.3", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 601a31fb707..16446f3d069 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.2", + "version": "0.81.3", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.2" + "@react-native/codegen": "0.81.3" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 6866f961b4b..c29902a83af 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.2", + "version": "0.81.3", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.2", + "@react-native/dev-middleware": "0.81.3", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index c39c1272c60..5586e825873 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.2", + "version": "0.81.3", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 31beb057336..39b07468a0e 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.2", + "version": "0.81.3", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 8f7bbadde26..863ab40af56 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.2", + "version": "0.81.3", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 66ae3c54c60..c981e18ee68 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.2", + "version": "0.81.3", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.2", + "@react-native/debugger-frontend": "0.81.3", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 42f4fe12f00..9611982d18b 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.2", + "version": "0.81.3", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.2", + "@react-native/eslint-plugin": "0.81.3", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index c56194f5838..7167468b3a7 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.2", + "version": "0.81.3", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 943036e3ae8..3e8f7b3e0eb 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.2", + "version": "0.81.3", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.2", + "@react-native/codegen": "0.81.3", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index c34efd63e18..7cabaf3efc1 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.2", + "version": "0.81.3", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index a90177b9f43..696c5488d76 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.2", + "version": "0.81.3", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.2", - "@react-native/metro-babel-transformer": "0.81.2", + "@react-native/js-polyfills": "0.81.3", + "@react-native/metro-babel-transformer": "0.81.3", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index a4c18a9efd7..e97c772e553 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.2", + "version": "0.81.3", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index c91bd95f33b..6497281e26c 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.2", + "version": "0.81.3", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 79ff2c2f993..caf261f811f 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.2", + "version": "0.81.3", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 8ea994d7aa9..0b0bbb1bd64 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.2", + "version": "0.81.3", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.2", + "@react-native/babel-plugin-codegen": "0.81.3", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index f043cde4a8c..f78d4255975 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.2", + "version": "0.81.3", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.2", + "@react-native/babel-preset": "0.81.3", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index e0ccb56ec8d..daa41f95d37 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.2", + "version": "0.81.3", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 34387ce5a79..4ed54d716e4 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.2", + "version": "0.81.3", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.2" + "@react-native/codegen": "0.81.3" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index bc506ff6871..33c0e58a8b8 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.2", + "version": "0.81.3", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.2" + "@react-native/codegen": "0.81.3" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 876178aef26..49d06d71cc2 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.2", - "react-native": "0.81.2" + "@react-native/babel-preset": "0.81.3", + "react-native": "0.81.3" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index a5a70e7de88..44ef7824cc0 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -17,6 +17,6 @@ export const version: $ReadOnly<{ }> = { major: 0, minor: 81, - patch: 2, + patch: 3, prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 7ac77378511..255f008ea90 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -23,7 +23,7 @@ __rnVersion = @{ RCTVersionMajor: @(0), RCTVersionMinor: @(81), - RCTVersionPatch: @(2), + RCTVersionPatch: @(3), RCTVersionPrerelease: [NSNull null], }; }); diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 422ca566411..d8874b260af 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.2 +VERSION_NAME=0.81.3 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 3fbe72762f3..5f8c57aa3c3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -14,7 +14,7 @@ public object ReactNativeVersion { public val VERSION: Map = mapOf( "major" to 0, "minor" to 81, - "patch" to 2, + "patch" to 3, "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 3a8ca681b01..2468a6ba3d2 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -14,14 +14,14 @@ #define REACT_NATIVE_VERSION_MAJOR 0 #define REACT_NATIVE_VERSION_MINOR 81 -#define REACT_NATIVE_VERSION_PATCH 2 +#define REACT_NATIVE_VERSION_PATCH 3 namespace facebook::react { constexpr struct { int32_t Major = 0; int32_t Minor = 81; - int32_t Patch = 2; + int32_t Patch = 3; std::string_view Prerelease = ""; } ReactNativeVersion; diff --git a/packages/react-native/package.json b/packages/react-native/package.json index c4923de74a6..3d92ca570ea 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.2", + "version": "0.81.3", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.2", - "@react-native/codegen": "0.81.2", - "@react-native/community-cli-plugin": "0.81.2", - "@react-native/gradle-plugin": "0.81.2", - "@react-native/js-polyfills": "0.81.2", - "@react-native/normalize-colors": "0.81.2", - "@react-native/virtualized-lists": "0.81.2", + "@react-native/assets-registry": "0.81.3", + "@react-native/codegen": "0.81.3", + "@react-native/community-cli-plugin": "0.81.3", + "@react-native/gradle-plugin": "0.81.3", + "@react-native/js-polyfills": "0.81.3", + "@react-native/normalize-colors": "0.81.3", + "@react-native/virtualized-lists": "0.81.3", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index dddef0e6656..14ed8b192a8 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.2\\" +version = \\"0.81.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.2\\" +version = \\"0.81.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -840,7 +840,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.2\\" +version = \\"0.81.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -878,7 +878,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.2\\" +version = \\"0.81.3\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index dd1b4dccce0..c6ab2a3cef1 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.2", - "@react-native/popup-menu-android": "0.81.2", + "@react-native/new-app-screen": "0.81.3", + "@react-native/popup-menu-android": "0.81.3", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index f5741f2a35b..0cecd9b6952 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.2", + "version": "0.81.3", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index 9aac43c5dd3..50cd75b8f61 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.2", + "version": "0.81.3", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index 49f50cad47b..f2c76a4e4da 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.2" + "react-native": "0.81.3" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.2", - "@react-native/core-cli-utils": "0.81.2", - "@react-native/eslint-config": "0.81.2", - "@react-native/metro-config": "0.81.2", - "@react-native/typescript-config": "0.81.2", + "@react-native/babel-preset": "0.81.3", + "@react-native/core-cli-utils": "0.81.3", + "@react-native/eslint-config": "0.81.3", + "@react-native/metro-config": "0.81.3", + "@react-native/typescript-config": "0.81.3", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index a2343874cf2..0fb5e0c05fa 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.2" + "@react-native/codegen": "0.81.3" }, "devDependencies": { "@babel/core": "^7.25.2", From 97b23a3462ff521416df3dec4cca970a142c0cf5 Mon Sep 17 00:00:00 2001 From: Gabriel Donadel Date: Tue, 9 Sep 2025 23:54:29 -0300 Subject: [PATCH 083/312] Update Podfile.lock Changelog: [Internal] --- packages/rn-tester/Podfile.lock | 602 ++++++++++++++++---------------- 1 file changed, 301 insertions(+), 301 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index b16bb084478..3a8cd98336e 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.2) + - FBLazyVector (0.81.3) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.2): - - hermes-engine/Pre-built (= 0.81.2) - - hermes-engine/Pre-built (0.81.2) + - hermes-engine (0.81.3): + - hermes-engine/Pre-built (= 0.81.3) + - hermes-engine/Pre-built (0.81.3) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.2) - - RCTRequired (0.81.2) - - RCTTypeSafety (0.81.2): - - FBLazyVector (= 0.81.2) - - RCTRequired (= 0.81.2) - - React-Core (= 0.81.2) - - React (0.81.2): - - React-Core (= 0.81.2) - - React-Core/DevSupport (= 0.81.2) - - React-Core/RCTWebSocket (= 0.81.2) - - React-RCTActionSheet (= 0.81.2) - - React-RCTAnimation (= 0.81.2) - - React-RCTBlob (= 0.81.2) - - React-RCTImage (= 0.81.2) - - React-RCTLinking (= 0.81.2) - - React-RCTNetwork (= 0.81.2) - - React-RCTSettings (= 0.81.2) - - React-RCTText (= 0.81.2) - - React-RCTVibration (= 0.81.2) - - React-callinvoker (0.81.2) - - React-Core (0.81.2): + - RCTDeprecation (0.81.3) + - RCTRequired (0.81.3) + - RCTTypeSafety (0.81.3): + - FBLazyVector (= 0.81.3) + - RCTRequired (= 0.81.3) + - React-Core (= 0.81.3) + - React (0.81.3): + - React-Core (= 0.81.3) + - React-Core/DevSupport (= 0.81.3) + - React-Core/RCTWebSocket (= 0.81.3) + - React-RCTActionSheet (= 0.81.3) + - React-RCTAnimation (= 0.81.3) + - React-RCTBlob (= 0.81.3) + - React-RCTImage (= 0.81.3) + - React-RCTLinking (= 0.81.3) + - React-RCTNetwork (= 0.81.3) + - React-RCTSettings (= 0.81.3) + - React-RCTText (= 0.81.3) + - React-RCTVibration (= 0.81.3) + - React-callinvoker (0.81.3) + - React-Core (0.81.3): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.2) + - React-Core/Default (= 0.81.3) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.2): + - React-Core/CoreModulesHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.2): + - React-Core/Default (0.81.3): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.2): + - React-Core/DevSupport (0.81.3): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.2) - - React-Core/RCTWebSocket (= 0.81.2) + - React-Core/Default (= 0.81.3) + - React-Core/RCTWebSocket (= 0.81.3) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.2): + - React-Core/RCTActionSheetHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.2): + - React-Core/RCTAnimationHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.2): + - React-Core/RCTBlobHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.2): + - React-Core/RCTImageHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.2): + - React-Core/RCTLinkingHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.2): + - React-Core/RCTNetworkHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.2): + - React-Core/RCTPushNotificationHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.2): + - React-Core/RCTSettingsHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.2): + - React-Core/RCTTextHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.2): + - React-Core/RCTVibrationHeaders (0.81.3): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.2): + - React-Core/RCTWebSocket (0.81.3): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.2) + - React-Core/Default (= 0.81.3) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.2): + - React-CoreModules (0.81.3): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.2) - - React-Core/CoreModulesHeaders (= 0.81.2) - - React-jsi (= 0.81.2) + - RCTTypeSafety (= 0.81.3) + - React-Core/CoreModulesHeaders (= 0.81.3) + - React-jsi (= 0.81.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.2) + - React-RCTImage (= 0.81.3) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.2): + - React-cxxreact (0.81.3): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.2) - - React-debug (= 0.81.2) - - React-jsi (= 0.81.2) + - React-callinvoker (= 0.81.3) + - React-debug (= 0.81.3) + - React-jsi (= 0.81.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.2) - - React-perflogger (= 0.81.2) + - React-logger (= 0.81.3) + - React-perflogger (= 0.81.3) - React-runtimeexecutor - - React-timing (= 0.81.2) + - React-timing (= 0.81.3) - SocketRocket - - React-debug (0.81.2) - - React-defaultsnativemodule (0.81.2): + - React-debug (0.81.3) + - React-defaultsnativemodule (0.81.3): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.2): + - React-domnativemodule (0.81.3): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.2): + - React-Fabric (0.81.3): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.2) - - React-Fabric/attributedstring (= 0.81.2) - - React-Fabric/bridging (= 0.81.2) - - React-Fabric/componentregistry (= 0.81.2) - - React-Fabric/componentregistrynative (= 0.81.2) - - React-Fabric/components (= 0.81.2) - - React-Fabric/consistency (= 0.81.2) - - React-Fabric/core (= 0.81.2) - - React-Fabric/dom (= 0.81.2) - - React-Fabric/imagemanager (= 0.81.2) - - React-Fabric/leakchecker (= 0.81.2) - - React-Fabric/mounting (= 0.81.2) - - React-Fabric/observers (= 0.81.2) - - React-Fabric/scheduler (= 0.81.2) - - React-Fabric/telemetry (= 0.81.2) - - React-Fabric/templateprocessor (= 0.81.2) - - React-Fabric/uimanager (= 0.81.2) + - React-Fabric/animations (= 0.81.3) + - React-Fabric/attributedstring (= 0.81.3) + - React-Fabric/bridging (= 0.81.3) + - React-Fabric/componentregistry (= 0.81.3) + - React-Fabric/componentregistrynative (= 0.81.3) + - React-Fabric/components (= 0.81.3) + - React-Fabric/consistency (= 0.81.3) + - React-Fabric/core (= 0.81.3) + - React-Fabric/dom (= 0.81.3) + - React-Fabric/imagemanager (= 0.81.3) + - React-Fabric/leakchecker (= 0.81.3) + - React-Fabric/mounting (= 0.81.3) + - React-Fabric/observers (= 0.81.3) + - React-Fabric/scheduler (= 0.81.3) + - React-Fabric/telemetry (= 0.81.3) + - React-Fabric/templateprocessor (= 0.81.3) + - React-Fabric/uimanager (= 0.81.3) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.2): + - React-Fabric/animations (0.81.3): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.2): + - React-Fabric/attributedstring (0.81.3): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.2): + - React-Fabric/bridging (0.81.3): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.2): + - React-Fabric/componentregistry (0.81.3): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.2): + - React-Fabric/componentregistrynative (0.81.3): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.2): + - React-Fabric/components (0.81.3): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.2) - - React-Fabric/components/root (= 0.81.2) - - React-Fabric/components/scrollview (= 0.81.2) - - React-Fabric/components/view (= 0.81.2) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.3) + - React-Fabric/components/root (= 0.81.3) + - React-Fabric/components/scrollview (= 0.81.3) + - React-Fabric/components/view (= 0.81.3) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.2): + - React-Fabric/components/legacyviewmanagerinterop (0.81.3): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.2): + - React-Fabric/components/root (0.81.3): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.2): + - React-Fabric/components/scrollview (0.81.3): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.2): + - React-Fabric/components/view (0.81.3): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.2): + - React-Fabric/consistency (0.81.3): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.2): + - React-Fabric/core (0.81.3): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.2): + - React-Fabric/dom (0.81.3): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.2): + - React-Fabric/imagemanager (0.81.3): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.2): + - React-Fabric/leakchecker (0.81.3): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.2): + - React-Fabric/mounting (0.81.3): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.2): + - React-Fabric/observers (0.81.3): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.2) + - React-Fabric/observers/events (= 0.81.3) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.2): + - React-Fabric/observers/events (0.81.3): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.2): + - React-Fabric/scheduler (0.81.3): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.2): + - React-Fabric/telemetry (0.81.3): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.2): + - React-Fabric/templateprocessor (0.81.3): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.2): + - React-Fabric/uimanager (0.81.3): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.2) + - React-Fabric/uimanager/consistency (= 0.81.3) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.2): + - React-Fabric/uimanager/consistency (0.81.3): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.2): + - React-FabricComponents (0.81.3): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.2) - - React-FabricComponents/textlayoutmanager (= 0.81.2) + - React-FabricComponents/components (= 0.81.3) + - React-FabricComponents/textlayoutmanager (= 0.81.3) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.2): + - React-FabricComponents/components (0.81.3): - boost - DoubleConversion - fast_float @@ -1259,17 +1259,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.2) - - React-FabricComponents/components/iostextinput (= 0.81.2) - - React-FabricComponents/components/modal (= 0.81.2) - - React-FabricComponents/components/rncore (= 0.81.2) - - React-FabricComponents/components/safeareaview (= 0.81.2) - - React-FabricComponents/components/scrollview (= 0.81.2) - - React-FabricComponents/components/switch (= 0.81.2) - - React-FabricComponents/components/text (= 0.81.2) - - React-FabricComponents/components/textinput (= 0.81.2) - - React-FabricComponents/components/unimplementedview (= 0.81.2) - - React-FabricComponents/components/virtualview (= 0.81.2) + - React-FabricComponents/components/inputaccessory (= 0.81.3) + - React-FabricComponents/components/iostextinput (= 0.81.3) + - React-FabricComponents/components/modal (= 0.81.3) + - React-FabricComponents/components/rncore (= 0.81.3) + - React-FabricComponents/components/safeareaview (= 0.81.3) + - React-FabricComponents/components/scrollview (= 0.81.3) + - React-FabricComponents/components/switch (= 0.81.3) + - React-FabricComponents/components/text (= 0.81.3) + - React-FabricComponents/components/textinput (= 0.81.3) + - React-FabricComponents/components/unimplementedview (= 0.81.3) + - React-FabricComponents/components/virtualview (= 0.81.3) - React-featureflags - React-graphics - React-jsi @@ -1282,7 +1282,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.2): + - React-FabricComponents/components/inputaccessory (0.81.3): - boost - DoubleConversion - fast_float @@ -1309,7 +1309,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.2): + - React-FabricComponents/components/iostextinput (0.81.3): - boost - DoubleConversion - fast_float @@ -1336,7 +1336,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.2): + - React-FabricComponents/components/modal (0.81.3): - boost - DoubleConversion - fast_float @@ -1363,7 +1363,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.2): + - React-FabricComponents/components/rncore (0.81.3): - boost - DoubleConversion - fast_float @@ -1390,7 +1390,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.2): + - React-FabricComponents/components/safeareaview (0.81.3): - boost - DoubleConversion - fast_float @@ -1417,7 +1417,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.2): + - React-FabricComponents/components/scrollview (0.81.3): - boost - DoubleConversion - fast_float @@ -1444,7 +1444,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/switch (0.81.2): + - React-FabricComponents/components/switch (0.81.3): - boost - DoubleConversion - fast_float @@ -1471,7 +1471,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.2): + - React-FabricComponents/components/text (0.81.3): - boost - DoubleConversion - fast_float @@ -1498,7 +1498,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.2): + - React-FabricComponents/components/textinput (0.81.3): - boost - DoubleConversion - fast_float @@ -1525,7 +1525,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.2): + - React-FabricComponents/components/unimplementedview (0.81.3): - boost - DoubleConversion - fast_float @@ -1552,7 +1552,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.2): + - React-FabricComponents/components/virtualview (0.81.3): - boost - DoubleConversion - fast_float @@ -1579,7 +1579,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.2): + - React-FabricComponents/textlayoutmanager (0.81.3): - boost - DoubleConversion - fast_float @@ -1606,7 +1606,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.2): + - React-FabricImage (0.81.3): - boost - DoubleConversion - fast_float @@ -1615,21 +1615,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.2) - - RCTTypeSafety (= 0.81.2) + - RCTRequired (= 0.81.3) + - RCTTypeSafety (= 0.81.3) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.2) + - React-jsiexecutor (= 0.81.3) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.2): + - React-featureflags (0.81.3): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.2): + - React-featureflagsnativemodule (0.81.3): - boost - DoubleConversion - fast_float @@ -1653,7 +1653,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.2): + - React-graphics (0.81.3): - boost - DoubleConversion - fast_float @@ -1666,7 +1666,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.2): + - React-hermes (0.81.3): - boost - DoubleConversion - fast_float @@ -1675,16 +1675,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.2) + - React-cxxreact (= 0.81.3) - React-jsi - - React-jsiexecutor (= 0.81.2) + - React-jsiexecutor (= 0.81.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.2) + - React-perflogger (= 0.81.3) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.2): + - React-idlecallbacksnativemodule (0.81.3): - boost - DoubleConversion - fast_float @@ -1700,7 +1700,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.2): + - React-ImageManager (0.81.3): - boost - DoubleConversion - fast_float @@ -1715,7 +1715,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.2): + - React-jserrorhandler (0.81.3): - boost - DoubleConversion - fast_float @@ -1730,7 +1730,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.2): + - React-jsi (0.81.3): - boost - DoubleConversion - fast_float @@ -1740,7 +1740,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.2): + - React-jsiexecutor (0.81.3): - boost - DoubleConversion - fast_float @@ -1749,15 +1749,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.2) - - React-jsi (= 0.81.2) + - React-cxxreact (= 0.81.3) + - React-jsi (= 0.81.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.2) + - React-perflogger (= 0.81.3) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.2): + - React-jsinspector (0.81.3): - boost - DoubleConversion - fast_float @@ -1772,10 +1772,10 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.2) + - React-perflogger (= 0.81.3) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.2): + - React-jsinspectorcdp (0.81.3): - boost - DoubleConversion - fast_float @@ -1784,7 +1784,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.2): + - React-jsinspectornetwork (0.81.3): - boost - DoubleConversion - fast_float @@ -1797,7 +1797,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.2): + - React-jsinspectortracing (0.81.3): - boost - DoubleConversion - fast_float @@ -1808,7 +1808,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.2): + - React-jsitooling (0.81.3): - boost - DoubleConversion - fast_float @@ -1816,16 +1816,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.2) - - React-jsi (= 0.81.2) + - React-cxxreact (= 0.81.3) + - React-jsi (= 0.81.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.2): + - React-jsitracing (0.81.3): - React-jsi - - React-logger (0.81.2): + - React-logger (0.81.3): - boost - DoubleConversion - fast_float @@ -1834,7 +1834,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.2): + - React-Mapbuffer (0.81.3): - boost - DoubleConversion - fast_float @@ -1844,7 +1844,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.2): + - React-microtasksnativemodule (0.81.3): - boost - DoubleConversion - fast_float @@ -1858,7 +1858,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.2): + - React-NativeModulesApple (0.81.3): - boost - DoubleConversion - fast_float @@ -1878,8 +1878,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.2) - - React-perflogger (0.81.2): + - React-oscompat (0.81.3) + - React-perflogger (0.81.3): - boost - DoubleConversion - fast_float @@ -1888,7 +1888,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.2): + - React-performancetimeline (0.81.3): - boost - DoubleConversion - fast_float @@ -1901,9 +1901,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.2): - - React-Core/RCTActionSheetHeaders (= 0.81.2) - - React-RCTAnimation (0.81.2): + - React-RCTActionSheet (0.81.3): + - React-Core/RCTActionSheetHeaders (= 0.81.3) + - React-RCTAnimation (0.81.3): - boost - DoubleConversion - fast_float @@ -1919,7 +1919,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.2): + - React-RCTAppDelegate (0.81.3): - boost - DoubleConversion - fast_float @@ -1953,7 +1953,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.2): + - React-RCTBlob (0.81.3): - boost - DoubleConversion - fast_float @@ -1972,7 +1972,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.2): + - React-RCTFabric (0.81.3): - boost - DoubleConversion - fast_float @@ -2007,7 +2007,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.2): + - React-RCTFBReactNativeSpec (0.81.3): - boost - DoubleConversion - fast_float @@ -2021,10 +2021,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.2) + - React-RCTFBReactNativeSpec/components (= 0.81.3) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.2): + - React-RCTFBReactNativeSpec/components (0.81.3): - boost - DoubleConversion - fast_float @@ -2047,7 +2047,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.2): + - React-RCTImage (0.81.3): - boost - DoubleConversion - fast_float @@ -2063,14 +2063,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.2): - - React-Core/RCTLinkingHeaders (= 0.81.2) - - React-jsi (= 0.81.2) + - React-RCTLinking (0.81.3): + - React-Core/RCTLinkingHeaders (= 0.81.3) + - React-jsi (= 0.81.3) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.2) - - React-RCTNetwork (0.81.2): + - ReactCommon/turbomodule/core (= 0.81.3) + - React-RCTNetwork (0.81.3): - boost - DoubleConversion - fast_float @@ -2088,14 +2088,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.2): + - React-RCTPushNotification (0.81.3): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.2): + - React-RCTRuntime (0.81.3): - boost - DoubleConversion - fast_float @@ -2115,7 +2115,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.2): + - React-RCTSettings (0.81.3): - boost - DoubleConversion - fast_float @@ -2130,7 +2130,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.2): + - React-RCTTest (0.81.3): - boost - DoubleConversion - fast_float @@ -2138,15 +2138,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.2) - - React-CoreModules (= 0.81.2) - - React-jsi (= 0.81.2) - - ReactCommon/turbomodule/core (= 0.81.2) + - React-Core (= 0.81.3) + - React-CoreModules (= 0.81.3) + - React-jsi (= 0.81.3) + - ReactCommon/turbomodule/core (= 0.81.3) - SocketRocket - - React-RCTText (0.81.2): - - React-Core/RCTTextHeaders (= 0.81.2) + - React-RCTText (0.81.3): + - React-Core/RCTTextHeaders (= 0.81.3) - Yoga - - React-RCTVibration (0.81.2): + - React-RCTVibration (0.81.3): - boost - DoubleConversion - fast_float @@ -2160,11 +2160,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.2) - - React-renderercss (0.81.2): + - React-rendererconsistency (0.81.3) + - React-renderercss (0.81.3): - React-debug - React-utils - - React-rendererdebug (0.81.2): + - React-rendererdebug (0.81.3): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.2): + - React-RuntimeApple (0.81.3): - boost - DoubleConversion - fast_float @@ -2203,7 +2203,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.2): + - React-RuntimeCore (0.81.3): - boost - DoubleConversion - fast_float @@ -2225,7 +2225,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.2): + - React-runtimeexecutor (0.81.3): - boost - DoubleConversion - fast_float @@ -2235,10 +2235,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.2) + - React-jsi (= 0.81.3) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.2): + - React-RuntimeHermes (0.81.3): - boost - DoubleConversion - fast_float @@ -2259,7 +2259,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.2): + - React-runtimescheduler (0.81.3): - boost - DoubleConversion - fast_float @@ -2281,9 +2281,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.2): + - React-timing (0.81.3): - React-debug - - React-utils (0.81.2): + - React-utils (0.81.3): - boost - DoubleConversion - fast_float @@ -2293,11 +2293,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.2) + - React-jsi (= 0.81.3) - SocketRocket - - ReactAppDependencyProvider (0.81.2): + - ReactAppDependencyProvider (0.81.3): - ReactCodegen - - ReactCodegen (0.81.2): + - ReactCodegen (0.81.3): - boost - DoubleConversion - fast_float @@ -2323,7 +2323,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.2): + - ReactCommon (0.81.3): - boost - DoubleConversion - fast_float @@ -2331,9 +2331,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.2) + - ReactCommon/turbomodule (= 0.81.3) - SocketRocket - - ReactCommon-Samples (0.81.2): + - ReactCommon-Samples (0.81.3): - boost - DoubleConversion - fast_float @@ -2349,7 +2349,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.2): + - ReactCommon/turbomodule (0.81.3): - boost - DoubleConversion - fast_float @@ -2358,15 +2358,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.2) - - React-cxxreact (= 0.81.2) - - React-jsi (= 0.81.2) - - React-logger (= 0.81.2) - - React-perflogger (= 0.81.2) - - ReactCommon/turbomodule/bridging (= 0.81.2) - - ReactCommon/turbomodule/core (= 0.81.2) + - React-callinvoker (= 0.81.3) + - React-cxxreact (= 0.81.3) + - React-jsi (= 0.81.3) + - React-logger (= 0.81.3) + - React-perflogger (= 0.81.3) + - ReactCommon/turbomodule/bridging (= 0.81.3) + - ReactCommon/turbomodule/core (= 0.81.3) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.2): + - ReactCommon/turbomodule/bridging (0.81.3): - boost - DoubleConversion - fast_float @@ -2375,13 +2375,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.2) - - React-cxxreact (= 0.81.2) - - React-jsi (= 0.81.2) - - React-logger (= 0.81.2) - - React-perflogger (= 0.81.2) + - React-callinvoker (= 0.81.3) + - React-cxxreact (= 0.81.3) + - React-jsi (= 0.81.3) + - React-logger (= 0.81.3) + - React-perflogger (= 0.81.3) - SocketRocket - - ReactCommon/turbomodule/core (0.81.2): + - ReactCommon/turbomodule/core (0.81.3): - boost - DoubleConversion - fast_float @@ -2390,14 +2390,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.2) - - React-cxxreact (= 0.81.2) - - React-debug (= 0.81.2) - - React-featureflags (= 0.81.2) - - React-jsi (= 0.81.2) - - React-logger (= 0.81.2) - - React-perflogger (= 0.81.2) - - React-utils (= 0.81.2) + - React-callinvoker (= 0.81.3) + - React-cxxreact (= 0.81.3) + - React-debug (= 0.81.3) + - React-featureflags (= 0.81.3) + - React-jsi (= 0.81.3) + - React-logger (= 0.81.3) + - React-perflogger (= 0.81.3) + - React-utils (= 0.81.3) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2681,83 +2681,83 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 89a8574f4a4ea67295ad2e8f84b764e4b1162f64 + FBLazyVector: a80c331df9c6958a9cc391631578602b7973b0c7 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: ceacb56b83367e3c4f7ed5ab0e93f92a89e4575b + hermes-engine: 5463d3c4a8a0d35701605934008f34c171ce71d5 MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f - RCTDeprecation: b60b889eafa75f46c3d6be5332681efbb16ad0c7 - RCTRequired: fbdcc9ee2826c0a2ed5bd77a8375b3613d087e99 - RCTTypeSafety: e1fa82493c521eba295c7ed0d2de80e3d4f22853 - React: 7cee6da22b893d581d51397032d4a3951c03cb17 - React-callinvoker: 58d4d5a586a1523752a9fa58ef3fc6d0b7fbcbad - React-Core: 1e4b6ae48592bcd0e54e72ea882eee4e904ccbe5 - React-CoreModules: c2db53b5b9c154db460a4635c5ee6e8e90ff50e6 - React-cxxreact: 6dab30f4c4b27464b50cad1921d946ac211f6142 - React-debug: f86bd380de1d8bc8a3ba13eed20f7a7c10290e3a - React-defaultsnativemodule: 6c7423ed8b36c7f4f0a1a464b1fab5d11d5ff905 - React-domnativemodule: 5a0da6e9d18521531291d4f22590fc9c86e37d12 - React-Fabric: a227617faf03288475618fc90d7c08472317d8ce - React-FabricComponents: b3920681e01f7e80a024c58e57b14e593807d263 - React-FabricImage: b8d140d31db7f30b7719ecf888ea8e59c44b1804 - React-featureflags: da925f6ab33a18c7318daab6e520753286697034 - React-featureflagsnativemodule: a56ad30748c8a8941ad79c7bb1ca0acf826be5b0 - React-graphics: 01785de1d679e8e54e075640d40412b6a58ac63d - React-hermes: 0acf46ca1f065f74ec8774bf23e2999462528665 - React-idlecallbacksnativemodule: 3cda164d13500c70c1b282f13eafe7ad9fe3ec6e - React-ImageManager: 353dd041086c46c94653df1151b5a19f38cded6f - React-jserrorhandler: e0d625f1b60e35134938935bf7a7a32adccbcdf8 - React-jsi: 2aeae994239f9b48433ad3d260f0803a2f18aaf1 - React-jsiexecutor: 6c672b4668b111a089097b676b3d57606ccbedf7 - React-jsinspector: eead9fcb09832724bfb1a01950cca87f6bdf4104 - React-jsinspectorcdp: 38bc4fe281a16086ee1d81fe3c0de87f4e672b69 - React-jsinspectornetwork: 7d28801e69cd172402ea64f14f91ce9145b7300d - React-jsinspectortracing: 7ec9050524c88d1d06faa09b653f5d889ec08a99 - React-jsitooling: 0d3ec8d5439332663d85e85682e07614eca2aa35 - React-jsitracing: 62974bd5aae0cf253eead372d38620e029f9a965 - React-logger: 69fc3e530536cc9174f61d56d45f6866fa9d9ade - React-Mapbuffer: c421f4c7c0ec8d8b3154aa0e8a1f4c4eb981ca20 - React-microtasksnativemodule: 4fdbaa32a5196ee3e25fb796d6c355a7cd4d2406 - React-NativeModulesApple: 8394dff5d7fe6612b861b2778e63b1445827442f - React-oscompat: 1b3446acd10cdfd739655206b912db37f5e5a80f - React-perflogger: 8dda747eda29349839d46a6f63cedf8d3256c780 - React-performancetimeline: 139a68fa70e9c314b8bd497dfbabfa9363ca27ef - React-RCTActionSheet: fc83c5b18f638ba92ad22005da9d82fb1ba29ab4 - React-RCTAnimation: 82b6c2334e03f2923d67ed81e4dd95eb225258a8 - React-RCTAppDelegate: 0fea1a3a9c1abd0bd83520f69e1c55395369fac5 - React-RCTBlob: 9ea7cd2994669968719061b1850599d0eb9c1e5f - React-RCTFabric: b602736bc1b6ba83720917bb1a54c328735e62e1 - React-RCTFBReactNativeSpec: c2c664178173ad58ab87a1f9d7383ded89b26ae9 - React-RCTImage: a244358d5b4f68ab3d96b57b32bae209bfc2cf13 - React-RCTLinking: b983a1730d7178aab4781a381093ad44750787b3 - React-RCTNetwork: 4fb5f3deacccf5f8d3f52a8b4155aa54b26e3599 - React-RCTPushNotification: a303379a4defb0c0b6d6e01316f063aa3d7c3691 - React-RCTRuntime: 63f4b9a4ef418cdf7d50da9ae6036cd3c9c6d278 - React-RCTSettings: 7113cc3c69e6fe51b77c285fd4c9280e6af6956b - React-RCTTest: c08828db0ce61b8fa38d7176519101619984c82b - React-RCTText: 7445b365a10c34511bf237a277a0dd755d4ab124 - React-RCTVibration: de90527ef3a4adb757e61819f76f7ef310b806ee - React-rendererconsistency: fb8d9afcedef714822676c17fa47f782eb690ec4 - React-renderercss: e64318d601de402b6478a8b100c055178798ff72 - React-rendererdebug: feee157c454c312ac4c71c53c203efa24ec9d147 - React-RuntimeApple: 44c0d03ce579fe4ea4cd1e0be5fb3221d76e2934 - React-RuntimeCore: 9c52a753d086c5bfc044b0545f3fe85660df425b - React-runtimeexecutor: a5213c03a64ddf38cf0d7480d70bc4eec109972b - React-RuntimeHermes: f990d60a6760b6c6f9a9c98d324ae110a7ab7045 - React-runtimescheduler: 98cce8b8b420b709b65a91c6cb94f43ef81b1f75 - React-timing: 5c80ee90f4c34951af092a6ec5b5d41e9fd8450f - React-utils: a62378b387e24d65338876c1acabc4f8f4c25201 - ReactAppDependencyProvider: f4438c2055222c4d98cdd08d33f24b50c58e46a4 - ReactCodegen: 8d26857bfd4e9c50b5a5cda36900efbb4df08385 - ReactCommon: 59832f9261a5cd478d4f89ab3b8feccafd3aa3dc - ReactCommon-Samples: 869ed29f889243d1b14dde121d287c498a1fc6ac + RCTDeprecation: 78aa7764dbddbc2c87060d26a3ab19fb65dad4ce + RCTRequired: df28d0769df9b6ace47200ac80095f9dffba555d + RCTTypeSafety: ffa3fa28228934f05db6d9d31dc746542fc447e0 + React: 639d04fed84b2ff824861d863891eaef7cb92f9c + React-callinvoker: adedd891222fbe90849c0bdc8873b9b94f061a03 + React-Core: f98fdc6842c39b0f4d715c566fb6c330acd855ee + React-CoreModules: ca243a99705e9c5945a87500b525e8cb60384e0e + React-cxxreact: 3260344329710e38751a6426881dfa0972c62634 + React-debug: e7fa634481419ac0b821224af2113001a997b5f3 + React-defaultsnativemodule: 99df714e7ccdec2e47da11a8724250d52ff76496 + React-domnativemodule: bb0893b370395ae13ae3a6b96b1e2579d3cdeee9 + React-Fabric: c702556ed4692539b5419b6aa540d528e69cb19b + React-FabricComponents: b72f2dbe2b7ef60f6a157547e32aa07e7dab8627 + React-FabricImage: e277341ec76a77ea43d3ad2308b8ba0010d7076c + React-featureflags: aea1abd1fcb0f836375458efe16774b0ff96bf35 + React-featureflagsnativemodule: 72dd77359dcd9cb5959314f257443bfe1935c414 + React-graphics: 4242e5ff49737ede2c920bc8d5c0d61b97a2b001 + React-hermes: 9083f0ec5dd2fe38f00a70de2c69adec2b75eda6 + React-idlecallbacksnativemodule: a392435d2940ba3a040dc8ba67c7f1dd69495e1b + React-ImageManager: 74bd5cbbed6b4aff9f0a9b587b5131db2364900f + React-jserrorhandler: 392521673af0cf20e81927948dcbb67293dbfc07 + React-jsi: 9d2b263d419798560ec4b1a3fba8b4c76e0ef9a9 + React-jsiexecutor: 19f8f7951f15d99547d429b575688169fbb82fd7 + React-jsinspector: 97adc2efd843405992001f3a9608b210ae498d62 + React-jsinspectorcdp: 78f82904331c3f250d01774c341be202e7bca5d3 + React-jsinspectornetwork: 31673100437a0c910ca111c5128a613cf1e81bc4 + React-jsinspectortracing: 729858bd46638450a222ac892f9b8fde269c30c0 + React-jsitooling: dcd741b804bfd5a9e22ac1dc8fd5a085cc1ebad7 + React-jsitracing: c0ef2a171e9bd57829436c7114dad19b389cbaa6 + React-logger: 881f94d5ca5c50b64679fd5692330c192ae6e79c + React-Mapbuffer: d9fa53795351c53186f0c4d893afc9de629a7c45 + React-microtasksnativemodule: 4fbac4bcda4a57be275a9fa48cf03cc83da3163b + React-NativeModulesApple: 2c8e9f3d5d34122f853984ebc413a7d80dfa972c + React-oscompat: 16640399a646baeac6baab4264891cc4892eeb56 + React-perflogger: e450a9c345e833ec1c3fe5920c7bc303ecb4724b + React-performancetimeline: 73100eafb985145ea5b74a06968afa3a0cd53e23 + React-RCTActionSheet: 4c4adabfd8bc747cf39ed7f3e8691eb060a59ba3 + React-RCTAnimation: 4f3179965896dabe358a9aa7db142b10cb2db372 + React-RCTAppDelegate: 4cc275baf148f63b9d3ce0dec7df850fcacbc10e + React-RCTBlob: 03bf79cf438ed6bdc77255937d0bf29421a92590 + React-RCTFabric: 138e26a55aec0275aa26ab1fbc85260d8b443377 + React-RCTFBReactNativeSpec: 06e80d5d338477d233d43a80ac1451d07e61e5ea + React-RCTImage: 50e0b7de4c4858fdb484a1da1f971f6770bc2b31 + React-RCTLinking: ee7f37c879dd5cd29792b895fd9416f3cbb9b20b + React-RCTNetwork: 90292d96da937c93bdbf111a26ceb2099d99b926 + React-RCTPushNotification: d9fb659768bb641aa73539526e07210c57330458 + React-RCTRuntime: ac909d01c6c8a6bdc04cafc05e98e287af63cfed + React-RCTSettings: 84f1bbb3c9aa08d8e4d8f8ed59bf95d1b5e59579 + React-RCTTest: 4bc3a75f2845d78cecbc46e06c3e62e00eeea7ad + React-RCTText: 6c5ea9deff145e3065c10416b9e5dbc8ec614240 + React-RCTVibration: 33c3fd6e232cf89b3f4db7ea21f36ccc483179be + React-rendererconsistency: 234fcdca03f9380acd8f85bb11c4bcbd6901b3cb + React-renderercss: 04e37f7f83d402fb82c3f4b9c05941e03b5858cb + React-rendererdebug: 742a14850632fb7a8d118dc7a0f55ca0b04d018b + React-RuntimeApple: 7d08d9e503a87de79819ddc938a12722cbedbe91 + React-RuntimeCore: 721d435b57bec6a93d47d8de81cf460385b129b7 + React-runtimeexecutor: 6656b16e8afd3d5e4bfa446e760dfdcc0c198065 + React-RuntimeHermes: 05ccd43b8cac45fcc8be11c061855d38046a5485 + React-runtimescheduler: e82731c391b044bcc970cbe14f92bdeda81f4b25 + React-timing: f006091c1b28c2e27851c631e3e255f59639ca31 + React-utils: bc9c836b6e6ed848fcf7413de41fa05504004be4 + ReactAppDependencyProvider: ff33e383768c8bfb96cadd58174d7cb196c5c7f1 + ReactCodegen: e07d2f75d008fcf471f165fee0bfbe815d4c12a7 + ReactCommon: 5eb75122c48f80ca9a4582bd1bb4a27ad459b99d + ReactCommon-Samples: acabe5a6818c94a02e3db59e7f82af1c8613c2a4 ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: b9dc6c508cca59caf2f7462189a74359c6c680b6 + Yoga: 6b30b3f0beeeacf5a3fe68af23442196b196959a PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 From bb73315a3fd8cd203c4ddb3ffa10bfec307c7e92 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Wed, 3 Sep 2025 05:34:11 -0700 Subject: [PATCH 084/312] Use autolinking react-native-config output in iOS artifacts generator (#53503) Summary: Resolves https://github.com/facebook/react-native/issues/53501 This is a pretty major oversight of (presumably) the old autolinking refactor. The iOS autolinking's second stage, invoked in `use_react_native!` does not accept the `react-native-config` sub-command's `react-native-config` output. This is only invoked and used in the prior step, `use_native_modules`. The second step instead invokes old code that does something _similar_ to the new autolinking in `scripts/generate-artifacts-executor`, and happens to align in most cases. (But it does "autolinking" from scratch). tl;dr: When the results don't match up, things go wrong. Instead, we now write the autolinking (react native config) results to a file, then read the output back in the second step. This doesn't affect Android/Gradle, which are implemented correctly. [IOS] [FIXED] - Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source Pull Request resolved: https://github.com/facebook/react-native/pull/53503 Test Plan: - See https://github.com/facebook/react-native/issues/53501 for failing repro - Clone for working repro: https://github.com/byCedric/react-native-codegen-ios-autolinking/tree/fix-54503 - Note: Contains this PR's changes as a patch - `bun install` - `bun expo run:ios` Reviewed By: cortinico Differential Revision: D81490755 Pulled By: cipolleschi fbshipit-source-id: eefe786a116404f4ed24bd7125dfb108a811f71e --- .../scripts/cocoapods/autolinking.rb | 6 +++ .../scripts/cocoapods/codegen_utils.rb | 2 +- .../generate-artifacts-executor/index.js | 6 ++- .../generate-artifacts-executor/utils.js | 51 +++++++++++++++---- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/packages/react-native/scripts/cocoapods/autolinking.rb b/packages/react-native/scripts/cocoapods/autolinking.rb index b2e5600bc5d..d8e9c7cec2f 100644 --- a/packages/react-native/scripts/cocoapods/autolinking.rb +++ b/packages/react-native/scripts/cocoapods/autolinking.rb @@ -40,6 +40,12 @@ def list_native_modules!(config_command) packages = config["dependencies"] ios_project_root = Pathname.new(config["project"]["ios"]["sourceDir"]) react_native_path = Pathname.new(config["reactNativePath"]) + codegen_output_path = ios_project_root.join("build/generated/autolinking/autolinking.json") + + # Write autolinking react-native-config output to codegen folder + FileUtils.mkdir_p(File.dirname(codegen_output_path)) + File.write(codegen_output_path, json) + found_pods = [] packages.each do |package_name, package| diff --git a/packages/react-native/scripts/cocoapods/codegen_utils.rb b/packages/react-native/scripts/cocoapods/codegen_utils.rb index 3ce12e28ebc..3c51ad584e1 100644 --- a/packages/react-native/scripts/cocoapods/codegen_utils.rb +++ b/packages/react-native/scripts/cocoapods/codegen_utils.rb @@ -87,7 +87,7 @@ def self.clean_up_build_folder(rn_path, codegen_dir, dir_manager: Dir, file_mana codegen_path = file_manager.join(ios_folder, codegen_dir) return if !dir_manager.exist?(codegen_path) - FileUtils.rm_rf(dir_manager.glob("#{codegen_path}/*")) + FileUtils.rm_rf("#{codegen_path}") base_provider_path = file_manager.join(rn_path, 'React', 'Fabric', 'RCTThirdPartyFabricComponentsProvider') FileUtils.rm_rf("#{base_provider_path}.h") FileUtils.rm_rf("#{base_provider_path}.mm") diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js index 002273410bd..a3c52e39f38 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js @@ -86,10 +86,14 @@ function execute( buildCodegenIfNeeded(); } - const reactNativeConfig = readReactNativeConfig(projectRoot); + const reactNativeConfig = readReactNativeConfig( + projectRoot, + baseOutputPath, + ); const codegenEnabledLibraries = findCodegenEnabledLibraries( pkgJson, projectRoot, + baseOutputPath, reactNativeConfig, ); diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js index db611c8db17..f2fa2fc852f 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js @@ -97,15 +97,40 @@ function cleanupEmptyFilesAndFolders(filepath /*: string */) { } } -function readReactNativeConfig(projectRoot /*: string */) /*: $FlowFixMe */ { - const rnConfigFilePath = path.resolve(projectRoot, 'react-native.config.js'); +function readGeneratedAutolinkingOutput( + baseOutputPath /*: string */, +) /*: $FlowFixMe */ { + // NOTE: Generated by scripts/cocoapods/autolinking.rb in list_native_modules (called by use_native_modules) + const autolinkingGeneratedPath = path.resolve( + baseOutputPath, + 'build/generated/autolinking/autolinking.json', + ); + if (fs.existsSync(autolinkingGeneratedPath)) { + // $FlowFixMe[unsupported-syntax] + return require(autolinkingGeneratedPath); + } else { + codegenLog( + `Could not find generated autolinking output at: ${autolinkingGeneratedPath}`, + ); + return null; + } +} - if (!fs.existsSync(rnConfigFilePath)) { +function readReactNativeConfig( + projectRoot /*: string */, + baseOutputPath /*: string */, +) /*: $FlowFixMe */ { + const autolinkingOutput = readGeneratedAutolinkingOutput(baseOutputPath); + const rnConfigFilePath = path.resolve(projectRoot, 'react-native.config.js'); + if (autolinkingOutput) { + return autolinkingOutput; + } else if (fs.existsSync(rnConfigFilePath)) { + // $FlowIgnore[unsupported-syntax] + return require(rnConfigFilePath); + } else { + codegenLog(`Could not find React Native config at: ${rnConfigFilePath}`); return {}; } - - // $FlowIgnore[unsupported-syntax] - return require(rnConfigFilePath); } /** @@ -114,17 +139,23 @@ function readReactNativeConfig(projectRoot /*: string */) /*: $FlowFixMe */ { function findCodegenEnabledLibraries( pkgJson /*: $FlowFixMe */, projectRoot /*: string */, + baseOutputPath /*: string */, reactNativeConfig /*: $FlowFixMe */, ) /*: Array<$FlowFixMe> */ { const projectLibraries = findProjectRootLibraries(pkgJson, projectRoot); if (pkgJsonIncludesGeneratedCode(pkgJson)) { return projectLibraries; } else { - return [ - ...projectLibraries, - ...findExternalLibraries(pkgJson, projectRoot), + const libraries = [...projectLibraries]; + // If we ran autolinking, we shouldn't try to run our own "autolinking-like" + // library discovery + if (!readGeneratedAutolinkingOutput(baseOutputPath)) { + libraries.push(...findExternalLibraries(pkgJson, projectRoot)); + } + libraries.push( ...findLibrariesFromReactNativeConfig(projectRoot, reactNativeConfig), - ]; + ); + return libraries; } } From c3149f22a0ca9cb445518a393a301ffa85c669df Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Wed, 10 Sep 2025 05:24:28 -0700 Subject: [PATCH 085/312] Remove outdated artifacts codegen early return (#53690) Summary: Follow-up to https://github.com/facebook/react-native/issues/53503 for a regression When no React Native module is present this bail condition stops us from generating the artifacts podspec that's needed to complete build. ## Changelog: [IOS] [FIXED] - Fix regression that skips artifacts code generation Pull Request resolved: https://github.com/facebook/react-native/pull/53690 Test Plan: - Create an app **without** any React Native modules, run `pod install`; without this fix the podspec will be missing and the build will fail - With expo this can be reproduced using `create-expo-app --template blank-typescript@next` on `react-native@0.81.2` - With the community CLI this can be reproduced using `npx react-native-community/cli@latest init test --skip-install --version 0.81.2` and uninstalling `react-native-safe-area-context` Reviewed By: javache Differential Revision: D82103491 Pulled By: cipolleschi fbshipit-source-id: 3d9619b5a935ca920220824b3963a9a107f926ca --- .../scripts/codegen/generate-artifacts-executor/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js index a3c52e39f38..c64c256a459 100644 --- a/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js +++ b/packages/react-native/scripts/codegen/generate-artifacts-executor/index.js @@ -99,7 +99,6 @@ function execute( if (codegenEnabledLibraries.length === 0) { codegenLog('No codegen-enabled libraries found.', true); - return; } let platforms = @@ -114,10 +113,6 @@ function execute( ({name}) => !disabledLibraries.includes(name), ); - if (!libraries.length) { - continue; - } - const outputPath = computeOutputPath( projectRoot, baseOutputPath, From 5cb9187034ac9dc47476cb1680965aacf0312494 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Wed, 10 Sep 2025 13:51:32 +0000 Subject: [PATCH 086/312] Release 0.81.4 #publish-packages-to-npm&0.81-stable --- package.json | 4 ++-- packages/assets/package.json | 2 +- packages/babel-plugin-codegen/package.json | 4 ++-- packages/community-cli-plugin/package.json | 4 ++-- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/debugger-shell/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- packages/eslint-config-react-native/package.json | 4 ++-- packages/eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/metro-config/package.json | 6 +++--- packages/new-app-screen/package.json | 2 +- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- packages/react-native-babel-preset/package.json | 4 ++-- .../react-native-babel-transformer/package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- .../package.json | 4 ++-- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 4 ++-- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.kt | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 4 ++-- packages/react-native/package.json | 16 ++++++++-------- .../generate-artifacts-executor-test.js.snap | 8 ++++---- packages/rn-tester/package.json | 4 ++-- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- private/helloworld/package.json | 12 ++++++------ .../package.json | 2 +- 34 files changed, 64 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 8379e423cd1..1916f9d02ff 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@electron/packager": "^18.3.6", "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", - "@react-native/metro-babel-transformer": "0.81.3", - "@react-native/metro-config": "0.81.3", + "@react-native/metro-babel-transformer": "0.81.4", + "@react-native/metro-config": "0.81.4", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index de912c5621f..3f5cb83bd19 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.81.3", + "version": "0.81.4", "description": "Asset support code for React Native.", "license": "MIT", "repository": { diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 16446f3d069..10c9c131d6b 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.81.3", + "version": "0.81.4", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.3" + "@react-native/codegen": "0.81.4" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index c29902a83af..79cc3e04ff4 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.81.3", + "version": "0.81.4", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,7 +22,7 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.81.3", + "@react-native/dev-middleware": "0.81.4", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 5586e825873..17396b103e2 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/core-cli-utils", - "version": "0.81.3", + "version": "0.81.4", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", "main": "./src/index.flow.js", diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 39b07468a0e..075550a6b09 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.81.3", + "version": "0.81.4", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/debugger-shell/package.json b/packages/debugger-shell/package.json index 863ab40af56..9a70b1cb298 100644 --- a/packages/debugger-shell/package.json +++ b/packages/debugger-shell/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-shell", - "version": "0.81.3", + "version": "0.81.4", "description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index c981e18ee68..f9cc2260ab3 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.81.3", + "version": "0.81.4", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,7 +23,7 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.3", + "@react-native/debugger-frontend": "0.81.4", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 9611982d18b..86eba38e857 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.81.3", + "version": "0.81.4", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.3", + "@react-native/eslint-plugin": "0.81.4", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 7167468b3a7..ba8930e3ee2 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.81.3", + "version": "0.81.4", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 3e8f7b3e0eb..6b85964fbe5 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.81.3", + "version": "0.81.4", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@react-native/codegen": "0.81.3", + "@react-native/codegen": "0.81.4", "make-dir": "^2.1.0", "pirates": "^4.0.1", "source-map-support": "0.5.0" diff --git a/packages/gradle-plugin/package.json b/packages/gradle-plugin/package.json index 7cabaf3efc1..1e59de2c8a3 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.81.3", + "version": "0.81.4", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 696c5488d76..6fa770cb1a0 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.81.3", + "version": "0.81.4", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.81.3", - "@react-native/metro-babel-transformer": "0.81.3", + "@react-native/js-polyfills": "0.81.4", + "@react-native/metro-babel-transformer": "0.81.4", "metro-config": "^0.83.1", "metro-runtime": "^0.83.1" } diff --git a/packages/new-app-screen/package.json b/packages/new-app-screen/package.json index e97c772e553..fa59d004ab4 100644 --- a/packages/new-app-screen/package.json +++ b/packages/new-app-screen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/new-app-screen", - "version": "0.81.3", + "version": "0.81.4", "description": "NewAppScreen component for React Native", "keywords": [ "react-native" diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 6497281e26c..9c03691a494 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.81.3", + "version": "0.81.4", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index caf261f811f..5f0093f10d9 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.81.3", + "version": "0.81.4", "description": "Polyfills for React Native.", "license": "MIT", "repository": { diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 0b0bbb1bd64..dc6957fbe7a 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.81.3", + "version": "0.81.4", "description": "Babel preset for React Native applications", "repository": { "type": "git", @@ -66,7 +66,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.3", + "@react-native/babel-plugin-codegen": "0.81.4", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index f78d4255975..92290bd89e1 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.81.3", + "version": "0.81.4", "description": "Babel transformer for React Native applications.", "repository": { "type": "git", @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.3", + "@react-native/babel-preset": "0.81.4", "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index daa41f95d37..3b18e02d94e 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.81.3", + "version": "0.81.4", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-compatibility-check/package.json b/packages/react-native-compatibility-check/package.json index 4ed54d716e4..800141036f5 100644 --- a/packages/react-native-compatibility-check/package.json +++ b/packages/react-native-compatibility-check/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/compatibility-check", - "version": "0.81.3", + "version": "0.81.4", "description": "Check a React Native app's boundary between JS and Native for incompatibilities", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "dist" ], "dependencies": { - "@react-native/codegen": "0.81.3" + "@react-native/codegen": "0.81.4" }, "devDependencies": { "flow-remove-types": "^2.237.2", diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 33c0e58a8b8..a5653838455 100644 --- a/packages/react-native-popup-menu-android/package.json +++ b/packages/react-native-popup-menu-android/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/popup-menu-android", - "version": "0.81.3", + "version": "0.81.4", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -21,7 +21,7 @@ }, "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.81.3" + "@react-native/codegen": "0.81.4" }, "peerDependencies": { "@types/react": "^19.1.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 49d06d71cc2..5f7b7168890 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.3", - "react-native": "0.81.3" + "@react-native/babel-preset": "0.81.4", + "react-native": "0.81.4" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 44ef7824cc0..e06cc24c94e 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -17,6 +17,6 @@ export const version: $ReadOnly<{ }> = { major: 0, minor: 81, - patch: 3, + patch: 4, prerelease: null, }; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 255f008ea90..5265b86b2fe 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -23,7 +23,7 @@ __rnVersion = @{ RCTVersionMajor: @(0), RCTVersionMinor: @(81), - RCTVersionPatch: @(3), + RCTVersionPatch: @(4), RCTVersionPrerelease: [NSNull null], }; }); diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index d8874b260af..a5741f3e4d7 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.3 +VERSION_NAME=0.81.4 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt index 5f8c57aa3c3..3348a5fa913 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt @@ -14,7 +14,7 @@ public object ReactNativeVersion { public val VERSION: Map = mapOf( "major" to 0, "minor" to 81, - "patch" to 3, + "patch" to 4, "prerelease" to null ) } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 2468a6ba3d2..1f2c801b003 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -14,14 +14,14 @@ #define REACT_NATIVE_VERSION_MAJOR 0 #define REACT_NATIVE_VERSION_MINOR 81 -#define REACT_NATIVE_VERSION_PATCH 3 +#define REACT_NATIVE_VERSION_PATCH 4 namespace facebook::react { constexpr struct { int32_t Major = 0; int32_t Minor = 81; - int32_t Patch = 3; + int32_t Patch = 4; std::string_view Prerelease = ""; } ReactNativeVersion; diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 3d92ca570ea..6b6b0ba2be7 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.81.3", + "version": "0.81.4", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -162,13 +162,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.3", - "@react-native/codegen": "0.81.3", - "@react-native/community-cli-plugin": "0.81.3", - "@react-native/gradle-plugin": "0.81.3", - "@react-native/js-polyfills": "0.81.3", - "@react-native/normalize-colors": "0.81.3", - "@react-native/virtualized-lists": "0.81.3", + "@react-native/assets-registry": "0.81.4", + "@react-native/codegen": "0.81.4", + "@react-native/community-cli-plugin": "0.81.4", + "@react-native/gradle-plugin": "0.81.4", + "@react-native/js-polyfills": "0.81.4", + "@react-native/normalize-colors": "0.81.4", + "@react-native/virtualized-lists": "0.81.4", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap index 14ed8b192a8..5b648740a60 100644 --- a/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap +++ b/packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap @@ -361,7 +361,7 @@ exports[`execute test-app "ReactAppDependencyProvider.podspec" should match snap # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.3\\" +version = \\"0.81.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -399,7 +399,7 @@ exports[`execute test-app "ReactCodegen.podspec" should match snapshot 1`] = ` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.3\\" +version = \\"0.81.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -840,7 +840,7 @@ exports[`execute test-app-legacy "ReactAppDependencyProvider.podspec" should mat # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.3\\" +version = \\"0.81.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. @@ -878,7 +878,7 @@ exports[`execute test-app-legacy "ReactCodegen.podspec" should match snapshot 1` # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -version = \\"0.81.3\\" +version = \\"0.81.4\\" source = { :git => 'https://github.com/facebook/react-native.git' } if version == '1000.0.0' # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index c6ab2a3cef1..d4f5e7208a5 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -27,8 +27,8 @@ }, "dependencies": { "@react-native/oss-library-example": "0.81.0-main", - "@react-native/new-app-screen": "0.81.3", - "@react-native/popup-menu-android": "0.81.3", + "@react-native/new-app-screen": "0.81.4", + "@react-native/popup-menu-android": "0.81.4", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 0cecd9b6952..a14ba762d46 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.81.3", + "version": "0.81.4", "description": "Default TypeScript configuration for React Native apps", "license": "MIT", "repository": { diff --git a/packages/virtualized-lists/package.json b/packages/virtualized-lists/package.json index 50cd75b8f61..62290aba187 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.81.3", + "version": "0.81.4", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { diff --git a/private/helloworld/package.json b/private/helloworld/package.json index f2c76a4e4da..859e1e601e8 100644 --- a/private/helloworld/package.json +++ b/private/helloworld/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "react": "19.1.0", - "react-native": "0.81.3" + "react-native": "0.81.4" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.81.3", - "@react-native/core-cli-utils": "0.81.3", - "@react-native/eslint-config": "0.81.3", - "@react-native/metro-config": "0.81.3", - "@react-native/typescript-config": "0.81.3", + "@react-native/babel-preset": "0.81.4", + "@react-native/core-cli-utils": "0.81.4", + "@react-native/eslint-config": "0.81.4", + "@react-native/metro-config": "0.81.4", + "@react-native/typescript-config": "0.81.4", "@types/jest": "^29.5.14", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/private/react-native-codegen-typescript-test/package.json b/private/react-native-codegen-typescript-test/package.json index 0fb5e0c05fa..328dab78f15 100644 --- a/private/react-native-codegen-typescript-test/package.json +++ b/private/react-native-codegen-typescript-test/package.json @@ -13,7 +13,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.81.3" + "@react-native/codegen": "0.81.4" }, "devDependencies": { "@babel/core": "^7.25.2", From 68ca69a7e759af51ee9e2a5bbcb10ade3383243f Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 22 Apr 2019 18:11:59 -0700 Subject: [PATCH 087/312] Avoid memory leak in RCTWebSocketModule --- packages/react-native/React/Base/RCTDisplayLink.m | 3 ++- packages/react-native/React/CoreModules/RCTWebSocketModule.mm | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/react-native/React/Base/RCTDisplayLink.m b/packages/react-native/React/Base/RCTDisplayLink.m index de7c8700f3e..a33799d9f9c 100644 --- a/packages/react-native/React/Base/RCTDisplayLink.m +++ b/packages/react-native/React/Base/RCTDisplayLink.m @@ -19,7 +19,8 @@ #define RCTAssertRunLoop() \ RCTAssert(_runLoop == [NSRunLoop currentRunLoop], @"This method must be called on the CADisplayLink run loop") -@implementation RCTDisplayLink { +@implementation RCTDisplayLink +{ CADisplayLink *_jsDisplayLink; NSMutableSet> *_frameUpdateObservers; NSRunLoop *_runLoop; diff --git a/packages/react-native/React/CoreModules/RCTWebSocketModule.mm b/packages/react-native/React/CoreModules/RCTWebSocketModule.mm index 3fd7238911f..8c1990e66ea 100644 --- a/packages/react-native/React/CoreModules/RCTWebSocketModule.mm +++ b/packages/react-native/React/CoreModules/RCTWebSocketModule.mm @@ -167,7 +167,6 @@ - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error { NSNumber *socketID = [webSocket reactTag]; _contentHandlers[socketID] = nil; - _sockets[socketID] = nil; NSDictionary *body = @{@"message" : error.localizedDescription ?: @"Undefined, error is nil", @"id" : socketID ?: @(-1)}; [self sendEventWithName:@"websocketFailed" body:body]; @@ -180,7 +179,6 @@ - (void)webSocket:(SRWebSocket *)webSocket { NSNumber *socketID = [webSocket reactTag]; _contentHandlers[socketID] = nil; - _sockets[socketID] = nil; [self sendEventWithName:@"websocketClosed" body:@{ @"code" : @(code), From b95d166724098218535e9545851e3c4ca676c737 Mon Sep 17 00:00:00 2001 From: mrkcsc Date: Sun, 12 Dec 2021 02:20:51 -0800 Subject: [PATCH 088/312] [Discord] Update boost podspec to expose PodToBuild friendly artifact. --- packages/react-native/third-party-podspecs/boost.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/third-party-podspecs/boost.podspec b/packages/react-native/third-party-podspecs/boost.podspec index e30a2305df8..0c7a0c0650b 100644 --- a/packages/react-native/third-party-podspecs/boost.podspec +++ b/packages/react-native/third-party-podspecs/boost.podspec @@ -13,8 +13,8 @@ Pod::Spec.new do |spec| spec.homepage = 'http://www.boost.org' spec.summary = 'Boost provides free peer-reviewed portable C++ source libraries.' spec.authors = 'Rene Rivera' - spec.source = { :git => boost_git_url, - :tag => "v1.84.0" } + spec.source = { :http => 'https://archives.boost.io/release/1.84.0/source/boost_1_84_0.tar.gz', + :sha256 => 'a5800f405508f5df8114558ca9855d2640a2de8f0445f051fa1c7c3383045724' } # Pinning to the same version as React.podspec. spec.platforms = min_supported_versions From a4102a292a7881eedb1cd0da5b76530e7a231846 Mon Sep 17 00:00:00 2001 From: Denbeigh Stevens Date: Thu, 27 Jan 2022 12:18:40 -0800 Subject: [PATCH 089/312] [Discord] Version bumping script --- discord/bump_version.py | 66 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 discord/bump_version.py diff --git a/discord/bump_version.py b/discord/bump_version.py new file mode 100755 index 00000000000..fb41c7bc277 --- /dev/null +++ b/discord/bump_version.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +from pathlib import Path +from typing import List +import re +import subprocess +import sys + + +def check_output(args: List[str]) -> str: + return subprocess.check_output(args).decode('utf-8').strip() + + +VERSION_MATCHER = re.compile(r'^(.*)-discord-(\d*)$') + +status = check_output(['git', 'status', '--porcelain']) +if status != '': + print('Detected changed files, please remove or commit them first.\n') + print(status) + sys.exit(1) + + +root = check_output(['git', 'rev-parse', '--show-toplevel']) +android_path = Path(root) / "ReactAndroid" +props_path = android_path / "gradle.properties" + +version = None +property_lines = [line.strip() for line in props_path.read_text().splitlines()] +for line in property_lines: + if line.startswith("VERSION_NAME="): + version = line.split('=')[1] + +assert version, "unable to find current version" + +matches = VERSION_MATCHER.match(version) +assert matches, f'{version} did not match expected format, X.Y.Z-discord-N' + +upstream = matches[1] +local = int(matches[2]) + +new_version = f'{upstream}-discord-{local + 1}' + +with open(props_path, 'w') as f: + for line in property_lines: + if line.startswith("VERSION_NAME="): + f.write(f'VERSION_NAME={new_version}\n') + else: + f.write(f'{line}\n') + + +branch_name = check_output(['git', 'symbolic-ref', '--short', 'HEAD']) + +subprocess.check_call( + ['../gradlew', 'publishReleasePublicationToDiscordRepository'], + cwd=android_path.absolute() + ) + +subprocess.check_call(['git', 'add', props_path.absolute()]) +subprocess.check_call(['git', 'commit', '-m', f'version bump: {new_version}']) +subprocess.check_call(['git', 'push', 'origin', branch_name]) + +new_commit = check_output(['git', 'rev-parse', 'HEAD']) + + +print(f'NEW TAGGED VERSION: {new_version}') +print(f'NEW COMMIT: {new_commit}') From d415f0515e2fe1a831978cd59424ff46e143bbf2 Mon Sep 17 00:00:00 2001 From: mrkcsc Date: Wed, 16 Mar 2022 14:59:40 -0700 Subject: [PATCH 090/312] [RNA] Add max fling velocity capability to scroll view. --- .../facebook/react/views/scroll/ReactScrollView.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java index f708543cf45..acb61528ecc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java @@ -88,6 +88,8 @@ public class ReactScrollView extends ScrollView HasScrollEventThrottle, HasSmoothScroll { + static Integer MAX_FLING_VELOCITY = null; + private static @Nullable Field sScrollerField; private static boolean sTriedToGetScrollerField = false; @@ -620,7 +622,14 @@ public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point of @Override public void fling(int velocityY) { - final int correctedVelocityY = correctFlingVelocityY(velocityY); + final int correctedVelocityY; + if (MAX_FLING_VELOCITY != null) { + int velocityYBeforeMaxFling = correctFlingVelocityY(velocityY); + correctedVelocityY = (int) ((Math.min(Math.abs(velocityYBeforeMaxFling), MAX_FLING_VELOCITY)) * + Math.signum(velocityYBeforeMaxFling)); + } else { + correctedVelocityY = correctFlingVelocityY(velocityY); + } if (mPagingEnabled) { flingAndSnap(correctedVelocityY); From fddc87adbe3f2fa70ee639eae30dc1207b7487b1 Mon Sep 17 00:00:00 2001 From: mrkcsc Date: Thu, 24 Mar 2022 15:24:59 -0700 Subject: [PATCH 091/312] [RNA] Add useSmallCache prop to ReactImageView. --- .../react/views/image/ReactImageManager.kt | 5 +++ .../react/views/image/ReactImageView.kt | 31 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt index 63942f03f6e..403583f205a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt @@ -93,6 +93,11 @@ public constructor( public override fun getName(): String = REACT_CLASS + @ReactProp(name = "useSmallCache") + public fun setUseSmallCache(view: ReactImageView, useSmallCache: Boolean) { + view.setUseSmallCache(useSmallCache) + } + @ReactProp(name = "accessible") public fun setAccessible(view: ReactImageView, accessible: Boolean) { view.isFocusable = accessible diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt index ad634f0b90f..0f59bb01936 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt @@ -22,6 +22,7 @@ import android.graphics.Shader.TileMode import android.graphics.drawable.Animatable import android.graphics.drawable.Drawable import android.net.Uri +import android.widget.Toast import com.facebook.common.references.CloseableReference import com.facebook.common.util.UriUtil import com.facebook.drawee.backends.pipeline.Fresco @@ -97,6 +98,7 @@ public class ReactImageView( private var scaleType = defaultValue() private var tileMode = defaultTileMode() private var isDirty = false + private var useSmallCache = false private var tilePostprocessor: TilePostprocessor? = null private var iterativeBoxBlurPostProcessor: IterativeBoxBlurPostProcessor? = null private var downloadListener: ReactImageDownloadListener? = null @@ -120,6 +122,13 @@ public class ReactImageView( } } + public fun setUseSmallCache(useSmallCache: Boolean) { + if (this.useSmallCache != useSmallCache) { + this.useSmallCache = useSmallCache + isDirty = true + } + } + public fun setShouldNotifyLoadEvents(shouldNotify: Boolean) { // Skip update if shouldNotify is already in sync with the download listener if (shouldNotify == (downloadListener != null)) { @@ -462,6 +471,12 @@ public class ReactImageView( imageRequestBuilder.setDownsampleOverride(DownsampleMode.NEVER) } + if (useSmallCache) { + imageRequestBuilder.setCacheChoice(ImageRequest.CacheChoice.SMALL); + } else { + imageRequestBuilder.setCacheChoice(ImageRequest.CacheChoice.DEFAULT); + } + val imageRequest: ImageRequest = ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, headers, cacheControl) @@ -491,7 +506,15 @@ public class ReactImageView( if (resizeMethod == ImageResizeMethod.NONE) { cachedImageRequestBuilder.setDownsampleOverride(DownsampleMode.NEVER) } - builder.setLowResImageRequest(cachedImageRequestBuilder.build()) + + if (useSmallCache) { + cachedImageRequestBuilder.setCacheChoice(ImageRequest.CacheChoice.SMALL); + } else { + cachedImageRequestBuilder.setCacheChoice(ImageRequest.CacheChoice.DEFAULT); + } + + val cachedImageRequest = cachedImageRequestBuilder.build() + builder.setLowResImageRequest(cachedImageRequest) } if (downloadListener != null && controllerForTesting != null) { @@ -584,6 +607,12 @@ public class ReactImageView( if (ReactBuildConfig.DEBUG && !ReactNativeNewArchitectureFeatureFlags.enableBridgelessArchitecture()) { RNLog.w(context as ReactContext, "ReactImageView: Image source \"$uri\" doesn't exist") + + Toast.makeText( + context, + "Warning: Image source \"$uri\" doesn't exist", + Toast.LENGTH_SHORT) + .show(); } } From d5133b07c1f20089be0329d1d6c9b1d386356e6a Mon Sep 17 00:00:00 2001 From: Zhi Pan Date: Wed, 6 Apr 2022 17:51:03 -0700 Subject: [PATCH 092/312] animate switch on value change --- packages/react-native/React/Views/RCTSwitchManager.m | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/react-native/React/Views/RCTSwitchManager.m b/packages/react-native/React/Views/RCTSwitchManager.m index b04b51f844e..9f47d5eb7f0 100644 --- a/packages/react-native/React/Views/RCTSwitchManager.m +++ b/packages/react-native/React/Views/RCTSwitchManager.m @@ -49,7 +49,17 @@ - (void)onChange:(RCTSwitch *)sender RCT_EXPORT_VIEW_PROPERTY(onTintColor, UIColor); RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor); RCT_EXPORT_VIEW_PROPERTY(thumbTintColor, UIColor); -RCT_REMAP_VIEW_PROPERTY(value, on, BOOL); +//RCT_REMAP_VIEW_PROPERTY(value, on, BOOL); +RCT_CUSTOM_VIEW_PROPERTY(value, BOOL, RCTSwitch) +{ + if (json) { + BOOL on = [RCTConvert BOOL:json]; + if (view.wasOn != on) { + [(UISwitch *)view setOn:on animated:YES]; + view.wasOn = on; + } + } +} RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock); RCT_CUSTOM_VIEW_PROPERTY(disabled, BOOL, RCTSwitch) { From 7a1730ebab9a17a584a0de24baa8232091a63abc Mon Sep 17 00:00:00 2001 From: mrkcsc Date: Tue, 19 Apr 2022 08:37:32 -0700 Subject: [PATCH 093/312] [RNA] Allow modal component to be edge to edge on Android. --- .../facebook/react/views/modal/ReactModalHostView.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt index c711027d172..64cae122741 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt @@ -29,6 +29,8 @@ import androidx.activity.OnBackPressedCallback import androidx.annotation.UiThread import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.content.ContextCompat +import androidx.core.view.WindowCompat import com.facebook.common.logging.FLog import com.facebook.react.R import com.facebook.react.bridge.GuardedRunnable @@ -277,6 +279,15 @@ public class ReactModalHostView(context: ThemedReactContext) : WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) + // Enabled Edge to Edge modal when transparent/translucent system UI. + if (transparent && statusBarTranslucent) { + newDialog.window?.let { + it.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + it.navigationBarColor = ContextCompat.getColor(context, android.R.color.transparent); + WindowCompat.setDecorFitsSystemWindows(it, false) + }; + } + newDialog.setContentView(contentView) updateProperties() From 38f38fad5edac2e7e1ceec358ce9914a77a480cf Mon Sep 17 00:00:00 2001 From: Neal Manaktola Date: Wed, 25 May 2022 18:39:49 -0400 Subject: [PATCH 094/312] expose `flush` on RCTWebSocketModule to close all open websockets synchronously (#14) * expose `flush` on RCTWebSocketModule to close all open websockets synchronously add log statement back * simplify code * simplify even more * change comment --- .../react-native/React/CoreModules/RCTWebSocketModule.h | 3 +++ .../react-native/React/CoreModules/RCTWebSocketModule.mm | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/packages/react-native/React/CoreModules/RCTWebSocketModule.h b/packages/react-native/React/CoreModules/RCTWebSocketModule.h index f92bfc42e3a..cf9da4ed2a8 100644 --- a/packages/react-native/React/CoreModules/RCTWebSocketModule.h +++ b/packages/react-native/React/CoreModules/RCTWebSocketModule.h @@ -25,6 +25,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)sendData:(NSData *)data forSocketID:(nonnull NSNumber *)socketID; +// Blocking call that waits until there are no more remaining actions on the queue +- (void)flush; + @end @interface RCTBridge (RCTWebSocketModule) diff --git a/packages/react-native/React/CoreModules/RCTWebSocketModule.mm b/packages/react-native/React/CoreModules/RCTWebSocketModule.mm index 8c1990e66ea..256b50511b4 100644 --- a/packages/react-native/React/CoreModules/RCTWebSocketModule.mm +++ b/packages/react-native/React/CoreModules/RCTWebSocketModule.mm @@ -51,6 +51,14 @@ - (NSArray *)supportedEvents return @[ @"websocketMessage", @"websocketOpen", @"websocketFailed", @"websocketClosed" ]; } + +- (void)flush +{ + for (RCTSRWebSocket *socket in _sockets.allValues) { + [socket flush]; + } +} + - (void)invalidate { [super invalidate]; From 465de43a56ece66e2705c1c63d259977e9903602 Mon Sep 17 00:00:00 2001 From: Danny Weinberg Date: Mon, 13 Jun 2022 15:02:49 -0700 Subject: [PATCH 095/312] [Discord] Have codegen script prefer `react-codegen` in NPM For some reason the in-repo version isn't where this script it expects it to be (it's at `src` in our repo, whereas the script is looking in `lib`). This is likely due to us pulling down the source code directly whereas the script expects it to have gone through some build process first. In any case, this updates thes cript to prefer the version provided via NPM which does tend to work. --- .../scripts/react_native_pods_utils/script_phases.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/react-native/scripts/react_native_pods_utils/script_phases.sh b/packages/react-native/scripts/react_native_pods_utils/script_phases.sh index 92325f1ad07..ae3dd62eb00 100755 --- a/packages/react-native/scripts/react_native_pods_utils/script_phases.sh +++ b/packages/react-native/scripts/react_native_pods_utils/script_phases.sh @@ -21,6 +21,18 @@ error () { exit 1 } +# Determine path to react-native-codegen +# DISCORD FIX: Our repo path isn't valid (has the files under `src` +# rather than `lib`), so the order of this `if` was modified to prefer +# the NPM path. +if [ -d "$CODEGEN_NPM_PATH" ]; then + CODEGEN_CLI_PATH=$(cd "$CODEGEN_NPM_PATH" && pwd) +elif [ -d "$CODEGEN_REPO_PATH" ]; then + CODEGEN_CLI_PATH=$(cd "$CODEGEN_REPO_PATH" && pwd) +else + error "error: Could not determine react-native-codegen location in $CODEGEN_REPO_PATH or $CODEGEN_NPM_PATH. Try running 'yarn install' or 'npm install' in your project root." +fi + find_node () { NODE_BINARY="${NODE_BINARY:-$(command -v node || true)}" if [ -z "$NODE_BINARY" ]; then From 327ccc73e746eb0abba1d80dec00c85245979c7b Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Wed, 22 Jun 2022 14:06:01 -0400 Subject: [PATCH 096/312] Add a `preventClipping` prop --- .../react/views/view/ReactViewGroup.kt | 29 +++++++++++++++++-- .../react/views/view/ReactViewManager.kt | 5 ++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt index 89b666dcf02..6bde343933a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt @@ -154,6 +154,12 @@ public open class ReactViewGroup public constructor(context: Context?) : AccessibilityManager.AccessibilityStateChangeListener? = null + /** + * When set to true on a child [ReactViewGroup], that child will never be clipped by + * parent clipping logic (e.g., when `removeClippedSubviews` is enabled on the parent). + */ + public var preventClipping: Boolean = false + init { initView() } @@ -181,6 +187,7 @@ public open class ReactViewGroup public constructor(context: Context?) : backfaceOpacity = 1f backfaceVisible = true childrenRemovedWhileTransitioning = null + preventClipping = false } internal open fun recycleView() { @@ -478,6 +485,8 @@ public open class ReactViewGroup public constructor(context: Context?) : // it won't be size and located properly. val isAnimating = child.animation?.hasEnded() == false + val childPreventClipping = (child as? ReactViewGroup)?.preventClipping == true + val shouldSkipView = excludedViewsSet?.contains(child.id) == true if (excludedViewsSet != null) { needUpdateClippingRecursive = true @@ -487,20 +496,34 @@ public open class ReactViewGroup public constructor(context: Context?) : !isViewClipped(child, idx) && !isAnimating && child !== focusedChild && - !shouldSkipView) { + !shouldSkipView && + !childPreventClipping) { setViewClipped(child, true) + if (!customDrawOrderDisabled()) { + drawingOrderHelper.handleRemoveView(child) + isChildrenDrawingOrderEnabled = drawingOrderHelper.shouldEnableCustomDrawingOrder() + } else { + isChildrenDrawingOrderEnabled = false + } // We can try saving on invalidate call here as the view that we remove is out of visible area // therefore invalidation is not necessary. removeViewInLayout(child) needUpdateClippingRecursive = true - } else if ((shouldSkipView || intersects) && isViewClipped(child, idx)) { + } else if ((((shouldSkipView || intersects) && isViewClipped(child, idx)) || childPreventClipping) && + child.parent == null) { val adjustedIdx = idx - clippedSoFar check(adjustedIdx >= 0) + if (!customDrawOrderDisabled()) { + drawingOrderHelper.handleAddView(child) + isChildrenDrawingOrderEnabled = drawingOrderHelper.shouldEnableCustomDrawingOrder() + } else { + isChildrenDrawingOrderEnabled = false + } setViewClipped(child, false) addViewInLayout(child, adjustedIdx, defaultLayoutParam, true) invalidate() needUpdateClippingRecursive = true - } else if (intersects) { + } else if (intersects || childPreventClipping) { // If there is any intersection we need to inform the child to update its clipping rect needUpdateClippingRecursive = true } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt index 6bfe3206bcc..a534bf5831f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt @@ -118,6 +118,11 @@ public open class ReactViewManager : ReactClippingViewManager() view.axOrderList = axOrderList } + + @ReactProp(name = "preventClipping") + public open fun setPreventClipping(view: ReactViewGroup, preventClipping: Boolean) { + view.preventClipping = preventClipping + } @ReactProp(name = "hasTVPreferredFocus") public open fun setTVPreferredFocus(view: ReactViewGroup, hasTVPreferredFocus: Boolean) { From 75a5bbc57e403f88196a48c39161a5761b030d95 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 29 Jun 2022 19:17:51 -0500 Subject: [PATCH 097/312] Ripple radius now applies to corner radius instead of circular radius --- .../Pressable/useAndroidRippleForView.js | 5 ++++- .../Libraries/Components/View/ViewPropTypes.js | 1 + .../react/views/view/ReactDrawableHelper.kt | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/Components/Pressable/useAndroidRippleForView.js b/packages/react-native/Libraries/Components/Pressable/useAndroidRippleForView.js index a786da2db64..dcb03b10715 100644 --- a/packages/react-native/Libraries/Components/Pressable/useAndroidRippleForView.js +++ b/packages/react-native/Libraries/Components/Pressable/useAndroidRippleForView.js @@ -24,12 +24,14 @@ type NativeBackgroundProp = $ReadOnly<{ color: ?number, borderless: boolean, rippleRadius: ?number, + rippleCornerRadius: ?number, }>; export type PressableAndroidRippleConfig = { color?: ColorValue, borderless?: boolean, radius?: number, + cornerRadius?: number, foreground?: boolean, }; @@ -48,7 +50,7 @@ export default function useAndroidRippleForView( | $ReadOnly<{nativeBackgroundAndroid: NativeBackgroundProp}> | $ReadOnly<{nativeForegroundAndroid: NativeBackgroundProp}>, }> { - const {color, borderless, radius, foreground} = rippleConfig ?? {}; + const {color, borderless, radius, cornerRadius, foreground} = rippleConfig ?? {}; return useMemo(() => { if ( @@ -66,6 +68,7 @@ export default function useAndroidRippleForView( color: processedColor, borderless: borderless === true, rippleRadius: radius, + rippleCornerRadius: cornerRadius, }; return { diff --git a/packages/react-native/Libraries/Components/View/ViewPropTypes.js b/packages/react-native/Libraries/Components/View/ViewPropTypes.js index ac7e88db84f..36cb09adf1a 100644 --- a/packages/react-native/Libraries/Components/View/ViewPropTypes.js +++ b/packages/react-native/Libraries/Components/View/ViewPropTypes.js @@ -258,6 +258,7 @@ type AndroidDrawableRipple = $ReadOnly<{ color?: ?number, borderless?: ?boolean, rippleRadius?: ?number, + rippleCornerRadius?: ?number, }>; type AndroidDrawable = AndroidDrawableThemeAttr | AndroidDrawableRipple; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt index 735d69bd290..a76546e6c12 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt @@ -101,6 +101,20 @@ public object ReactDrawableHelper { } private fun getMask(drawableDescriptionDict: ReadableMap): Drawable? { + if (drawableDescriptionDict.hasKey("borderless") && drawableDescriptionDict.getBoolean("borderless")) { + // Borderless ripples don't have masks. + return null + } + + if (drawableDescriptionDict.hasKey("rippleCornerRadius")) { + val rippleRadius = PixelUtil.toPixelFromDIP(drawableDescriptionDict.getDouble("rippleCornerRadius")) + return ShapeDrawable(RoundRectShape( + FloatArray(8) { rippleRadius }, + null, + null + )) + } + if (!drawableDescriptionDict.hasKey("borderless") || drawableDescriptionDict.isNull("borderless") || !drawableDescriptionDict.getBoolean("borderless")) { From df153a5dcbbf346b29b01f6b52a1869a3f7a610c Mon Sep 17 00:00:00 2001 From: Charles Xue Date: Mon, 29 Aug 2022 15:05:30 -0700 Subject: [PATCH 098/312] [RNA] CustomLineHeightSpan changes --- .../views/text/internal/span/CustomLineHeightSpan.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt index 5d30f853c3b..80e8a70d526 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt @@ -9,6 +9,7 @@ package com.facebook.react.views.text.internal.span import android.graphics.Paint.FontMetricsInt import android.text.style.LineHeightSpan +import com.facebook.react.bridge.Callback import kotlin.math.ceil import kotlin.math.floor @@ -37,6 +38,10 @@ internal class CustomLineHeightSpan(height: Float) : LineHeightSpan, ReactSpan { // ascent above the baseline of A′ = A + L/2, and an effective descent of D′ = D + L/2. However, // if line-fit-edge is not leading and this is not the root inline box, if the half-leading is // positive, treat it as zero. The layout bounds exactly encloses this effective A′ and D′. + chooseHeightOverride?.let { + it.invoke(fm, lineHeight) + return + } val leading = lineHeight - ((-fm.ascent) + fm.descent) fm.ascent -= ceil(leading / 2.0f).toInt() @@ -53,4 +58,8 @@ internal class CustomLineHeightSpan(height: Float) : LineHeightSpan, ReactSpan { fm.bottom = fm.descent } } + + public companion object { + public var chooseHeightOverride: Callback? = null + } } From 53b35fa5e632208ae90f00a7d838d284d4ef7690 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Thu, 18 Jul 2024 18:04:15 -0500 Subject: [PATCH 099/312] Custom handling of fonts --- .../Libraries/Text/RCTTextAttributes.mm | 54 +++- .../ReactAndroid/api/ReactAndroid.api | 32 +-- .../react/common/assets/ReactFontManager.kt | 197 ------------- .../react/views/text/CreateTypefaceObject.kt | 9 + .../react/views/text/ReactFontManager.kt | 269 ++++++++++++++++-- .../text/internal/span/CustomStyleSpan.kt | 2 +- .../react/uiapp/RNTesterApplication.kt | 2 +- 7 files changed, 309 insertions(+), 256 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/assets/ReactFontManager.kt create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/CreateTypefaceObject.kt diff --git a/packages/react-native/Libraries/Text/RCTTextAttributes.mm b/packages/react-native/Libraries/Text/RCTTextAttributes.mm index 43dd1f7c18e..7841115b995 100644 --- a/packages/react-native/Libraries/Text/RCTTextAttributes.mm +++ b/packages/react-native/Libraries/Text/RCTTextAttributes.mm @@ -223,14 +223,52 @@ - (NSParagraphStyle *)effectiveParagraphStyle - (UIFont *)effectiveFont { - // FIXME: RCTFont has thread-safety issues and must be rewritten. - return [RCTFont updateFont:nil - withFamily:_fontFamily - size:@(isnan(_fontSize) ? 0 : _fontSize) - weight:_fontWeight - style:_fontStyle - variant:_fontVariant - scaleMultiplier:self.effectiveFontSizeMultiplier]; + NSArray *rawFontFamilies = [_fontFamily componentsSeparatedByString:@","]; + + // If _fontFamily is nil or has a single fontFamily, then use the original RN logic. + if (rawFontFamilies.count <= 1) { + // FIXME: RCTFont has thread-safety issues and must be rewritten. + return [RCTFont updateFont:nil + withFamily:_fontFamily + size:@(isnan(_fontSize) ? 0 : _fontSize) + weight:_fontWeight + style:_fontStyle + variant:_fontVariant + scaleMultiplier:self.effectiveFontSizeMultiplier]; + } + + NSMutableArray *fonts = [NSMutableArray new]; + for (NSString *rawFontFamily in rawFontFamilies) { + NSString *fontFamily = [rawFontFamily stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + if (fontFamily.length == 0) { + continue; + } + + UIFont *font = [RCTFont updateFont:nil + withFamily:fontFamily + size:@(isnan(_fontSize) ? 0 : _fontSize) + weight:_fontWeight + style:_fontStyle + variant:_fontVariant + scaleMultiplier:self.effectiveFontSizeMultiplier]; + + if (font) { + [fonts addObject:font]; + } + } + + UIFont *primaryFont = fonts[0]; + + NSMutableArray *fontDescriptors = [NSMutableArray new]; + for (NSUInteger i = 1; i < fonts.count; i++) { + UIFont *font = fonts[i]; + [fontDescriptors addObject:font.fontDescriptor]; + } + + UIFontDescriptor *fontDescriptor = [primaryFont.fontDescriptor fontDescriptorByAddingAttributes: + @{UIFontDescriptorCascadeListAttribute: fontDescriptors}]; + + return [UIFont fontWithDescriptor:fontDescriptor size:primaryFont.pointSize]; } - (CGFloat)effectiveFontSizeMultiplier diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 3a47b5a5303..c2f928e276c 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -1738,36 +1738,20 @@ public final class com/facebook/react/common/SystemClock { public static final fun uptimeMillis ()J } -public final class com/facebook/react/common/assets/ReactFontManager { - public static final field Companion Lcom/facebook/react/common/assets/ReactFontManager$Companion; - public fun ()V - public final fun addCustomFont (Landroid/content/Context;Ljava/lang/String;I)V - public final fun addCustomFont (Ljava/lang/String;Landroid/graphics/Typeface;)V - public static final fun getInstance ()Lcom/facebook/react/common/assets/ReactFontManager; - public final fun getTypeface (Ljava/lang/String;IILandroid/content/res/AssetManager;)Landroid/graphics/Typeface; - public final fun getTypeface (Ljava/lang/String;ILandroid/content/res/AssetManager;)Landroid/graphics/Typeface; - public final fun getTypeface (Ljava/lang/String;IZLandroid/content/res/AssetManager;)Landroid/graphics/Typeface; - public final fun getTypeface (Ljava/lang/String;Lcom/facebook/react/common/assets/ReactFontManager$TypefaceStyle;Landroid/content/res/AssetManager;)Landroid/graphics/Typeface; - public final fun setTypeface (Ljava/lang/String;ILandroid/graphics/Typeface;)V +public abstract interface annotation class com/facebook/react/common/annotations/DeprecatedInNewArchitecture : java/lang/annotation/Annotation { + public abstract fun message ()Ljava/lang/String; } -public final class com/facebook/react/common/assets/ReactFontManager$Companion { - public final fun getInstance ()Lcom/facebook/react/common/assets/ReactFontManager; +public abstract interface annotation class com/facebook/react/common/annotations/FrameworkAPI : java/lang/annotation/Annotation { } -public final class com/facebook/react/common/assets/ReactFontManager$TypefaceStyle { - public static final field BOLD I - public static final field Companion Lcom/facebook/react/common/assets/ReactFontManager$TypefaceStyle$Companion; - public static final field NORMAL I - public fun (I)V - public fun (II)V - public synthetic fun (IIILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun (IZ)V - public final fun apply (Landroid/graphics/Typeface;)Landroid/graphics/Typeface; - public final fun getNearestStyle ()I +public abstract interface annotation class com/facebook/react/common/annotations/StableReactNativeAPI : java/lang/annotation/Annotation { +} + +public abstract interface annotation class com/facebook/react/common/annotations/UnstableReactNativeAPI : java/lang/annotation/Annotation { } -public final class com/facebook/react/common/assets/ReactFontManager$TypefaceStyle$Companion { +public abstract interface annotation class com/facebook/react/common/annotations/VisibleForTesting : java/lang/annotation/Annotation { } public final class com/facebook/react/common/build/ReactBuildConfig { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/assets/ReactFontManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/assets/ReactFontManager.kt deleted file mode 100644 index 8850773c4e9..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/assets/ReactFontManager.kt +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.common.assets - -import android.content.Context -import android.content.res.AssetManager -import android.graphics.Typeface -import android.os.Build -import android.util.SparseArray -import androidx.core.content.res.ResourcesCompat -import com.facebook.react.common.ReactConstants - -/** - * Responsible for loading and caching Typeface objects. - * - * This will first try to load a typeface from the assets/fonts folder. If one is not found in that - * folder, this will fallback to the best matching system typeface. - * - * Custom fonts support the extensions `.ttf` and `.otf` and the variants `bold`, `italic`, and - * `bold_italic`. For example, given a font named "ExampleFontFamily", the following are supported: - * * ExampleFontFamily.ttf (or .otf) - * * ExampleFontFamily_bold.ttf (or .otf) - * * ExampleFontFamily_italic.ttf (or .otf) - * * ExampleFontFamily_bold_italic.ttf (or .otf) - */ -public class ReactFontManager { - - private val fontCache: MutableMap = mutableMapOf() - private val customTypefaceCache: MutableMap = mutableMapOf() - - public fun getTypeface( - fontFamilyName: String, - style: Int, - assetManager: AssetManager?, - ): Typeface = getTypeface(fontFamilyName, TypefaceStyle(style), assetManager) - - public fun getTypeface( - fontFamilyName: String, - weight: Int, - italic: Boolean, - assetManager: AssetManager?, - ): Typeface = getTypeface(fontFamilyName, TypefaceStyle(weight, italic), assetManager) - - public fun getTypeface( - fontFamilyName: String, - style: Int, - weight: Int, - assetManager: AssetManager?, - ): Typeface = getTypeface(fontFamilyName, TypefaceStyle(style, weight), assetManager) - - public fun getTypeface( - fontFamilyName: String, - typefaceStyle: TypefaceStyle, - assetManager: AssetManager?, - ): Typeface { - if (customTypefaceCache.containsKey(fontFamilyName)) { - // Apply `typefaceStyle` because custom fonts configure variants using `app:fontStyle` and - // `app:fontWeight` in their resource XML configuration file. - return typefaceStyle.apply(customTypefaceCache[fontFamilyName]) - } - - val assetFontFamily = fontCache.getOrPut(fontFamilyName) { AssetFontFamily() } - val style = typefaceStyle.nearestStyle - return assetFontFamily.getTypefaceForStyle(style) - ?: createAssetTypeface(fontFamilyName, style, assetManager).also { - assetFontFamily.setTypefaceForStyle(style, it) - } - } - - /* - * This method allows you to load custom fonts from res/font folder as provided font family name. - * Fonts may be one of .ttf, .otf or XML (https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml). - * To support multiple font styles or weights, you must provide a font in XML format. - * - * ReactFontManager.getInstance().addCustomFont(this, "Srisakdi", R.font.srisakdi); - */ - public fun addCustomFont(context: Context, fontFamily: String, fontId: Int): Unit { - addCustomFont(fontFamily, ResourcesCompat.getFont(context, fontId)) - } - - /** - * Equivalent method to {@see addCustomFont(Context, String, int)} which accepts a Typeface - * object. - */ - public fun addCustomFont(fontFamily: String, font: Typeface?): Unit { - if (font != null) { - customTypefaceCache[fontFamily] = font - } - } - - /** - * Add additional font family, or replace the exist one in the font memory cache. - * - * @see [Typeface.DEFAULT] - * @see [Typeface.BOLD] - * @see [Typeface.ITALIC] - * @see [Typeface.BOLD_ITALIC] - */ - public fun setTypeface(fontFamilyName: String, style: Int, typeface: Typeface?): Unit { - if (typeface != null) { - fontCache.getOrPut(fontFamilyName) { AssetFontFamily() }.setTypefaceForStyle(style, typeface) - } - } - - /** Responsible for normalizing style and numeric weight for backward compatibility. */ - public class TypefaceStyle { - private val italic: Boolean - private val weight: Int - - public constructor(weight: Int, italic: Boolean) { - this.italic = italic - this.weight = if (weight == ReactConstants.UNSET) NORMAL else weight - } - - /** - * If `weight` is supplied, it will be combined with the italic bit from `style`. Otherwise, any - * existing weight bit in `style` will be used. - */ - @JvmOverloads - public constructor(style: Int, weight: Int = ReactConstants.UNSET) { - val fixedStyle = if (style == ReactConstants.UNSET) Typeface.NORMAL else style - italic = (fixedStyle and Typeface.ITALIC) != 0 - this.weight = - if (weight == ReactConstants.UNSET) - (if ((fixedStyle and Typeface.BOLD) != 0) BOLD else NORMAL) - else weight - } - - public val nearestStyle: Int - get() = - if (weight < BOLD) { - if (italic) Typeface.ITALIC else Typeface.NORMAL - } else { - if (italic) Typeface.BOLD_ITALIC else Typeface.BOLD - } - - public fun apply(typeface: Typeface?): Typeface = - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { - Typeface.create(typeface, nearestStyle) - } else { - Typeface.create(typeface, weight, italic) - } - - public companion object { - public const val BOLD: Int = 700 - public const val NORMAL: Int = 400 - } - } - - public companion object { - - // NOTE: Indices in `EXTENSIONS` correspond to the `TypeFace` style constants. - private val EXTENSIONS = arrayOf("", "_bold", "_italic", "_bold_italic") - private val FILE_EXTENSIONS = arrayOf(".ttf", ".otf") - private const val FONTS_ASSET_PATH = "fonts/" - - private val _instance = ReactFontManager() - - @JvmStatic public fun getInstance(): ReactFontManager = _instance - - private fun createAssetTypeface( - fontFamilyName: String, - style: Int, - assetManager: AssetManager?, - ): Typeface { - if (assetManager != null) { - val extension = EXTENSIONS[style] - for (fileExtension in FILE_EXTENSIONS) { - val fileName = "$FONTS_ASSET_PATH$fontFamilyName$extension$fileExtension" - try { - return Typeface.createFromAsset(assetManager, fileName) - } catch (e: RuntimeException) { - // If the typeface asset does not exist, try another extension. - continue - } - } - } - return Typeface.create(fontFamilyName, style) - } - } - - /** Responsible for caching typefaces for each custom font family. */ - private class AssetFontFamily { - private val typefaceSparseArray: SparseArray = SparseArray(4) - - fun getTypefaceForStyle(style: Int): Typeface? = typefaceSparseArray[style] - - fun setTypefaceForStyle(style: Int, typeface: Typeface?) { - typefaceSparseArray.put(style, typeface) - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/CreateTypefaceObject.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/CreateTypefaceObject.kt new file mode 100644 index 00000000000..604f4162151 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/CreateTypefaceObject.kt @@ -0,0 +1,9 @@ +package com.facebook.react.views.text + +import android.content.res.AssetManager + +public class CreateTypefaceObject( + public var fontFamilyName: String, + public var style: Int, + public var assetManager: AssetManager +) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt index 5b4cee489b4..d44bc0de441 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt @@ -10,51 +10,270 @@ package com.facebook.react.views.text import android.content.Context import android.content.res.AssetManager import android.graphics.Typeface -import com.facebook.react.common.assets.ReactFontManager as ReactFontAssetManager +import android.graphics.fonts.Font +import android.graphics.fonts.FontFamily +import android.os.Build +import android.util.SparseArray +import androidx.annotation.Nullable +import androidx.annotation.RequiresApi +import androidx.core.content.res.ResourcesCompat +import com.facebook.infer.annotation.Nullsafe +import androidx.arch.core.util.Function +import com.facebook.react.common.ReactConstants +import java.io.IOException +import java.util.ArrayList +import java.util.HashMap -/** Responsible for loading and caching Typeface objects. */ -@Deprecated( - message = - "This class is deprecated and will be deleted in the near future. Please use [com.facebook.react.common.assets.ReactFontManager] instead.") -@Suppress("DEPRECATION") -public class ReactFontManager private constructor(private val delegate: ReactFontAssetManager) { +/** + * Responsible for loading and caching Typeface objects. + * + * @deprecated This class is deprecated and it will be deleted in the near future. Please use + * [com.facebook.react.common.assets.ReactFontManager] instead. + */ +@Nullsafe(Nullsafe.Mode.LOCAL) +class ReactFontManager private constructor() { + + companion object { + var createAssetTypefaceOverride: Function? = null + + // NOTE: Indices in `EXTENSIONS` correspond to the `TypeFace` style constants. + private val EXTENSIONS = arrayOf("", "_bold", "_italic", "_bold_italic") + private val FILE_EXTENSIONS = arrayOf(".ttf", ".otf") + private const val FONTS_ASSET_PATH = "fonts/" + + private var sReactFontManagerInstance: ReactFontManager? = null + + @JvmStatic + fun getInstance(): ReactFontManager { + return sReactFontManagerInstance ?: ReactFontManager().also { sReactFontManagerInstance = it } + } + + private fun createAssetTypeface( + fontFamilyName: String, + style: Int, + assetManager: AssetManager + ): Typeface { + createAssetTypefaceOverride?.let { override -> + return override.apply(CreateTypefaceObject(fontFamilyName, style, assetManager)) + } + + // This is the original RN logic for getting the typeface. + val extension = EXTENSIONS[style] + for (fileExtension in FILE_EXTENSIONS) { + val fileName = StringBuilder() + .append(FONTS_ASSET_PATH) + .append(fontFamilyName) + .append(extension) + .append(fileExtension) + .toString() + try { + return Typeface.createFromAsset(assetManager, fileName) + } catch (e: RuntimeException) { + // If the typeface asset does not exist, try another extension. + continue + } + } + return Typeface.create(fontFamilyName, style) + } + + @RequiresApi(Build.VERSION_CODES.Q) + private fun createAssetTypefaceWithFallbacks( + fontFamilyNames: Array, + style: Int, + assetManager: AssetManager + ): Typeface { + val fontFamilies = ArrayList() + + // Iterate over the list of fontFamilyNames, constructing new FontFamily objects + // for use in the CustomFallbackBuilder below. + for (fontFamilyName in fontFamilyNames) { + for (fileExtension in FILE_EXTENSIONS) { + val fileName = StringBuilder() + .append(FONTS_ASSET_PATH) + .append(fontFamilyName) + .append(fileExtension) + .toString() + try { + val font = Font.Builder(assetManager, fileName).build() + val family = FontFamily.Builder(font).build() + fontFamilies.add(family) + } catch (e: RuntimeException) { + // If the typeface asset does not exist, try another extension. + continue + } catch (e: IOException) { + // If the font asset does not exist, try another extension. + continue + } + } + } - public fun getTypeface(fontFamilyName: String, style: Int, assetManager: AssetManager): Typeface = - delegate.getTypeface(fontFamilyName, style, assetManager) + // If there's some problem constructing fonts, fall back to the default behavior. + if (fontFamilies.isEmpty()) { + return createAssetTypeface(fontFamilyNames[0], style, assetManager) + } - public fun getTypeface( + val fallbackBuilder = Typeface.CustomFallbackBuilder(fontFamilies[0]) + for (i in 1 until fontFamilies.size) { + fallbackBuilder.addCustomFallback(fontFamilies[i]) + } + return fallbackBuilder.build() + } + } + + private val mFontCache = HashMap() + private val mCustomTypefaceCache = HashMap() + + fun getTypeface(fontFamilyName: String, style: Int, assetManager: AssetManager): Typeface { + return getTypeface(fontFamilyName, TypefaceStyle(style), assetManager) + } + + fun getTypeface( fontFamilyName: String, weight: Int, italic: Boolean, assetManager: AssetManager - ): Typeface = delegate.getTypeface(fontFamilyName, weight, italic, assetManager) + ): Typeface { + return getTypeface(fontFamilyName, TypefaceStyle(weight, italic), assetManager) + } - public fun getTypeface( + fun getTypeface( fontFamilyName: String, style: Int, weight: Int, assetManager: AssetManager - ): Typeface = delegate.getTypeface(fontFamilyName, style, weight, assetManager) + ): Typeface { + return getTypeface(fontFamilyName, TypefaceStyle(style, weight), assetManager) + } + + fun getTypeface( + fontFamilyName: String, + typefaceStyle: TypefaceStyle, + assetManager: AssetManager + ): Typeface { + mCustomTypefaceCache[fontFamilyName]?.let { customTypeface -> + // Apply `typefaceStyle` because custom fonts configure variants using `app:fontStyle` and + // `app:fontWeight` in their resource XML configuration file. + return typefaceStyle.apply(customTypeface) + } + + var assetFontFamily = mFontCache[fontFamilyName] + if (assetFontFamily == null) { + assetFontFamily = AssetFontFamily() + mFontCache[fontFamilyName] = assetFontFamily + } + + val style = typefaceStyle.getNearestStyle() - public fun addCustomFont(context: Context, fontFamily: String, fontId: Int) { - delegate.addCustomFont(context, fontFamily, fontId) + var assetTypeface = assetFontFamily.getTypefaceForStyle(style) + if (assetTypeface == null) { + assetTypeface = createAssetTypeface(fontFamilyName, style, assetManager) + assetFontFamily.setTypefaceForStyle(style, assetTypeface) + } + // Do not apply `typefaceStyle` because asset font files already incorporate the style. + return assetTypeface } - public fun addCustomFont(fontFamily: String, font: Typeface?) { - delegate.addCustomFont(fontFamily, font) + /* + * This method allows you to load custom fonts from res/font folder as provided font family name. + * Fonts may be one of .ttf, .otf or XML (https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml). + * To support multiple font styles or weights, you must provide a font in XML format. + * + * ReactFontManager.getInstance().addCustomFont(this, "Srisakdi", R.font.srisakdi); + */ + fun addCustomFont(context: Context, fontFamily: String, fontId: Int) { + ResourcesCompat.getFont(context, fontId)?.let { font -> + mCustomTypefaceCache[fontFamily] = font + } } - public fun setTypeface(fontFamilyName: String, style: Int, typeface: Typeface) { - delegate.setTypeface(fontFamilyName, style, typeface) + /** + * Equivalent method to [addCustomFont] which accepts a Typeface object. + */ + fun addCustomFont(fontFamily: String, font: Typeface?) { + font?.let { mCustomTypefaceCache[fontFamily] = it } } - public companion object { - private var instance: ReactFontManager? = null + /** + * Add additional font family, or replace the exist one in the font memory cache. + * + * @param style see [Typeface.DEFAULT], [Typeface.BOLD], [Typeface.ITALIC], [Typeface.BOLD_ITALIC] + */ + fun setTypeface(fontFamilyName: String, style: Int, typeface: Typeface?) { + typeface?.let { font -> + var assetFontFamily = mFontCache[fontFamilyName] + if (assetFontFamily == null) { + assetFontFamily = AssetFontFamily() + mFontCache[fontFamilyName] = assetFontFamily + } + assetFontFamily.setTypefaceForStyle(style, font) + } + } - @JvmStatic - public fun getInstance(): ReactFontManager { - return instance - ?: ReactFontManager(ReactFontAssetManager.getInstance()).also { instance = it } + class TypefaceStyle { + companion object { + const val BOLD = 700 + const val NORMAL = 400 + private const val MIN_WEIGHT = 1 + private const val MAX_WEIGHT = 1000 + } + + private val mItalic: Boolean + private val mWeight: Int + + constructor(weight: Int, italic: Boolean) { + mItalic = italic + mWeight = if (weight == ReactConstants.UNSET) NORMAL else weight + } + + constructor(style: Int) { + var styleValue = if (style == ReactConstants.UNSET) Typeface.NORMAL else style + + mItalic = (styleValue and Typeface.ITALIC) != 0 + mWeight = if ((styleValue and Typeface.BOLD) != 0) BOLD else NORMAL + } + + /** + * If `weight` is supplied, it will be combined with the italic bit from `style`. Otherwise, any + * existing weight bit in `style` will be used. + */ + constructor(style: Int, weight: Int) { + var styleValue = if (style == ReactConstants.UNSET) Typeface.NORMAL else style + + mItalic = (styleValue and Typeface.ITALIC) != 0 + mWeight = when { + weight != ReactConstants.UNSET -> weight + (styleValue and Typeface.BOLD) != 0 -> BOLD + else -> NORMAL + } + } + + fun getNearestStyle(): Int { + return if (mWeight < BOLD) { + if (mItalic) Typeface.ITALIC else Typeface.NORMAL + } else { + if (mItalic) Typeface.BOLD_ITALIC else Typeface.BOLD + } + } + + fun apply(typeface: Typeface): Typeface { + return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { + Typeface.create(typeface, getNearestStyle()) + } else { + Typeface.create(typeface, mWeight, mItalic) + } + } + } + + /** Responsible for caching typefaces for each custom font family. */ + private class AssetFontFamily { + private val mTypefaceSparseArray = SparseArray(4) + + fun getTypefaceForStyle(style: Int): Typeface? { + return mTypefaceSparseArray.get(style) + } + + fun setTypefaceForStyle(style: Int, typeface: Typeface) { + mTypefaceSparseArray.put(style, typeface) } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt index 7be93b440eb..f9ea93f9d4b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt @@ -13,7 +13,7 @@ import android.graphics.Typeface import android.text.TextPaint import android.text.style.MetricAffectingSpan import com.facebook.react.common.ReactConstants -import com.facebook.react.common.assets.ReactFontManager +import com.facebook.react.views.text.ReactFontManager import com.facebook.react.views.text.ReactTypefaceUtils /** diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt index 05ca30df409..9859d5b110b 100644 --- a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt @@ -20,7 +20,6 @@ import com.facebook.react.ReactPackage import com.facebook.react.ViewManagerOnDemandReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.common.assets.ReactFontManager import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost @@ -36,6 +35,7 @@ import com.facebook.react.uiapp.component.ReportFullyDrawnViewManager import com.facebook.react.uimanager.ReactShadowNode import com.facebook.react.uimanager.ViewManager import com.facebook.react.views.view.setEdgeToEdgeFeatureFlagOn +import com.facebook.react.views.text.ReactFontManager; import com.facebook.soloader.SoLoader internal class RNTesterApplication : Application(), ReactApplication { From 0e92efdb8985f623d5fc1580509eaec53b04407d Mon Sep 17 00:00:00 2001 From: mrkcsc Date: Sat, 11 Dec 2021 14:20:59 -0800 Subject: [PATCH 100/312] Update RNA ImageView to support forced cached property to fix GIF flicker. Add ability to override mSource of the image source. --- .../react/views/image/ReactImageView.kt | 27 +++++++++++++++---- .../react/views/imagehelper/ImageSource.kt | 11 +++++++- .../views/imagehelper/MultiSourceHelper.kt | 10 +++++-- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt index 0f59bb01936..db7a890ffda 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt @@ -291,15 +291,32 @@ public class ReactImageView( for (idx in 0 until sources.size()) { val source = sources.getMap(idx) ?: continue val cacheControl = computeCacheControl(source.getString("cache")) + val uri = source.getString("uri") + val isForceCached = if (source.hasKey("isForceCached")) { + source.getBoolean("isForceCached") + } else { + false + } + val width = if (source.hasKey("width")) { + source.getDouble("width") + } else { + 0.0 + } + val height = if (source.hasKey("height")) { + source.getDouble("height") + } else { + 0.0 + } var imageSource = ImageSource( context, - source.getString("uri"), - source.getDouble("width"), - source.getDouble("height"), - cacheControl) + uri, + width, + height, + cacheControl, + isForceCached) if (Uri.EMPTY == imageSource.uri) { - warnImageSource(source.getString("uri")) + warnImageSource(uri) imageSource = getTransparentBitmapImageSource(context) } tmpSources.add(imageSource) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt index f8d82543ee8..e6941ca591d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt @@ -9,7 +9,11 @@ package com.facebook.react.views.imagehelper import android.content.Context import android.net.Uri +<<<<<<< HEAD import com.facebook.react.modules.fresco.ImageCacheControl +======= +import androidx.arch.core.util.Function +>>>>>>> 946f3eaa576 (Update RNA ImageView to support forced cached property to fix GIF flicker.) import java.util.Objects /** Class describing an image source (network URI or resource) and size. */ @@ -18,10 +22,11 @@ public open class ImageSource constructor( context: Context, /** Get the source of this image, as it was passed to the constructor. */ - public val source: String?, + public var source: String?, width: Double = 0.0, height: Double = 0.0, public val cacheControl: ImageCacheControl = ImageCacheControl.DEFAULT, + public val isForceCached: Boolean = false ) { /** Get the URI for this image - can be either a parsed network URI or a resource URI. */ @@ -55,6 +60,9 @@ constructor( private fun computeUri(context: Context): Uri = try { + sourceOverride?.let { + source = it.apply(source) + } val uri = Uri.parse(source) // Verify scheme is set, so that relative uri (used by static resources) are not handled. if (uri.scheme == null) computeLocalUri(context) else uri @@ -68,6 +76,7 @@ constructor( } public companion object { + public var sourceOverride: Function? = null private const val TRANSPARENT_BITMAP_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/MultiSourceHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/MultiSourceHelper.kt index 566c0fc35d3..3f5188bc637 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/MultiSourceHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/MultiSourceHelper.kt @@ -57,8 +57,10 @@ internal object MultiSourceHelper { for (source in sources) { val precision = abs(1.0 - source.size / viewArea) if (precision < bestPrecision) { - bestPrecision = precision - best = source + if (!source.isForceCached) { + bestPrecision = precision + best = source + } } if (precision < bestCachePrecision && source.cacheControl != ImageCacheControl.RELOAD && @@ -69,6 +71,10 @@ internal object MultiSourceHelper { bestCachePrecision = precision bestCached = source } + if (source.isForceCached) { + bestCachePrecision = 0.0 + bestCached = source + } } if (bestCached != null && best != null && bestCached.source == best.source) { bestCached = null From 1cf1bf9e9e5bfd585fa5dc078d8cb40333b2ddea Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 8 Mar 2024 18:40:52 -0600 Subject: [PATCH 101/312] [Discord] SRWebSocket flush method --- packages/react-native/React/CoreModules/RCTWebSocketModule.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/React/CoreModules/RCTWebSocketModule.mm b/packages/react-native/React/CoreModules/RCTWebSocketModule.mm index 256b50511b4..eb44017e2d5 100644 --- a/packages/react-native/React/CoreModules/RCTWebSocketModule.mm +++ b/packages/react-native/React/CoreModules/RCTWebSocketModule.mm @@ -54,8 +54,8 @@ - (NSArray *)supportedEvents - (void)flush { - for (RCTSRWebSocket *socket in _sockets.allValues) { - [socket flush]; + for (SRWebSocket *socket in _sockets.allValues) { + [socket close]; } } From 3b1d15acb3914f82398a32ae9ddfbbfee1f24fa6 Mon Sep 17 00:00:00 2001 From: Shidong Lin Date: Fri, 4 Aug 2023 15:56:10 -0700 Subject: [PATCH 102/312] Clamp `last` prop of `VirtualizedList` --- packages/virtualized-lists/Lists/VirtualizedList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/virtualized-lists/Lists/VirtualizedList.js b/packages/virtualized-lists/Lists/VirtualizedList.js index 5b8aaa525bd..c0eac6faa03 100644 --- a/packages/virtualized-lists/Lists/VirtualizedList.js +++ b/packages/virtualized-lists/Lists/VirtualizedList.js @@ -849,7 +849,7 @@ class VirtualizedList extends StateSafePureComponent< return { first: clamp(0, cells.first, maxFirst), - last: Math.min(lastPossibleCellIndex, cells.last), + last: clamp(-1, cells.last, lastPossibleCellIndex), }; } From 4232b017d0a75d295b3e2cc30113c9bed4f3ecb5 Mon Sep 17 00:00:00 2001 From: Patrick Mick Date: Wed, 11 Oct 2023 09:46:06 -0700 Subject: [PATCH 103/312] [Upstreamed] Fix incorrect values for modal sizing (#45) This fixes an issues where the fabric renderer would get the correct sizing via onSizeChanged, write it to the shadow tree generating a state update callback and then setting the wrong size using ModalHostManager. Once onSizeChanged is fired by the OS it is treated as the definitive source of truth for sizing. --- .../react/views/modal/ReactModalHostView.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt index 64cae122741..f53350b4c55 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt @@ -560,10 +560,21 @@ public class ReactModalHostView(context: ThemedReactContext) : updateState(viewWidth, viewHeight) } + /** + * Updates the shadow tree via the local fabric view state manager. Can noop if the same values + * are passed multiple times. Can also ignore params if the local variables for viewWidth & + * viewHeight are non-zero. + * + * @param width target width of the container as pixels. Will be converted to DIP. + * @param height target height of the container as pixels. Will be converted to DIP. + */ @UiThread public fun updateState(width: Int, height: Int) { - val realWidth: Float = width.toFloat().pxToDp() - val realHeight: Float = height.toFloat().pxToDp() + // Once viewWidth & viewHeight are set by an onSizeChanged callback they become our source + // of truth. This makes the fabric renderer function like the paper renderer is currently + // functioning. + val realWidth = (if ((viewWidth > 0)) viewWidth else width).toFloat().pxToDp() + val realHeight = (if ((viewHeight > 0)) viewHeight else height).toFloat().pxToDp() val sw = stateWrapper if (sw != null) { From 5d01e2a59d690d05b169579e83226c6e4cacb152 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Thu, 25 May 2023 14:25:54 -0500 Subject: [PATCH 104/312] [Discord] Always configure React Native NDK regardless of New Arch --- .../react/utils/NdkConfiguratorUtils.kt | 19 ++----------------- .../react/defaults/DefaultReactNativeHost.kt | 7 +------ 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt index fcd48e2cd9c..b8847cc2c78 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt @@ -11,7 +11,6 @@ import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.Variant import com.facebook.react.ReactExtension import com.facebook.react.utils.ProjectUtils.getReactNativeArchitectures -import com.facebook.react.utils.ProjectUtils.isNewArchEnabled import java.io.File import org.gradle.api.Project @@ -19,12 +18,7 @@ internal object NdkConfiguratorUtils { @Suppress("UnstableApiUsage") fun configureReactNativeNdk(project: Project, extension: ReactExtension) { project.pluginManager.withPlugin("com.android.application") { - project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java).finalizeDsl { - ext -> - if (!project.isNewArchEnabled(extension)) { - // For Old Arch, we don't need to setup the NDK - return@finalizeDsl - } + project.extensions.getByType(AndroidComponentsExtension::class.java).finalizeDsl { ext -> // We enable prefab so users can consume .so/headers from ReactAndroid and hermes-engine // .aar ext.buildFeatures.prefab = true @@ -73,20 +67,12 @@ internal object NdkConfiguratorUtils { * sure we specify the correct .pickFirsts for all the .so files we are producing or that we're * aware of as some of our dependencies are pulling them in. */ + @Suppress("UNUSED_PARAMETER") fun configureNewArchPackagingOptions( project: Project, extension: ReactExtension, variant: Variant ) { - if (!project.isNewArchEnabled(extension)) { - // For Old Arch, we set a pickFirst only on libraries that we know are - // clashing with our direct dependencies (mainly FBJNI and Hermes). - variant.packaging.jniLibs.pickFirsts.addAll( - listOf( - "**/libfbjni.so", - "**/libc++_shared.so", - )) - } else { // We set some packagingOptions { pickFirst ... } for our users for libraries we own. variant.packaging.jniLibs.pickFirsts.addAll( listOf( @@ -100,7 +86,6 @@ internal object NdkConfiguratorUtils { // AGP will give priority of libc++_shared coming from App modules. "**/libc++_shared.so", )) - } } /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt index c36a9be0952..2d34f463984 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt @@ -38,12 +38,7 @@ protected constructor( ) : ReactNativeHost(application) { override fun getReactPackageTurboModuleManagerDelegateBuilder(): - ReactPackageTurboModuleManagerDelegate.Builder? = - if (isNewArchEnabled) { - DefaultTurboModuleManagerDelegate.Builder() - } else { - null - } + ReactPackageTurboModuleManagerDelegate.Builder? = DefaultTurboModuleManagerDelegate.Builder() override fun getUIManagerProvider(): UIManagerProvider? = if (isNewArchEnabled) { From 733413fae99039cd5a95beafe82868b433fde6f2 Mon Sep 17 00:00:00 2001 From: Yuliy Pisetsky Date: Tue, 31 Oct 2023 12:05:14 -0700 Subject: [PATCH 105/312] Include `raw_length` in Websocket event --- packages/react-native/Libraries/WebSocket/WebSocket.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/WebSocket/WebSocket.js b/packages/react-native/Libraries/WebSocket/WebSocket.js index 36aafbbbab1..67e4cfea6b6 100644 --- a/packages/react-native/Libraries/WebSocket/WebSocket.js +++ b/packages/react-native/Libraries/WebSocket/WebSocket.js @@ -245,7 +245,8 @@ class WebSocket extends EventTarget { data = BlobManager.createFromOptions(ev.data); break; } - this.dispatchEvent(new MessageEvent('message', {data})); + const raw_length = ev.raw_length; + this.dispatchEvent(new MessageEvent('message', {data, raw_length})); }), this._eventEmitter.addListener('websocketOpen', ev => { if (ev.id !== this._socketId) { From bdb2f1a85231bdf5742f993410d460076becd1dc Mon Sep 17 00:00:00 2001 From: Steven Petryk Date: Tue, 28 Nov 2023 14:22:47 -0800 Subject: [PATCH 106/312] Avoid using Xcode 15's gcc to compile glog --- .../react-native/scripts/ios-configure-glog.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/react-native/scripts/ios-configure-glog.sh b/packages/react-native/scripts/ios-configure-glog.sh index 81eb319e50b..7259c788bdc 100755 --- a/packages/react-native/scripts/ios-configure-glog.sh +++ b/packages/react-native/scripts/ios-configure-glog.sh @@ -42,15 +42,15 @@ EOF patch -p1 config.sub fix_glog_0.3.5_apple_silicon.patch fi -XCRUN="$(which xcrun || true)" -if [ -n "$XCRUN" ]; then - export CC="$(xcrun -find -sdk $PLATFORM_NAME cc) -arch $CURRENT_ARCH -isysroot $(xcrun -sdk $PLATFORM_NAME --show-sdk-path)" - export CXX="$CC" -else - export CC="$CC:-$(which gcc)" - export CXX="$CXX:-$(which g++ || true)" -fi -export CXX="$CXX:-$CC" +# XCRUN="$(which xcrun || true)" +# if [ -n "$XCRUN" ]; then +# export CC="$(xcrun -find -sdk $PLATFORM_NAME cc) -arch $CURRENT_ARCH -isysroot $(xcrun -sdk $PLATFORM_NAME --show-sdk-path)" +# export CXX="$CC" +# else +# export CC="$CC:-$(which gcc)" +# export CXX="$CXX:-$(which g++ || true)" +# fi +# export CXX="$CXX:-$CC" # Remove automake symlink if it exists if [ -h "test-driver" ]; then From 0dc35b5e6e16f34a246bcb4a774d00ab1fa32228 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 10 Apr 2024 09:01:34 -0500 Subject: [PATCH 107/312] [Discord] Moving registry of RCTEventEmitter to constructor --- .../main/java/com/facebook/react/uimanager/UIManagerModule.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 671abca4ba1..8aca8494cde 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -166,6 +166,8 @@ public UIManagerModule( } reactContext.addLifecycleEventListener(this); + mEventDispatcher.registerEventEmitter( + DEFAULT, getReactApplicationContext().getJSModule(RCTEventEmitter.class)); } /** From caccb899495aaa280fa72e727d501e2086ba51e7 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 12 Jun 2024 16:49:39 -0500 Subject: [PATCH 108/312] [Discord] Addressing Gradle plugin versioning issues caused by Version Catalog --- build.gradle.kts | 2 +- packages/react-native/ReactAndroid/build.gradle.kts | 6 +++--- .../ReactAndroid/hermes-engine/build.gradle.kts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4ed9ea7dc9a..ec722631921 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { alias(libs.plugins.nexus.publish) - alias(libs.plugins.android.library) apply false + id(libs.plugins.android.library.get().pluginId) version libs.plugins.android.library.get().version.requiredVersion apply false alias(libs.plugins.android.application) apply false alias(libs.plugins.download) apply false alias(libs.plugins.kotlin.android) apply false diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index e593c2dc32a..6a54b387501 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -16,9 +16,9 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("maven-publish") id("com.facebook.react") - alias(libs.plugins.android.library) - alias(libs.plugins.download) - alias(libs.plugins.kotlin.android) + id(libs.plugins.android.library.get().pluginId) + id(libs.plugins.download.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) } version = project.findProperty("VERSION_NAME")?.toString()!! diff --git a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts index 69814d86625..b4ecab3d09b 100644 --- a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts +++ b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts @@ -12,8 +12,8 @@ import org.apache.tools.ant.taskdefs.condition.Os plugins { id("maven-publish") id("signing") - alias(libs.plugins.android.library) - alias(libs.plugins.download) + id(libs.plugins.android.library.get().pluginId) + id(libs.plugins.download.get().pluginId) } group = "com.facebook.react" From c3b20bf91aab179dfabc52b7b031d92c8a0268b6 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 17 Jul 2024 11:06:50 -0500 Subject: [PATCH 109/312] [Discord] NDK Publishing additions --- .../ReactAndroid/build.gradle.kts | 71 ++++++++++++++++++- .../react-native/ReactAndroid/publish.gradle | 4 ++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 6a54b387501..8642652fa48 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -461,6 +461,65 @@ fun enableWarningsAsErrors(): Boolean { return value?.toString()?.toBoolean() ?: false } +val packageReactNdkLibsForBuck by + tasks.registering(Copy::class) { + dependsOn("mergeDebugNativeLibs") + // Shared libraries (.so) are copied from the merged_native_libs folder instead + from("$buildDir/intermediates/merged_native_libs/debug/out/lib/") + exclude("**/libjsc.so") + exclude("**/libhermes.so") + into("src/main/jni/prebuilt/lib") + } + +// Derivative of the packageReactNdkDebugLibsForBuck task, appends "debug" to the "into" dir +val packageReactNdkDebugLibsForDiscord by + tasks.registering(Copy::class) { + dependsOn("mergeDebugNativeLibs") + // Shared libraries (.so) are copied from the merged_native_libs folder instead + from("$buildDir/intermediates/merged_native_libs/debug/out/lib/") + exclude("**/libjsc.so") + exclude("**/libhermes.so") + into("src/main/jni/prebuilt/lib/debug") + } + +// Derivative of the packageReactNdkReleaseLibsForBuck task, appends "release" to the "into" dir +val packageReactNdkReleaseLibsForDiscord by + tasks.registering(Copy::class) { + dependsOn("mergeReleaseNativeLibs") + // Shared libraries (.so) are copied from the merged_native_libs folder instead + from("$buildDir/intermediates/merged_native_libs/release/out/lib/") + exclude("**/libjsc.so") + exclude("**/libhermes.so") + into("src/main/jni/prebuilt/lib/release") + } + +val createReactNdkLibraryZipArchiveForDiscord by + tasks.registering(Zip::class) { + // This dependsOn tasks gets all our *.so files into the src/main/jni/prebuilt/lib directory + dependsOn("packageReactNdkDebugLibsForDiscord") + dependsOn("packageReactNdkReleaseLibsForDiscord") + + // A searchable self-documenting name for the build process, but its final packaged name will end up being react-native-{version}.zip + archiveFileName.set("ReactNativeLibrariesForDiscord.zip") + from(layout.projectDirectory.dir("src/main/jni/prebuilt")) { + // Get all *.so files in the prebuilt directory + include("**/*.so") + val fileCopyAction = object: Action { + override fun execute(fcd: FileCopyDetails) { + // Trim down each file's directory to just include the "lib/{debug/release}/{architecture}" part + val relativeFileName = RelativePath(true, *fcd.relativePath.segments.takeLast(4).toTypedArray()) + fcd.relativePath = relativeFileName + } + } + eachFile(fileCopyAction) + // Removes empty dirs resulting from the eachFile directory remapping above + includeEmptyDirs = false + } + + // Place this .zip right into our ReactAndroid directory + destinationDirectory.set(layout.projectDirectory) + } + repositories { // Normally RNGP will set repositories for all modules, // but when consumed from source, we need to re-declare @@ -696,5 +755,15 @@ apply(from = "./publish.gradle") // Please note that the original coordinates, `react-native`, have been voided // as they caused https://github.com/facebook/react-native/issues/35210 publishing { - publications { getByName("release", MavenPublication::class) { artifactId = "react-android" } } + publications { + getByName("release", MavenPublication::class) { + artifactId = "react-android" + } + create("libZip") { + groupId = "com.facebook.react" + version = "test" + artifactId = "discord-rn-libs" + artifact(tasks.named("createReactNdkLibraryZipArchiveForDiscord").get()) + } + } } diff --git a/packages/react-native/ReactAndroid/publish.gradle b/packages/react-native/ReactAndroid/publish.gradle index 32287a7c813..2e44520d662 100644 --- a/packages/react-native/ReactAndroid/publish.gradle +++ b/packages/react-native/ReactAndroid/publish.gradle @@ -68,6 +68,10 @@ publishing { name = "mavenTempLocal" url = mavenTempLocalUrl } + maven { + name = "discord" + url = uri("gcs://discord-maven") + } } if (signingKey && signingPwd) { From 1927dccf2eedcffb32c7ed637b372d0788f38ead Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 22 Jul 2024 10:45:36 -0500 Subject: [PATCH 110/312] [Discord] Adding ICU_FOUND=1 to hermes build --- .../react-native/ReactAndroid/hermes-engine/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts index b4ecab3d09b..59d1f26a1eb 100644 --- a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts +++ b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts @@ -149,6 +149,7 @@ val configureBuildForHermes by "-B", hermesBuildDir.toString(), "-DJSI_DIR=" + jsiDir.absolutePath, + "-DICU_FOUND=1", ) if (Os.isFamily(Os.FAMILY_WINDOWS)) { cmakeCommandLine = cmakeCommandLine + "-GNMake Makefiles" From ead6e6a14d98e87f670742508383467cf393fa43 Mon Sep 17 00:00:00 2001 From: Steven Petryk Date: Mon, 29 Jul 2024 14:40:09 -0700 Subject: [PATCH 111/312] Ensure third-party-podspecs depend on react_native_pods.rb These podspecs all depend on a function defined in another Ruby file (which is kind of scary, but prooobably okay). However, they do not `require` that file, and instead (previously) were just relying on the fact that CocoaPods loads all the podspecs declared in your Podfile. This is fine for `pod install`, but doesn't apply to commands like `pod ipc spec` (which is used to convert an individual Podspec file to JSON). With that command, the PodSpecs were not evaluating successfully, as they didn't have access to this function. So we add the proper requires here and call it a day. --- .../react-native/third-party-podspecs/DoubleConversion.podspec | 2 ++ packages/react-native/third-party-podspecs/RCT-Folly.podspec | 2 ++ packages/react-native/third-party-podspecs/boost.podspec | 2 ++ packages/react-native/third-party-podspecs/fmt.podspec | 2 ++ packages/react-native/third-party-podspecs/glog.podspec | 2 ++ 5 files changed, 10 insertions(+) diff --git a/packages/react-native/third-party-podspecs/DoubleConversion.podspec b/packages/react-native/third-party-podspecs/DoubleConversion.podspec index 56923bcab13..9c89ac48e77 100644 --- a/packages/react-native/third-party-podspecs/DoubleConversion.podspec +++ b/packages/react-native/third-party-podspecs/DoubleConversion.podspec @@ -3,6 +3,8 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +require_relative "../scripts/react_native_pods" + double_conversion_config = get_double_conversion_config() double_conversion_git_url = double_conversion_config[:git] diff --git a/packages/react-native/third-party-podspecs/RCT-Folly.podspec b/packages/react-native/third-party-podspecs/RCT-Folly.podspec index 8852179b6ce..fa126875cab 100644 --- a/packages/react-native/third-party-podspecs/RCT-Folly.podspec +++ b/packages/react-native/third-party-podspecs/RCT-Folly.podspec @@ -3,6 +3,8 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +require_relative "../scripts/react_native_pods" + folly_config = get_folly_config() folly_config_file = folly_config[:config_file] folly_release_version = folly_config[:version] diff --git a/packages/react-native/third-party-podspecs/boost.podspec b/packages/react-native/third-party-podspecs/boost.podspec index 0c7a0c0650b..5c29c4c7e5f 100644 --- a/packages/react-native/third-party-podspecs/boost.podspec +++ b/packages/react-native/third-party-podspecs/boost.podspec @@ -3,6 +3,8 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +require_relative "../scripts/react_native_pods" + boost_config = get_boost_config() boost_git_url = boost_config[:git] diff --git a/packages/react-native/third-party-podspecs/fmt.podspec b/packages/react-native/third-party-podspecs/fmt.podspec index 2f38990e226..0c92fb26257 100644 --- a/packages/react-native/third-party-podspecs/fmt.podspec +++ b/packages/react-native/third-party-podspecs/fmt.podspec @@ -3,6 +3,8 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +require_relative "../scripts/react_native_pods" + fmt_config = get_fmt_config() fmt_git_url = fmt_config[:git] diff --git a/packages/react-native/third-party-podspecs/glog.podspec b/packages/react-native/third-party-podspecs/glog.podspec index af7668077f9..c03f6038d0f 100644 --- a/packages/react-native/third-party-podspecs/glog.podspec +++ b/packages/react-native/third-party-podspecs/glog.podspec @@ -3,6 +3,8 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +require_relative "../scripts/react_native_pods" + glog_config = get_glog_config() glog_git_url = glog_config[:git] From 4489b5e0d9fc9360f276b546cd48c51e10679a58 Mon Sep 17 00:00:00 2001 From: Miguel Gaeta Date: Tue, 10 Sep 2024 17:20:05 -0700 Subject: [PATCH 112/312] [IOS] Fix a bug in reported device window/screen size for iPad and possibly iPhone. --- .../React/CoreModules/RCTDeviceInfo.mm | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/react-native/React/CoreModules/RCTDeviceInfo.mm b/packages/react-native/React/CoreModules/RCTDeviceInfo.mm index e1efd2f7342..e32a5f9134c 100644 --- a/packages/react-native/React/CoreModules/RCTDeviceInfo.mm +++ b/packages/react-native/React/CoreModules/RCTDeviceInfo.mm @@ -99,7 +99,7 @@ - (void)initialize _currentInterfaceOrientation = RCTKeyWindow().windowScene.interfaceOrientation; [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(interfaceFrameDidChange) + selector:@selector(interfaceFrameDidChangeAsync) name:UIDeviceOrientationDidChangeNotification object:nil]; #endif @@ -276,6 +276,23 @@ - (void)interfaceFrameDidChange RCTExecuteOnMainQueue(^{ [weakSelf _interfaceFrameDidChange]; }); + +} + +// Because this RCTDeviceInfo uses dispatch_get_main_queue, RCTExecuteOnMainQueue +// as specified in the interfaceFrameDidChange method will run without delay. +// +// The call to get window measurements may not be accurate as the window +// may not have updated yet. To ensure we get the correct window measurements +// use `dispatch_async` to delay a tick and wait for the window to update. +// +// This bug was observed and reproduced on an iPad but may exist for iPhone as well. +- (void)interfaceFrameDidChangeAsync +{ + __weak __typeof(self) weakSelf = self; + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf _interfaceFrameDidChange]; + }); } - (void)_interfaceFrameDidChange From 3af0a9553d07ef1328970cd23e98a89509f1b4dc Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 4 Dec 2024 11:29:28 -0600 Subject: [PATCH 113/312] [Discord] kv-storage prebuilt prefab config --- .../react/tasks/internal/PrepareBoostTask.kt | 2 ++ .../tasks/internal/PreparePrefabHeadersTask.kt | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PrepareBoostTask.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PrepareBoostTask.kt index c13a0d90ea2..19510ccd5b2 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PrepareBoostTask.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PrepareBoostTask.kt @@ -38,7 +38,9 @@ abstract class PrepareBoostTask : DefaultTask() { it.from(boostThirdPartyJniPath) it.include( "CMakeLists.txt", + "boost_${boostVersion.get()}/boost/**/*.h", "boost_${boostVersion.get()}/boost/**/*.hpp", + "boost/boost/**/*.h", "boost/boost/**/*.hpp", "asm/**/*.S") it.includeEmptyDirs = false diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt index f30392dd3eb..08b3562bcad 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt @@ -70,6 +70,19 @@ abstract class PreparePrefabHeadersTask : DefaultTask() { it.include("boost/cstdint.hpp") it.include("boost/utility.hpp") it.include("boost/version.hpp") + // Extra files for kv-storage + it.include("boost/*.hpp") + it.include("boost/align/**/*.hpp") + it.include("boost/container/**/*.hpp") + it.include("boost/intrusive/**/*.hpp") + it.include("boost/iterator/**/*.hpp") + it.include("boost/lockfree/**/*.hpp") + it.include("boost/move/**/*.hpp") + it.include("boost/mp11/**/*.hpp") + it.include("boost/mpl/**/*.hpp") + it.include("boost/parameter/**/*.hpp") + it.include("boost/type_traits/**/*.hpp") + it.include("boost/utility/**/*.hpp") it.into(File(outputFolder.asFile, headerPrefix)) } } From cd31c00a087c8febec2435c90ecf0cd5dad2b193 Mon Sep 17 00:00:00 2001 From: Joe Mun Date: Thu, 5 Dec 2024 13:16:40 -0800 Subject: [PATCH 114/312] Patch Flow syntax failures --- .../Libraries/Animated/createAnimatedComponent.js | 4 ++++ .../src/private/animated/NativeAnimatedHelper.js | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/react-native/Libraries/Animated/createAnimatedComponent.js b/packages/react-native/Libraries/Animated/createAnimatedComponent.js index 345c1ac29ab..6472fe0fbba 100644 --- a/packages/react-native/Libraries/Animated/createAnimatedComponent.js +++ b/packages/react-native/Libraries/Animated/createAnimatedComponent.js @@ -29,6 +29,10 @@ import {useMemo} from 'react'; type Nullable = void | null; type Primitive = string | number | boolean | symbol | void; type Builtin = (...$ReadOnlyArray) => mixed | Date | Error | RegExp; +export type AnimatedProps = { + // eslint-disable-next-line no-unused-vars + +[_K]: any, +}; export type WithAnimatedValue<+T> = T extends Builtin | Nullable ? T diff --git a/packages/react-native/src/private/animated/NativeAnimatedHelper.js b/packages/react-native/src/private/animated/NativeAnimatedHelper.js index 6ad2ea8ec91..67a6ea74b77 100644 --- a/packages/react-native/src/private/animated/NativeAnimatedHelper.js +++ b/packages/react-native/src/private/animated/NativeAnimatedHelper.js @@ -150,7 +150,7 @@ const API = { } : (tag, saveValueCallback) => { NativeOperations.getValue(tag, saveValueCallback); - }) as $NonMaybeType['getValue'], + }), setWaitingForIdentifier(id: string): void { if (shouldSignalBatch) { @@ -237,7 +237,7 @@ const API = { if (Platform.OS === 'android' || shouldSignalBatch) { NativeAnimatedModule?.finishOperationBatch?.(); } - }) as () => void, + }), createAnimatedNode(tag: number, config: AnimatedNodeConfig): void { NativeOperations.createAnimatedNode(tag, config); @@ -279,7 +279,7 @@ const API = { config, endCallback, ); - }) as $NonMaybeType['startAnimatingNode'], + }), stopAnimation(animationId: number) { NativeOperations.stopAnimation(animationId); From dcb5022b68c1c6b0f660641710e343cc85851d3c Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 3 Jan 2025 18:52:54 -0600 Subject: [PATCH 115/312] [Discord] ForwardingConsoleMethods.def -> ForwardingConsoleMethods.h because of bazel --- ...orwardingConsoleMethods.def => ForwardingConsoleMethods.h} | 0 .../ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename packages/react-native/ReactCommon/jsinspector-modern/{ForwardingConsoleMethods.def => ForwardingConsoleMethods.h} (100%) diff --git a/packages/react-native/ReactCommon/jsinspector-modern/ForwardingConsoleMethods.def b/packages/react-native/ReactCommon/jsinspector-modern/ForwardingConsoleMethods.h similarity index 100% rename from packages/react-native/ReactCommon/jsinspector-modern/ForwardingConsoleMethods.def rename to packages/react-native/ReactCommon/jsinspector-modern/ForwardingConsoleMethods.h diff --git a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp index c5994609bd1..6db1845a00a 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp @@ -322,7 +322,7 @@ void consoleAssert( runtime, \ {timestampMs, type, std::move(argsVec), std::move(stackTrace)}); \ } -#include "ForwardingConsoleMethods.def" +#include "ForwardingConsoleMethods.h" #undef FORWARDING_CONSOLE_METHOD /* @@ -599,7 +599,7 @@ void RuntimeTarget::installConsoleHandler() { // Install forwarding console methods. #define FORWARDING_CONSOLE_METHOD(name, type) \ installConsoleMethod(#name, console_##name); -#include "ForwardingConsoleMethods.def" +#include "ForwardingConsoleMethods.h" #undef FORWARDING_CONSOLE_METHOD runtime.global().setProperty(runtime, "console", console); From bdbf2bdb2be8e1bfd79be02a667451856bf37809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Sun, 2 Mar 2025 19:33:24 +0100 Subject: [PATCH 116/312] fix: work with comma separated fonts New arch version of: https://github.com/discord/react-native/commit/107d9a8ee20b23cc309eafe4091a1c9ee39e0cea --- .../textlayoutmanager/RCTFontUtils.mm | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm b/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm index 39093efef09..189b5962103 100644 --- a/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm +++ b/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm @@ -332,8 +332,23 @@ static UIFontDescriptorSystemDesign RCTGetFontDescriptorSystemDesign(NSString *f fontNames = [UIFont fontNamesForFamilyName:font.familyName]; fontWeight = fontWeight ?: RCTGetFontWeight(font); } else { - // Failback to system font. - font = [UIFont systemFontOfSize:effectiveFontSize weight:fontProperties.weight]; + // Check if font string is a list of fonts comma separated + NSArray *rawFontFamilies = [fontProperties.family componentsSeparatedByString:@","]; + if (rawFontFamilies.count >= 1) { + NSArray *updatedFontNames = fontNames; + + for (NSString *name in rawFontFamilies) { + UIFont *font = [UIFont fontWithName:name size:effectiveFontSize]; + if (font) { + updatedFontNames = [updatedFontNames arrayByAddingObject:font.fontName]; + } + } + + fontNames = updatedFontNames; + } else { + // Failback to system font. + font = [UIFont systemFontOfSize:effectiveFontSize weight:fontProperties.weight]; + } } } From 77dc4d307547897ee3cfd346f05e455aafe4f37c Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Mar 2025 11:41:39 -0500 Subject: [PATCH 117/312] Misc. Syntax Errors, Squash Later --- .../hermes-engine/build.gradle.kts | 5 +++ .../react/views/text/ReactFontManager.kt | 44 +++++++++---------- .../react/views/text/ReactTypefaceUtils.kt | 1 - .../react/views/view/ReactDrawableHelper.kt | 8 +++- 4 files changed, 33 insertions(+), 25 deletions(-) diff --git a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts index 59d1f26a1eb..92f7a7eca9d 100644 --- a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts +++ b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts @@ -246,6 +246,11 @@ android { ndkVersion = libs.versions.ndkVersion.get() } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + defaultConfig { minSdk = libs.versions.minSdk.get().toInt() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt index d44bc0de441..c67a11a617b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt @@ -31,10 +31,10 @@ import java.util.HashMap * [com.facebook.react.common.assets.ReactFontManager] instead. */ @Nullsafe(Nullsafe.Mode.LOCAL) -class ReactFontManager private constructor() { +public class ReactFontManager private constructor() { - companion object { - var createAssetTypefaceOverride: Function? = null + public companion object { + public var createAssetTypefaceOverride: Function? = null // NOTE: Indices in `EXTENSIONS` correspond to the `TypeFace` style constants. private val EXTENSIONS = arrayOf("", "_bold", "_italic", "_bold_italic") @@ -44,7 +44,7 @@ class ReactFontManager private constructor() { private var sReactFontManagerInstance: ReactFontManager? = null @JvmStatic - fun getInstance(): ReactFontManager { + public fun getInstance(): ReactFontManager { return sReactFontManagerInstance ?: ReactFontManager().also { sReactFontManagerInstance = it } } @@ -123,11 +123,11 @@ class ReactFontManager private constructor() { private val mFontCache = HashMap() private val mCustomTypefaceCache = HashMap() - fun getTypeface(fontFamilyName: String, style: Int, assetManager: AssetManager): Typeface { + public fun getTypeface(fontFamilyName: String, style: Int, assetManager: AssetManager): Typeface { return getTypeface(fontFamilyName, TypefaceStyle(style), assetManager) } - fun getTypeface( + public fun getTypeface( fontFamilyName: String, weight: Int, italic: Boolean, @@ -136,7 +136,7 @@ class ReactFontManager private constructor() { return getTypeface(fontFamilyName, TypefaceStyle(weight, italic), assetManager) } - fun getTypeface( + public fun getTypeface( fontFamilyName: String, style: Int, weight: Int, @@ -145,7 +145,7 @@ class ReactFontManager private constructor() { return getTypeface(fontFamilyName, TypefaceStyle(style, weight), assetManager) } - fun getTypeface( + public fun getTypeface( fontFamilyName: String, typefaceStyle: TypefaceStyle, assetManager: AssetManager @@ -180,7 +180,7 @@ class ReactFontManager private constructor() { * * ReactFontManager.getInstance().addCustomFont(this, "Srisakdi", R.font.srisakdi); */ - fun addCustomFont(context: Context, fontFamily: String, fontId: Int) { + public fun addCustomFont(context: Context, fontFamily: String, fontId: Int) { ResourcesCompat.getFont(context, fontId)?.let { font -> mCustomTypefaceCache[fontFamily] = font } @@ -189,7 +189,7 @@ class ReactFontManager private constructor() { /** * Equivalent method to [addCustomFont] which accepts a Typeface object. */ - fun addCustomFont(fontFamily: String, font: Typeface?) { + public fun addCustomFont(fontFamily: String, font: Typeface?) { font?.let { mCustomTypefaceCache[fontFamily] = it } } @@ -198,7 +198,7 @@ class ReactFontManager private constructor() { * * @param style see [Typeface.DEFAULT], [Typeface.BOLD], [Typeface.ITALIC], [Typeface.BOLD_ITALIC] */ - fun setTypeface(fontFamilyName: String, style: Int, typeface: Typeface?) { + public fun setTypeface(fontFamilyName: String, style: Int, typeface: Typeface?) { typeface?.let { font -> var assetFontFamily = mFontCache[fontFamilyName] if (assetFontFamily == null) { @@ -209,23 +209,23 @@ class ReactFontManager private constructor() { } } - class TypefaceStyle { - companion object { - const val BOLD = 700 - const val NORMAL = 400 - private const val MIN_WEIGHT = 1 - private const val MAX_WEIGHT = 1000 + public class TypefaceStyle { + public companion object { + public const val BOLD: Int = 700 + public const val NORMAL: Int = 400 + private const val MIN_WEIGHT: Int = 1 + private const val MAX_WEIGHT: Int = 1000 } private val mItalic: Boolean private val mWeight: Int - constructor(weight: Int, italic: Boolean) { + public constructor(weight: Int, italic: Boolean) { mItalic = italic mWeight = if (weight == ReactConstants.UNSET) NORMAL else weight } - constructor(style: Int) { + public constructor(style: Int) { var styleValue = if (style == ReactConstants.UNSET) Typeface.NORMAL else style mItalic = (styleValue and Typeface.ITALIC) != 0 @@ -236,7 +236,7 @@ class ReactFontManager private constructor() { * If `weight` is supplied, it will be combined with the italic bit from `style`. Otherwise, any * existing weight bit in `style` will be used. */ - constructor(style: Int, weight: Int) { + public constructor(style: Int, weight: Int) { var styleValue = if (style == ReactConstants.UNSET) Typeface.NORMAL else style mItalic = (styleValue and Typeface.ITALIC) != 0 @@ -247,7 +247,7 @@ class ReactFontManager private constructor() { } } - fun getNearestStyle(): Int { + public fun getNearestStyle(): Int { return if (mWeight < BOLD) { if (mItalic) Typeface.ITALIC else Typeface.NORMAL } else { @@ -255,7 +255,7 @@ class ReactFontManager private constructor() { } } - fun apply(typeface: Typeface): Typeface { + public fun apply(typeface: Typeface): Typeface { return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { Typeface.create(typeface, getNearestStyle()) } else { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt index 517466055c7..db5feca6671 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt @@ -12,7 +12,6 @@ import android.graphics.Typeface import android.text.TextUtils import com.facebook.react.bridge.ReadableArray import com.facebook.react.common.ReactConstants -import com.facebook.react.common.assets.ReactFontManager public object ReactTypefaceUtils { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt index a76546e6c12..58448140809 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt @@ -14,6 +14,8 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.RippleDrawable +import android.graphics.drawable.ShapeDrawable +import android.graphics.drawable.shapes.RoundRectShape import android.util.TypedValue import com.facebook.react.bridge.JSApplicationIllegalArgumentException import com.facebook.react.bridge.ReadableMap @@ -108,11 +110,13 @@ public object ReactDrawableHelper { if (drawableDescriptionDict.hasKey("rippleCornerRadius")) { val rippleRadius = PixelUtil.toPixelFromDIP(drawableDescriptionDict.getDouble("rippleCornerRadius")) - return ShapeDrawable(RoundRectShape( + return ShapeDrawable( + RoundRectShape( FloatArray(8) { rippleRadius }, null, null - )) + ) + ) } if (!drawableDescriptionDict.hasKey("borderless") || From 94ffbe3ed2b4bbdc3f5bc18e8405702051b0949a Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Mar 2025 14:34:20 -0500 Subject: [PATCH 118/312] More ImageSource Cleanup (Squash Later) --- .../java/com/facebook/react/views/imagehelper/ImageSource.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt index e6941ca591d..a9f0fe3c732 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt @@ -9,11 +9,8 @@ package com.facebook.react.views.imagehelper import android.content.Context import android.net.Uri -<<<<<<< HEAD import com.facebook.react.modules.fresco.ImageCacheControl -======= import androidx.arch.core.util.Function ->>>>>>> 946f3eaa576 (Update RNA ImageView to support forced cached property to fix GIF flicker.) import java.util.Objects /** Class describing an image source (network URI or resource) and size. */ From 9c52ed7908246fc1c683e5f912f291631447de65 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 11 Mar 2025 14:39:23 -0500 Subject: [PATCH 119/312] Update Android websocket module to expose onOpen callback. --- .../react/modules/websocket/WebSocketModule.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt index 8dcd8c7c6f4..3623a28a43d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt @@ -45,10 +45,17 @@ public class WebSocketModule(context: ReactApplicationContext) : public fun onMessage(byteString: ByteString, params: WritableMap) } + public interface OnOpenHandler { + + public fun onOpen(webSocket: WebSocket, socketId: Int); + } + private val webSocketConnections: MutableMap = ConcurrentHashMap() private val contentHandlers: MutableMap = ConcurrentHashMap() private val cookieHandler: ForwardingCookieHandler = ForwardingCookieHandler() + var mOnOpenHandler: OnOpenHandler = null; + override fun invalidate() { for (socket in webSocketConnections.values) { socket.close(1_001 /* endpoint is going away */, null) @@ -147,6 +154,9 @@ public class WebSocketModule(context: ReactApplicationContext) : put("protocol", response.header("Sec-WebSocket-Protocol", "")) } sendEvent("websocketOpen", params) + if (mOnOpenHandler != null) { + mOnOpenHandler.onOpen(webSocket, id); + } } override fun onClosing(websocket: WebSocket, code: Int, reason: String) { From da2e363f063eb807c8e9e3658795a389c6480fd0 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 11 Mar 2025 14:50:38 -0500 Subject: [PATCH 120/312] Syntax Fixes, Squash Later --- .../facebook/react/modules/websocket/WebSocketModule.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt index 3623a28a43d..41e60622819 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt @@ -47,14 +47,14 @@ public class WebSocketModule(context: ReactApplicationContext) : public interface OnOpenHandler { - public fun onOpen(webSocket: WebSocket, socketId: Int); + public fun onOpen(webSocket: WebSocket, socketId: Int) } private val webSocketConnections: MutableMap = ConcurrentHashMap() private val contentHandlers: MutableMap = ConcurrentHashMap() private val cookieHandler: ForwardingCookieHandler = ForwardingCookieHandler() - var mOnOpenHandler: OnOpenHandler = null; + public var mOnOpenHandler: OnOpenHandler? = null override fun invalidate() { for (socket in webSocketConnections.values) { @@ -154,9 +154,7 @@ public class WebSocketModule(context: ReactApplicationContext) : put("protocol", response.header("Sec-WebSocket-Protocol", "")) } sendEvent("websocketOpen", params) - if (mOnOpenHandler != null) { - mOnOpenHandler.onOpen(webSocket, id); - } + mOnOpenHandler?.onOpen(webSocket, id) } override fun onClosing(websocket: WebSocket, code: Int, reason: String) { From 04ba9f97027ae9e11d4b6bf9dba9eed59581e7c0 Mon Sep 17 00:00:00 2001 From: Patrick Mick Date: Thu, 27 Mar 2025 10:53:23 -0700 Subject: [PATCH 121/312] Add require_relative to fast_float podspec --- packages/react-native/third-party-podspecs/fast_float.podspec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/third-party-podspecs/fast_float.podspec b/packages/react-native/third-party-podspecs/fast_float.podspec index ba0bb7c565c..10f9658ec6f 100644 --- a/packages/react-native/third-party-podspecs/fast_float.podspec +++ b/packages/react-native/third-party-podspecs/fast_float.podspec @@ -3,6 +3,8 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +require_relative "../scripts/react_native_pods" + fast_float_config = get_fast_float_config() fast_float_git_url = fast_float_config[:git] From 1ccb4647295cf3abe4ff175b0192a8bc2fe723c5 Mon Sep 17 00:00:00 2001 From: Timothy Huynh Date: Tue, 22 Apr 2025 12:31:19 -0400 Subject: [PATCH 122/312] update Text to support gradient colors --- .../Text/BaseText/RCTBaseTextViewManager.mm | 1 + .../Libraries/Text/RCTTextAttributes.h | 1 + .../Libraries/Text/RCTTextAttributes.mm | 29 ++++++++++++++ .../react-native/Libraries/Text/Text.d.ts | 5 +++ .../Libraries/Text/TextNativeComponent.js | 1 + .../views/text/ReactBaseTextShadowNode.java | 40 +++++++++++++++++-- .../text/internal/span/LinearGradientSpan.kt | 27 +++++++++++++ 7 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt diff --git a/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm b/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm index e9ce272b5f5..6e88d6f9227 100644 --- a/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm +++ b/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm @@ -28,6 +28,7 @@ - (RCTShadowView *)shadowView // Color RCT_REMAP_SHADOW_PROPERTY(color, textAttributes.foregroundColor, UIColor) RCT_REMAP_SHADOW_PROPERTY(backgroundColor, textAttributes.backgroundColor, UIColor) +RCT_REMAP_SHADOW_PROPERTY(gradientColors, textAttributes.gradientColors, NSArray) RCT_REMAP_SHADOW_PROPERTY(opacity, textAttributes.opacity, CGFloat) // Font RCT_REMAP_SHADOW_PROPERTY(fontFamily, textAttributes.fontFamily, NSString) diff --git a/packages/react-native/Libraries/Text/RCTTextAttributes.h b/packages/react-native/Libraries/Text/RCTTextAttributes.h index 1b72abe51df..ad48554f36f 100644 --- a/packages/react-native/Libraries/Text/RCTTextAttributes.h +++ b/packages/react-native/Libraries/Text/RCTTextAttributes.h @@ -26,6 +26,7 @@ extern NSString *const RCTTextAttributesTagAttributeName; // Color @property (nonatomic, strong, nullable) UIColor *foregroundColor; @property (nonatomic, strong, nullable) UIColor *backgroundColor; +@property (nonatomic, copy, nullable) NSArray *gradientColors; @property (nonatomic, assign) CGFloat opacity; // Font @property (nonatomic, copy, nullable) NSString *fontFamily; diff --git a/packages/react-native/Libraries/Text/RCTTextAttributes.mm b/packages/react-native/Libraries/Text/RCTTextAttributes.mm index 7841115b995..865cdfd397a 100644 --- a/packages/react-native/Libraries/Text/RCTTextAttributes.mm +++ b/packages/react-native/Libraries/Text/RCTTextAttributes.mm @@ -46,6 +46,7 @@ - (void)applyTextAttributes:(RCTTextAttributes *)textAttributes // Color _foregroundColor = textAttributes->_foregroundColor ?: _foregroundColor; _backgroundColor = textAttributes->_backgroundColor ?: _backgroundColor; + _gradientColors = textAttributes->_gradientColors ?: _gradientColors; _opacity = !isnan(textAttributes->_opacity) ? (isnan(_opacity) ? 1.0 : _opacity) * textAttributes->_opacity : _opacity; @@ -294,6 +295,34 @@ - (UIColor *)effectiveForegroundColor { UIColor *effectiveForegroundColor = _foregroundColor ?: [UIColor blackColor]; + if (_gradientColors != nil) { + NSMutableArray *cgColors = [NSMutableArray array]; + for (NSNumber *rawColor in _gradientColors) { + if (rawColor != nil) { + UIColor *color = [RCTConvert UIColor:@((0xFF << 24) | [rawColor integerValue])]; + [cgColors addObject:(id)color.CGColor]; + } + } + + if([cgColors count] > 0) { + CAGradientLayer *gradient = [CAGradientLayer layer]; + // this pattern width corresponds roughly to desktop's pattern width + int patternWidth = 100; + CGFloat height = _lineHeight * self.effectiveFontSizeMultiplier; + gradient.frame = CGRectMake(0, 0, patternWidth, height); + gradient.colors = cgColors; + gradient.startPoint = CGPointMake(0.0, 0.5); + gradient.endPoint = CGPointMake(1.0, 0.5); + + UIGraphicsBeginImageContextWithOptions(gradient.frame.size, NO, 0.0); + [gradient renderInContext:UIGraphicsGetCurrentContext()]; + UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + effectiveForegroundColor = [UIColor colorWithPatternImage:gradientImage]; + } + } + if (!isnan(_opacity)) { effectiveForegroundColor = [effectiveForegroundColor colorWithAlphaComponent:CGColorGetAlpha(effectiveForegroundColor.CGColor) * _opacity]; diff --git a/packages/react-native/Libraries/Text/Text.d.ts b/packages/react-native/Libraries/Text/Text.d.ts index 9133cecaf3d..c979aa8728f 100644 --- a/packages/react-native/Libraries/Text/Text.d.ts +++ b/packages/react-native/Libraries/Text/Text.d.ts @@ -218,6 +218,11 @@ export interface TextProps pressRetentionOffset?: | {top: number; left: number; bottom: number; right: number} | undefined; + + /** + * Adds a horizontal gradient using the int based color values. + */ + gradientColors?: number[] | undefined; } /** diff --git a/packages/react-native/Libraries/Text/TextNativeComponent.js b/packages/react-native/Libraries/Text/TextNativeComponent.js index 709dd5613ed..6141ca5e886 100644 --- a/packages/react-native/Libraries/Text/TextNativeComponent.js +++ b/packages/react-native/Libraries/Text/TextNativeComponent.js @@ -47,6 +47,7 @@ const textViewConfig = { dataDetectorType: true, android_hyphenationFrequency: true, lineBreakStrategyIOS: true, + gradientColors: true, }, directEventTypes: { topTextLayout: { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java index 5bdd5cbaba7..dbe7ddbf8b1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java @@ -21,6 +21,7 @@ import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableType; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.annotations.internal.LegacyArchitecture; import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; @@ -37,6 +38,7 @@ import com.facebook.react.views.text.internal.span.CustomLetterSpacingSpan; import com.facebook.react.views.text.internal.span.CustomLineHeightSpan; import com.facebook.react.views.text.internal.span.CustomStyleSpan; +import com.facebook.react.views.text.internal.span.LinearGradientSpan; import com.facebook.react.views.text.internal.span.ReactAbsoluteSizeSpan; import com.facebook.react.views.text.internal.span.ReactBackgroundColorSpan; import com.facebook.react.views.text.internal.span.ReactClickableSpan; @@ -168,9 +170,15 @@ private static void buildSpannedFromShadowNode( } int end = sb.length(); if (end >= start) { - if (textShadowNode.mIsColorSet) { - ops.add( - new SetSpanOperation(start, end, new ReactForegroundColorSpan(textShadowNode.mColor))); + if (textShadowNode.mIsColorSet || textShadowNode.mGradientColors != null) { + if (textShadowNode.mGradientColors != null && textShadowNode.mGradientColors.length >= 2) { + int effectiveFontSize = textAttributes.getEffectiveFontSize(); + ops.add( + new SetSpanOperation(start, end, new LinearGradientSpan(start * effectiveFontSize, textShadowNode.mGradientColors))); + } else { + ops.add( + new SetSpanOperation(start, end, new ReactForegroundColorSpan(textShadowNode.mColor))); + } } if (textShadowNode.mIsBackgroundColorSet) { ops.add( @@ -331,6 +339,8 @@ protected Spannable spannedFromShadowNode( protected boolean mIsBackgroundColorSet = false; protected int mBackgroundColor; + protected @Nullable int[] mGradientColors = null; + protected @Nullable AccessibilityRole mAccessibilityRole = null; protected @Nullable Role mRole = null; @@ -492,6 +502,30 @@ public void setColor(@Nullable Integer color) { markUpdated(); } + @ReactProp(name = "gradientColors") + public void setGradientColors(@Nullable ReadableArray gradientColors) { + if (gradientColors != null) { + ArrayList colors = new ArrayList(); + + for (int i = 0; i < gradientColors.size(); i++) { + if (!gradientColors.isNull(i) && gradientColors.getType(i) == ReadableType.Number) { + int color = gradientColors.getInt(i); + colors.add(color); + } + } + + int colorsSize = colors.size(); + if (colorsSize >= 2) { + int[] colorsAsList = new int[colorsSize]; + for (int i = 0; i < colorsSize; i++) { + colorsAsList[i] = colors.get(i); + } + + mGradientColors = colorsAsList; + } + } + } + @ReactProp(name = ViewProps.BACKGROUND_COLOR, customType = "Color") public void setBackgroundColor(@Nullable Integer color) { // Background color needs to be handled here for virtual nodes so it can be incorporated into diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt new file mode 100644 index 00000000000..76a6d88e0be --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt @@ -0,0 +1,27 @@ +package com.facebook.react.views.text.internal.span + +import android.graphics.LinearGradient +import android.graphics.Shader +import android.text.TextPaint +import android.text.style.CharacterStyle +import android.text.style.UpdateAppearance + +public class LinearGradientSpan( + private val start: Float, + private val colors: IntArray, +) : CharacterStyle(), ReactSpan, + UpdateAppearance { + public override fun updateDrawState(tp: TextPaint) { + val textShader: Shader = + LinearGradient( + start, + 0f, + start + 150.0f, + 0f, + colors, + null, + Shader.TileMode.MIRROR, + ) + tp.setShader(textShader) + } +} From 89f883bb9e8297c07bdd870d843a8d2ca75d4ab4 Mon Sep 17 00:00:00 2001 From: Ruby Feinstein <4782063+RubyFeinstein@users.noreply.github.com> Date: Mon, 5 May 2025 15:07:52 -0700 Subject: [PATCH 123/312] [android] harden AppStateModule initial state (#57) ## Issue During app startup, react-native's `AppState.currentState` can incorrectly report `background` when the app is actually in the foreground. This happens because: 1. `AppStateModule` relies on `onHostResume` and `onHostPause` event subscriptions to track state 2. The initial state can incorrectly initialize to `APP_STATE_BACKGROUND` when `reactContext.lifecycleState === LifecycleState.BEFORE_CREATE` (which occurs before root view attachment) ## Solution This PR adds an `isAppForegroundedByMemoryState()` method that provides a more accurate initial state detection when the React context is in `BEFORE_CREATE` lifecycle state. ## Future Improvements While this is a quick workaround to address the immediate issue, potential future improvements: 1. Leveraging Android activity lifecycle to set initial state to `RESUMED` on `onCreate` 2. Mapping `LifecycleState.BEFORE_CREATE` to `unknown` instead of incorrectly mapping to `background` --- .../react/modules/appstate/AppStateModule.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.kt index 656f601f292..5678db935c6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.kt @@ -7,6 +7,8 @@ package com.facebook.react.modules.appstate +import android.app.ActivityManager +import com.facebook.common.logging.FLog import com.facebook.fbreact.specs.NativeAppStateSpec import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.Callback @@ -26,11 +28,27 @@ internal class AppStateModule(reactContext: ReactApplicationContext) : init { reactContext.addLifecycleEventListener(this) reactContext.addWindowFocusChangeListener(this) + val isAppForegroundedByMemoryState = isAppForegroundedByMemoryState() + // pasten: temporary debug log - remove after we validate with real users + FLog.w("AppStateModule", "initial isAppForegroundedByMemoryState = $isAppForegroundedByMemoryState, " + + "reactContext.lifecycleState = ${reactContext.lifecycleState}") + appState = if (reactContext.lifecycleState === LifecycleState.RESUMED) APP_STATE_ACTIVE + // pasten: during cold start appState=APP_STATE_BACKGROUND while tha is actually in the foreground + // best effort foreground detection when LifecycleState.BEFORE_CREATE (which is the initial state) + else if (reactContext.lifecycleState === LifecycleState.BEFORE_CREATE && isAppForegroundedByMemoryState) { + APP_STATE_ACTIVE + } else if (isAppForegroundedByMemoryState) APP_STATE_ACTIVE else APP_STATE_BACKGROUND } + private fun isAppForegroundedByMemoryState(): Boolean { + return ActivityManager.RunningAppProcessInfo().apply { + ActivityManager.getMyMemoryState(this) + }.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND + } + public override fun getTypedExportedConstants(): Map = mapOf(INITIAL_STATE to appState) From 5ef244ce3c3d70b7f4321e9d86cc38678d30e925 Mon Sep 17 00:00:00 2001 From: Timothy Huynh <99213468+timothy-huynh@users.noreply.github.com> Date: Tue, 6 May 2025 16:21:55 -0400 Subject: [PATCH 124/312] update Text gradient colors to be mirrored on ios (#59) --- packages/react-native/Libraries/Text/RCTTextAttributes.mm | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/Libraries/Text/RCTTextAttributes.mm b/packages/react-native/Libraries/Text/RCTTextAttributes.mm index 865cdfd397a..acd15793943 100644 --- a/packages/react-native/Libraries/Text/RCTTextAttributes.mm +++ b/packages/react-native/Libraries/Text/RCTTextAttributes.mm @@ -305,6 +305,7 @@ - (UIColor *)effectiveForegroundColor } if([cgColors count] > 0) { + [cgColors addObject:cgColors[0]]; CAGradientLayer *gradient = [CAGradientLayer layer]; // this pattern width corresponds roughly to desktop's pattern width int patternWidth = 100; From 3bc18798effe04a8b580f63da49f725c5d4b2ebc Mon Sep 17 00:00:00 2001 From: Timothy Huynh <99213468+timothy-huynh@users.noreply.github.com> Date: Tue, 6 May 2025 16:22:15 -0400 Subject: [PATCH 125/312] fix android gradient colors faded (#60) --- .../react/views/text/ReactBaseTextShadowNode.java | 13 +++++-------- .../views/text/internal/span/LinearGradientSpan.kt | 3 +++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java index dbe7ddbf8b1..19fb9374527 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java @@ -170,15 +170,12 @@ private static void buildSpannedFromShadowNode( } int end = sb.length(); if (end >= start) { - if (textShadowNode.mIsColorSet || textShadowNode.mGradientColors != null) { - if (textShadowNode.mGradientColors != null && textShadowNode.mGradientColors.length >= 2) { + if (textShadowNode.mIsColorSet) { + ops.add(new SetSpanOperation(start, end, new ReactForegroundColorSpan(textShadowNode.mColor))); + } + if (textShadowNode.mGradientColors != null && textShadowNode.mGradientColors.length >= 2) { int effectiveFontSize = textAttributes.getEffectiveFontSize(); - ops.add( - new SetSpanOperation(start, end, new LinearGradientSpan(start * effectiveFontSize, textShadowNode.mGradientColors))); - } else { - ops.add( - new SetSpanOperation(start, end, new ReactForegroundColorSpan(textShadowNode.mColor))); - } + ops.add(new SetSpanOperation(start, end, new LinearGradientSpan(start * effectiveFontSize, textShadowNode.mGradientColors))); } if (textShadowNode.mIsBackgroundColorSet) { ops.add( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt index 76a6d88e0be..8f4a4753572 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt @@ -12,6 +12,9 @@ public class LinearGradientSpan( ) : CharacterStyle(), ReactSpan, UpdateAppearance { public override fun updateDrawState(tp: TextPaint) { + // without setting the paint color, the gradient appears "faded" if no foreground color span is also applied + // https://stackoverflow.com/a/52289927 + tp.setColor(colors[0]) val textShader: Shader = LinearGradient( start, From 1cb55c1817a8eace72c2300e0ca857bfbf494127 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 25 Aug 2025 16:49:00 -0500 Subject: [PATCH 126/312] Set useShadowNodeStateOnClone by default to true --- .../internal/featureflags/ReactNativeFeatureFlagsDefaults.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 70dc144b28f..d5d5ede6adc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -137,7 +137,7 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useRawPropsJsiValue(): Boolean = false - override fun useShadowNodeStateOnClone(): Boolean = false + override fun useShadowNodeStateOnClone(): Boolean = true override fun useTurboModuleInterop(): Boolean = false From f87e1689d3cac83b299b0bbe0b30ca7285cd7f19 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Tue, 27 May 2025 15:50:04 +0200 Subject: [PATCH 127/312] fix(new arch): change measure function to measure native view hierarchy on UI thread (#66) * fix(new arch): change measure function to measure native view hierarchy on UI thread * fix ios compile errors * add second parameter `measureOnUI` to .measure function which we only set to true for pressability --- .../Libraries/Pressability/Pressability.js | 2 +- .../Libraries/ReactNative/FabricUIManager.js | 5 +- .../ReactFabricHostComponent.js | 4 +- .../react-native/React/Fabric/RCTScheduler.h | 4 + .../react-native/React/Fabric/RCTScheduler.mm | 6 ++ .../React/Fabric/RCTSurfacePresenter.mm | 9 +++ .../react/fabric/FabricUIManager.java | 22 ++++++ .../react/fabric/mounting/MountingManager.kt | 75 +++++++++++++++++++ .../react/fabric/FabricMountingManager.cpp | 12 +++ .../jni/react/fabric/FabricMountingManager.h | 2 + .../react/fabric/FabricUIManagerBinding.cpp | 8 ++ .../jni/react/fabric/FabricUIManagerBinding.h | 2 + .../React-FabricComponents.podspec | 6 +- .../react/renderer/scheduler/Scheduler.cpp | 7 ++ .../react/renderer/scheduler/Scheduler.h | 1 + .../renderer/scheduler/SchedulerDelegate.h | 1 + .../renderer/uimanager/UIManagerBinding.cpp | 42 ++++++++--- .../renderer/uimanager/UIManagerDelegate.h | 2 + 18 files changed, 192 insertions(+), 18 deletions(-) diff --git a/packages/react-native/Libraries/Pressability/Pressability.js b/packages/react-native/Libraries/Pressability/Pressability.js index ff70d67148f..d96f80fe23c 100644 --- a/packages/react-native/Libraries/Pressability/Pressability.js +++ b/packages/react-native/Libraries/Pressability/Pressability.js @@ -805,7 +805,7 @@ export default class Pressability { if (typeof this._responderID === 'number') { UIManager.measure(this._responderID, this._measureCallback); } else { - this._responderID.measure(this._measureCallback); + this._responderID.measure(this._measureCallback, true /* measureOnUI - will measure native view hierarchy */); } } diff --git a/packages/react-native/Libraries/ReactNative/FabricUIManager.js b/packages/react-native/Libraries/ReactNative/FabricUIManager.js index 13b203f0abd..99c42f31e94 100644 --- a/packages/react-native/Libraries/ReactNative/FabricUIManager.js +++ b/packages/react-native/Libraries/ReactNative/FabricUIManager.js @@ -43,10 +43,7 @@ export interface Spec { +appendChild: (parentNode: Node, child: Node) => Node; +appendChildToSet: (childSet: NodeSet, child: Node) => void; +completeRoot: (rootTag: RootTag, childSet: NodeSet) => void; - +measure: ( - node: Node | NativeElementReference, - callback: MeasureOnSuccessCallback, - ) => void; + +measure: (node: Node | NativeElementReference, callback: MeasureOnSuccessCallback, measureOnUI: Boolean) => void; +measureInWindow: ( node: Node | NativeElementReference, callback: MeasureInWindowOnSuccessCallback, diff --git a/packages/react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js b/packages/react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js index aef54dee668..eb0f888792a 100644 --- a/packages/react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +++ b/packages/react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js @@ -65,12 +65,12 @@ export default class ReactFabricHostComponent implements NativeMethods { TextInputState.focusTextInput(this); } - measure(callback: MeasureOnSuccessCallback) { + measure(callback: MeasureOnSuccessCallback, measureOnUI = false) { const node = getNodeFromInternalInstanceHandle( this.__internalInstanceHandle, ); if (node != null) { - fabricMeasure(node, callback); + fabricMeasure(node, callback, measureOnUI); } } diff --git a/packages/react-native/React/Fabric/RCTScheduler.h b/packages/react-native/React/Fabric/RCTScheduler.h index ed585390890..a5e310f8bc2 100644 --- a/packages/react-native/React/Fabric/RCTScheduler.h +++ b/packages/react-native/React/Fabric/RCTScheduler.h @@ -43,6 +43,10 @@ NS_ASSUME_NONNULL_BEGIN forShadowView:(const facebook::react::ShadowView &)shadowView; - (void)schedulerDidSynchronouslyUpdateViewOnUIThread:(facebook::react::Tag)reactTag props:(folly::dynamic)props; + +- (void)schedulerMeasure:(const facebook::react::ShadowView &)shadowView + jsCallback:(std::function)jsCallback; + @end /** diff --git a/packages/react-native/React/Fabric/RCTScheduler.mm b/packages/react-native/React/Fabric/RCTScheduler.mm index 6cc4e5b6feb..58a0ca09305 100644 --- a/packages/react-native/React/Fabric/RCTScheduler.mm +++ b/packages/react-native/React/Fabric/RCTScheduler.mm @@ -65,6 +65,12 @@ void schedulerDidSendAccessibilityEvent(const ShadowView &shadowView, const std: RCTScheduler *scheduler = (__bridge RCTScheduler *)scheduler_; [scheduler.delegate schedulerDidSendAccessibilityEvent:shadowView eventType:eventType]; } + + + void schedulerMeasure(const ShadowView& shadowView, std::function jsCallback) override { + RCTScheduler *scheduler = (__bridge RCTScheduler *)scheduler_; + [scheduler.delegate schedulerMeasure:shadowView jsCallback:jsCallback]; + } void schedulerShouldSynchronouslyUpdateViewOnUIThread(facebook::react::Tag tag, const folly::dynamic &props) override { diff --git a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm index 1e675096b31..54349778480 100644 --- a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm +++ b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm @@ -348,6 +348,15 @@ - (void)removeObserver:(id)observer } } +- (void)schedulerMeasure:(const facebook::react::ShadowView &)shadowView jsCallback:(std::function)jsCallback { + // TODO: do we need to implement this on iOS? It seems to _just work_ +// dispatch_async(dispatch_get_main_queue(), ^{ +// ReactTag tag = shadowView.tag; +// UIView *componentView = +// [self->_mountingManager.componentViewRegistry findComponentViewWithTag:tag]; +// }); +} + #pragma mark - RCTMountingManagerDelegate - (void)mountingManager:(RCTMountingManager *)mountingManager willMountComponentsWithRootTag:(ReactTag)rootTag diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 6199a2ca654..2fe2fc4e0b0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -34,6 +34,7 @@ import com.facebook.infer.annotation.Nullsafe; import com.facebook.infer.annotation.ThreadConfined; import com.facebook.proguard.annotations.DoNotStripAny; +import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ColorPropConverter; import com.facebook.react.bridge.GuardedRunnable; import com.facebook.react.bridge.LifecycleEventListener; @@ -1275,6 +1276,27 @@ public String toString() { }); } + public void measure(int surfaceId, int reactTag, final Callback callback) { + mMountItemDispatcher.addMountItem( + new MountItem() { + @Override + public void execute(@NonNull MountingManager mountingManager) { + mMountingManager.measure(surfaceId, reactTag, callback); + } + + @Override + public int getSurfaceId() { + return surfaceId; + } + + @NonNull + @Override + public String toString() { + return "MEASURE_VIEW"; + } + }); + } + @Override public void profileNextBatch() { // TODO T31905686: Remove this method and add support for multi-threading performance counters diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt index 4b52ade0b58..fee1029cf45 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt @@ -7,11 +7,14 @@ package com.facebook.react.fabric.mounting +import android.graphics.Matrix +import android.graphics.RectF import android.view.View import androidx.annotation.AnyThread import androidx.annotation.UiThread import com.facebook.common.logging.FLog import com.facebook.infer.annotation.ThreadConfined +import com.facebook.react.bridge.Callback import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReactSoftExceptionLogger.logSoftException import com.facebook.react.bridge.ReadableArray @@ -25,6 +28,8 @@ import com.facebook.react.fabric.events.EventEmitterWrapper import com.facebook.react.fabric.mounting.mountitems.MountItem import com.facebook.react.touch.JSResponderHandler import com.facebook.react.uimanager.RootViewManager +import com.facebook.react.uimanager.PixelUtil +import com.facebook.react.uimanager.RootViewUtil import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManagerRegistry import com.facebook.react.uimanager.common.ViewUtil @@ -362,6 +367,76 @@ internal class MountingManager( smm.enqueuePendingEvent(reactTag, eventName, canCoalesceEvent, params, eventCategory) } + /** + * Measure a mounted view and return its bounds relative to the root in DIP units. + * The callback signature matches legacy UIManager: (x0, y0, width, height, pageX, pageY). + */ + @UiThread + fun measure(surfaceId: Int, reactTag: Int, callback: Callback) { + assertOnUiThread() + val smm = getSurfaceMountingManager(surfaceId, reactTag) + if (smm == null) { + callback.invoke(0, 0, 0, 0, 0, 0) + return + } + val view = smm.getView(reactTag) + val measureBuffer = IntArray(4) + measure(view, measureBuffer) + + val x = PixelUtil.toDIPFromPixel(measureBuffer[0].toFloat()) + val y = PixelUtil.toDIPFromPixel(measureBuffer[1].toFloat()) + val width = PixelUtil.toDIPFromPixel(measureBuffer[2].toFloat()) + val height = PixelUtil.toDIPFromPixel(measureBuffer[3].toFloat()) + callback.invoke(0, 0, width, height, x, y) + } + + @Synchronized + fun measure(v: View, outputBuffer: IntArray) { + val rootView = RootViewUtil.getRootView(v) as View + computeBoundingBox(rootView, outputBuffer) + val rootX = outputBuffer[0] + val rootY = outputBuffer[1] + computeBoundingBox(v, outputBuffer) + outputBuffer[0] -= rootX + outputBuffer[1] -= rootY + } + + private fun computeBoundingBox(view: View, outputBuffer: IntArray) { + val boundingBox = RectF() + boundingBox.set(0f, 0f, view.width.toFloat(), view.height.toFloat()) + mapRectFromViewToWindowCoords(view, boundingBox) + + outputBuffer[0] = Math.round(boundingBox.left) + outputBuffer[1] = Math.round(boundingBox.top) + outputBuffer[2] = Math.round(boundingBox.right - boundingBox.left) + outputBuffer[3] = Math.round(boundingBox.bottom - boundingBox.top) + } + + private fun mapRectFromViewToWindowCoords(view: View, rect: RectF) { + var matrix: Matrix = view.matrix + if (!matrix.isIdentity) { + matrix.mapRect(rect) + } + + rect.offset(view.left.toFloat(), view.top.toFloat()) + + var parent = view.parent + while (parent is View) { + val parentView = parent as View + + rect.offset(-parentView.scrollX.toFloat(), -parentView.scrollY.toFloat()) + + matrix = parentView.matrix + if (!matrix.isIdentity) { + matrix.mapRect(rect) + } + + rect.offset(parentView.left.toFloat(), parentView.top.toFloat()) + + parent = parentView.parent + } + } + private fun getSurfaceMountingManager(surfaceId: Int, reactTag: Int): SurfaceMountingManager? = if (surfaceId == ViewUtil.NO_SURFACE_ID) getSurfaceManagerForView(reactTag) else getSurfaceManager(surfaceId) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp index 16ab55a3991..411d6f7e482 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp @@ -21,6 +21,8 @@ #include #include +#include + #include #include @@ -1082,4 +1084,14 @@ void FabricMountingManager::synchronouslyUpdateViewOnUIThread( synchronouslyUpdateViewOnUIThreadJNI(javaUIManager_, viewTag, propsMap); } +void FabricMountingManager::measure(const facebook::react::ShadowView& shadowView, std::function jsCallback) { + static auto measureJNI = + JFabricUIManager::javaClassStatic()->getMethod)>( + "measure"); + + auto javaCallback = JCxxCallbackImpl::newObjectCxxArgs(jsCallback); + + measureJNI(javaUIManager_, shadowView.surfaceId, shadowView.tag, javaCallback); +} + } // namespace facebook::react diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h index 61978317ff5..67f1102480e 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h @@ -63,6 +63,8 @@ class FabricMountingManager final { void synchronouslyUpdateViewOnUIThread( Tag viewTag, const folly::dynamic& props); + + void measure(const ShadowView& shadowView, std::function callback); private: bool isOnMainThread(); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp index 3ccff28c083..884b108fade 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp @@ -724,6 +724,14 @@ void FabricUIManagerBinding::schedulerDidUpdateShadowTree( // no-op } +void FabricUIManagerBinding::schedulerMeasure(const ShadowView& shadowView, std::function jsCallback) { + auto mountingManager = getMountingManager("schedulerMeasure"); + if (!mountingManager) { + return; + } + mountingManager->measure(shadowView, jsCallback); +} + void FabricUIManagerBinding::onAnimationStarted() { auto mountingManager = getMountingManager("onAnimationStarted"); if (!mountingManager) { diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h index 39e724038c6..ca3140ec363 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h @@ -128,6 +128,8 @@ class FabricUIManagerBinding : public jni::HybridClass, void schedulerDidUpdateShadowTree( const std::unordered_map& tagToProps) override; + + void schedulerMeasure(const ShadowView& shadowView, std::function jsCallback) override; void setPixelDensity(float pointScaleFactor); diff --git a/packages/react-native/ReactCommon/React-FabricComponents.podspec b/packages/react-native/ReactCommon/React-FabricComponents.podspec index a501b020470..0aedcf80383 100644 --- a/packages/react-native/ReactCommon/React-FabricComponents.podspec +++ b/packages/react-native/ReactCommon/React-FabricComponents.podspec @@ -87,8 +87,12 @@ Pod::Spec.new do |s| end ss.subspec "modal" do |sss| + sss.dependency folly_dep_name, folly_version + sss.compiler_flags = folly_compiler_flags sss.source_files = podspec_sources("react/renderer/components/modal/*.{m,mm,cpp,h}", "react/renderer/components/modal/*.h") - sss.exclude_files = "react/renderer/components/modal/tests" + sss.exclude_files = "react/renderer/components/modal/tests", + "react/renderer/components/modal/platform/android", + "react/renderer/components/modal/platform/cxx" sss.header_dir = "react/renderer/components/modal" end diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp index 49cd7d574c5..ecca9aecd76 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp @@ -299,6 +299,13 @@ void Scheduler::uiManagerDidSendAccessibilityEvent( } } +void Scheduler::uiManagerMeasure(const ShadowNode::Shared& shadowNode, std::function jsCallback) { + if (delegate_ != nullptr) { + auto shadowView = ShadowView(*shadowNode); + delegate_->schedulerMeasure(shadowView, jsCallback); + } +}; + /* * Set JS responder for a view. */ diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h index e25f755ecd7..42243f286e5 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h @@ -104,6 +104,7 @@ class Scheduler final : public UIManagerDelegate { void uiManagerShouldRemoveEventListener( const std::shared_ptr& listener) final; void uiManagerDidStartSurface(const ShadowTree& shadowTree) override; + void uiManagerMeasure(const ShadowNode::Shared& shadowNode, std::function jsCallback) override; #pragma mark - ContextContainer ContextContainer::Shared getContextContainer() const; diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h b/packages/react-native/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h index 0a88e243393..c9dc06dfd87 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h @@ -70,6 +70,7 @@ class SchedulerDelegate { virtual void schedulerDidUpdateShadowTree( const std::unordered_map& tagToProps) = 0; + virtual void schedulerMeasure(const ShadowView& shadowView, std::function jsCallback) = 0; virtual ~SchedulerDelegate() noexcept = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp index 9ab7416ffee..016e21718d4 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp @@ -639,6 +639,7 @@ jsi::Value UIManagerBinding::get( runtime, arguments[0]); auto callbackFunction = arguments[1].getObject(runtime).getFunction(runtime); + auto measureOnUI = count == 2 ? false : arguments[2].getBool(); auto currentRevision = uiManager->getShadowTreeRevisionProvider()->getCurrentRevision( @@ -647,17 +648,38 @@ jsi::Value UIManagerBinding::get( callbackFunction.call(runtime, {0, 0, 0, 0, 0, 0}); return jsi::Value::undefined(); } + + if (measureOnUI) { + auto sharedCallback = std::make_shared(std::move(callbackFunction)); + auto runtimeExecutor = uiManager->runtimeExecutor_; + std::function jsCallback = [sharedCallback, runtimeExecutor](folly::dynamic args) { + // Schedule call on JS + runtimeExecutor([sharedCallback, args](jsi::Runtime& jsRuntime) { + // Invoke the actual callback we got from JS + sharedCallback->call(jsRuntime, { + jsi::Value{jsRuntime, args.at(0).getDouble()}, + jsi::Value{jsRuntime, args.at(1).getDouble()}, + jsi::Value{jsRuntime, args.at(2).getDouble()}, + jsi::Value{jsRuntime, args.at(3).getDouble()}, + jsi::Value{jsRuntime, args.at(4).getDouble()}, + jsi::Value{jsRuntime, args.at(5).getDouble()}, + }); + }); + }; + // Ask the delegate to measure on the native platform hierarchy: + uiManager->getDelegate()->uiManagerMeasure(shadowNode, std::move(jsCallback)); + } else { + auto measureRect = dom::measure(currentRevision, *shadowNode); + callbackFunction.call( + runtime, + {jsi::Value{runtime, measureRect.x}, + jsi::Value{runtime, measureRect.y}, + jsi::Value{runtime, measureRect.width}, + jsi::Value{runtime, measureRect.height}, + jsi::Value{runtime, measureRect.pageX}, + jsi::Value{runtime, measureRect.pageY}}); + } - auto measureRect = dom::measure(currentRevision, *shadowNode); - - callbackFunction.call( - runtime, - {jsi::Value{runtime, measureRect.x}, - jsi::Value{runtime, measureRect.y}, - jsi::Value{runtime, measureRect.width}, - jsi::Value{runtime, measureRect.height}, - jsi::Value{runtime, measureRect.pageX}, - jsi::Value{runtime, measureRect.pageY}}); return jsi::Value::undefined(); }); } diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h index e649a273742..97a8c8f05f8 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h @@ -42,6 +42,8 @@ class UIManagerDelegate { const std::string& commandName, const folly::dynamic& args) = 0; + virtual void uiManagerMeasure(const ShadowNode::Shared& shadowNode, std::function jsCallback) = 0; + /* * Called when UIManager wants to dispatch some accessibility event * to the mounting layer. eventType is platform-specific and not all From 745c2676d0c2d94b97a71394191aac84d55453cd Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Wed, 28 May 2025 12:08:50 +0200 Subject: [PATCH 128/312] fix nullability issues with resolving RootView (#70) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Hanno J. Gödecke --- .../react/fabric/mounting/MountingManager.kt | 14 ++++++++++---- .../fabric/mounting/SurfaceMountingManager.java | 11 +++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt index fee1029cf45..9e0f958ba82 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt @@ -29,7 +29,7 @@ import com.facebook.react.fabric.mounting.mountitems.MountItem import com.facebook.react.touch.JSResponderHandler import com.facebook.react.uimanager.RootViewManager import com.facebook.react.uimanager.PixelUtil -import com.facebook.react.uimanager.RootViewUtil + import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManagerRegistry import com.facebook.react.uimanager.common.ViewUtil @@ -372,6 +372,7 @@ internal class MountingManager( * The callback signature matches legacy UIManager: (x0, y0, width, height, pageX, pageY). */ @UiThread + @Synchronized fun measure(surfaceId: Int, reactTag: Int, callback: Callback) { assertOnUiThread() val smm = getSurfaceMountingManager(surfaceId, reactTag) @@ -381,7 +382,13 @@ internal class MountingManager( } val view = smm.getView(reactTag) val measureBuffer = IntArray(4) - measure(view, measureBuffer) + val rootView = smm.getRootViewIfAttached() + if (rootView == null) { + FLog.e(TAG, "Failed to get root view for surfaceId: %d", surfaceId) + return + } + + measure(rootView, view, measureBuffer) val x = PixelUtil.toDIPFromPixel(measureBuffer[0].toFloat()) val y = PixelUtil.toDIPFromPixel(measureBuffer[1].toFloat()) @@ -391,8 +398,7 @@ internal class MountingManager( } @Synchronized - fun measure(v: View, outputBuffer: IntArray) { - val rootView = RootViewUtil.getRootView(v) as View + fun measure(rootView: View, v: View, outputBuffer: IntArray) { computeBoundingBox(rootView, outputBuffer) val rootX = outputBuffer[0] val rootY = outputBuffer[1] diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java index dee20e3f89b..a1675f9ea40 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java @@ -123,6 +123,17 @@ public int getSurfaceId() { return mSurfaceId; } + public @Nullable View getRootViewIfAttached() { + ViewState viewState = getNullableViewState(mSurfaceId); + if (viewState == null || viewState.mView == null) { + return null; + } + if (!viewState.mIsRoot) { + return null; + } + return viewState.mView; + } + public boolean isRootViewAttached() { return mRootViewAttached; } From c0d1f3c43fe6e8c646d998801659dae36fdd322c Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 08:33:02 -0500 Subject: [PATCH 129/312] fix: safely call getView --- .../com/facebook/react/fabric/mounting/MountingManager.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt index 9e0f958ba82..0eaed724d0d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt @@ -380,7 +380,12 @@ internal class MountingManager( callback.invoke(0, 0, 0, 0, 0, 0) return } - val view = smm.getView(reactTag) + val view: View = try { + smm.getView(reactTag) + } catch (e: Exception) { + FLog.e(TAG, "Failed to get view for reactTag: %d, surfaceId: %d", reactTag, surfaceId, e) + return + } val measureBuffer = IntArray(4) val rootView = smm.getRootViewIfAttached() if (rootView == null) { From f50f161d410f573f331181c0de49234ce97d407f Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 9 Jun 2025 16:54:32 -0500 Subject: [PATCH 130/312] [Android] On Android 12, using LinkedBlockingQueue for NativeAnimatedModule --- .../facebook/react/animated/NativeAnimatedModule.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt index 3bc9143d7ed..791df54613b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt @@ -7,6 +7,7 @@ package com.facebook.react.animated +import android.os.Build import androidx.annotation.AnyThread import androidx.annotation.UiThread import com.facebook.common.logging.FLog @@ -34,6 +35,7 @@ import com.facebook.react.uimanager.common.ViewUtil import java.util.ArrayList import java.util.Queue import java.util.concurrent.ConcurrentLinkedQueue +import java.util.concurrent.LinkedBlockingQueue import java.util.concurrent.atomic.AtomicReference import kotlin.concurrent.Volatile @@ -130,7 +132,13 @@ public class NativeAnimatedModule(reactContext: ReactApplicationContext) : } private inner class ConcurrentOperationQueue { - private val queue: Queue = ConcurrentLinkedQueue() + private val queue: Queue = + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S) { + // See https://issuetracker.google.com/issues/261481042 + LinkedBlockingQueue() + } else { + ConcurrentLinkedQueue() + } private var peekedOperation: UIThreadOperation? = null @get:AnyThread From c786be62bd61fcf20f562ae0034bfd5b8f44eaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Sat, 31 May 2025 23:51:08 +0200 Subject: [PATCH 131/312] Memoise UIManagerConstants Create UIManagerConstantsCache Update UIManagerModule.java Update ReactActivity.java Update UIManagerConstantsCache Update UIManagerModule.java Update JavaModuleWrapper.cpp Update and rename JavaModuleWrapper.kt to JavaModuleWrapper.java Rename UIManagerConstantsCache to UIManagerConstantsCache.java --- .../ReactAndroid/build.gradle.kts | 1 + .../com/facebook/react/ReactActivity.java | 2 + .../react/bridge/JavaModuleWrapper.kt | 9 + .../uimanager/UIManagerConstantsCache.java | 352 ++++++++++++++++++ .../react/uimanager/UIManagerModule.java | 31 +- 5 files changed, 384 insertions(+), 11 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 8642652fa48..20d36af695e 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -683,6 +683,7 @@ tasks.withType().configureEach { } dependencies { + implementation("com.tencent:mmkv-static:1.2.14") api(libs.androidx.appcompat) api(libs.androidx.appcompat.resources) api(libs.androidx.autofill) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java index 031f534afec..612b252c889 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java @@ -19,6 +19,7 @@ import com.facebook.react.modules.core.PermissionListener; import com.facebook.react.util.AndroidVersion; import org.jetbrains.annotations.NotNull; +import com.facebook.react.uimanager.UIManagerConstantsCache; /** Base Activity for React Native applications. */ public abstract class ReactActivity extends AppCompatActivity @@ -58,6 +59,7 @@ protected ReactActivityDelegate createReactActivityDelegate() { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + UIManagerConstantsCache.getInstance().init(this); mDelegate.onCreate(savedInstanceState); if (AndroidVersion.isAtLeastTargetSdk36(this)) { getOnBackPressedDispatcher().addCallback(this, mBackPressedCallback); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.kt index 8f230012dc6..fd3ac8b7bfd 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.kt @@ -11,6 +11,7 @@ import com.facebook.proguard.annotations.DoNotStrip import com.facebook.react.common.annotations.internal.InteropLegacyArchitecture import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger.assertLegacyArchitecture +import com.facebook.react.uimanager.UIManagerConstantsCache import com.facebook.react.turbomodule.core.interfaces.TurboModule import com.facebook.systrace.Systrace import com.facebook.systrace.Systrace.TRACE_TAG_REACT @@ -106,7 +107,9 @@ internal class JavaModuleWrapper( .flush() ReactMarker.logMarker(ReactMarkerConstants.GET_CONSTANTS_START, moduleName) + Systrace.beginSection(TRACE_TAG_REACT, "module.getModule") val baseJavaModule = module + Systrace.endSection(TRACE_TAG_REACT) Systrace.beginSection(TRACE_TAG_REACT, "module.getConstants") val map = baseJavaModule.constants @@ -115,6 +118,12 @@ internal class JavaModuleWrapper( Systrace.beginSection(TRACE_TAG_REACT, "create WritableNativeMap") ReactMarker.logMarker(ReactMarkerConstants.CONVERT_CONSTANTS_START, moduleName) try { + if (moduleName == "UIManager") { + val res = UIManagerConstantsCache.getInstance().getUIManagerConstantsAsWritableMap() + if (res != null) { + return res + } + } return Arguments.makeNativeMap(map) } finally { ReactMarker.logMarker(ReactMarkerConstants.CONVERT_CONSTANTS_END, moduleName) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java new file mode 100644 index 00000000000..f631ed71633 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java @@ -0,0 +1,352 @@ +package com.facebook.react.uimanager; + +import android.content.Context; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableNativeMap; +import com.tencent.mmkv.MMKV; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; +import java.util.concurrent.CountDownLatch; + +/** + * Caches two separate JSON blobs in MMKV: + * • Full UIManager constants (under MMKV_KEY_CONSTANTS) + * • bubblingEventTypes map only (under MMKV_KEY_BUBBLING) + * + * On init(...), a background thread: + * 1) calls MMKV.initialize(...) + * 2) reads both keys, parses them into Maps + * 3) builds a WritableNativeMap from the full constants map via Arguments.makeNativeMap(...) + * 4) countDown()s loadLatch + * + * Exposed methods all block until that single background load finishes: + * • getCachedConstants() → Map or null + * • getCachedBubblingEventsTypes() → Map or null + * • getUIManagerConstantsAsWritableMap() → WritableNativeMap or null + * + * To persist: + * • call saveConstantsAndBubblingEventsTypes(freshConstantsMap, freshBubblingEventsMap) + * which writes two JSON strings (one under each key) off the main thread, + * and updates in‐memory maps immediately. + */ +public class UIManagerConstantsCache { + private static final String TAG = "UIManagerConstantsCache"; + + // MMKV keys for two separate blobs + private static final String MMKV_KEY_CONSTANTS = "UIManagerModuleConstants_v1"; + private static final String MMKV_KEY_BUBBLING = "UIManagerModuleBubbling_v1"; + + private static final UIManagerConstantsCache INSTANCE = new UIManagerConstantsCache(); + + /** In-memory store of the parsed Map (full constants). */ + private Map cachedConstants = null; + + /** In-memory store of the parsed Map (bubblingEventTypes only). */ + private Map cachedBubblingEventsTypes = null; + + /** In-memory store of the pre-built WritableNativeMap for full constants. */ + private WritableNativeMap cachedNativeMap = null; + + /** Latch that background-loads both JSON blobs exactly once. */ + private final CountDownLatch loadLatch = new CountDownLatch(1); + + /** Ensures init(...) is only done once. */ + private volatile boolean initCalled = false; + + private UIManagerConstantsCache() { + // private constructor + } + + public static UIManagerConstantsCache getInstance() { + return INSTANCE; + } + + /** + * Must be called (once) from Application or MainActivity before any UIManager + * constants are accessed. This kicks off: + * 1) MMKV.initialize(...) + * 2) A background thread that reads two MMKV keys, parses them → Maps, + * then builds a WritableNativeMap from the full constants, and finally + * countDown()s loadLatch. + */ + public synchronized void init(Context appContext) { + if (initCalled) { + return; + } + initCalled = true; + + // 1) Initialize MMKV + MMKV.initialize(appContext.getApplicationContext()); + + // 2) Background thread to load both blobs + new Thread(() -> { + try { + MMKV mmkv = MMKV.defaultMMKV(); + + // 2a) Read full-constants JSON + String jsonConstants = mmkv.decodeString(MMKV_KEY_CONSTANTS, null); + if (jsonConstants != null) { + try { + JSONObject rootConsts = new JSONObject(jsonConstants); + Map mapConsts = jsonToMap(rootConsts); + synchronized (this) { + cachedConstants = mapConsts; + } + Log.v(TAG, "Background-loaded full UIManager constants (size=" + + (mapConsts == null ? 0 : mapConsts.size()) + ")"); + } catch (JSONException je) { + Log.w(TAG, "Invalid JSON in MMKV (constants). Will regenerate.\n" + + jsonConstants, je); + synchronized (this) { + cachedConstants = null; + } + } + } else { + synchronized (this) { + cachedConstants = null; + } + Log.v(TAG, "No UIManager constants found in MMKV."); + } + + // 2b) Read bubblingEventTypes JSON + String jsonBubbling = mmkv.decodeString(MMKV_KEY_BUBBLING, null); + if (jsonBubbling != null) { + try { + JSONObject rootBub = new JSONObject(jsonBubbling); + Map mapBub = jsonToMap(rootBub); + synchronized (this) { + cachedBubblingEventsTypes = mapBub; + } + Log.v(TAG, "Background-loaded bubblingEventTypes (size=" + + (mapBub == null ? 0 : mapBub.size()) + ")"); + } catch (JSONException je) { + Log.w(TAG, "Invalid JSON in MMKV (bubblingEventTypes). Will regenerate.\n" + + jsonBubbling, je); + synchronized (this) { + cachedBubblingEventsTypes = null; + } + } + } else { + synchronized (this) { + cachedBubblingEventsTypes = null; + } + Log.v(TAG, "No bubblingEventTypes found in MMKV."); + } + + // 2c) Build WritableNativeMap from full constants (if available) + synchronized (this) { + if (cachedConstants != null) { + cachedNativeMap = Arguments.makeNativeMap(cachedConstants); + } else { + cachedNativeMap = null; + } + } + } finally { + // Signal load completion + loadLatch.countDown(); + } + }, "UIManagerConstantsCache-Loader").start(); + } + + /** + * Blocks until background-load finishes, then returns the full constants map. + * @return parsed Map or null if none stored / parse failed. + */ + public Map getCachedConstants() { + try { + loadLatch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + Log.w(TAG, "getCachedConstants() interrupted while waiting."); + return null; + } + synchronized (this) { + return cachedConstants; + } + } + + /** + * Blocks until background-load finishes, then returns the bubblingEventTypes map. + * @return parsed Map or null if none stored / parse failed. + */ + public Map getCachedBubblingEventsTypes() { + try { + loadLatch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + Log.w(TAG, "getCachedBubblingEventsTypes() interrupted while waiting."); + return null; + } + synchronized (this) { + return cachedBubblingEventsTypes; + } + } + + /** + * Blocks until background-load (and WritableNativeMap build) finishes. + * @return pre-built WritableNativeMap or null if no full-constants available. + */ + public WritableNativeMap getUIManagerConstantsAsWritableMap() { + try { + loadLatch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + Log.w(TAG, "getUIManagerConstantsAsWritableMap() interrupted while waiting."); + return null; + } + synchronized (this) { + return cachedNativeMap; + } + } + + /** + * Takes freshly-built maps (full constants & bubblingEventTypes) and: + * 1) Spawns a background thread to JSON-serialize + write each to its own MMKV key, + * 2) Updates in-memory caches (constants, bubbling types, and native map) so getters return immediately. + */ + public void saveConstantsAndBubblingEventsTypes( + final Map constants, + final Map bubblingEventsTypes) { + if (constants == null) { + return; + } + + // Spawn a background thread to write both JSON blobs + new Thread(() -> { + try { + // Serialize full constants + JSONObject jsonConsts = mapToJson(constants); + long t0 = System.currentTimeMillis(); + MMKV.defaultMMKV().encode(MMKV_KEY_CONSTANTS, jsonConsts.toString()); + long t1 = System.currentTimeMillis(); + Log.v(TAG, "Saved UIManager constants to MMKV in " + (t1 - t0) + "ms"); + } catch (JSONException e) { + Log.e(TAG, "Failed to JSON-serialize UIManager constants; not caching.", e); + } + + if (bubblingEventsTypes != null) { + try { + // Serialize bubblingEventTypes + JSONObject jsonBub = mapToJson(bubblingEventsTypes); + long t2 = System.currentTimeMillis(); + MMKV.defaultMMKV().encode(MMKV_KEY_BUBBLING, jsonBub.toString()); + long t3 = System.currentTimeMillis(); + Log.v(TAG, "Saved bubblingEventTypes to MMKV in " + (t3 - t2) + "ms"); + } catch (JSONException e) { + Log.e(TAG, "Failed to JSON-serialize bubblingEventTypes; not caching.", e); + } + } + }, "UIManagerConstantsCache-Saver").start(); + } + + // ──────────────────────────────────────────────────────────────────────────────── + // JSON ↔ Map Helpers (identical to before) + // ──────────────────────────────────────────────────────────────────────────────── + + private static JSONObject mapToJson(Map map) throws JSONException { + JSONObject json = new JSONObject(); + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Object val = entry.getValue(); + if (val == null) { + json.put(key, JSONObject.NULL); + } else if (val instanceof String) { + json.put(key, (String) val); + } else if (val instanceof Boolean) { + json.put(key, (Boolean) val); + } else if (val instanceof Number) { + json.put(key, (Number) val); + } else if (val instanceof Map) { + //noinspection unchecked + json.put(key, mapToJson((Map) val)); + } else if (val instanceof List) { + //noinspection unchecked + json.put(key, listToJsonArray((List) val)); + } else { + throw new JSONException( + "Unsupported value type for key \"" + key + "\": " + val.getClass() + ); + } + } + return json; + } + + private static JSONArray listToJsonArray(List list) throws JSONException { + JSONArray arr = new JSONArray(); + for (Object elem : list) { + if (elem == null) { + arr.put(JSONObject.NULL); + } else if (elem instanceof String) { + arr.put((String) elem); + } else if (elem instanceof Boolean) { + arr.put((Boolean) elem); + } else if (elem instanceof Number) { + arr.put((Number) elem); + } else if (elem instanceof Map) { + //noinspection unchecked + arr.put(mapToJson((Map) elem)); + } else if (elem instanceof List) { + //noinspection unchecked + arr.put(listToJsonArray((List) elem)); + } else { + throw new JSONException("Unsupported list element type: " + elem.getClass()); + } + } + return arr; + } + + private static Map jsonToMap(JSONObject json) throws JSONException { + Map result = new HashMap<>(); + Iterator keys = json.keys(); + while (keys.hasNext()) { + String key = keys.next(); + Object raw = json.get(key); + if (raw == JSONObject.NULL) { + result.put(key, null); + } else if (raw instanceof Boolean || raw instanceof Number || raw instanceof String) { + result.put(key, raw); + } else if (raw instanceof JSONObject) { + result.put(key, jsonToMap((JSONObject) raw)); + } else if (raw instanceof JSONArray) { + result.put(key, jsonArrayToList((JSONArray) raw)); + } else { + throw new JSONException( + "Unsupported JSON type in UIManager constants for key \"" + key + "\": " + + raw.getClass() + ); + } + } + return result; + } + + private static List jsonArrayToList(JSONArray arr) throws JSONException { + List result = new ArrayList<>(); + for (int i = 0; i < arr.length(); i++) { + Object raw = arr.get(i); + if (raw == JSONObject.NULL) { + result.add(null); + } else if (raw instanceof Boolean || raw instanceof Number || raw instanceof String) { + result.add(raw); + } else if (raw instanceof JSONObject) { + result.add(jsonToMap((JSONObject) raw)); + } else if (raw instanceof JSONArray) { + result.add(jsonArrayToList((JSONArray) raw)); + } else { + throw new JSONException( + "Unsupported JSON array element at index " + i + ": " + raw.getClass() + ); + } + } + return result; + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 8aca8494cde..01a01c0698b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -12,6 +12,7 @@ import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; import static com.facebook.react.uimanager.common.UIManagerType.LEGACY; +import android.util.Log; import android.content.ComponentCallbacks2; import android.content.res.Configuration; import android.view.View; @@ -146,17 +147,9 @@ public UIManagerModule( List viewManagersList, int minTimeLeftInFrameForNonBatchedOperationMs) { super(reactContext); + Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "UIManagerModule.init"); DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext); - mEventDispatcher = new EventDispatcherImpl(reactContext); - mCustomDirectEvents = MapBuilder.newHashMap(); - mModuleConstants = createConstants(viewManagersList, null, mCustomDirectEvents); - mViewManagerRegistry = new ViewManagerRegistry(viewManagersList); - mUIImplementation = - new UIImplementation( - reactContext, - mViewManagerRegistry, - mEventDispatcher, - minTimeLeftInFrameForNonBatchedOperationMs); + long startTime, endTime; if (ReactBuildConfig.DEBUG) { for (ViewManager viewManager : viewManagersList) { @@ -266,8 +259,24 @@ public static Map createConstants( .arg("Lazy", false) .flush(); try { - return UIManagerModuleConstantsHelper.internal_createConstants( + // If the background load is still happening, this will wait. If it completed, returns immediately. + Map cached = UIManagerConstantsCache.getInstance().getCachedConstants(); + Map cachedCustomBubblingEvents = UIManagerConstantsCache.getInstance().getCachedBubblingEventsTypes(); + if (cached != null) { + if (customBubblingEvents != null) { + customBubblingEvents.putAll(cachedCustomBubblingEvents); + } + + return cached; + } + + // Otherwise, build fresh on this thread… + Map fresh = UIManagerModuleConstantsHelper.internal_createConstants( viewManagers, customBubblingEvents, customDirectEvents); + + // …and save to MMKV in the background for next time: + UIManagerConstantsCache.getInstance().saveConstantsAndBubblingEventsTypes(fresh, customBubblingEvents); + return fresh; } finally { Systrace.endSection(Systrace.TRACE_TAG_REACT); ReactMarker.logMarker(CREATE_UI_MANAGER_MODULE_CONSTANTS_END); From 60971999b753e0c7744ff759eed8f4d13d467f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Mon, 23 Jun 2025 19:45:47 +0200 Subject: [PATCH 132/312] fix UIManagerModule.java --- .../com/facebook/react/uimanager/UIManagerModule.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 01a01c0698b..2f1f538727d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -149,7 +149,16 @@ public UIManagerModule( super(reactContext); Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "UIManagerModule.init"); DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext); - long startTime, endTime; + mEventDispatcher = new EventDispatcherImpl(reactContext); + mCustomDirectEvents = MapBuilder.newHashMap(); + mModuleConstants = createConstants(viewManagersList, null, mCustomDirectEvents); + mViewManagerRegistry = new ViewManagerRegistry(viewManagersList); + mUIImplementation = + new UIImplementation( + reactContext, + mViewManagerRegistry, + mEventDispatcher, + minTimeLeftInFrameForNonBatchedOperationMs); if (ReactBuildConfig.DEBUG) { for (ViewManager viewManager : viewManagersList) { From 3c566e1533473861c04f53257250ed65723bfbc8 Mon Sep 17 00:00:00 2001 From: Joe Mun <12057449+joemun@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:07:22 -0700 Subject: [PATCH 133/312] Enable feature flag enableAccumulatedUpdatesInRawPropsAndroid (#78) --- .../internal/featureflags/ReactNativeFeatureFlagsDefaults.kt | 2 +- .../react/featureflags/ReactNativeFeatureFlagsDefaults.h | 2 +- .../src/private/featureflags/ReactNativeFeatureFlags.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index d5d5ede6adc..32a2eb8b59a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -39,7 +39,7 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun enableAccessibilityOrder(): Boolean = false - override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = false + override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = true override fun enableAndroidTextMeasurementOptimizations(): Boolean = false diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index e0742c9c5c9..174c493e5e0 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -60,7 +60,7 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { } bool enableAccumulatedUpdatesInRawPropsAndroid() override { - return false; + return true; } bool enableAndroidTextMeasurementOptimizations() override { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index 108ed513497..f5760b9c8a0 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -233,7 +233,7 @@ export const enableAccessibilityOrder: Getter = createNativeFlagGetter( /** * When enabled, Android will accumulate updates in rawProps to reduce the number of mounting instructions for cascading re-renders. */ -export const enableAccumulatedUpdatesInRawPropsAndroid: Getter = createNativeFlagGetter('enableAccumulatedUpdatesInRawPropsAndroid', false); +export const enableAccumulatedUpdatesInRawPropsAndroid: Getter = createNativeFlagGetter('enableAccumulatedUpdatesInRawPropsAndroid', true); /** * Enables various optimizations throughout the path of measuring text on Android. */ From d71f609c93957b9b90613d5cdf82ad38942ea759 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Tue, 15 Jul 2025 10:33:54 +0200 Subject: [PATCH 134/312] fix(android): enable 16KB page size for app by upgrading mmkv (#83) --- packages/react-native/ReactAndroid/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 20d36af695e..603cf16441b 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -683,7 +683,7 @@ tasks.withType().configureEach { } dependencies { - implementation("com.tencent:mmkv-static:1.2.14") + implementation("com.tencent:mmkv-static:1.3.14") api(libs.androidx.appcompat) api(libs.androidx.appcompat.resources) api(libs.androidx.autofill) From fdbf16af876afa8d3dbd011ae9d36f7527b361a8 Mon Sep 17 00:00:00 2001 From: Joe Mun Date: Thu, 17 Jul 2025 15:58:32 -0700 Subject: [PATCH 135/312] Enable feature flag disableMountItemReorderingAndroid --- .../internal/featureflags/ReactNativeFeatureFlagsDefaults.kt | 2 +- .../react/featureflags/ReactNativeFeatureFlagsDefaults.h | 2 +- .../scripts/featureflags/ReactNativeFeatureFlags.config.js | 2 +- .../src/private/featureflags/ReactNativeFeatureFlags.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 32a2eb8b59a..5509621183d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -33,7 +33,7 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun disableMainQueueSyncDispatchIOS(): Boolean = false - override fun disableMountItemReorderingAndroid(): Boolean = false + override fun disableMountItemReorderingAndroid(): Boolean = true override fun disableTextLayoutManagerCacheAndroid(): Boolean = false diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 174c493e5e0..34a7f99d298 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -48,7 +48,7 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { } bool disableMountItemReorderingAndroid() override { - return false; + return true; } bool disableTextLayoutManagerCacheAndroid() override { diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index feb33a2d55d..c55d1311ca1 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -102,7 +102,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, disableMountItemReorderingAndroid: { - defaultValue: false, + defaultValue: true, metadata: { dateAdded: '2024-10-26', description: diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index f5760b9c8a0..ab88b483f45 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -221,7 +221,7 @@ export const disableMainQueueSyncDispatchIOS: Getter = createNativeFlag /** * Prevent FabricMountingManager from reordering mountItems, which may lead to invalid state on the UI thread */ -export const disableMountItemReorderingAndroid: Getter = createNativeFlagGetter('disableMountItemReorderingAndroid', false); +export const disableMountItemReorderingAndroid: Getter = createNativeFlagGetter('disableMountItemReorderingAndroid', true); /** * Turns off the global measurement cache used by TextLayoutManager on Android. */ From c6fef215b09667f9b82e7c92f8318ef6ccc095dd Mon Sep 17 00:00:00 2001 From: sudoplz Date: Tue, 22 Jul 2025 20:40:15 +0300 Subject: [PATCH 136/312] fix(RuntimeScheduler): flush JS microtasks after work-loop to prevent Reanimated stalls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit React-Freeze’s infiniteThenable causes Fabric’s RuntimeScheduler_Legacy to spin indefinitely within the while loop within startWorkLoop, which prevents the JS thread from ever flushing its microtask queue (handled by JSTimers/MessageQueue). When the queue starves, Reanimated worklets never run and animations freeze. This patch adds an explicit call to performMicrotaskCheckpoint(runtime) immediately after each task execution inside startWorkLoop. The helper invokes the global _flushReactNativeMicrotasks JS function (registered from JSTimers) so the queued microtasks are processed even while the native work-loop is busy. ✓ Restores Reanimated animations under Fabric bridgeless ticket: https://app.asana.com/1/236888843494340/project/1199705967702853/task/1210188774106277?focus=true --- .../Libraries/Core/Timers/JSTimers.js | 8 +++++ .../RuntimeScheduler_Legacy.cpp | 36 +++++++++++++++++++ .../RuntimeScheduler_Legacy.h | 8 +++++ 3 files changed, 52 insertions(+) diff --git a/packages/react-native/Libraries/Core/Timers/JSTimers.js b/packages/react-native/Libraries/Core/Timers/JSTimers.js index 6969b0e7005..4cb78788256 100644 --- a/packages/react-native/Libraries/Core/Timers/JSTimers.js +++ b/packages/react-native/Libraries/Core/Timers/JSTimers.js @@ -486,4 +486,12 @@ BatchedBridge.setReactNativeMicrotasksCallback( JSTimers.callReactNativeMicrotasks, ); +/** + * This is a hack to allow us to flush react native microtasks + * from the native side when bridgeless mode is disabled. + */ +global._flushReactNativeMicrotasks = () => { + return JSTimers.callReactNativeMicrotasks(); +} + export default ExportedJSTimers; diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp index e8d9b4359ce..bd25d702aa7 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace facebook::react { @@ -25,6 +26,40 @@ RuntimeScheduler_Legacy::RuntimeScheduler_Legacy( now_(std::move(now)), onTaskError_(std::move(onTaskError)) {} +void RuntimeScheduler_Legacy::performMicrotaskCheckpoint(jsi::Runtime& runtime) noexcept { + if (performingMicrotaskCheckpoint_) { + return; + } + performingMicrotaskCheckpoint_ = true; + OnScopeExit restoreFlag([&]() { performingMicrotaskCheckpoint_ = false; }); + TraceSection s("RuntimeScheduler::performMicrotaskCheckpoint"); + + try { + // Get the global object + auto global = runtime.global(); + + // Check if _flushReactNativeMicrotasks exists on the global object + if (global.hasProperty(runtime, "_flushReactNativeMicrotasks")) { + auto flushFunction = global.getProperty(runtime, "_flushReactNativeMicrotasks"); + + // Check if it's actually a function + if (flushFunction.isObject() && flushFunction.getObject(runtime).isFunction(runtime)) { + auto function = flushFunction.getObject(runtime).getFunction(runtime); + + // Call the function with no arguments + function.call(runtime); + } + } + } catch (jsi::JSError& error) { + // If there's an error calling the function, handle it gracefully + onTaskError_(runtime, error); + } catch (std::exception& ex) { + // Handle any other exceptions + jsi::JSError error(runtime, std::string("Non-js exception in performMicrotaskCheckpoint: ") + ex.what()); + onTaskError_(runtime, error); + } +} + void RuntimeScheduler_Legacy::scheduleWork(RawCallback&& callback) noexcept { TraceSection s("RuntimeScheduler::scheduleWork"); @@ -240,6 +275,7 @@ void RuntimeScheduler_Legacy::startWorkLoop(jsi::Runtime& runtime) { } executeTask(runtime, topPriorityTask, didUserCallbackTimeout); + performMicrotaskCheckpoint(runtime); } } catch (jsi::JSError& error) { onTaskError_(runtime, error); diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h index 3856a0645ba..397786bc1fe 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h @@ -189,6 +189,14 @@ class RuntimeScheduler_Legacy final : public RuntimeSchedulerBase { shadowTreeRevisionConsistencyManager_{nullptr}; RuntimeSchedulerTaskErrorHandler onTaskError_; + + /* + * This allows the C++ code to trigger microtask flushing from JavaScript. + */ + void performMicrotaskCheckpoint(jsi::Runtime& runtime) noexcept; + + private: + bool performingMicrotaskCheckpoint_{false}; }; } // namespace facebook::react From 55bc851873221977aa5c7ec82e366b2bad04c10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Tue, 29 Jul 2025 17:11:38 +0200 Subject: [PATCH 137/312] Make UIManager constants improvement work with bridge less (#87) --- .../facebook/react/runtime/ReactInstance.kt | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt index ff0cdb1d5ac..6761feb943f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt @@ -63,6 +63,7 @@ import com.facebook.react.uimanager.DisplayMetricsHolder import com.facebook.react.uimanager.IllegalViewOperationException import com.facebook.react.uimanager.UIConstantsProviderBinding import com.facebook.react.uimanager.UIConstantsProviderBinding.ConstantsForViewManagerProvider +import com.facebook.react.uimanager.UIManagerConstantsCache import com.facebook.react.uimanager.UIManagerModuleConstantsHelper import com.facebook.react.uimanager.ViewManager import com.facebook.react.uimanager.ViewManagerRegistry @@ -222,16 +223,19 @@ internal class ReactInstance( getConstantsForViewManager(viewManager, customDirectEvents) }, { - val viewManagers: List> = - ArrayList(viewManagerResolver.eagerViewManagerMap.values) - val constants = createConstants(viewManagers, customDirectEvents) - - val lazyViewManagers = viewManagerResolver.lazyViewManagerNames - if (!lazyViewManagers.isEmpty()) { - constants["ViewManagerNames"] = ArrayList(lazyViewManagers) - constants["LazyViewManagersEnabled"] = true - } - Arguments.makeNativeMap(constants) + UIManagerConstantsCache.getInstance().getUIManagerConstantsAsWritableMap() + ?: run { + val viewManagers: List> = + ArrayList(viewManagerResolver.eagerViewManagerMap.values) + val constants = createConstants(viewManagers, customDirectEvents) + + val lazyViewManagers = viewManagerResolver.lazyViewManagerNames + if (!lazyViewManagers.isEmpty()) { + constants["ViewManagerNames"] = ArrayList(lazyViewManagers) + constants["LazyViewManagersEnabled"] = true + } + Arguments.makeNativeMap(constants) + } }) } From 2941159baf3ae0b257da3448213095344df8b79d Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Wed, 30 Jul 2025 14:20:42 +0200 Subject: [PATCH 138/312] fix(android): make ReactSurfaceView inheritable (#91) --- .../main/java/com/facebook/react/runtime/ReactSurfaceView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt index 0948dc932ee..28df7cd309d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt @@ -33,7 +33,7 @@ import kotlin.math.max * rendering a React component. */ @OptIn(FrameworkAPI::class, UnstableReactNativeAPI::class) -public class ReactSurfaceView(context: Context?, private val surface: ReactSurfaceImpl) : +public open class ReactSurfaceView(context: Context?, private val surface: ReactSurfaceImpl) : ReactRootView(context) { private val jsTouchDispatcher: JSTouchDispatcher = JSTouchDispatcher(this) private var jsPointerDispatcher: JSPointerDispatcher? = null From 6b5afc0d7ab2c7f3d8436c7dec662693f33d60c9 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 30 Jul 2025 10:27:57 -0500 Subject: [PATCH 139/312] Maybe fix for stopSuface crash --- .../react/renderer/uimanager/AppRegistryBinding.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.cpp index 2a40e37149b..91f8922b850 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.cpp @@ -72,6 +72,11 @@ namespace facebook::react { jsi::Runtime& runtime, SurfaceId surfaceId) { auto global = runtime.global(); + if (!global.hasProperty(runtime, "RN$stopSurface")) { + // ReactFabric module has not been loaded yet; there's no surface to stop. + return; + } + auto stopFunction = global.getProperty(runtime, "RN$stopSurface"); if (!stopFunction.isObject() || !stopFunction.asObject(runtime).isFunction(runtime)) { From 5c9b458f19fe30686c9f8055ecf8204c88db7b59 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Wed, 30 Jul 2025 21:56:56 +0200 Subject: [PATCH 140/312] fix: react host pass a custom function to create the surface view (#93) THis can be reverted once we found a upstream solution with meta here: https://github.com/facebook/react-native/pull/52919 --- .../main/java/com/facebook/react/ReactNativeHost.java | 11 +++++++++++ .../com/facebook/react/defaults/DefaultReactHost.kt | 8 +++++++- .../react/defaults/DefaultReactHostDelegate.kt | 7 ++++++- .../facebook/react/defaults/DefaultReactNativeHost.kt | 5 +++++ .../com/facebook/react/runtime/ReactHostDelegate.kt | 5 +++++ .../java/com/facebook/react/runtime/ReactHostImpl.kt | 2 +- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java index b05e6bb7dc6..084dc44b276 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java @@ -8,6 +8,8 @@ package com.facebook.react; import android.app.Application; +import android.content.Context; + import androidx.annotation.Nullable; import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.Nullsafe; @@ -27,8 +29,13 @@ import com.facebook.react.devsupport.interfaces.PausedInDebuggerOverlayManager; import com.facebook.react.devsupport.interfaces.RedBoxHandler; import com.facebook.react.internal.ChoreographerProvider; + +import com.facebook.react.runtime.ReactSurfaceView; +import com.facebook.react.runtime.ReactSurfaceImpl; + import java.util.List; + /** * Simple class that holds an instance of {@link ReactInstanceManager}. This can be used in your * {@link Application class} (see {@link ReactApplication}), or as a static field. @@ -247,4 +254,8 @@ protected String getJSMainModuleName() { protected @Nullable ChoreographerProvider getChoreographerProvider() { return null; } + + public ReactSurfaceView createReactSurfaceView(Context context, ReactSurfaceImpl surfaceImpl) { + return new ReactSurfaceView(context, surfaceImpl); + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt index 66b1519c165..3818ca18efe 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt @@ -21,6 +21,8 @@ import com.facebook.react.fabric.ComponentFactory import com.facebook.react.runtime.BindingsInstaller import com.facebook.react.runtime.JSRuntimeFactory import com.facebook.react.runtime.ReactHostImpl +import com.facebook.react.runtime.ReactSurfaceImpl +import com.facebook.react.runtime.ReactSurfaceView import com.facebook.react.runtime.cxxreactpackage.CxxReactPackage import com.facebook.react.runtime.hermes.HermesInstance import java.lang.Exception @@ -59,6 +61,7 @@ public object DefaultReactHost { public fun getDefaultReactHost( context: Context, packageList: List, + createReactSurfaceView: (Context, ReactSurfaceImpl) -> ReactSurfaceView, jsMainModulePath: String = "index", jsBundleAssetPath: String = "index", jsBundleFilePath: String? = null, @@ -69,6 +72,7 @@ public object DefaultReactHost { getDefaultReactHost( context, packageList, + createReactSurfaceView, jsMainModulePath, jsBundleAssetPath, jsBundleFilePath, @@ -105,6 +109,7 @@ public object DefaultReactHost { public fun getDefaultReactHost( context: Context, packageList: List, + createReactSurfaceView: (Context, ReactSurfaceImpl) -> ReactSurfaceView, jsMainModulePath: String = "index", jsBundleAssetPath: String = "index", jsBundleFilePath: String? = null, @@ -136,7 +141,8 @@ public object DefaultReactHost { jsRuntimeFactory = jsRuntimeFactory ?: HermesInstance(), bindingsInstaller = bindingsInstaller, turboModuleManagerDelegateBuilder = defaultTmmDelegateBuilder, - exceptionHandler = exceptionHandler) + exceptionHandler = exceptionHandler, + createReactSurfaceViewCallback = createReactSurfaceView) val componentFactory = ComponentFactory() DefaultComponentsRegistry.register(componentFactory) // TODO: T164788699 find alternative of accessing ReactHostImpl for initialising reactHost diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHostDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHostDelegate.kt index 6f37120a46a..780e7700571 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHostDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHostDelegate.kt @@ -7,6 +7,7 @@ package com.facebook.react.defaults +import android.content.Context import com.facebook.jni.annotations.DoNotStrip import com.facebook.react.ReactPackage import com.facebook.react.ReactPackageTurboModuleManagerDelegate @@ -16,6 +17,8 @@ import com.facebook.react.runtime.BindingsInstaller import com.facebook.react.runtime.JSRuntimeFactory import com.facebook.react.runtime.ReactHostDelegate import com.facebook.react.runtime.hermes.HermesInstance +import com.facebook.react.runtime.ReactSurfaceImpl +import com.facebook.react.runtime.ReactSurfaceView /** * A utility class that allows you to simplify the initialization of React Native by setting up a @@ -42,7 +45,9 @@ public class DefaultReactHostDelegate( override val jsRuntimeFactory: JSRuntimeFactory = HermesInstance(), override val bindingsInstaller: BindingsInstaller? = null, private val exceptionHandler: (Exception) -> Unit = { throw it }, - override val turboModuleManagerDelegateBuilder: ReactPackageTurboModuleManagerDelegate.Builder + override val turboModuleManagerDelegateBuilder: ReactPackageTurboModuleManagerDelegate.Builder, + private val createReactSurfaceViewCallback: (Context, ReactSurfaceImpl) -> ReactSurfaceView ) : ReactHostDelegate { override fun handleInstanceException(error: Exception): Unit = exceptionHandler(error) + override fun createReactSurfaceView(context: Context, surfaceImpl: ReactSurfaceImpl): ReactSurfaceView = createReactSurfaceViewCallback(context, surfaceImpl) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt index 2d34f463984..36995518f57 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt @@ -21,6 +21,8 @@ import com.facebook.react.fabric.ComponentFactory import com.facebook.react.fabric.FabricUIManagerProviderImpl import com.facebook.react.runtime.JSRuntimeFactory import com.facebook.react.runtime.hermes.HermesInstance +import com.facebook.react.runtime.ReactSurfaceImpl +import com.facebook.react.runtime.ReactSurfaceView import com.facebook.react.uimanager.ViewManagerRegistry import com.facebook.react.uimanager.ViewManagerResolver @@ -106,9 +108,12 @@ protected constructor( jsRuntimeFactory: JSRuntimeFactory? = null ): ReactHost { val concreteJSRuntimeFactory = jsRuntimeFactory ?: HermesInstance() + val createReactSurfaceViewCallback: (Context, ReactSurfaceImpl) -> ReactSurfaceView = + { ctx, surfaceImpl -> createReactSurfaceView(ctx, surfaceImpl) } return DefaultReactHost.getDefaultReactHost( context, packages, + createReactSurfaceViewCallback, jsMainModuleName, bundleAssetName ?: "index", jsBundleFile, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostDelegate.kt index 10190871f42..828db77a9f7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostDelegate.kt @@ -7,11 +7,14 @@ package com.facebook.react.runtime +import android.content.Context import com.facebook.infer.annotation.ThreadSafe import com.facebook.react.ReactPackage import com.facebook.react.ReactPackageTurboModuleManagerDelegate import com.facebook.react.bridge.JSBundleLoader import com.facebook.react.common.annotations.UnstableReactNativeAPI +import com.facebook.react.runtime.ReactSurfaceImpl +import com.facebook.react.runtime.ReactSurfaceView /** * [ReactHostDelegate] is an interface that defines parameters required to initialize React Native. @@ -53,4 +56,6 @@ public interface ReactHostDelegate { * the internals of React Native. */ public fun handleInstanceException(error: Exception) + + public fun createReactSurfaceView(context: Context, surfaceImpl: ReactSurfaceImpl): ReactSurfaceView } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt index 4ed8dd2738c..d88c329b24c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt @@ -319,7 +319,7 @@ public class ReactHostImpl( initialProps: Bundle? ): ReactSurface { val surface = ReactSurfaceImpl(context, moduleName, initialProps) - val surfaceView = ReactSurfaceView(context, surface) + val surfaceView = reactHostDelegate.createReactSurfaceView(context, surface); surfaceView.setShouldLogContentAppeared(true) surface.attachView(surfaceView) surface.attach(this) From ad45e868324bfc9ff7ae9f268b5268c738612fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Thu, 31 Jul 2025 16:39:24 +0200 Subject: [PATCH 141/312] Make saving blocking to avoid concurrent access Error (#94) --- .../uimanager/UIManagerConstantsCache.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java index f631ed71633..02774e02e45 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java @@ -221,32 +221,29 @@ public void saveConstantsAndBubblingEventsTypes( return; } - // Spawn a background thread to write both JSON blobs - new Thread(() -> { + try { + // Serialize full constants + JSONObject jsonConsts = mapToJson(constants); + long t0 = System.currentTimeMillis(); + MMKV.defaultMMKV().encode(MMKV_KEY_CONSTANTS, jsonConsts.toString()); + long t1 = System.currentTimeMillis(); + Log.v(TAG, "Saved UIManager constants to MMKV in " + (t1 - t0) + "ms"); + } catch (JSONException e) { + Log.e(TAG, "Failed to JSON-serialize UIManager constants; not caching.", e); + } + + if (bubblingEventsTypes != null) { try { - // Serialize full constants - JSONObject jsonConsts = mapToJson(constants); - long t0 = System.currentTimeMillis(); - MMKV.defaultMMKV().encode(MMKV_KEY_CONSTANTS, jsonConsts.toString()); - long t1 = System.currentTimeMillis(); - Log.v(TAG, "Saved UIManager constants to MMKV in " + (t1 - t0) + "ms"); + // Serialize bubblingEventTypes + JSONObject jsonBub = mapToJson(bubblingEventsTypes); + long t2 = System.currentTimeMillis(); + MMKV.defaultMMKV().encode(MMKV_KEY_BUBBLING, jsonBub.toString()); + long t3 = System.currentTimeMillis(); + Log.v(TAG, "Saved bubblingEventTypes to MMKV in " + (t3 - t2) + "ms"); } catch (JSONException e) { - Log.e(TAG, "Failed to JSON-serialize UIManager constants; not caching.", e); + Log.e(TAG, "Failed to JSON-serialize bubblingEventTypes; not caching.", e); } - - if (bubblingEventsTypes != null) { - try { - // Serialize bubblingEventTypes - JSONObject jsonBub = mapToJson(bubblingEventsTypes); - long t2 = System.currentTimeMillis(); - MMKV.defaultMMKV().encode(MMKV_KEY_BUBBLING, jsonBub.toString()); - long t3 = System.currentTimeMillis(); - Log.v(TAG, "Saved bubblingEventTypes to MMKV in " + (t3 - t2) + "ms"); - } catch (JSONException e) { - Log.e(TAG, "Failed to JSON-serialize bubblingEventTypes; not caching.", e); - } - } - }, "UIManagerConstantsCache-Saver").start(); + } } // ──────────────────────────────────────────────────────────────────────────────── From d3f606b3c241f80e9cee820e074fc04bf7aaec73 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 1 Aug 2025 16:04:27 -0500 Subject: [PATCH 142/312] Maybe fix for ClippingView --- .../react/views/view/ReactClippingViewManager.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt index 2f2453e97a1..e3f012f51ce 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt @@ -29,6 +29,17 @@ public abstract class ReactClippingViewManager : ViewGroupMa override fun addView(parent: T, child: View, index: Int) { UiThreadUtil.assertOnUiThread() + if (child.parent != null) { + (child.parent as? ViewGroup)?.removeView(child) + child.post { + addViewInternal(parent, child, index) + } + } else { + addViewInternal(parent, child, index) + } + } + + fun addViewInternal(parent: T, child: View, index: Int) { val removeClippedSubviews = parent.removeClippedSubviews if (removeClippedSubviews) { parent.addViewWithSubviewClippingEnabled(child, index) From b7c743b71ccf7e00b3ec18608dd95ffdb8c7a611 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 4 Aug 2025 13:22:57 -0500 Subject: [PATCH 143/312] [Android] Maybe fix for ClippingView Pt 2 --- .../com/facebook/react/views/view/ReactClippingViewManager.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt index e3f012f51ce..0897a23f518 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt @@ -8,6 +8,7 @@ package com.facebook.react.views.view import android.view.View +import android.view.ViewGroup import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.uimanager.ReactClippingViewGroupHelper import com.facebook.react.uimanager.ViewGroupManager @@ -39,7 +40,7 @@ public abstract class ReactClippingViewManager : ViewGroupMa } } - fun addViewInternal(parent: T, child: View, index: Int) { + private fun addViewInternal(parent: T, child: View, index: Int) { val removeClippedSubviews = parent.removeClippedSubviews if (removeClippedSubviews) { parent.addViewWithSubviewClippingEnabled(child, index) From 491af549a15aaf295af3eca4da6b69d6eecf8edc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Mon, 4 Aug 2025 19:51:37 +0200 Subject: [PATCH 144/312] Avoid GC during the app start --- .../ReactCommon/react/runtime/hermes/HermesInstance.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp b/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp index d09f3a7ee3c..00203fcb686 100644 --- a/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp +++ b/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp @@ -127,10 +127,12 @@ std::unique_ptr HermesInstance::createJSRuntime( auto gcConfig = ::hermes::vm::GCConfig::Builder() // Default to 3GB + .withInitHeapSize(150ll * 1024 * 1024) + .withShouldReleaseUnused(::hermes::vm::kReleaseUnusedNone) .withMaxHeapSize(3072 << 20) .withName("RNBridgeless"); - if (allocInOldGenBeforeTTI) { + if (true || allocInOldGenBeforeTTI) { // For the next two arguments: avoid GC before TTI // by initializing the runtime to allocate directly // in the old generation, but revert to normal From 2ebf5ee53a4fd828079701d25c2fe790269b69b4 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Wed, 6 Aug 2025 15:36:23 +0200 Subject: [PATCH 145/312] fix(android): fix crashes due to UIManager constants not resetting when switching arch (#97) When a user upgraded the app from an old arch build to a new arch build we'd still have the old arch UI manager constants cached, which would cause issues such as: https://app.asana.com/1/236888843494340/project/1199705967702853/task/1210978138201347 Additionally when adding new views our view manager cache would never update and this would also lead to errors at runtime. So in this fix we keep track of the app version + arch we've cached, and if that changes we regenerate the cache: Screenshot 2025-08-06 at 15 28 12 A better long term strategy would be to compile the ui manager constants at runtime. --- .../uimanager/UIManagerConstantsCache.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java index 02774e02e45..9f44918d160 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerConstantsCache.java @@ -1,10 +1,12 @@ package com.facebook.react.uimanager; import android.content.Context; +import android.content.pm.PackageManager; import android.util.Log; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableNativeMap; +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags; import com.tencent.mmkv.MMKV; import org.json.JSONArray; @@ -43,6 +45,7 @@ public class UIManagerConstantsCache { private static final String TAG = "UIManagerConstantsCache"; // MMKV keys for two separate blobs + private static final String MMKV_KEY_VERSION = "UIManagerConstantsCacheVersion"; private static final String MMKV_KEY_CONSTANTS = "UIManagerModuleConstants_v1"; private static final String MMKV_KEY_BUBBLING = "UIManagerModuleBubbling_v1"; @@ -63,6 +66,8 @@ public class UIManagerConstantsCache { /** Ensures init(...) is only done once. */ private volatile boolean initCalled = false; + private String cacheVersionName = null; + private UIManagerConstantsCache() { // private constructor } @@ -85,14 +90,43 @@ public synchronized void init(Context appContext) { } initCalled = true; + // Its possible that the constants change between versions, so we have to keep track of the version + // and reset the cache if it changes. + // TODO: This can be improved by us compiling the UIManager constants at compile time + try { + cacheVersionName = appContext.getPackageManager() + .getPackageInfo(appContext.getPackageName(), 0) + .versionName; + cacheVersionName += "-" + (ReactNativeFeatureFlags.enableFabricRenderer() ? + "Fabric" : "NonFabric"); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Failed to get app version name; continuing without caching!", e); + return; + } + // 1) Initialize MMKV MMKV.initialize(appContext.getApplicationContext()); // 2) Background thread to load both blobs + String finalCacheVersionName = cacheVersionName; new Thread(() -> { try { MMKV mmkv = MMKV.defaultMMKV(); + // 2a) Get the version the cache was generated with and see if its matching + String cacheVersion = mmkv.decodeString(MMKV_KEY_VERSION, null); + if (cacheVersion == null || !cacheVersion.equals(finalCacheVersionName)) { + Log.w(TAG, "UIManagerConstantsCache version mismatch! Expected: " + + finalCacheVersionName + ", found: " + cacheVersion + + ". Will regenerate constants and bubblingEventTypes."); + + mmkv.removeValueForKey(MMKV_KEY_CONSTANTS); + mmkv.removeValueForKey(MMKV_KEY_BUBBLING); + } else { + Log.v(TAG, "UIManagerConstantsCache version matches: " + finalCacheVersionName); + } + + // 2a) Read full-constants JSON String jsonConstants = mmkv.decodeString(MMKV_KEY_CONSTANTS, null); if (jsonConstants != null) { @@ -220,6 +254,11 @@ public void saveConstantsAndBubblingEventsTypes( if (constants == null) { return; } + if (cacheVersionName == null) { + throw new IllegalStateException( + "UIManagerConstantsCache not initialized! Call init(...) first." + ); + } try { // Serialize full constants @@ -244,6 +283,8 @@ public void saveConstantsAndBubblingEventsTypes( Log.e(TAG, "Failed to JSON-serialize bubblingEventTypes; not caching.", e); } } + + MMKV.defaultMMKV().encode(MMKV_KEY_VERSION, cacheVersionName); } // ──────────────────────────────────────────────────────────────────────────────── From e2704cd09cc02319d5db2201237028810a1b7c78 Mon Sep 17 00:00:00 2001 From: Peter Abbondanzo Date: Sun, 3 Aug 2025 18:04:43 -0700 Subject: [PATCH 146/312] Ensure active touches are swept before accepting a child native gesture (#52995) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52995 Fabric retains views by ID when `JSTouchDispatcher` receives a touch event, but does not sweep these same views if a child native gesture is started between the `ACTION_DOWN` and `ACTION_UP` actions of the touch. As a result, we never end up calling into that view's manager's `onDropViewInstance` method and can't perform reliable teardown of the view since it's stuck in this "touched" state. This is change adds a new condition to check if `JSTouchDispatcher` should sweep active touches when a child native gesture is started, and only applies the check to `ReactSurfaceView` to start. The check is also only enabled if the `sweepActiveTouchOnChildNativeGesturesAndroid` flag is set. Changelog: [Internal] Reviewed By: jehartzog Differential Revision: D79230277 fbshipit-source-id: c15b888ec932319f1bda05b8ef5eec39e5d08710 --- .../facebook/react/runtime/ReactSurfaceView.kt | 3 ++- .../react/uimanager/JSTouchDispatcher.kt | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt index 28df7cd309d..5d3a9967a67 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt @@ -116,7 +116,8 @@ public open class ReactSurfaceView(context: Context?, private val surface: React */ override fun onChildStartedNativeGesture(childView: View?, ev: MotionEvent) { val eventDispatcher = surface.eventDispatcher ?: return - jsTouchDispatcher.onChildStartedNativeGesture(ev, eventDispatcher) + jsTouchDispatcher.onChildStartedNativeGesture( + ev, eventDispatcher, surface.reactHost?.currentReactContext) childView?.let { jsPointerDispatcher?.onChildStartedNativeGesture(it, ev, eventDispatcher) } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt index 86250eaa604..b28b674581a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt @@ -13,6 +13,8 @@ import com.facebook.common.logging.FLog import com.facebook.infer.annotation.Assertions import com.facebook.react.bridge.ReactContext import com.facebook.react.common.ReactConstants +import com.facebook.react.common.annotations.UnstableReactNativeAPI +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags import com.facebook.react.uimanager.common.UIManagerType import com.facebook.react.uimanager.events.EventDispatcher import com.facebook.react.uimanager.events.TouchEvent @@ -33,9 +35,19 @@ public class JSTouchDispatcher(private val viewGroup: ViewGroup) { private val touchEventCoalescingKeyHelper: TouchEventCoalescingKeyHelper = TouchEventCoalescingKeyHelper() + @OptIn(UnstableReactNativeAPI::class) public fun onChildStartedNativeGesture( androidEvent: MotionEvent, eventDispatcher: EventDispatcher + ) { + onChildStartedNativeGesture(androidEvent, eventDispatcher, null) + } + + @UnstableReactNativeAPI + public fun onChildStartedNativeGesture( + androidEvent: MotionEvent, + eventDispatcher: EventDispatcher, + reactContext: ReactContext?, ) { if (childIsHandlingNativeGesture) { // This means we previously had another child start handling this native gesture and now a @@ -46,6 +58,12 @@ public class JSTouchDispatcher(private val viewGroup: ViewGroup) { dispatchCancelEvent(androidEvent, eventDispatcher) childIsHandlingNativeGesture = true + + if (targetTag != -1 && ReactNativeFeatureFlags.sweepActiveTouchOnChildNativeGesturesAndroid()) { + val surfaceId = UIManagerHelper.getSurfaceId(viewGroup) + sweepActiveTouchForTag(surfaceId, targetTag, reactContext) + } + targetTag = -1 } From ee4fc03c55ac79daba626e0cd8cd7f0715b6cae4 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Fri, 22 Aug 2025 17:14:28 +0200 Subject: [PATCH 147/312] fix(andorid): add missing discord custom `preventClipping` prop (#99) --- .../Libraries/NativeComponent/BaseViewConfig.android.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/react-native/Libraries/NativeComponent/BaseViewConfig.android.js b/packages/react-native/Libraries/NativeComponent/BaseViewConfig.android.js index 8dcad92e61d..6a1b7fb3be4 100644 --- a/packages/react-native/Libraries/NativeComponent/BaseViewConfig.android.js +++ b/packages/react-native/Libraries/NativeComponent/BaseViewConfig.android.js @@ -412,6 +412,9 @@ const validAttributesForEventProps = { onPointerOutCapture: true, onPointerOver: true, onPointerOverCapture: true, + + // Custom discord props: + preventClipping: true, } as const; /** From 557f45f0f02e5df959f07621164c5c237e827e4e Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 10:29:14 -0500 Subject: [PATCH 148/312] Fix NdkConfiguratorUtils gradle import --- .../kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt index b8847cc2c78..2cb3bc65d33 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt @@ -7,7 +7,7 @@ package com.facebook.react.utils -import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.api.variant.Variant import com.facebook.react.ReactExtension import com.facebook.react.utils.ProjectUtils.getReactNativeArchitectures From 0d63942a0ea4bf3d9f3aff1627ca054270d1379f Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 10:34:58 -0500 Subject: [PATCH 149/312] NdkConfiguratorUtils, using ApplicationAndroidComponentsExtension --- .../kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt index 2cb3bc65d33..ec37b060105 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt @@ -7,7 +7,7 @@ package com.facebook.react.utils -import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.Variant import com.facebook.react.ReactExtension import com.facebook.react.utils.ProjectUtils.getReactNativeArchitectures @@ -18,7 +18,7 @@ internal object NdkConfiguratorUtils { @Suppress("UnstableApiUsage") fun configureReactNativeNdk(project: Project, extension: ReactExtension) { project.pluginManager.withPlugin("com.android.application") { - project.extensions.getByType(AndroidComponentsExtension::class.java).finalizeDsl { ext -> + project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java).finalizeDsl { ext -> // We enable prefab so users can consume .so/headers from ReactAndroid and hermes-engine // .aar ext.buildFeatures.prefab = true From 9ed88ff86a1a4530ffa50d40be08190cd55487b6 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 11:34:56 -0500 Subject: [PATCH 150/312] Removing deprecated ShadowNode::Shared usage --- .../ReactCommon/react/renderer/uimanager/UIManagerDelegate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h index 97a8c8f05f8..b2318b3e4f7 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h @@ -42,7 +42,7 @@ class UIManagerDelegate { const std::string& commandName, const folly::dynamic& args) = 0; - virtual void uiManagerMeasure(const ShadowNode::Shared& shadowNode, std::function jsCallback) = 0; + virtual void uiManagerMeasure(const std::shared_ptr& shadowNode, std::function jsCallback) = 0; /* * Called when UIManager wants to dispatch some accessibility event From 6d247c362ca4db3572eebab3e1a16c20371c6a4b Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 12:06:08 -0500 Subject: [PATCH 151/312] Two more ShadowNode::Shared deprecations --- .../ReactCommon/react/renderer/scheduler/Scheduler.cpp | 2 +- .../ReactCommon/react/renderer/scheduler/Scheduler.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp index ecca9aecd76..ef42aa4f4ee 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp @@ -299,7 +299,7 @@ void Scheduler::uiManagerDidSendAccessibilityEvent( } } -void Scheduler::uiManagerMeasure(const ShadowNode::Shared& shadowNode, std::function jsCallback) { +void Scheduler::uiManagerMeasure(const std::shared_ptr& shadowNode, std::function jsCallback) { if (delegate_ != nullptr) { auto shadowView = ShadowView(*shadowNode); delegate_->schedulerMeasure(shadowView, jsCallback); diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h index 42243f286e5..20fc3211bb2 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h @@ -104,7 +104,7 @@ class Scheduler final : public UIManagerDelegate { void uiManagerShouldRemoveEventListener( const std::shared_ptr& listener) final; void uiManagerDidStartSurface(const ShadowTree& shadowTree) override; - void uiManagerMeasure(const ShadowNode::Shared& shadowNode, std::function jsCallback) override; + void uiManagerMeasure(const std::shared_ptr& shadowNode, std::function jsCallback) override; #pragma mark - ContextContainer ContextContainer::Shared getContextContainer() const; From 6adde05a14516c48a86761afc45fa15fde7455ff Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 13:21:16 -0500 Subject: [PATCH 152/312] Updating other callsites of DefaultReactHost.kt --- .../main/java/com/facebook/react/defaults/DefaultReactHost.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt index 3818ca18efe..6c380f98ada 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt @@ -212,6 +212,7 @@ public object DefaultReactHost { getDefaultReactHost( context, packageList, + { ctx, surface -> ReactSurfaceView(ctx, surface) }, jsMainModulePath, jsBundleAssetPath, jsBundleFilePath, @@ -268,6 +269,7 @@ public object DefaultReactHost { getDefaultReactHost( context, packageList, + { ctx, surface -> ReactSurfaceView(ctx, surface) }, jsMainModulePath, jsBundleAssetPath, jsBundleFilePath, From f4073aae72c0002aa527b42dbb49964c45474e9c Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 14:50:13 -0500 Subject: [PATCH 153/312] Revert "Ensure active touches are swept before accepting a child native gesture (#52995)" This reverts commit 931dbc3749fe9912fa2cd46b7a1615272d47151c. --- .../facebook/react/runtime/ReactSurfaceView.kt | 3 +-- .../react/uimanager/JSTouchDispatcher.kt | 18 ------------------ 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt index 5d3a9967a67..28df7cd309d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt @@ -116,8 +116,7 @@ public open class ReactSurfaceView(context: Context?, private val surface: React */ override fun onChildStartedNativeGesture(childView: View?, ev: MotionEvent) { val eventDispatcher = surface.eventDispatcher ?: return - jsTouchDispatcher.onChildStartedNativeGesture( - ev, eventDispatcher, surface.reactHost?.currentReactContext) + jsTouchDispatcher.onChildStartedNativeGesture(ev, eventDispatcher) childView?.let { jsPointerDispatcher?.onChildStartedNativeGesture(it, ev, eventDispatcher) } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt index b28b674581a..86250eaa604 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt @@ -13,8 +13,6 @@ import com.facebook.common.logging.FLog import com.facebook.infer.annotation.Assertions import com.facebook.react.bridge.ReactContext import com.facebook.react.common.ReactConstants -import com.facebook.react.common.annotations.UnstableReactNativeAPI -import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags import com.facebook.react.uimanager.common.UIManagerType import com.facebook.react.uimanager.events.EventDispatcher import com.facebook.react.uimanager.events.TouchEvent @@ -35,19 +33,9 @@ public class JSTouchDispatcher(private val viewGroup: ViewGroup) { private val touchEventCoalescingKeyHelper: TouchEventCoalescingKeyHelper = TouchEventCoalescingKeyHelper() - @OptIn(UnstableReactNativeAPI::class) public fun onChildStartedNativeGesture( androidEvent: MotionEvent, eventDispatcher: EventDispatcher - ) { - onChildStartedNativeGesture(androidEvent, eventDispatcher, null) - } - - @UnstableReactNativeAPI - public fun onChildStartedNativeGesture( - androidEvent: MotionEvent, - eventDispatcher: EventDispatcher, - reactContext: ReactContext?, ) { if (childIsHandlingNativeGesture) { // This means we previously had another child start handling this native gesture and now a @@ -58,12 +46,6 @@ public class JSTouchDispatcher(private val viewGroup: ViewGroup) { dispatchCancelEvent(androidEvent, eventDispatcher) childIsHandlingNativeGesture = true - - if (targetTag != -1 && ReactNativeFeatureFlags.sweepActiveTouchOnChildNativeGesturesAndroid()) { - val surfaceId = UIManagerHelper.getSurfaceId(viewGroup) - sweepActiveTouchForTag(surfaceId, targetTag, reactContext) - } - targetTag = -1 } From 1c1460794f9420a080155e2eb5207376a9b3f51b Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 14:58:42 -0500 Subject: [PATCH 154/312] fix memory leak: Ensure active touches are swept before accepting a child native gesture --- .../com/facebook/react/uimanager/JSTouchDispatcher.kt | 4 ++++ .../java/com/facebook/react/uimanager/UIManagerHelper.kt | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt index 86250eaa604..0f18034c7b6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt @@ -45,6 +45,10 @@ public class JSTouchDispatcher(private val viewGroup: ViewGroup) { } dispatchCancelEvent(androidEvent, eventDispatcher) + // TODO: can be removed once we land https://github.com/facebook/react-native/commit/87749470ccf596c5b3bc06fe46ba3239b684fd1b + val surfaceId = UIManagerHelper.getSurfaceId(viewGroup) + val reactContext = UIManagerHelper.getReactContext(viewGroup) + sweepActiveTouchForTag(surfaceId, targetTag, reactContext) childIsHandlingNativeGesture = true targetTag = -1 } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt index 25b64432904..0ce0ff76bc9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt @@ -14,6 +14,7 @@ import android.content.ContextWrapper import android.view.View import android.widget.EditText import androidx.core.view.ViewCompat +import com.facebook.react.ReactRootView import com.facebook.react.bridge.CatalystInstance import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReactNoCrashSoftException @@ -160,6 +161,13 @@ public object UIManagerHelper { */ @JvmStatic public fun getReactContext(view: View): ReactContext { + // TODO: this if can be removed once we land https://github.com/facebook/react-native/commit/87749470ccf596c5b3bc06fe46ba3239b684fd1b + if (view is ReactRootView) { + val reactContext: ReactContext? = view.currentReactContext + return requireNotNull(reactContext) { + "ReactRootView should always have a ReactContext associated with it, but it was null." + } + } var context = view.context if (context !is ReactContext && context is ContextWrapper) { context = context.baseContext From 6476f6e460fd1b524a5329daa6a2fc6356a7e30f Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 16:35:48 -0500 Subject: [PATCH 155/312] Removing internal publication --- packages/react-native/ReactAndroid/build.gradle.kts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 603cf16441b..9a6453f106c 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -760,11 +760,5 @@ publishing { getByName("release", MavenPublication::class) { artifactId = "react-android" } - create("libZip") { - groupId = "com.facebook.react" - version = "test" - artifactId = "discord-rn-libs" - artifact(tasks.named("createReactNdkLibraryZipArchiveForDiscord").get()) - } } } From 8c7a9d6ae687083befde53ec1ee431886b77ac5b Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 26 Aug 2025 20:19:27 -0500 Subject: [PATCH 156/312] More compilation fixes --- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 1 + .../java/com/facebook/react/uimanager/UIManagerModule.java | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 2fe2fc4e0b0..a37c175f651 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -25,6 +25,7 @@ import android.view.View; import android.view.accessibility.AccessibilityEvent; import androidx.annotation.AnyThread; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; import androidx.core.util.Preconditions; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 2f1f538727d..e7aaf46c6a5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -147,7 +147,7 @@ public UIManagerModule( List viewManagersList, int minTimeLeftInFrameForNonBatchedOperationMs) { super(reactContext); - Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "UIManagerModule.init"); + Systrace.beginSection(Systrace.TRACE_TAG_REACT, "UIManagerModule.init"); DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext); mEventDispatcher = new EventDispatcherImpl(reactContext); mCustomDirectEvents = MapBuilder.newHashMap(); @@ -168,8 +168,6 @@ public UIManagerModule( } reactContext.addLifecycleEventListener(this); - mEventDispatcher.registerEventEmitter( - DEFAULT, getReactApplicationContext().getJSModule(RCTEventEmitter.class)); } /** From 5544c02eb1f72052b7b60506d7369acf0795b858 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Mon, 1 Sep 2025 14:01:54 +0200 Subject: [PATCH 157/312] discord: add more shadow tree tree methods (#100) --- .../ReactCommon/SampleTurboModuleSpec.cpp | 2 +- .../react/renderer/mounting/ShadowTree.cpp | 14 ++++++++++++++ .../react/renderer/mounting/ShadowTreeDelegate.h | 5 +++++ .../mounting/tests/StateReconciliationTest.cpp | 3 +++ .../react/renderer/uimanager/UIManager.cpp | 16 ++++++++++++++++ .../react/renderer/uimanager/UIManager.h | 3 +++ .../renderer/uimanager/UIManagerCommitHook.h | 5 +++++ 7 files changed, 47 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp index 02787bc1e5e..e3fd453d559 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp @@ -379,7 +379,7 @@ NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI( std::make_shared>(); eventEmitterMap_["onSubmit"] = std::make_shared>(); - configureEventEmitterCallback(); +// configureEventEmitterCallback(); } std::shared_ptr SampleTurboModuleSpec_ModuleProvider( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 483a1915fd6..9dedbce7b24 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -20,6 +20,16 @@ #include "ShadowTreeDelegate.h" +// Discord - Wrap with ScopeGuard for a function to run on the end of the scope: +#include +struct ScopeGuard { + std::function fn; + ~ScopeGuard() { fn(); } +}; +#define CONCAT_IMPL(x, y) x##y +#define CONCAT(x, y) CONCAT_IMPL(x, y) +#define defer(code) ScopeGuard CONCAT(defer, LINE)([&](){code;}) + namespace facebook::react { namespace { @@ -315,6 +325,7 @@ CommitStatus ShadowTree::tryCommit( *this, oldRootShadowNode, newRootShadowNode, commitOptions); if (!newRootShadowNode) { + delegate_.shadowTreeCommitFinalized(commitOptions); return CommitStatus::Cancelled; } @@ -331,6 +342,7 @@ CommitStatus ShadowTree::tryCommit( { // Updating `currentRevision_` in unique manner if it hasn't changed. UniqueLock lock = uniqueCommitLock(); + defer(delegate_.shadowTreeCommitFinalized(commitOptions)); if (currentRevision_.number != oldRevision.number) { return CommitStatus::Failed; @@ -338,6 +350,8 @@ CommitStatus ShadowTree::tryCommit( auto newRevisionNumber = currentRevision_.number + 1; + delegate_.shadowTreeCommitSucceeded(commitOptions); + { std::scoped_lock dispatchLock(EventEmitter::DispatchMutex()); updateMountedFlag( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h index 14402722045..ed73511d4a8 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h @@ -38,6 +38,11 @@ class ShadowTreeDelegate { std::shared_ptr mountingCoordinator, bool mountSynchronously) const = 0; + // Called after a commit is known to succeed, however, still under the commit lock + virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const = 0; + // Will be called in each case once we are done with the current commit attempt + virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const = 0; + virtual ~ShadowTreeDelegate() noexcept = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp index 70d762b516c..05060a23f07 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp @@ -37,6 +37,9 @@ class DummyShadowTreeDelegate : public ShadowTreeDelegate { void shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const override {}; + + void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override {}; + void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override {}; }; namespace { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index edee8ac36bc..b47f224b818 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -626,6 +626,22 @@ RootShadowNode::Unshared UIManager::shadowTreeWillCommit( return resultRootShadowNode; } +void UIManager::shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const { + std::shared_lock lock(commitHookMutex_); + + for (auto* commitHook : commitHooks_) { + commitHook->shadowTreeCommitSucceeded(commitOptions); + } +} + +void UIManager::shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const { + std::shared_lock lock(commitHookMutex_); + + for (auto* commitHook : commitHooks_) { + commitHook->shadowTreeCommitFinalized(commitOptions); + } +} + void UIManager::shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index 43de6ef06f4..5b794fcb458 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -135,6 +135,9 @@ class UIManager final : public ShadowTreeDelegate { const RootShadowNode::Unshared& newRootShadowNode, const ShadowTree::CommitOptions& commitOptions) const override; + void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override; + void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override; + std::shared_ptr createNode( Tag tag, const std::string& componentName, diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h index 2e15c6ca89e..e01238b853e 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h @@ -54,6 +54,11 @@ class UIManagerCommitHook { return newRootShadowNode; } + // Discord - Called after a commit is known to succeed, however, still under the commit lock + virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) = 0; + // Discord - Will be called in each case once we are done with the current commit attempt + virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) = 0; + virtual ~UIManagerCommitHook() noexcept = default; }; From 3fa33fb70218b8e5d87c27979d6e7293ccd66863 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Thu, 11 Sep 2025 16:30:59 +0200 Subject: [PATCH 158/312] Bridgeless (#101) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * rename version * Init RN on multiple threads 1/2 * Update ReactPackageTurboModuleManagerDelegate.java * Update ReactPackageTurboModuleManagerDelegate.java * Update build.gradle.kts * Update build.gradle.kts * Update ComponentDescriptorProviderRegistry.cpp * Update ComponentDescriptorRegistry.h * Update ComponentDescriptorProviderRegistry.cpp * Update ComponentDescriptorRegistry.cpp * Update ComponentDescriptorProviderRegistry.cpp * fix missing jni env * bump version * Updated version to 0.78.0-discord-100003 * avoid using future flags * Refactor TurboModuleManager handling in ReactInstanceManager Refactor TurboModuleManager initialization and eager loading. * Update TurboModuleManager.java * change version name * set version name * use correct var * Updated version to 0.78.0-discord-100001 * increment version * Updated version to 0.78.0-discord-100005 * fix ComponentRegistry iOS compat * Updated version to 0.78.0-discord-100006 * version name * make component provider registry bridgelss disabled compat * make ReactInstanceManager changes bridgeless off compat * make module init phase none bridgeless compat * cleanup * formatting * cleanup --------- Co-authored-by: Szymon Kapala Co-authored-by: Szymon Kapała Co-authored-by: CI Bot --- .../ReactAndroid/build.gradle.kts | 14 +++++ .../facebook/react/ReactInstanceManager.java | 20 +++++-- .../ReactPackageTurboModuleManagerDelegate.kt | 56 +++++++++++++++++-- .../ComponentDescriptorProviderRegistry.cpp | 26 ++++++++- .../ComponentDescriptorRegistry.cpp | 38 +++++++++++++ .../ComponentDescriptorRegistry.h | 2 + 6 files changed, 145 insertions(+), 11 deletions(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 9a6453f106c..2b9e40ce8d4 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -584,6 +584,8 @@ android { "-DANDROID_TOOLCHAIN=clang", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", "-DCMAKE_POLICY_DEFAULT_CMP0069=NEW") + cppFlags += "-flto" + cFlags += "-flto" targets( "reactnative", @@ -762,3 +764,15 @@ publishing { } } } + +subprojects { + afterEvaluate { + if (project.extensions.findByName("android") != null) { + val androidExt = project.extensions.getByName("android") as com.android.build.gradle.BaseExtension + androidExt.defaultConfig.externalNativeBuild?.cmake?.apply { + cppFlags.add("-flto") + cFlags.add("-flto") + } + } + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 7b0300bc35c..fd6773d6a1b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -29,7 +29,6 @@ import static com.facebook.react.bridge.ReactMarkerConstants.VM_INIT; import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT; - import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -1481,6 +1480,8 @@ private ReactApplicationContext createReactContext( // architecture so it will always be there. catalystInstance.getRuntimeScheduler(); + TurboModuleManager turboModuleManager = null; + if (ReactNativeNewArchitectureFeatureFlags.useTurboModules() && mTMMDelegateBuilder != null) { TurboModuleManagerDelegate tmmDelegate = mTMMDelegateBuilder @@ -1488,7 +1489,7 @@ private ReactApplicationContext createReactContext( .setReactApplicationContext(reactContext) .build(); - TurboModuleManager turboModuleManager = + turboModuleManager = new TurboModuleManager( catalystInstance.getRuntimeExecutor(), tmmDelegate, @@ -1497,9 +1498,11 @@ private ReactApplicationContext createReactContext( catalystInstance.setTurboModuleRegistry(turboModuleManager); - // Eagerly initialize TurboModules - for (String moduleName : turboModuleManager.getEagerInitModuleNames()) { - turboModuleManager.getModule(moduleName); + if (!reactContext.isBridgeless()) { + // Eagerly initialize TurboModules + for (String moduleName : turboModuleManager.getEagerInitModuleNames()) { + turboModuleManager.getModule(moduleName); + } } } @@ -1525,6 +1528,13 @@ private ReactApplicationContext createReactContext( catalystInstance.runJSBundle(); Systrace.endSection(TRACE_TAG_REACT); + if (reactContext.isBridgeless() && ReactNativeFeatureFlags.useTurboModules() && mTMMDelegateBuilder != null) { + // Eagerly initialize TurboModules + for (String moduleName : turboModuleManager.getEagerInitModuleNames()) { + turboModuleManager.getModule(moduleName); + } + } + return reactContext; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt index d13a565d6e0..a80c011b748 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt @@ -18,6 +18,7 @@ import com.facebook.react.module.annotations.ReactModule import com.facebook.react.module.model.ReactModuleInfo import com.facebook.react.turbomodule.core.interfaces.TurboModule import javax.inject.Provider +import java.util.concurrent.CountDownLatch public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManagerDelegate { internal fun interface ModuleProvider { @@ -29,6 +30,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage private val shouldEnableLegacyModuleInterop = ReactNativeNewArchitectureFeatureFlags.enableBridgelessArchitecture() && ReactNativeNewArchitectureFeatureFlags.useTurboModuleInterop() + private val initTasksLeft = CountDownLatch(1) protected constructor( reactApplicationContext: ReactApplicationContext, @@ -48,6 +50,23 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage private fun initialize( reactApplicationContext: ReactApplicationContext, packages: List + ) { + if (!reactApplicationContext.isBridgeless) { + initializeModules(reactApplicationContext, packages) + initTasksLeft.countDown() + return + } + + val worker = Thread { + initializeModules(reactApplicationContext, packages) + initTasksLeft.countDown() + } + worker.start() + } + + private fun initializeModules( + reactApplicationContext: ReactApplicationContext, + packages: List ) { val applicationContext: ReactApplicationContext = reactApplicationContext for (reactPackage in packages) { @@ -129,6 +148,11 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage override fun unstable_shouldEnableLegacyModuleInterop(): Boolean = shouldEnableLegacyModuleInterop override fun getModule(moduleName: String): TurboModule? { + try { + initTasksLeft.await() + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + } var resolvedModule: NativeModule? = null for (moduleProvider in moduleProviders) { @@ -152,6 +176,11 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage } override fun unstable_isModuleRegistered(moduleName: String): Boolean { + try { + initTasksLeft.await() + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + } for (moduleProvider in moduleProviders) { val moduleInfo: ReactModuleInfo? = packageModuleInfos[moduleProvider]?.get(moduleName) if (moduleInfo?.isTurboModule == true) { @@ -162,6 +191,11 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage } override fun unstable_isLegacyModuleRegistered(moduleName: String): Boolean { + try { + initTasksLeft.await() + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + } for (moduleProvider in moduleProviders) { val moduleInfo: ReactModuleInfo? = packageModuleInfos[moduleProvider]?.get(moduleName) if (moduleInfo?.isTurboModule == false) { @@ -172,6 +206,11 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage } override fun getLegacyModule(moduleName: String): NativeModule? { + try { + initTasksLeft.await() + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + } if (!unstable_shouldEnableLegacyModuleInterop()) { return null } @@ -198,11 +237,18 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage return resolvedModule } - override fun getEagerInitModuleNames(): List = buildList { - for (moduleProvider in moduleProviders) { - for (moduleInfo in packageModuleInfos[moduleProvider]?.values ?: emptyList()) { - if (moduleInfo.isTurboModule && moduleInfo.needsEagerInit) { - add(moduleInfo.name) + override fun getEagerInitModuleNames(): List { + try { + initTasksLeft.await() + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + } + return buildList { + for (moduleProvider in moduleProviders) { + for (moduleInfo in packageModuleInfos[moduleProvider]?.values ?: emptyList()) { + if (moduleInfo.isTurboModule && moduleInfo.needsEagerInit) { + add(moduleInfo.name) + } } } } diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp index 0a949f0fb08..fc1db6b78f1 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp @@ -9,6 +9,8 @@ namespace facebook::react { +static int8_t isBridgeless = -1; + void ComponentDescriptorProviderRegistry::add( const ComponentDescriptorProvider& provider) const { std::unique_lock lock(mutex_); @@ -68,11 +70,33 @@ ComponentDescriptorProviderRegistry::createComponentDescriptorRegistry( const ComponentDescriptorParameters& parameters) const { std::shared_lock lock(mutex_); + if (isBridgeless == -1) { + isBridgeless = ReactNativeFeatureFlags::enableBridgelessArchitecture() ? 1 : 0; + } + auto registry = std::make_shared( parameters, *this, parameters.contextContainer); + if (!isBridgeless) { + // Eagerly add all + for (const auto& pair : componentDescriptorProviders_) { + registry->add(pair.second); + } + } + + std::vector providers; + providers.reserve(componentDescriptorProviders_.size()); for (const auto& pair : componentDescriptorProviders_) { - registry->add(pair.second); + if (isBridgeless) { + providers.push_back(pair.second); + } else { + registry->add(pair.second); + } + } + + if (isBridgeless) { + // 2) enqueue async add + registry->addMultipleAsync(std::move(providers)); } componentDescriptorRegistries_.push_back(registry); diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp index 469fc5c2335..6011e0aee49 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp @@ -17,6 +17,12 @@ #include #include #include +#include + +#ifdef __ANDROID__ +#include +#endif + namespace facebook::react { @@ -28,6 +34,38 @@ ComponentDescriptorRegistry::ComponentDescriptorRegistry( providerRegistry_(providerRegistry), contextContainer_(std::move(contextContainer)) {} +void ComponentDescriptorRegistry::addMultipleAsync( + std::vector providers) const { + // Copy everything we need before the thread starts + auto parametersCopy = parameters_; + auto contextContainerCopy = contextContainer_; + + // Start thread immediately + std::thread([this, providers = std::move(providers), parametersCopy, contextContainerCopy]() { + // Ensure this C++ thread is attached to the JVM before touching JNI + #ifdef __ANDROID__ + facebook::jni::Environment::ensureCurrentThreadIsAttached(); + #endif + std::unique_lock lock(mutex_); + + for (const auto& provider : providers) { + auto componentDescriptor = provider.constructor( + {parametersCopy.eventDispatcher, + contextContainerCopy, + provider.flavor}); + + react_native_assert(componentDescriptor->getComponentHandle() == provider.handle); + react_native_assert(componentDescriptor->getComponentName() == provider.name); + + auto sharedComponentDescriptor = + std::shared_ptr(std::move(componentDescriptor)); + + _registryByHandle[provider.handle] = sharedComponentDescriptor; + _registryByName[provider.name] = sharedComponentDescriptor; + } + }).detach(); +} + void ComponentDescriptorRegistry::add( ComponentDescriptorProvider componentDescriptorProvider) const { std::unique_lock lock(mutex_); diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h index 20bce41f2dc..a2bc266f15f 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h @@ -40,6 +40,8 @@ class ComponentDescriptorRegistry { const ComponentDescriptorProviderRegistry& providerRegistry, ContextContainer::Shared contextContainer); + void addMultipleAsync(std::vector providers) const; + /* * This is broken. Please do not use. * If you requesting a ComponentDescriptor and unsure that it's there, you are From 65a6165708d9f2fb0d858b5fd981fcd754f390ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Wed, 17 Sep 2025 18:37:36 +0200 Subject: [PATCH 159/312] Improving TTI by forcing synchronous mount for first 5s --- .../react/renderer/uimanager/UIManagerBinding.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp index 016e21718d4..fd45cd3484f 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include @@ -443,6 +444,7 @@ jsi::Value UIManagerBinding::get( } if (methodName == "completeRoot") { + using clock = std::chrono::steady_clock; auto paramCount = 2; return jsi::Function::createFromHostFunction( runtime, @@ -460,11 +462,15 @@ jsi::Value UIManagerBinding::get( auto surfaceId = surfaceIdFromValue(runtime, arguments[0]); auto shadowNodeList = shadowNodeListFromValue(runtime, arguments[1]); + + static const clock::time_point t0 = clock::now(); + const bool isWithinFirst5s = (clock::now() - t0) < std::chrono::seconds(5); + uiManager->completeSurface( surfaceId, shadowNodeList, {.enableStateReconciliation = true, - .mountSynchronously = false, + .mountSynchronously = isWithinFirst5s, .source = ShadowTree::CommitSource::React}); return jsi::Value::undefined(); @@ -648,7 +654,7 @@ jsi::Value UIManagerBinding::get( callbackFunction.call(runtime, {0, 0, 0, 0, 0, 0}); return jsi::Value::undefined(); } - + if (measureOnUI) { auto sharedCallback = std::make_shared(std::move(callbackFunction)); auto runtimeExecutor = uiManager->runtimeExecutor_; From 6af7769ed79af1fadf0770a93236e0d0d7953fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kapa=C5=82a?= Date: Thu, 18 Sep 2025 10:19:12 +0200 Subject: [PATCH 160/312] Clarify mountSynchronously parameter in UIManagerBinding --- .../ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp index fd45cd3484f..75737089966 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp @@ -470,7 +470,7 @@ jsi::Value UIManagerBinding::get( surfaceId, shadowNodeList, {.enableStateReconciliation = true, - .mountSynchronously = isWithinFirst5s, + .mountSynchronously = isWithinFirst5s, // make sure we push first render as soon as possible otherwise we observe 200ms delay .source = ShadowTree::CommitSource::React}); return jsi::Value::undefined(); From fb6b3f76c20d12a37899763ecee792d9a7d7afd0 Mon Sep 17 00:00:00 2001 From: Joe Mun <12057449+joemun@users.noreply.github.com> Date: Thu, 25 Sep 2025 18:40:18 -0700 Subject: [PATCH 161/312] [discord] add module and function info to HostFunction exception (#104) --- .../android/ReactCommon/JavaTurboModule.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp b/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp index 0478f532243..13d6b48d013 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp @@ -463,7 +463,9 @@ jsi::Value convertFromJMapToValue(JNIEnv* env, jsi::Runtime& rt, jobject arg) { */ jsi::JSError convertThrowableToJSError( jsi::Runtime& runtime, - jni::alias_ref throwable) { + jni::alias_ref throwable, + const std::string& functionName = "", + const std::string& moduleName = "") { auto stackTrace = throwable->getStackTrace(); jsi::Array stackElements(runtime, stackTrace->size()); @@ -486,8 +488,21 @@ jsi::JSError convertThrowableToJSError( cause.setProperty(runtime, "message", message); cause.setProperty(runtime, "stackElements", std::move(stackElements)); - jsi::Value error = - createJSRuntimeError(runtime, "Exception in HostFunction: " + message); + std::string errorMessage = "Exception in HostFunction: " + message; + if (!functionName.empty() || !moduleName.empty()) { + errorMessage += " ["; + if (!moduleName.empty()) { + errorMessage += "Module: " + moduleName; + if (!functionName.empty()) { + errorMessage += ", "; + } + } + if (!functionName.empty()) { + errorMessage += "Function: " + functionName; + } + errorMessage += "]"; + } + jsi::Value error = createJSRuntimeError(runtime, errorMessage); error.asObject(runtime).setProperty(runtime, "cause", std::move(cause)); return {runtime, std::move(error)}; } @@ -578,7 +593,7 @@ jsi::Value JavaTurboModule::invokeJavaMethod( } auto exception = std::current_exception(); auto throwable = jni::getJavaExceptionForCppException(exception); - throw convertThrowableToJSError(runtime, throwable); + throw convertThrowableToJSError(runtime, throwable, methodNameStr, name_); } }; From 2d27dc20904e403fb4866da49e999cd769bda459 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 8 Oct 2025 12:57:31 -0500 Subject: [PATCH 162/312] Gradient Text Color Support --- .../Libraries/Text/TextNativeComponent.js | 1 + .../react/views/text/TextAttributeProps.java | 41 +++++++++++++++++++ .../react/views/text/TextLayoutManager.kt | 18 ++++++++ .../attributedstring/TextAttributes.cpp | 6 ++- .../attributedstring/TextAttributes.h | 1 + .../renderer/attributedstring/conversions.h | 8 ++++ .../components/text/BaseTextProps.cpp | 10 ++++- .../js/examples/Text/TextExample.android.js | 34 +++++++++++++++ .../js/examples/Text/TextExample.ios.js | 34 +++++++++++++++ 9 files changed, 151 insertions(+), 2 deletions(-) diff --git a/packages/react-native/Libraries/Text/TextNativeComponent.js b/packages/react-native/Libraries/Text/TextNativeComponent.js index 6141ca5e886..2cab7c40a26 100644 --- a/packages/react-native/Libraries/Text/TextNativeComponent.js +++ b/packages/react-native/Libraries/Text/TextNativeComponent.js @@ -62,6 +62,7 @@ const virtualTextViewConfig = { isHighlighted: true, isPressable: true, maxFontSizeMultiplier: true, + gradientColors: true, }, uiViewClassName: 'RCTVirtualText', }; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java index 67baca4e116..bacc96b5d0b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java @@ -18,6 +18,7 @@ import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableType; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.mapbuffer.MapBuffer; import com.facebook.react.uimanager.PixelUtil; @@ -64,6 +65,7 @@ public class TextAttributeProps { public static final short TA_KEY_ROLE = 26; public static final short TA_KEY_TEXT_TRANSFORM = 27; public static final short TA_KEY_MAX_FONT_SIZE_MULTIPLIER = 29; + public static final short TA_KEY_GRADIENT_COLORS = 30; public static final int UNSET = -1; @@ -147,6 +149,8 @@ public class TextAttributeProps { protected boolean mContainsImages = false; protected float mHeightOfTallestInlineImage = Float.NaN; + + protected @Nullable int[] mGradientColors = null; private TextAttributeProps() {} @@ -231,6 +235,9 @@ public static TextAttributeProps fromMapBuffer(MapBuffer props) { case TA_KEY_TEXT_TRANSFORM: result.setTextTransform(entry.getStringValue()); break; + case TA_KEY_GRADIENT_COLORS: + result.setGradientColors(entry.getMapBufferValue()); + break; case TA_KEY_MAX_FONT_SIZE_MULTIPLIER: result.setMaxFontSizeMultiplier((float) entry.getDoubleValue()); break; @@ -277,6 +284,7 @@ public static TextAttributeProps fromReadableMap(ReactStylesDiffMap props) { result.setLayoutDirection(getStringProp(props, ViewProps.LAYOUT_DIRECTION)); result.setAccessibilityRole(getStringProp(props, ViewProps.ACCESSIBILITY_ROLE)); result.setRole(getStringProp(props, ViewProps.ROLE)); + result.setGradientColors(getArrayProp(props, "gradientColors")); return result; } @@ -753,6 +761,39 @@ private void setRole(Role role) { mRole = role; } + private void setGradientColors(@Nullable ReadableArray gradientColors) { + if (gradientColors == null) return; + + ArrayList colors = new ArrayList<>(); + for (int i = 0; i < gradientColors.size(); i++) { + if (!gradientColors.isNull(i) && gradientColors.getType(i) == ReadableType.Number) { + colors.add(gradientColors.getInt(i)); + } + } + setGradientColorsFromList(colors); + } + + private void setGradientColors(@Nullable MapBuffer gradientColors) { + if (gradientColors == null) return; + + ArrayList colors = new ArrayList<>(); + Iterator iterator = gradientColors.iterator(); + while (iterator.hasNext()) { + colors.add(iterator.next().getIntValue()); + } + setGradientColorsFromList(colors); + } + + private void setGradientColorsFromList(ArrayList colors) { + if (colors.size() >= 2) { + mGradientColors = colors.stream().mapToInt(Integer::intValue).toArray(); + } + } + + public @Nullable int[] getGradientColors() { + return mGradientColors; + } + public static int getTextBreakStrategy(@Nullable String textBreakStrategy) { int androidTextBreakStrategy = DEFAULT_BREAK_STRATEGY; if (textBreakStrategy != null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt index 7598ae75233..1855a613fa4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt @@ -42,6 +42,7 @@ import com.facebook.react.views.text.internal.span.ReactAbsoluteSizeSpan import com.facebook.react.views.text.internal.span.ReactBackgroundColorSpan import com.facebook.react.views.text.internal.span.ReactClickableSpan import com.facebook.react.views.text.internal.span.ReactForegroundColorSpan +import com.facebook.react.views.text.internal.span.LinearGradientSpan import com.facebook.react.views.text.internal.span.ReactOpacitySpan import com.facebook.react.views.text.internal.span.ReactStrikethroughSpan import com.facebook.react.views.text.internal.span.ReactTagSpan @@ -254,6 +255,14 @@ internal object TextLayoutManager { if (textAttributes.mIsColorSet) { ops.add(SetSpanOperation(start, end, ReactForegroundColorSpan(textAttributes.mColor))) } + if (textAttributes.gradientColors != null && textAttributes.gradientColors!!.size >= 2) { + val effectiveFontSize = textAttributes.effectiveFontSize + ops.add( + SetSpanOperation( + start, + end, + LinearGradientSpan(start * effectiveFontSize.toFloat(), textAttributes.gradientColors!!))) + } if (textAttributes.mIsBackgroundColorSet) { ops.add( SetSpanOperation( @@ -393,6 +402,15 @@ internal object TextLayoutManager { spannable.setSpan(ReactForegroundColorSpan(fragment.props.color), start, end, spanFlags) } + if (fragment.props.gradientColors != null && fragment.props.gradientColors!!.size >= 2) { + val effectiveFontSize = fragment.props.effectiveFontSize + spannable.setSpan( + LinearGradientSpan(start * effectiveFontSize.toFloat(), fragment.props.gradientColors!!), + start, + end, + spanFlags) + } + if (fragment.props.isBackgroundColorSet) { spannable.setSpan( ReactBackgroundColorSpan(fragment.props.backgroundColor), start, end, spanFlags) diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp index 2982e592369..47d5a25a1fd 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp @@ -27,6 +27,9 @@ void TextAttributes::apply(TextAttributes textAttributes) { : backgroundColor; opacity = !std::isnan(textAttributes.opacity) ? textAttributes.opacity : opacity; + gradientColors = textAttributes.gradientColors.has_value() + ? textAttributes.gradientColors + : gradientColors; // Font fontFamily = !textAttributes.fontFamily.empty() ? textAttributes.fontFamily @@ -171,7 +174,8 @@ bool TextAttributes::operator==(const TextAttributes& rhs) const { floatEquality(fontSizeMultiplier, rhs.fontSizeMultiplier) && floatEquality(letterSpacing, rhs.letterSpacing) && floatEquality(lineHeight, rhs.lineHeight) && - floatEquality(textShadowRadius, rhs.textShadowRadius); + floatEquality(textShadowRadius, rhs.textShadowRadius) && + gradientColors == rhs.gradientColors; } TextAttributes TextAttributes::defaultTextAttributes() { diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h index 8a7e26c57b6..1dad21f636a 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h @@ -42,6 +42,7 @@ class TextAttributes : public DebugStringConvertible { SharedColor foregroundColor{}; SharedColor backgroundColor{}; Float opacity{std::numeric_limits::quiet_NaN()}; + std::optional> gradientColors{}; // Font std::string fontFamily{""}; diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h index 639e44c3443..de0d4d977d0 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h @@ -1055,6 +1055,7 @@ constexpr static MapBuffer::Key TA_KEY_ROLE = 26; constexpr static MapBuffer::Key TA_KEY_TEXT_TRANSFORM = 27; constexpr static MapBuffer::Key TA_KEY_ALIGNMENT_VERTICAL = 28; constexpr static MapBuffer::Key TA_KEY_MAX_FONT_SIZE_MULTIPLIER = 29; +constexpr static MapBuffer::Key TA_KEY_GRADIENT_COLORS = 30; // constants for ParagraphAttributes serialization constexpr static MapBuffer::Key PA_KEY_MAX_NUMBER_OF_LINES = 0; @@ -1128,6 +1129,13 @@ inline MapBuffer toMapBuffer(const TextAttributes& textAttributes) { builder.putInt( TA_KEY_BACKGROUND_COLOR, toAndroidRepr(textAttributes.backgroundColor)); } + if (textAttributes.gradientColors.has_value()) { + auto gradientColorsBuilder = MapBufferBuilder(); + for (size_t i = 0; i < textAttributes.gradientColors->size(); ++i) { + gradientColorsBuilder.putInt(static_cast(i), toAndroidRepr((*textAttributes.gradientColors)[i])); + } + builder.putMapBuffer(TA_KEY_GRADIENT_COLORS, gradientColorsBuilder.build()); + } if (!std::isnan(textAttributes.opacity)) { builder.putDouble(TA_KEY_OPACITY, textAttributes.opacity); } diff --git a/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp index 01bbdbccdf4..4dc23abc428 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp @@ -30,6 +30,12 @@ static TextAttributes convertRawProp( "color", sourceTextAttributes.foregroundColor, defaultTextAttributes.foregroundColor); + textAttributes.gradientColors = convertRawProp( + context, + rawProps, + "gradientColors", + sourceTextAttributes.gradientColors, + defaultTextAttributes.gradientColors); // Font textAttributes.fontFamily = convertRawProp( @@ -237,7 +243,7 @@ BaseTextProps::BaseTextProps( context, rawProps, sourceProps.textAttributes, - TextAttributes{})){}; + TextAttributes{})){} void BaseTextProps::setProp( const PropsParserContext& context, @@ -249,6 +255,8 @@ void BaseTextProps::setProp( switch (hash) { REBUILD_FIELD_SWITCH_CASE( defaults, value, textAttributes, foregroundColor, "color"); + REBUILD_FIELD_SWITCH_CASE( + defaults, value, textAttributes, gradientColors, "gradientColors"); REBUILD_FIELD_SWITCH_CASE( defaults, value, textAttributes, fontFamily, "fontFamily"); REBUILD_FIELD_SWITCH_CASE( diff --git a/packages/rn-tester/js/examples/Text/TextExample.android.js b/packages/rn-tester/js/examples/Text/TextExample.android.js index 271156139b7..3fb20d1dd62 100644 --- a/packages/rn-tester/js/examples/Text/TextExample.android.js +++ b/packages/rn-tester/js/examples/Text/TextExample.android.js @@ -27,6 +27,7 @@ const { Text, TextInput, View, + processColor, } = require('react-native'); class Entity extends React.Component<{children: React.Node}> { @@ -1230,7 +1231,40 @@ function TextBaseLineLayoutExample(props: {}): React.Node { ); } +function GradientColorsExample(props: {}): React.Node { + const colors = ['red', 'green', 'blue', 'yellow'].map(processColor); + return ( + + + Nested gradient colors{' '} + + Gradient Text + + + + Gradient Text (4 colors) + + + Gradient Text (3 colors) + + + Gradient Text (2 colors) + + + Gradient Text (1 color) - no gradient + + + ); +} + const examples = [ + { + title: 'Gradient Colors', + name: 'gradient-colors', + render(): React.Node { + return ; + }, + }, { title: 'Background Color and Border Width', name: 'background-border-width', diff --git a/packages/rn-tester/js/examples/Text/TextExample.ios.js b/packages/rn-tester/js/examples/Text/TextExample.ios.js index 869b111297e..4bf94caf489 100644 --- a/packages/rn-tester/js/examples/Text/TextExample.ios.js +++ b/packages/rn-tester/js/examples/Text/TextExample.ios.js @@ -27,6 +27,7 @@ const { Text, TextInput, View, + processColor, } = require('react-native'); type TextAlignExampleRTLState = { @@ -570,7 +571,40 @@ class TextWithCapBaseBox extends React.Component< } } +function GradientColorsExample(props: {}): React.Node { + const colors = ['red', 'green', 'blue', 'yellow'].map(processColor); + return ( + + + Nested gradient colors{' '} + + Gradient Text + + + + Gradient Text (4 colors) + + + Gradient Text (3 colors) + + + Gradient Text (2 colors) + + + Gradient Text (1 color) - no gradient + + + ); +} + const examples = [ + { + title: 'Gradient Colors', + name: 'gradient-colors', + render(): React.Node { + return ; + }, + }, { title: 'iOS System Font Families (iOS only)', name: 'iOSSystemFontFamilies', From f8df2c24d61f42b541361b2c670feb1ffb6109b7 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 8 Oct 2025 13:50:21 -0500 Subject: [PATCH 163/312] Build issues --- .../src/main/java/com/facebook/react/ReactActivityDelegate.java | 1 + .../src/main/java/com/facebook/react/ReactInstanceManager.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java index 12793d95d94..edd1cd53366 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java @@ -117,6 +117,7 @@ protected ReactNativeHost getReactNativeHost() { * going away in the New Architecture. You should access {@link ReactHost} instead." * @noinspection deprecation */ + @Deprecated public ReactInstanceManager getReactInstanceManager() { return Objects.requireNonNull(mReactDelegate).getReactInstanceManager(); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index fd6773d6a1b..b13b7e9c5c1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -1528,7 +1528,7 @@ private ReactApplicationContext createReactContext( catalystInstance.runJSBundle(); Systrace.endSection(TRACE_TAG_REACT); - if (reactContext.isBridgeless() && ReactNativeFeatureFlags.useTurboModules() && mTMMDelegateBuilder != null) { + if (reactContext.isBridgeless() && ReactNativeNewArchitectureFeatureFlags.useTurboModules() && mTMMDelegateBuilder != null) { // Eagerly initialize TurboModules for (String moduleName : turboModuleManager.getEagerInitModuleNames()) { turboModuleManager.getModule(moduleName); From c5e410ca66a57f25a71fd0106cb0141ed2f0c20d Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Wed, 8 Oct 2025 17:46:31 -0500 Subject: [PATCH 164/312] Discordify Version --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index a5741f3e4d7..a870ab83074 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4 +VERSION_NAME=0.81.4-discord-1 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From f113f7328ad2f7279f8892fa1a132a67998c567e Mon Sep 17 00:00:00 2001 From: CI Bot Date: Wed, 8 Oct 2025 23:52:41 +0000 Subject: [PATCH 165/312] Updated version to 0.81.4-discord-2 --- .../ReactAndroid/gradle.properties | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index a870ab83074..68927b33417 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-1 +VERSION_NAME=0.81.4-discord-2 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true @@ -12,28 +12,28 @@ react.internal.disableJavaVersionAlignment=true # We ignore: # - BuildConfig classes because they are generated and not part of the public API binaryCompatibilityValidator.ignoredClasses=com.facebook.react.BuildConfig,\ - com.facebook.react.views.progressbar.ReactProgressBarViewManager$$PropsSetter,\ - com.facebook.react.views.progressbar.ProgressBarShadowNode$$PropsSetter +com.facebook.react.views.progressbar.ReactProgressBarViewManager$$PropsSetter,\ +com.facebook.react.views.progressbar.ProgressBarShadowNode$$PropsSetter binaryCompatibilityValidator.ignoredPackages=com.facebook.debug,\ - com.facebook.fbreact,\ - com.facebook.hermes,\ - com.facebook.perftest,\ - com.facebook.proguard,\ - com.facebook.react.bridgeless.internal,\ - com.facebook.react.common.annotations,\ - com.facebook.react.fabric.internal.interop,\ - com.facebook.react.flipper,\ - com.facebook.react.internal,\ - com.facebook.react.module.processing,\ - com.facebook.react.processing,\ - com.facebook.react.runtime.internal,\ - com.facebook.react.uimanager.internal,\ - com.facebook.react.views.text.internal,\ - com.facebook.systrace,\ - com.facebook.yoga +com.facebook.fbreact,\ +com.facebook.hermes,\ +com.facebook.perftest,\ +com.facebook.proguard,\ +com.facebook.react.bridgeless.internal,\ +com.facebook.react.common.annotations,\ +com.facebook.react.fabric.internal.interop,\ +com.facebook.react.flipper,\ +com.facebook.react.internal,\ +com.facebook.react.module.processing,\ +com.facebook.react.processing,\ +com.facebook.react.runtime.internal,\ +com.facebook.react.uimanager.internal,\ +com.facebook.react.views.text.internal,\ +com.facebook.systrace,\ +com.facebook.yoga binaryCompatibilityValidator.nonPublicMarkers=com.facebook.react.common.annotations.VisibleForTesting,\ - com.facebook.react.common.annotations.UnstableReactNativeAPI,\ - com.facebook.react.common.annotations.FrameworkAPI +com.facebook.react.common.annotations.UnstableReactNativeAPI,\ +com.facebook.react.common.annotations.FrameworkAPI binaryCompatibilityValidator.validationDisabled=true binaryCompatibilityValidator.outputApiFileName=ReactAndroid From 17042cc2435b9abc58169419ad7b57bf215c5813 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 10 Oct 2025 10:01:15 -0500 Subject: [PATCH 166/312] Remove internal from ReactSoftExceptionLogger --- .../java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt index fc7275b9ec4..49ce97fbfc3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt @@ -18,7 +18,7 @@ import com.facebook.react.bridge.ReactSoftExceptionLogger.Categories.SURFACE_MOU import java.util.concurrent.CopyOnWriteArrayList @DoNotStrip -internal object ReactSoftExceptionLogger { +object ReactSoftExceptionLogger { @Retention(AnnotationRetention.SOURCE) @StringDef( RVG_IS_VIEW_CLIPPED, From af456baf8aae082ad8f85815a54948b81a4d43e3 Mon Sep 17 00:00:00 2001 From: skusnierz Date: Wed, 8 Oct 2025 16:20:28 +0200 Subject: [PATCH 167/312] Add missing initialization of DisplayMetricsHolder --- .../src/main/java/com/facebook/react/ReactRootView.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 6c625367010..c3bc1d96b11 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -135,6 +135,8 @@ public ReactRootView(Context context, AttributeSet attrs, int defStyle) { private void init() { setRootViewTag(ReactRootViewTagGenerator.getNextRootViewTag()); setClipChildren(false); + + DisplayMetricsHolder.initDisplayMetrics(getContext().getApplicationContext()); } @Override From e09d4e835f7b0ec58beecc7289e35431ee255e50 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 10 Oct 2025 10:40:04 -0500 Subject: [PATCH 168/312] fix(android): crashing onHostPause --- .../facebook/react/runtime/ReactHostImpl.kt | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt index d88c329b24c..39399a66744 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt @@ -67,6 +67,7 @@ import com.facebook.react.uimanager.events.BlackHoleEventDispatcher import com.facebook.react.uimanager.events.EventDispatcher import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper import java.lang.ref.WeakReference +import java.util.WeakHashMap import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.Executor import java.util.concurrent.Executors @@ -129,6 +130,9 @@ public class ReactHostImpl( private var memoryPressureListener: MemoryPressureListener? = null private var defaultHardwareBackBtnHandler: DefaultHardwareBackBtnHandler? = null + // Discord added fix for https://app.asana.com/1/236888843494340/project/1199705967702853/task/1211580756398579?focus=true + private val activeActivities: MutableMap = WeakHashMap() + private val reactInstanceEventListeners: MutableList = CopyOnWriteArrayList() private val beforeDestroyListeners: MutableList<() -> Unit> = CopyOnWriteArrayList() @@ -232,6 +236,11 @@ public class ReactHostImpl( val method = "onHostResume(activity)" log(method) + if (activity != null) { + // It's possible that multiple activities are active at the same time + activeActivities[activity] = true + } + currentActivity = activity maybeEnableDevSupport(true) @@ -251,18 +260,29 @@ public class ReactHostImpl( val method = "onHostPause(activity)" log(method) - val currentActivity = this.currentActivity - if (currentActivity != null) { - val currentActivityClass = currentActivity.javaClass.simpleName - val activityClass = if (activity == null) "null" else activity.javaClass.simpleName - Assertions.assertCondition( - activity === currentActivity, - "Pausing an activity that is not the current activity, this is incorrect! Current activity: $currentActivityClass Paused activity: $activityClass") + + if (activity != null) { + activeActivities.remove(activity) + if (activeActivities.size > 0) { + // There is still at least one activity active, so we don't want to pause RN yet. + return + } } + // Note: this code was here previously to our added "activeActivities" logic, but it seems wrong + // upstream they added a feature flag to disable this check + // val currentActivity = this.currentActivity + // if (currentActivity != null) { + // val currentActivityClass = currentActivity.javaClass.simpleName + // val activityClass = if (activity == null) "null" else activity.javaClass.simpleName + // Assertions.assertCondition( + // activity === currentActivity, + // "Pausing an activity that is not the current activity, this is incorrect! Current activity: $currentActivityClass Paused activity: $activityClass") + // } + maybeEnableDevSupport(false) defaultHardwareBackBtnHandler = null - reactLifecycleStateManager.moveToOnHostPause(currentReactContext, currentActivity) + reactLifecycleStateManager.moveToOnHostPause(currentReactContext, activity) } /** To be called when the host activity is paused. */ From a4f049cf81a1feb05a63c6dc7cc0d623d2df1a05 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 14 Oct 2025 15:25:32 -0500 Subject: [PATCH 169/312] Revert "discord: add more shadow tree tree methods (#100)" This reverts commit 5544c02eb1f72052b7b60506d7369acf0795b858. --- .../ReactCommon/SampleTurboModuleSpec.cpp | 2 +- .../react/renderer/mounting/ShadowTree.cpp | 14 -------------- .../react/renderer/mounting/ShadowTreeDelegate.h | 5 ----- .../mounting/tests/StateReconciliationTest.cpp | 3 --- .../react/renderer/uimanager/UIManager.cpp | 16 ---------------- .../react/renderer/uimanager/UIManager.h | 3 --- .../renderer/uimanager/UIManagerCommitHook.h | 5 ----- 7 files changed, 1 insertion(+), 47 deletions(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp index e3fd453d559..02787bc1e5e 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp @@ -379,7 +379,7 @@ NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI( std::make_shared>(); eventEmitterMap_["onSubmit"] = std::make_shared>(); -// configureEventEmitterCallback(); + configureEventEmitterCallback(); } std::shared_ptr SampleTurboModuleSpec_ModuleProvider( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 9dedbce7b24..483a1915fd6 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -20,16 +20,6 @@ #include "ShadowTreeDelegate.h" -// Discord - Wrap with ScopeGuard for a function to run on the end of the scope: -#include -struct ScopeGuard { - std::function fn; - ~ScopeGuard() { fn(); } -}; -#define CONCAT_IMPL(x, y) x##y -#define CONCAT(x, y) CONCAT_IMPL(x, y) -#define defer(code) ScopeGuard CONCAT(defer, LINE)([&](){code;}) - namespace facebook::react { namespace { @@ -325,7 +315,6 @@ CommitStatus ShadowTree::tryCommit( *this, oldRootShadowNode, newRootShadowNode, commitOptions); if (!newRootShadowNode) { - delegate_.shadowTreeCommitFinalized(commitOptions); return CommitStatus::Cancelled; } @@ -342,7 +331,6 @@ CommitStatus ShadowTree::tryCommit( { // Updating `currentRevision_` in unique manner if it hasn't changed. UniqueLock lock = uniqueCommitLock(); - defer(delegate_.shadowTreeCommitFinalized(commitOptions)); if (currentRevision_.number != oldRevision.number) { return CommitStatus::Failed; @@ -350,8 +338,6 @@ CommitStatus ShadowTree::tryCommit( auto newRevisionNumber = currentRevision_.number + 1; - delegate_.shadowTreeCommitSucceeded(commitOptions); - { std::scoped_lock dispatchLock(EventEmitter::DispatchMutex()); updateMountedFlag( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h index ed73511d4a8..14402722045 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h @@ -38,11 +38,6 @@ class ShadowTreeDelegate { std::shared_ptr mountingCoordinator, bool mountSynchronously) const = 0; - // Called after a commit is known to succeed, however, still under the commit lock - virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const = 0; - // Will be called in each case once we are done with the current commit attempt - virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const = 0; - virtual ~ShadowTreeDelegate() noexcept = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp index 05060a23f07..70d762b516c 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp @@ -37,9 +37,6 @@ class DummyShadowTreeDelegate : public ShadowTreeDelegate { void shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const override {}; - - void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override {}; - void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override {}; }; namespace { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index b47f224b818..edee8ac36bc 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -626,22 +626,6 @@ RootShadowNode::Unshared UIManager::shadowTreeWillCommit( return resultRootShadowNode; } -void UIManager::shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const { - std::shared_lock lock(commitHookMutex_); - - for (auto* commitHook : commitHooks_) { - commitHook->shadowTreeCommitSucceeded(commitOptions); - } -} - -void UIManager::shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const { - std::shared_lock lock(commitHookMutex_); - - for (auto* commitHook : commitHooks_) { - commitHook->shadowTreeCommitFinalized(commitOptions); - } -} - void UIManager::shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index 5b794fcb458..43de6ef06f4 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -135,9 +135,6 @@ class UIManager final : public ShadowTreeDelegate { const RootShadowNode::Unshared& newRootShadowNode, const ShadowTree::CommitOptions& commitOptions) const override; - void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override; - void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override; - std::shared_ptr createNode( Tag tag, const std::string& componentName, diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h index e01238b853e..2e15c6ca89e 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h @@ -54,11 +54,6 @@ class UIManagerCommitHook { return newRootShadowNode; } - // Discord - Called after a commit is known to succeed, however, still under the commit lock - virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) = 0; - // Discord - Will be called in each case once we are done with the current commit attempt - virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) = 0; - virtual ~UIManagerCommitHook() noexcept = default; }; From c41d453d4f0cc2a3b8e68e585aae97fb8e235b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Mon, 13 Oct 2025 18:44:49 +0200 Subject: [PATCH 170/312] fix(android): fix for addView with views in view transition (#109) --- .../views/view/ReactClippingViewManager.kt | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt index 0897a23f518..a08b8d2bf37 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt @@ -9,10 +9,14 @@ package com.facebook.react.views.view import android.view.View import android.view.ViewGroup +import androidx.core.view.doOnDetach +import com.facebook.common.logging.FLog import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.uimanager.ReactClippingViewGroupHelper import com.facebook.react.uimanager.ViewGroupManager import com.facebook.react.uimanager.annotations.ReactProp +import java.util.HashMap +import java.util.WeakHashMap /** * View manager which handles clipped subviews. Useful for custom views which extends from @@ -27,14 +31,36 @@ public abstract class ReactClippingViewManager : ViewGroupMa view.removeClippedSubviews = removeClippedSubviews } + // parent: childIndex[] - Used when we can't immediately add a view + private val operationsMap = WeakHashMap>() + override fun addView(parent: T, child: View, index: Int) { UiThreadUtil.assertOnUiThread() if (child.parent != null) { - (child.parent as? ViewGroup)?.removeView(child) - child.post { - addViewInternal(parent, child, index) + operationsMap.getOrPut(parent) { + mutableMapOf() + }[index] = true + + // When the child-parent relation is removed, onDetachedFromWindow will be called. + // Its important to wait for detaching as the view might be in a transition, and isn't removed immediately. + child.doOnDetach { + // Looking at how endViewTransition is implemented, dispatchDetachedFromWindow + // gets called _before_ the parent relation is removed, so we need to post this to the end of the frame: + child.post { + if(operationsMap.remove(parent) == null) { + // The addView operation was already countered by a removeView operation while we were waiting + FLog.w("ReactClippingViewManager", "Tried to add a view to a parent after the child was detached, but a remove operation was already enqueued") + return@post + } + FLog.w("ReactClippingViewManager", "addView(): ${child::class.java.simpleName} had a parent, removed from previous parent and after onDetach adding to new parent $parent") + addViewInternal(parent, child, index) + } } + + // With the detach listener in place, we can now remove the view from the previous parent: + // Note: This call here is potentially redundant, as SurfaceMountingManager.kt is already removing it + (child.parent as? ViewGroup)?.removeView(child) } else { addViewInternal(parent, child, index) } @@ -79,6 +105,7 @@ public abstract class ReactClippingViewManager : ViewGroupMa } else { parent.removeViewAt(index) } + operationsMap[parent]?.remove(index) } override fun removeAllViews(parent: T) { @@ -89,6 +116,7 @@ public abstract class ReactClippingViewManager : ViewGroupMa parent.removeAllViewsWithSubviewClippingEnabled() } else { parent.removeAllViews() + operationsMap.remove(parent) } } } From f18295e3f3174f0f2f6c6b9a851d8e226b2f95d4 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 14 Oct 2025 16:39:28 -0500 Subject: [PATCH 171/312] Explicit API mode for ReactSoftExceptionLogger --- .../react/bridge/ReactSoftExceptionLogger.kt | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt index 49ce97fbfc3..6a0d992c734 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt @@ -18,7 +18,7 @@ import com.facebook.react.bridge.ReactSoftExceptionLogger.Categories.SURFACE_MOU import java.util.concurrent.CopyOnWriteArrayList @DoNotStrip -object ReactSoftExceptionLogger { +public object ReactSoftExceptionLogger { @Retention(AnnotationRetention.SOURCE) @StringDef( RVG_IS_VIEW_CLIPPED, @@ -26,15 +26,15 @@ object ReactSoftExceptionLogger { CLIPPING_PROHIBITED_VIEW, SOFT_ASSERTIONS, SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE) - annotation class CategoryMode + public annotation class CategoryMode /** Constants that listeners can utilize for custom category-based behavior. */ - object Categories { - const val RVG_IS_VIEW_CLIPPED: String = "ReactViewGroup.isViewClipped" - const val RVG_ON_VIEW_REMOVED: String = "ReactViewGroup.onViewRemoved" - const val CLIPPING_PROHIBITED_VIEW: String = "ReactClippingProhibitedView" - const val SOFT_ASSERTIONS: String = "SoftAssertions" - const val SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE: String = + public object Categories { + public const val RVG_IS_VIEW_CLIPPED: String = "ReactViewGroup.isViewClipped" + public const val RVG_ON_VIEW_REMOVED: String = "ReactViewGroup.onViewRemoved" + public const val CLIPPING_PROHIBITED_VIEW: String = "ReactClippingProhibitedView" + public const val SOFT_ASSERTIONS: String = "SoftAssertions" + public const val SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE: String = "SurfaceMountingManager:MissingViewState" } @@ -44,24 +44,24 @@ object ReactSoftExceptionLogger { private val listeners: MutableList = CopyOnWriteArrayList() @JvmStatic - fun addListener(listener: ReactSoftExceptionListener): Unit { + public fun addListener(listener: ReactSoftExceptionListener): Unit { if (!listeners.contains(listener)) { listeners.add(listener) } } @JvmStatic - fun removeListener(listener: ReactSoftExceptionListener): Unit { + public fun removeListener(listener: ReactSoftExceptionListener): Unit { listeners.remove(listener) } @JvmStatic - fun logSoftExceptionVerbose(@CategoryMode category: String, cause: Throwable): Unit { + public fun logSoftExceptionVerbose(@CategoryMode category: String, cause: Throwable): Unit { logSoftException("${category}|${cause.javaClass.simpleName}:${cause.message}", cause) } @JvmStatic - fun logSoftException(@CategoryMode category: String, cause: Throwable): Unit { + public fun logSoftException(@CategoryMode category: String, cause: Throwable): Unit { if (listeners.isNotEmpty()) { for (listener in listeners) { listener.logSoftException(category, cause) @@ -77,7 +77,7 @@ object ReactSoftExceptionLogger { logSoftException(category, ReactNoCrashSoftException(message)) } - fun interface ReactSoftExceptionListener { - fun logSoftException(category: String, cause: Throwable) + public fun interface ReactSoftExceptionListener { + public fun logSoftException(category: String, cause: Throwable): Unit } } From 5d7ddd0561adee9f635e0da1b267346cbc86d9bd Mon Sep 17 00:00:00 2001 From: Rob Hogan Date: Fri, 11 Jul 2025 11:03:29 -0700 Subject: [PATCH 172/312] fix run not working Remove the keepAliveTimeout hack -- serverInstance is now null, and the original fix is no longer needed https://github.com/facebook/react-native/commit/bb3ef784e3506881d07595dfbef0e4d4b507ff3a --- .../src/commands/start/runServer.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/packages/community-cli-plugin/src/commands/start/runServer.js b/packages/community-cli-plugin/src/commands/start/runServer.js index 991c90977f5..7a56389e0f3 100644 --- a/packages/community-cli-plugin/src/commands/start/runServer.js +++ b/packages/community-cli-plugin/src/commands/start/runServer.js @@ -147,7 +147,7 @@ async function runServer( // $FlowIgnore[cannot-write] Assigning to readonly property metroConfig.reporter = reporter; - const {httpServer: serverInstance} = await Metro.runServer(metroConfig, { + await Metro.runServer(metroConfig, { host: args.host, secure: args.https, secureCert: args.cert, @@ -161,18 +161,6 @@ async function runServer( reportEvent = eventsSocketEndpoint.reportEvent; - // In Node 8, the default keep-alive for an HTTP connection is 5 seconds. In - // early versions of Node 8, this was implemented in a buggy way which caused - // some HTTP responses (like those containing large JS bundles) to be - // terminated early. - // - // As a workaround, arbitrarily increase the keep-alive from 5 to 30 seconds, - // which should be enough to send even the largest of JS bundles. - // - // For more info: https://github.com/nodejs/node/issues/13391 - // - serverInstance.keepAliveTimeout = 30000; - await version.logIfUpdateAvailable(cliConfig, terminalReporter); } From eae3f09c2ba524f9499082d5168b1e6a9c682315 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Tue, 14 Oct 2025 22:48:46 +0000 Subject: [PATCH 173/312] Updated version to 0.81.4-discord-3 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 68927b33417..5e82d403f02 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-2 +VERSION_NAME=0.81.4-discord-3 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From e81f05bb02188385f70d92ca99539f2e3c6e93ac Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Tue, 14 Oct 2025 19:43:04 -0500 Subject: [PATCH 174/312] Make CustomLineHeightSpan Public --- .../react/views/text/internal/span/CustomLineHeightSpan.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt index 80e8a70d526..4f371d4f7ba 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt @@ -18,7 +18,7 @@ import kotlin.math.floor * LineHeightSpan.Standard which only effects space between the baselines of adjacent line boxes * (does not impact space before the first line or after the last). */ -internal class CustomLineHeightSpan(height: Float) : LineHeightSpan, ReactSpan { +public class CustomLineHeightSpan(height: Float) : LineHeightSpan, ReactSpan { val lineHeight: Int = ceil(height.toDouble()).toInt() override fun chooseHeight( From aac7255392d449ee21c33df3c1b0799de8214a86 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Thu, 16 Oct 2025 17:57:23 -0500 Subject: [PATCH 175/312] Strict public API for CustomLineHeightSpan --- .../views/text/internal/span/CustomLineHeightSpan.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt index 4f371d4f7ba..a4d78b669f9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt @@ -18,17 +18,17 @@ import kotlin.math.floor * LineHeightSpan.Standard which only effects space between the baselines of adjacent line boxes * (does not impact space before the first line or after the last). */ -public class CustomLineHeightSpan(height: Float) : LineHeightSpan, ReactSpan { - val lineHeight: Int = ceil(height.toDouble()).toInt() +public class CustomLineHeightSpan public constructor(height: Float) : LineHeightSpan, ReactSpan { + public val lineHeight: Int = ceil(height.toDouble()).toInt() - override fun chooseHeight( + public override fun chooseHeight( text: CharSequence, start: Int, end: Int, spanstartv: Int, v: Int, fm: FontMetricsInt, - ) { + ): Unit { // https://www.w3.org/TR/css-inline-3/#inline-height // When its computed line-height is not normal, its layout bounds are derived solely from // metrics of its first available font (ignoring glyphs from other fonts), and leading is used From a530361881fae271d1cdadaaccb61dce634ec65d Mon Sep 17 00:00:00 2001 From: CI Bot Date: Fri, 17 Oct 2025 00:02:45 +0000 Subject: [PATCH 176/312] Updated version to 0.81.4-discord-4 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 5e82d403f02..60a72c08e8e 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-3 +VERSION_NAME=0.81.4-discord-4 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 567434e9dffab2e227f4f98b35b14bed0b3601c7 Mon Sep 17 00:00:00 2001 From: hannomargelo Date: Mon, 1 Sep 2025 14:01:54 +0200 Subject: [PATCH 177/312] discord: add more shadow tree tree methods (#100) --- .../ReactCommon/SampleTurboModuleSpec.cpp | 2 +- .../react/renderer/mounting/ShadowTree.cpp | 14 ++++++++++++++ .../react/renderer/mounting/ShadowTreeDelegate.h | 5 +++++ .../mounting/tests/StateReconciliationTest.cpp | 3 +++ .../react/renderer/uimanager/UIManager.cpp | 16 ++++++++++++++++ .../react/renderer/uimanager/UIManager.h | 3 +++ .../renderer/uimanager/UIManagerCommitHook.h | 5 +++++ 7 files changed, 47 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp index 02787bc1e5e..e3fd453d559 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp @@ -379,7 +379,7 @@ NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI( std::make_shared>(); eventEmitterMap_["onSubmit"] = std::make_shared>(); - configureEventEmitterCallback(); +// configureEventEmitterCallback(); } std::shared_ptr SampleTurboModuleSpec_ModuleProvider( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 483a1915fd6..9dedbce7b24 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -20,6 +20,16 @@ #include "ShadowTreeDelegate.h" +// Discord - Wrap with ScopeGuard for a function to run on the end of the scope: +#include +struct ScopeGuard { + std::function fn; + ~ScopeGuard() { fn(); } +}; +#define CONCAT_IMPL(x, y) x##y +#define CONCAT(x, y) CONCAT_IMPL(x, y) +#define defer(code) ScopeGuard CONCAT(defer, LINE)([&](){code;}) + namespace facebook::react { namespace { @@ -315,6 +325,7 @@ CommitStatus ShadowTree::tryCommit( *this, oldRootShadowNode, newRootShadowNode, commitOptions); if (!newRootShadowNode) { + delegate_.shadowTreeCommitFinalized(commitOptions); return CommitStatus::Cancelled; } @@ -331,6 +342,7 @@ CommitStatus ShadowTree::tryCommit( { // Updating `currentRevision_` in unique manner if it hasn't changed. UniqueLock lock = uniqueCommitLock(); + defer(delegate_.shadowTreeCommitFinalized(commitOptions)); if (currentRevision_.number != oldRevision.number) { return CommitStatus::Failed; @@ -338,6 +350,8 @@ CommitStatus ShadowTree::tryCommit( auto newRevisionNumber = currentRevision_.number + 1; + delegate_.shadowTreeCommitSucceeded(commitOptions); + { std::scoped_lock dispatchLock(EventEmitter::DispatchMutex()); updateMountedFlag( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h index 14402722045..ed73511d4a8 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h @@ -38,6 +38,11 @@ class ShadowTreeDelegate { std::shared_ptr mountingCoordinator, bool mountSynchronously) const = 0; + // Called after a commit is known to succeed, however, still under the commit lock + virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const = 0; + // Will be called in each case once we are done with the current commit attempt + virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const = 0; + virtual ~ShadowTreeDelegate() noexcept = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp index 70d762b516c..05060a23f07 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp @@ -37,6 +37,9 @@ class DummyShadowTreeDelegate : public ShadowTreeDelegate { void shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const override {}; + + void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override {}; + void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override {}; }; namespace { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index edee8ac36bc..b47f224b818 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -626,6 +626,22 @@ RootShadowNode::Unshared UIManager::shadowTreeWillCommit( return resultRootShadowNode; } +void UIManager::shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const { + std::shared_lock lock(commitHookMutex_); + + for (auto* commitHook : commitHooks_) { + commitHook->shadowTreeCommitSucceeded(commitOptions); + } +} + +void UIManager::shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const { + std::shared_lock lock(commitHookMutex_); + + for (auto* commitHook : commitHooks_) { + commitHook->shadowTreeCommitFinalized(commitOptions); + } +} + void UIManager::shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index 43de6ef06f4..5b794fcb458 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -135,6 +135,9 @@ class UIManager final : public ShadowTreeDelegate { const RootShadowNode::Unshared& newRootShadowNode, const ShadowTree::CommitOptions& commitOptions) const override; + void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override; + void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override; + std::shared_ptr createNode( Tag tag, const std::string& componentName, diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h index 2e15c6ca89e..e01238b853e 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h @@ -54,6 +54,11 @@ class UIManagerCommitHook { return newRootShadowNode; } + // Discord - Called after a commit is known to succeed, however, still under the commit lock + virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) = 0; + // Discord - Will be called in each case once we are done with the current commit attempt + virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) = 0; + virtual ~UIManagerCommitHook() noexcept = default; }; From fce2949b8c3933412c82d0cb1ec6e41cce900262 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 17 Oct 2025 14:47:58 -0500 Subject: [PATCH 178/312] [Discord] Make sure RN_SERIALIZABLE_STATE is ON, add debugging logs. --- packages/react-native/ReactAndroid/build.gradle.kts | 3 ++- .../react-native/ReactAndroid/src/main/jni/CMakeLists.txt | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 2b9e40ce8d4..fccfb7617f5 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -583,7 +583,8 @@ android { "-DANDROID_STL=c++_shared", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", - "-DCMAKE_POLICY_DEFAULT_CMP0069=NEW") + "-DCMAKE_POLICY_DEFAULT_CMP0069=NEW", + "-DRN_SERIALIZABLE_STATE=ON") cppFlags += "-flto" cFlags += "-flto" diff --git a/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt index 8af445da612..af57701b835 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt @@ -32,6 +32,13 @@ endif(CCACHE_FOUND) # Make sure every shared lib includes a .note.gnu.build-id header add_link_options(-Wl,--build-id) +# Message whether RN_SERIALIZABLE_STATE is on +if(RN_SERIALIZABLE_STATE) + message(STATUS "RN_SERIALIZABLE_STATE is on") +else() + message(STATUS "RN_SERIALIZABLE_STATE is off") +endif() + function(add_react_android_subdir relative_path) add_subdirectory(${REACT_ANDROID_DIR}/${relative_path} ReactAndroid/${relative_path}) endfunction() From a3083bac2aba551fac873002030e4c86238851d1 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Fri, 17 Oct 2025 20:51:21 +0000 Subject: [PATCH 179/312] Updated version to 0.81.4-discord-5 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 60a72c08e8e..470eca1dda0 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-4 +VERSION_NAME=0.81.4-discord-5 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From f39c3f6082aed570c09598c7a6d8df176eae2d43 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Fri, 17 Oct 2025 19:00:40 -0500 Subject: [PATCH 180/312] Only require Android Context for Fresco builder --- .../java/com/facebook/react/modules/fresco/FrescoModule.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt index 536912d2f53..c3f11db37e1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt @@ -7,6 +7,7 @@ package com.facebook.react.modules.fresco +import android.content.Context import com.facebook.common.logging.FLog import com.facebook.drawee.backends.pipeline.DraweeConfig import com.facebook.drawee.backends.pipeline.Fresco @@ -17,7 +18,6 @@ import com.facebook.imagepipeline.core.ImagePipelineConfig import com.facebook.imagepipeline.listener.RequestListener import com.facebook.react.bridge.LifecycleEventListener import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReactContextBaseJavaModule import com.facebook.react.common.ReactConstants import com.facebook.react.module.annotations.ReactModule @@ -138,7 +138,7 @@ constructor( */ @JvmStatic public fun hasBeenInitialized(): Boolean = hasBeenInitialized - private fun getDefaultConfig(context: ReactContext): ImagePipelineConfig = + private fun getDefaultConfig(context: Context): ImagePipelineConfig = getDefaultConfigBuilder(context).build() /** @@ -149,7 +149,7 @@ constructor( * initialized with default values */ @JvmStatic - public fun getDefaultConfigBuilder(context: ReactContext): ImagePipelineConfig.Builder { + public fun getDefaultConfigBuilder(context: Context): ImagePipelineConfig.Builder { val requestListeners = HashSet() requestListeners.add(SystraceRequestListener()) val client = OkHttpClientProvider.createClient() From c669edfda971508a1c484c9053670cfd19eaa264 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Sat, 18 Oct 2025 01:43:29 +0000 Subject: [PATCH 181/312] Updated version to 0.81.4-discord-6 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 470eca1dda0..bec8ab5b294 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-5 +VERSION_NAME=0.81.4-discord-6 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From e6261e83f1078b40c518272eeb6af777d536bc5f Mon Sep 17 00:00:00 2001 From: Patrick Mick Date: Wed, 5 Nov 2025 11:09:42 -0800 Subject: [PATCH 182/312] Exposes folly config back to fabric components (#116) --- .../react-native/ReactCommon/React-FabricComponents.podspec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/react-native/ReactCommon/React-FabricComponents.podspec b/packages/react-native/ReactCommon/React-FabricComponents.podspec index 0aedcf80383..e0d883ab8ce 100644 --- a/packages/react-native/ReactCommon/React-FabricComponents.podspec +++ b/packages/react-native/ReactCommon/React-FabricComponents.podspec @@ -16,6 +16,10 @@ else source[:tag] = "v#{version}" end +folly_config = get_folly_config() +folly_compiler_flags = folly_config[:compiler_flags] +folly_version = folly_config[:version] +folly_dep_name = folly_config[:dep_name] react_native_path = ".." header_search_path = [ From 27d86bb199a596beb36ffb95587714f3bd8c8f17 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Fri, 7 Nov 2025 18:29:05 +0000 Subject: [PATCH 183/312] Updated version to 0.81.4-discord-7 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index bec8ab5b294..b440380fb25 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-6 +VERSION_NAME=0.81.4-discord-7 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 9979b3e007e2a10197308fba45fa49be6b74c1ae Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Nov 2025 10:39:14 -0600 Subject: [PATCH 184/312] Make shadowTreeMountPhase feature flag --- .../featureflags/ReactNativeFeatureFlags.kt | 8 +++++++- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 ++++++++++- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +++- .../ReactNativeFeatureFlagsDefaults.kt | 8 +++++--- .../ReactNativeFeatureFlagsLocalAccessor.kt | 13 +++++++++++- .../ReactNativeFeatureFlagsProvider.kt | 4 +++- .../JReactNativeFeatureFlagsCxxInterop.cpp | 16 ++++++++++++++- .../JReactNativeFeatureFlagsCxxInterop.h | 5 ++++- .../featureflags/ReactNativeFeatureFlags.cpp | 6 +++++- .../featureflags/ReactNativeFeatureFlags.h | 7 ++++++- .../ReactNativeFeatureFlagsAccessor.cpp | 20 ++++++++++++++++++- .../ReactNativeFeatureFlagsAccessor.h | 6 ++++-- .../ReactNativeFeatureFlagsDefaults.h | 8 ++++++-- .../ReactNativeFeatureFlagsDynamicProvider.h | 11 +++++++++- .../ReactNativeFeatureFlagsProvider.h | 3 ++- .../NativeReactNativeFeatureFlags.cpp | 7 ++++++- .../NativeReactNativeFeatureFlags.h | 4 +++- .../ReactNativeFeatureFlags.config.js | 10 ++++++++++ .../featureflags/ReactNativeFeatureFlags.js | 9 +++++++-- .../specs/NativeReactNativeFeatureFlags.js | 3 ++- 20 files changed, 140 insertions(+), 24 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index 8a10052cd03..852763bb7d7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<7550955526f976d80ddc4eca0ba17486>> */ /** @@ -396,6 +396,12 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun virtualViewPrerenderRatio(): Double = accessor.virtualViewPrerenderRatio() + /** + * Makes sure that one thread needs to finish mounting first before a new one can + */ + @JvmStatic + public fun shadowTreeLockMountPhase(): Boolean = accessor.shadowTreeLockMountPhase() + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 4c31c559aa4..999da103210 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8e0125e82b359e6a175ffc49a4df5537>> + * @generated SignedSource<<889c062fb82ff5976adfcd29db539adc>> */ /** @@ -81,6 +81,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var useTurboModuleInteropCache: Boolean? = null private var useTurboModulesCache: Boolean? = null private var virtualViewPrerenderRatioCache: Double? = null + private var shadowTreeLockMountPhaseCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -631,6 +632,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun shadowTreeLockMountPhase(): Boolean { + var cached = shadowTreeLockMountPhaseCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.shadowTreeLockMountPhase() + shadowTreeLockMountPhaseCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider): Unit = ReactNativeFeatureFlagsCxxInterop.override(provider as Any) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index 915e42883fc..9a0e72d362e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<701b2ea9a0aabc82c49cfd48aba100d9>> */ /** @@ -150,6 +150,8 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun virtualViewPrerenderRatio(): Double + @DoNotStrip @JvmStatic public external fun shadowTreeLockMountPhase(): Boolean + @DoNotStrip @JvmStatic public external fun override(provider: Any) @DoNotStrip @JvmStatic public external fun dangerouslyReset() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 5509621183d..86592b028ce 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<10d708ce4449eede46d750a1ed48d02e>> + * @generated SignedSource<<0f75d476cfd17f6ab2d64f2a2e1fd8dc>> */ /** @@ -39,7 +39,7 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun enableAccessibilityOrder(): Boolean = false - override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = true + override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = false override fun enableAndroidTextMeasurementOptimizations(): Boolean = false @@ -137,11 +137,13 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useRawPropsJsiValue(): Boolean = false - override fun useShadowNodeStateOnClone(): Boolean = true + override fun useShadowNodeStateOnClone(): Boolean = false override fun useTurboModuleInterop(): Boolean = false override fun useTurboModules(): Boolean = false override fun virtualViewPrerenderRatio(): Double = 5.0 + + override fun shadowTreeLockMountPhase(): Boolean = false } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index b5aa6b46dd7..fd00631cdde 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<91a23e6bedd7821becd20afc7c48092c>> */ /** @@ -85,6 +85,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var useTurboModuleInteropCache: Boolean? = null private var useTurboModulesCache: Boolean? = null private var virtualViewPrerenderRatioCache: Double? = null + private var shadowTreeLockMountPhaseCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -696,6 +697,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } + override fun shadowTreeLockMountPhase(): Boolean { + var cached = shadowTreeLockMountPhaseCache + if (cached == null) { + cached = currentProvider.shadowTreeLockMountPhase() + accessedFeatureFlags.add("shadowTreeLockMountPhase") + shadowTreeLockMountPhaseCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider) { if (accessedFeatureFlags.isNotEmpty()) { val accessedFeatureFlagsStr = accessedFeatureFlags.joinToString(separator = ", ") { it } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index de14fb57768..1d4a11fa5d8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<21704207ce520def05b05f89dfba1048>> + * @generated SignedSource<> */ /** @@ -144,4 +144,6 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun useTurboModules(): Boolean @DoNotStrip public fun virtualViewPrerenderRatio(): Double + + @DoNotStrip public fun shadowTreeLockMountPhase(): Boolean } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 5ae6ba010df..abd8070b195 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -405,6 +405,12 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } + bool shadowTreeLockMountPhase() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("shadowTreeLockMountPhase"); + return method(javaProvider_); + } + private: jni::global_ref javaProvider_; }; @@ -714,6 +720,11 @@ double JReactNativeFeatureFlagsCxxInterop::virtualViewPrerenderRatio( return ReactNativeFeatureFlags::virtualViewPrerenderRatio(); } +bool JReactNativeFeatureFlagsCxxInterop::shadowTreeLockMountPhase( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::shadowTreeLockMountPhase(); +} + void JReactNativeFeatureFlagsCxxInterop::override( facebook::jni::alias_ref /*unused*/, jni::alias_ref provider) { @@ -928,6 +939,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "virtualViewPrerenderRatio", JReactNativeFeatureFlagsCxxInterop::virtualViewPrerenderRatio), + makeNativeMethod( + "shadowTreeLockMountPhase", + JReactNativeFeatureFlagsCxxInterop::shadowTreeLockMountPhase), }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index a04ebe7fc0e..098df27eb35 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<57f2dcf4b71512c6b15e8021258d6036>> + * @generated SignedSource<<949a32e47d8b53bb25f5f66de645862c>> */ /** @@ -213,6 +213,9 @@ class JReactNativeFeatureFlagsCxxInterop static double virtualViewPrerenderRatio( facebook::jni::alias_ref); + static bool shadowTreeLockMountPhase( + facebook::jni::alias_ref); + static void override( facebook::jni::alias_ref, jni::alias_ref provider); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 667aec1cb3f..0a8cf75fb4d 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<2cabd888b74b84201ff027457efc6007>> + * @generated SignedSource<<89255c959bb302b7ffb9c32701c112fb>> */ /** @@ -270,6 +270,10 @@ double ReactNativeFeatureFlags::virtualViewPrerenderRatio() { return getAccessor().virtualViewPrerenderRatio(); } +bool ReactNativeFeatureFlags::shadowTreeLockMountPhase() { + return getAccessor().shadowTreeLockMountPhase(); +} + void ReactNativeFeatureFlags::override( std::unique_ptr provider) { getAccessor().override(std::move(provider)); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index 564d82bba30..e1570bd1119 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<4adf7c18e5b0458dd2c1c588cfb84849>> */ /** @@ -344,6 +344,11 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static double virtualViewPrerenderRatio(); + /** + * Makes sure that one thread needs to finish mounting first before a new one can + */ + RN_EXPORT static bool shadowTreeLockMountPhase(); + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index d3b0351a093..2048c187d93 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<7ae9a203a94e3a22197bc9eda69b741c>> + * @generated SignedSource<<4156971877ee1e11b83008b2c886c0b6>> */ /** @@ -1127,6 +1127,24 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() { return flagValue.value(); } +bool ReactNativeFeatureFlagsAccessor::shadowTreeLockMountPhase() { + auto flagValue = shadowTreeLockMountPhase_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(61, "shadowTreeLockMountPhase"); + + flagValue = currentProvider_->shadowTreeLockMountPhase(); + shadowTreeLockMountPhase_ = flagValue; + } + + return flagValue.value(); +} + void ReactNativeFeatureFlagsAccessor::override( std::unique_ptr provider) { if (wasOverridden_) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 8e2acc5b241..24ff2e63da3 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<74560113d0b23c05d7822eeba1c0dee4>> + * @generated SignedSource<<2863ca68e4d58e3221410fb6da0e676d>> */ /** @@ -93,6 +93,7 @@ class ReactNativeFeatureFlagsAccessor { bool useTurboModuleInterop(); bool useTurboModules(); double virtualViewPrerenderRatio(); + bool shadowTreeLockMountPhase(); void override(std::unique_ptr provider); std::optional getAccessedFeatureFlagNames() const; @@ -104,7 +105,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 61> accessedFeatureFlags_; + std::array, 62> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> animatedShouldSignalBatch_; @@ -167,6 +168,7 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> useTurboModuleInterop_; std::atomic> useTurboModules_; std::atomic> virtualViewPrerenderRatio_; + std::atomic> shadowTreeLockMountPhase_; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 34a7f99d298..6ee90e1a1c2 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<1a54000b8eb51cb91304902c7f722d45>> + * @generated SignedSource<<62cd6308b20f7426192ba02b7c3e86d1>> */ /** @@ -60,7 +60,7 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { } bool enableAccumulatedUpdatesInRawPropsAndroid() override { - return true; + return false; } bool enableAndroidTextMeasurementOptimizations() override { @@ -270,6 +270,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { double virtualViewPrerenderRatio() override { return 5.0; } + + bool shadowTreeLockMountPhase() override { + return false; + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index f5c85f530a4..afecb96fd12 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<244db790cc754f31402981967cd902b5>> + * @generated SignedSource<> */ /** @@ -593,6 +593,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::virtualViewPrerenderRatio(); } + + bool shadowTreeLockMountPhase() override { + auto value = values_["shadowTreeLockMountPhase"]; + if (!value.isNull()) { + return value.getBool(); + } + + return ReactNativeFeatureFlagsDefaults::shadowTreeLockMountPhase(); + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index e9dd92d9494..75dda5958b8 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<2387ed12fe46fb5b606ad13a17511f03>> + * @generated SignedSource<> */ /** @@ -86,6 +86,7 @@ class ReactNativeFeatureFlagsProvider { virtual bool useTurboModuleInterop() = 0; virtual bool useTurboModules() = 0; virtual double virtualViewPrerenderRatio() = 0; + virtual bool shadowTreeLockMountPhase() = 0; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index 1e9e0ffc9b2..300a612e08d 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<45e1b08fd2438b27af82591b5cfa5744>> + * @generated SignedSource<> */ /** @@ -349,4 +349,9 @@ double NativeReactNativeFeatureFlags::virtualViewPrerenderRatio( return ReactNativeFeatureFlags::virtualViewPrerenderRatio(); } +bool NativeReactNativeFeatureFlags::shadowTreeLockMountPhase( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::shadowTreeLockMountPhase(); +} + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index bc8014a5d80..b3352eaf0f7 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<6ed8bc9bc9f4aeb6546280f6bb10e89b>> */ /** @@ -157,6 +157,8 @@ class NativeReactNativeFeatureFlags bool useTurboModules(jsi::Runtime& runtime); double virtualViewPrerenderRatio(jsi::Runtime& runtime); + + bool shadowTreeLockMountPhase(jsi::Runtime& runtime); }; } // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index c55d1311ca1..468dc752516 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -691,6 +691,16 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, + shadowTreeLockMountPhase: { + defaultValue: false, + metadata: { + dateAdded: '2025-11-04', + description: + 'Makes sure that one thread needs to finish mounting first before a new one can', + expectedReleaseValue: false, + purpose: 'experimentation', + }, + }, }, jsOnly: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index ab88b483f45..47ca07af40a 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> * @flow strict * @noformat */ @@ -112,6 +112,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{ useTurboModuleInterop: Getter, useTurboModules: Getter, virtualViewPrerenderRatio: Getter, + shadowTreeLockMountPhase: Getter, }>; /** @@ -233,7 +234,7 @@ export const enableAccessibilityOrder: Getter = createNativeFlagGetter( /** * When enabled, Android will accumulate updates in rawProps to reduce the number of mounting instructions for cascading re-renders. */ -export const enableAccumulatedUpdatesInRawPropsAndroid: Getter = createNativeFlagGetter('enableAccumulatedUpdatesInRawPropsAndroid', true); +export const enableAccumulatedUpdatesInRawPropsAndroid: Getter = createNativeFlagGetter('enableAccumulatedUpdatesInRawPropsAndroid', false); /** * Enables various optimizations throughout the path of measuring text on Android. */ @@ -442,6 +443,10 @@ export const useTurboModules: Getter = createNativeFlagGetter('useTurbo * Initial prerender ratio for VirtualView. */ export const virtualViewPrerenderRatio: Getter = createNativeFlagGetter('virtualViewPrerenderRatio', 5); +/** + * Makes sure that one thread needs to finish mounting first before a new one can + */ +export const shadowTreeLockMountPhase: Getter = createNativeFlagGetter('shadowTreeLockMountPhase', false); /** * Overrides the feature flags with the provided methods. diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index 4558b60203c..2de9cc2b702 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8b4f1275a16d5b83f5594da1eb89c6c1>> + * @generated SignedSource<<59e5b7277f7e6a0b95d600959960f4e4>> * @flow strict * @noformat */ @@ -86,6 +86,7 @@ export interface Spec extends TurboModule { +useTurboModuleInterop?: () => boolean; +useTurboModules?: () => boolean; +virtualViewPrerenderRatio?: () => number; + +shadowTreeLockMountPhase?: () => boolean; } const NativeReactNativeFeatureFlags: ?Spec = TurboModuleRegistry.get( From 85d83565dfc7f316e81abf082131f1056ae9ad4b Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Nov 2025 10:45:31 -0600 Subject: [PATCH 185/312] shadowTreeLockMountPhase impl --- .../ReactCommon/react/renderer/mounting/ShadowTree.cpp | 6 ++++++ .../ReactCommon/react/renderer/mounting/ShadowTree.h | 1 + 2 files changed, 7 insertions(+) diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 9dedbce7b24..a07c8583549 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -389,6 +389,12 @@ ShadowTreeRevision ShadowTree::getCurrentRevision() const { void ShadowTree::mount(ShadowTreeRevision revision, bool mountSynchronously) const { + std::unique_lock lock; + bool shouldLock = ReactNativeFeatureFlags::shadowTreeLockMountPhase(); + if (shouldLock) { + // TODO: can a mount cause another mount, so we have to care about reentrancy? + lock = std::unique_lock(mountMutex_); + } mountingCoordinator_->push(std::move(revision)); delegate_.shadowTreeDidFinishTransaction( mountingCoordinator_, mountSynchronously); diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h index 33e10e102a8..7e92bd3109d 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.h @@ -151,6 +151,7 @@ class ShadowTree final { const SurfaceId surfaceId_; const ShadowTreeDelegate& delegate_; + mutable std::shared_mutex mountMutex_; mutable std::shared_mutex commitMutex_; mutable std::recursive_mutex commitMutexRecursive_; mutable CommitMode commitMode_{ From 0dd0bdd131bf58a8227b043b072a02edb6352c1d Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Nov 2025 10:53:19 -0600 Subject: [PATCH 186/312] Make DefaultSoLoader public --- .../main/java/com/facebook/react/defaults/DefaultSoLoader.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultSoLoader.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultSoLoader.kt index c3243f47f9a..5ef7e04b27e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultSoLoader.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultSoLoader.kt @@ -9,10 +9,10 @@ package com.facebook.react.defaults import com.facebook.soloader.SoLoader -internal object DefaultSoLoader { +public object DefaultSoLoader { @Synchronized @JvmStatic - fun maybeLoadSoLibrary() { + public fun maybeLoadSoLibrary() { SoLoader.loadLibrary("react_newarchdefaults") try { SoLoader.loadLibrary("appmodules") From 52637483a02ae28314ac62d1f53f96263d9366cf Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 10 Nov 2025 18:24:07 +0000 Subject: [PATCH 187/312] Updated version to 0.81.4-discord-8 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index b440380fb25..8e1af22de8d 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-7 +VERSION_NAME=0.81.4-discord-8 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 9797cd75ae487a4d413c3faf67285e9047b6e480 Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Nov 2025 12:55:56 -0600 Subject: [PATCH 188/312] More kv-storage headers --- .../facebook/react/tasks/internal/PreparePrefabHeadersTask.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt index 08b3562bcad..ff160161081 100644 --- a/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt +++ b/packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt @@ -81,6 +81,9 @@ abstract class PreparePrefabHeadersTask : DefaultTask() { it.include("boost/mp11/**/*.hpp") it.include("boost/mpl/**/*.hpp") it.include("boost/parameter/**/*.hpp") + it.include("boost/predef.h") + it.include("boost/predef/**/*.h") + it.include("boost/predef/**/*.hpp") it.include("boost/type_traits/**/*.hpp") it.include("boost/utility/**/*.hpp") it.into(File(outputFolder.asFile, headerPrefix)) From dbc6c3f53c6dcf5e9f69750bb9384746e582bdf9 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 10 Nov 2025 20:01:51 +0000 Subject: [PATCH 189/312] Updated version to 0.81.4-discord-9 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 8e1af22de8d..3e09ceb6fde 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-8 +VERSION_NAME=0.81.4-discord-9 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From ed3e814d825ae0a7bc5719e9b108b0d83a1e121f Mon Sep 17 00:00:00 2001 From: Alex Hendrix Date: Mon, 10 Nov 2025 14:27:05 -0600 Subject: [PATCH 190/312] Add fb/glog_init.h to prefab --- packages/react-native/ReactAndroid/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index fccfb7617f5..52daf1a2892 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -91,6 +91,8 @@ val preparePrefab by Pair("src/main/jni/react/fabric", "react/fabric/"), // glog Pair(File(buildDir, "third-party-ndk/glog/exported/").absolutePath, ""), + // fbgloginit (exports fb/glog_init.h) + Pair("src/main/jni/first-party/fbgloginit", ""), // jsiinpsector Pair("../ReactCommon/jsinspector-modern/", "jsinspector-modern/"), // mapbufferjni From 7efce0031dabbec6903b8ff7793c3dd297e6a990 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 10 Nov 2025 21:29:26 +0000 Subject: [PATCH 191/312] Updated version to 0.81.4-discord-10 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 3e09ceb6fde..e4f1cb89cfa 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-9 +VERSION_NAME=0.81.4-discord-10 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 31f5aef10036075b460171024ed9f7d1408df379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 13 Nov 2025 14:42:19 +0100 Subject: [PATCH 192/312] fix(android): crash concurrent access _registryByName (#117) * fix(android): crash happening because _registryByName isn't properly lock guarded * fix this pointer pointing to destructed class in thread --- .../ComponentDescriptorRegistry.cpp | 15 ++++++++++----- .../ComponentDescriptorRegistry.h | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp index 6011e0aee49..ca3bb2b7b9e 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp @@ -40,13 +40,16 @@ void ComponentDescriptorRegistry::addMultipleAsync( auto parametersCopy = parameters_; auto contextContainerCopy = contextContainer_; - // Start thread immediately - std::thread([this, providers = std::move(providers), parametersCopy, contextContainerCopy]() { + auto self = shared_from_this(); + + // Start detached thread - registry stays alive until completion due to strong self reference + std::thread([self, providers = std::move(providers), parametersCopy, contextContainerCopy]() { // Ensure this C++ thread is attached to the JVM before touching JNI #ifdef __ANDROID__ facebook::jni::Environment::ensureCurrentThreadIsAttached(); #endif - std::unique_lock lock(mutex_); + + std::unique_lock lock(self->mutex_); for (const auto& provider : providers) { auto componentDescriptor = provider.constructor( @@ -60,8 +63,8 @@ void ComponentDescriptorRegistry::addMultipleAsync( auto sharedComponentDescriptor = std::shared_ptr(std::move(componentDescriptor)); - _registryByHandle[provider.handle] = sharedComponentDescriptor; - _registryByName[provider.name] = sharedComponentDescriptor; + self->_registryByHandle[provider.handle] = sharedComponentDescriptor; + self->_registryByName[provider.name] = sharedComponentDescriptor; } }).detach(); } @@ -90,6 +93,8 @@ void ComponentDescriptorRegistry::add( void ComponentDescriptorRegistry::registerComponentDescriptor( const SharedComponentDescriptor& componentDescriptor) const { + std::unique_lock lock(mutex_); + ComponentHandle componentHandle = componentDescriptor->getComponentHandle(); _registryByHandle[componentHandle] = componentDescriptor; diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h index a2bc266f15f..5ac03785f48 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h @@ -27,7 +27,7 @@ using SharedComponentDescriptorRegistry = /* * Registry of particular `ComponentDescriptor`s. */ -class ComponentDescriptorRegistry { +class ComponentDescriptorRegistry : public std::enable_shared_from_this { public: using Shared = std::shared_ptr; From 2e20497065eb031121b810e16ad0a3d14441a166 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Thu, 13 Nov 2025 16:41:25 +0000 Subject: [PATCH 193/312] Updated version to 0.81.4-discord-11 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index e4f1cb89cfa..a0cddd8f3dc 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-10 +VERSION_NAME=0.81.4-discord-11 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 4e7f5922f8d4d018d3efad51584ff9fb28aeb605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 13 Nov 2025 18:25:19 +0100 Subject: [PATCH 194/312] fix(android): fix deadlock in component registry Adds to: 33cd751e166f0677ef028ccb5e911fb0f2ad23e8 --- .../componentregistry/ComponentDescriptorRegistry.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp index ca3bb2b7b9e..73724c38a28 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp @@ -91,10 +91,9 @@ void ComponentDescriptorRegistry::add( _registryByName[componentDescriptorProvider.name] = sharedComponentDescriptor; } +// Callers must hold the mutex void ComponentDescriptorRegistry::registerComponentDescriptor( const SharedComponentDescriptor& componentDescriptor) const { - std::unique_lock lock(mutex_); - ComponentHandle componentHandle = componentDescriptor->getComponentHandle(); _registryByHandle[componentHandle] = componentDescriptor; @@ -128,12 +127,15 @@ const ComponentDescriptor& ComponentDescriptorRegistry::at( if (it == _registryByName.end()) { if (ReactNativeFeatureFlags::useFabricInterop()) { + lock.unlock(); // When interop is enabled, if the component is not found we rely on // UnstableLegacyViewManagerAutomaticComponentDescriptor to support legacy // components in new architecture. auto componentDescriptor = std::make_shared< const UnstableLegacyViewManagerAutomaticComponentDescriptor>( parameters_, unifiedComponentName); + + std::unique_lock writeLock(mutex_); registerComponentDescriptor(componentDescriptor); return *_registryByName.find(unifiedComponentName)->second; } else { @@ -186,6 +188,7 @@ bool ComponentDescriptorRegistry::hasComponentDescriptorAt( void ComponentDescriptorRegistry::setFallbackComponentDescriptor( const SharedComponentDescriptor& descriptor) { + std::unique_lock lock(mutex_); _fallbackComponentDescriptor = descriptor; registerComponentDescriptor(descriptor); } From 5873cd008aaa0ed6237c0caa429f11d7e437e22a Mon Sep 17 00:00:00 2001 From: CI Bot Date: Thu, 13 Nov 2025 19:40:14 +0000 Subject: [PATCH 195/312] Updated version to 0.81.4-discord-12 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index a0cddd8f3dc..500db05c132 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-11 +VERSION_NAME=0.81.4-discord-12 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 11895bc7cc71b662b88c8d3ebe573bf6b6390268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 13 Nov 2025 21:27:22 +0100 Subject: [PATCH 196/312] fix(android): fix ViewGroupManager addView crash if in transition --- .../react/uimanager/ViewGroupManager.kt | 152 +++++++++++------- .../views/view/ReactClippingViewManager.kt | 43 +---- 2 files changed, 102 insertions(+), 93 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt index ebbdbeb598a..1fa38d4be4e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt @@ -9,79 +9,119 @@ package com.facebook.react.uimanager import android.view.View import android.view.ViewGroup +import androidx.core.view.doOnDetach +import com.facebook.common.logging.FLog import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.UiThreadUtil import java.util.WeakHashMap +@Suppress("DEPRECATION") public abstract class ViewGroupManager @JvmOverloads constructor(reactContext: ReactApplicationContext? = null) : BaseViewManager(reactContext), IViewGroupManager { - public override fun createShadowNodeInstance(): LayoutShadowNode = LayoutShadowNode() - - public override fun getShadowNodeClass(): Class = - LayoutShadowNode::class.java + public override fun createShadowNodeInstance(): LayoutShadowNode = LayoutShadowNode() + + public override fun getShadowNodeClass(): Class = + LayoutShadowNode::class.java + + public override fun updateExtraData(root: T, extraData: Any): Unit = Unit + + // parent: childIndex[] - Used when we can't immediately add a view + protected val operationsMap: WeakHashMap> = WeakHashMap() + + public fun addViewSafely(parent: T, child: View, index: Int, callback: () -> Unit) { + UiThreadUtil.assertOnUiThread() + + if (child.parent == null) { + callback() + return + } + + operationsMap.getOrPut(parent) { + mutableMapOf() + }[index] = true + + // When the child-parent relation is removed, onDetachedFromWindow will be called. + // Its important to wait for detaching as the view might be in a transition, and isn't removed immediately. + child.doOnDetach { + // Looking at how endViewTransition is implemented, dispatchDetachedFromWindow + // gets called _before_ the parent relation is removed, so we need to post this to the end of the frame: + child.post { + if(operationsMap.remove(parent) == null) { + // The addView operation was already countered by a removeView operation while we were waiting + FLog.w("ReactClippingViewManager", "Tried to add a view to a parent after the child was detached, but a remove operation was already enqueued") + return@post + } + FLog.w("ReactClippingViewManager", "addView(): ${child::class.java.simpleName} had a parent, removed from previous parent and after onDetach adding to new parent $parent") + callback() + } + } + + // With the detach listener in place, we can now remove the view from the previous parent: + // Note: This call here is potentially redundant, as SurfaceMountingManager.kt is already removing it + (child.parent as? ViewGroup)?.removeView(child) + } - public override fun updateExtraData(root: T, extraData: Any): Unit = Unit + public override fun addView(parent: T, child: View, index: Int): Unit = + addViewSafely(parent, child, index) { parent.addView(child, index) } + + /** + * Convenience method for batching a set of addView calls Note that this adds the views to the + * beginning of the ViewGroup + * + * @param parent the parent ViewGroup + * @param views the set of views to add + */ + public fun addViews(parent: T, views: List) { + UiThreadUtil.assertOnUiThread() + views.forEachIndexed { i, view -> addView(parent, view, i) } + } - public override fun addView(parent: T, child: View, index: Int): Unit = - parent.addView(child, index) + public override fun getChildCount(parent: T): Int = parent.childCount - /** - * Convenience method for batching a set of addView calls Note that this adds the views to the - * beginning of the ViewGroup - * - * @param parent the parent ViewGroup - * @param views the set of views to add - */ - public fun addViews(parent: T, views: List) { - UiThreadUtil.assertOnUiThread() - views.forEachIndexed { i, view -> addView(parent, view, i) } - } + public override fun getChildAt(parent: T, index: Int): View? = parent.getChildAt(index) - public override fun getChildCount(parent: T): Int = parent.childCount + public override fun removeViewAt(parent: T, index: Int) { + UiThreadUtil.assertOnUiThread() + parent.removeViewAt(index) + operationsMap[parent]?.remove(index) + } - public override fun getChildAt(parent: T, index: Int): View? = parent.getChildAt(index) + /** + * Expo overrides this function GroupViewManagerWrapper.kt`, which is a replacement view manager + * adding support for delegates receiving callbacks whenever one of the methods in the view + * manager are called. + */ + public open fun removeView(parent: T, view: View) { + UiThreadUtil.assertOnUiThread() + + for (i in 0 until getChildCount(parent)) { + if (getChildAt(parent, i) === view) { + + removeViewAt(parent, i) + break + } + } + } - public override fun removeViewAt(parent: T, index: Int) { - UiThreadUtil.assertOnUiThread() - parent.removeViewAt(index) - } + /** + * Returns whether this View type needs to handle laying out its own children instead of deferring + * to the standard css-layout algorithm. Returns true for the layout to *not* be automatically + * invoked. Instead onLayout will be invoked as normal and it is the View instance's + * responsibility to properly call layout on its children. Returns false for the default behavior + * of automatically laying out children without going through the ViewGroup's onLayout method. In + * that case, onLayout for this View type must *not* call layout on its children. + */ + public override fun needsCustomLayoutForChildren(): Boolean = false - /** - * Expo overrides this function GroupViewManagerWrapper.kt`, which is a replacement view manager - * adding support for delegates receiving callbacks whenever one of the methods in the view - * manager are called. - */ - public open fun removeView(parent: T, view: View) { - UiThreadUtil.assertOnUiThread() + public companion object { + private val zIndexHash: WeakHashMap = WeakHashMap() - for (i in 0 until getChildCount(parent)) { - if (getChildAt(parent, i) === view) { + @JvmStatic + public fun setViewZIndex(view: View, zIndex: Int): Unit = zIndexHash.set(view, zIndex) - removeViewAt(parent, i) - break - } + @JvmStatic public fun getViewZIndex(view: View?): Int? = zIndexHash[view] } - } - - /** - * Returns whether this View type needs to handle laying out its own children instead of deferring - * to the standard css-layout algorithm. Returns true for the layout to *not* be automatically - * invoked. Instead onLayout will be invoked as normal and it is the View instance's - * responsibility to properly call layout on its children. Returns false for the default behavior - * of automatically laying out children without going through the ViewGroup's onLayout method. In - * that case, onLayout for this View type must *not* call layout on its children. - */ - public override fun needsCustomLayoutForChildren(): Boolean = false - - public companion object { - private val zIndexHash: WeakHashMap = WeakHashMap() - - @JvmStatic - public fun setViewZIndex(view: View, zIndex: Int): Unit = zIndexHash.set(view, zIndex) - - @JvmStatic public fun getViewZIndex(view: View?): Int? = zIndexHash[view] - } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt index a08b8d2bf37..d49b1ce8689 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt @@ -31,47 +31,16 @@ public abstract class ReactClippingViewManager : ViewGroupMa view.removeClippedSubviews = removeClippedSubviews } - // parent: childIndex[] - Used when we can't immediately add a view - private val operationsMap = WeakHashMap>() - override fun addView(parent: T, child: View, index: Int) { UiThreadUtil.assertOnUiThread() - if (child.parent != null) { - operationsMap.getOrPut(parent) { - mutableMapOf() - }[index] = true - - // When the child-parent relation is removed, onDetachedFromWindow will be called. - // Its important to wait for detaching as the view might be in a transition, and isn't removed immediately. - child.doOnDetach { - // Looking at how endViewTransition is implemented, dispatchDetachedFromWindow - // gets called _before_ the parent relation is removed, so we need to post this to the end of the frame: - child.post { - if(operationsMap.remove(parent) == null) { - // The addView operation was already countered by a removeView operation while we were waiting - FLog.w("ReactClippingViewManager", "Tried to add a view to a parent after the child was detached, but a remove operation was already enqueued") - return@post - } - FLog.w("ReactClippingViewManager", "addView(): ${child::class.java.simpleName} had a parent, removed from previous parent and after onDetach adding to new parent $parent") - addViewInternal(parent, child, index) - } + addViewSafely(parent, child, index) { + val removeClippedSubviews = parent.removeClippedSubviews + if (removeClippedSubviews) { + parent.addViewWithSubviewClippingEnabled(child, index) + } else { + parent.addView(child, index) } - - // With the detach listener in place, we can now remove the view from the previous parent: - // Note: This call here is potentially redundant, as SurfaceMountingManager.kt is already removing it - (child.parent as? ViewGroup)?.removeView(child) - } else { - addViewInternal(parent, child, index) - } - } - - private fun addViewInternal(parent: T, child: View, index: Int) { - val removeClippedSubviews = parent.removeClippedSubviews - if (removeClippedSubviews) { - parent.addViewWithSubviewClippingEnabled(child, index) - } else { - parent.addView(child, index) } } From c0d3824cc05dcc67828f0fd25703b7e13ed2e6ec Mon Sep 17 00:00:00 2001 From: CI Bot Date: Fri, 14 Nov 2025 10:33:11 +0000 Subject: [PATCH 197/312] Updated version to 0.81.4-discord-13 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 500db05c132..8e6f1ec8570 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-12 +VERSION_NAME=0.81.4-discord-13 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 6dffe0b90e7a754c8c0d10c5f81a88f507a46726 Mon Sep 17 00:00:00 2001 From: Jakub Szymczak <88395093+SzymczakJ@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:07:38 +0100 Subject: [PATCH 198/312] fix jest test (#119) --- packages/react-native/Libraries/Image/Image.js | 17 ----------------- packages/react-native/jest/mockComponent.js | 1 + 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 packages/react-native/Libraries/Image/Image.js diff --git a/packages/react-native/Libraries/Image/Image.js b/packages/react-native/Libraries/Image/Image.js deleted file mode 100644 index 71a280b4b5c..00000000000 --- a/packages/react-native/Libraries/Image/Image.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -// NOTE: This file supports backwards compatibility of subpath (deep) imports -// from 'react-native' with platform-specific extensions. It can be deleted -// once we remove the "./*" mapping from package.json "exports". - -import Image from './Image'; - -export default Image; diff --git a/packages/react-native/jest/mockComponent.js b/packages/react-native/jest/mockComponent.js index 6ff4f6bd3e2..ae440d7ab57 100644 --- a/packages/react-native/jest/mockComponent.js +++ b/packages/react-native/jest/mockComponent.js @@ -39,6 +39,7 @@ export default function mockComponent< React.ElementProps, > = typeof RealComponent === 'function' && + RealComponent.prototype != null && RealComponent.prototype.constructor instanceof React.Component ? RealComponent : React.Component; From a064c0015e89b4409f2a6fd03c11c69f788c699f Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 17 Nov 2025 17:17:34 +0000 Subject: [PATCH 199/312] Updated version to 0.81.4-discord-14 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 8e6f1ec8570..6185d795e20 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-13 +VERSION_NAME=0.81.4-discord-14 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 0a9002e57826f0ef7e1ba33ed7aae679ebdc1388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Tue, 18 Nov 2025 18:04:38 +0100 Subject: [PATCH 200/312] add debug methods to reactviewgrop --- .../react/views/view/ReactViewGroup.kt | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt index 6bde343933a..ebcea4c7024 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt @@ -1026,6 +1026,85 @@ public open class ReactViewGroup public constructor(context: Context?) : accessibilityStateChangeListener = null } + //#region debug helper + public fun describeViewAncestry(start: View): String { + val sb = StringBuilder() + var v: View? = start + var depth = 0 + while (v != null) { + val nativeId = v.getTag(R.id.view_tag_native_id) + val testId = v.getTag(R.id.react_test_id) + val uiType = getUIManagerType(v).toString() + val cd = v.contentDescription + sb.append("#").append(depth) + .append(" class=").append(v::class.java.name) + .append(" tag=").append(v.id) + .append(" ui=").append(uiType) + if (nativeId != null) sb.append(" nativeID=").append(nativeId) + if (testId != null) sb.append(" testID=").append(testId) + if (cd != null) sb.append(" contentDesc=").append(cd) + sb.append('\n') + val p = v.parent + v = if (p is View) p else null + depth++ + } + return sb.toString() + } + + public fun describeChildren(): String { + val sb = StringBuilder() + + sb.append(" Attached children: ") + val childCount = childCount + if (childCount == 0) { + sb.append(" (none)\n") + } else { + for (i in 0 until childCount) { + try { + val child = getChildAt(i) + if (child == null) { + sb.append(" [$i] NULL CHILD!\n") + } else { + val childNativeId = child.getTag(R.id.view_tag_native_id) + val childTestId = child.getTag(R.id.react_test_id) + sb.append(" [$i] ") + .append(child::class.java.simpleName) + .append(" id=").append(child.id) + if (childNativeId != null) sb.append(" nativeID=").append(childNativeId) + if (childTestId != null) sb.append(" testID=").append(childTestId) + sb.append(" parent=").append(if (child.parent != null) "attached" else "DETACHED") + sb.append('\n') + } + } catch (e: Exception) { + sb.append(" [$i] ERROR: ").append(e.message).append('\n') + } + } + } + + try { + // If removeClippedSubviews is enabled, show clipped children too + if (removeClippedSubviews && allChildren != null && allChildrenCount > childCount) { + sb.append(" Clipped children:\n") + for (i in 0 until allChildrenCount) { + val child = allChildren!![i] + if (child != null && child.parent == null) { + val childNativeId = child.getTag(R.id.view_tag_native_id) + sb.append(" [$i] ") + .append(child::class.java.simpleName) + .append(" id=").append(child.id) + if (childNativeId != null) sb.append(" nativeID=").append(childNativeId) + sb.append(" (CLIPPED)\n") + } + } + } + } catch (e: Exception) { + sb.append(" Error describing clipped children: ").append(e.message).append('\n') + } + + return sb.toString() + } + //#endregion + private companion object { private const val ARRAY_CAPACITY_INCREMENT = 12 private val defaultLayoutParam = LayoutParams(0, 0) From 7c9b862d10bc5e6f876c4932a560464017998e42 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Tue, 18 Nov 2025 18:05:40 +0000 Subject: [PATCH 201/312] Updated version to 0.81.4-discord-15 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 6185d795e20..71997c84ffc 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-14 +VERSION_NAME=0.81.4-discord-15 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From df3cd993884e07dcbc93eb0f6ffb99c35c9f69d4 Mon Sep 17 00:00:00 2001 From: Jakub Kosmydel Date: Fri, 21 Nov 2025 15:07:59 +0100 Subject: [PATCH 202/312] Fix ScrollView with `pagingEnabled` when using ThumbStick --- .../scroll/ReactHorizontalScrollView.java | 32 +++++++++++++++++++ .../react/views/scroll/ReactScrollView.java | 32 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java index 2a462c438f8..4e50334f4fa 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java @@ -718,6 +718,38 @@ public boolean dispatchGenericMotionEvent(MotionEvent ev) { return false; } + // Handle ACTION_SCROLL events (mouse wheel, trackpad, joystick) + if (ev.getActionMasked() == MotionEvent.ACTION_SCROLL) { + float hScroll = ev.getAxisValue(MotionEvent.AXIS_HSCROLL); + if (hScroll != 0) { + // Perform the scroll + boolean result = super.dispatchGenericMotionEvent(ev); + // Schedule snap alignment to run after scrolling stops + if (result + && (mPagingEnabled + || mSnapInterval != 0 + || mSnapOffsets != null + || mSnapToAlignment != SNAP_ALIGNMENT_DISABLED)) { + // Cancel any pending runnable and reschedule + if (mPostTouchRunnable != null) { + removeCallbacks(mPostTouchRunnable); + } + mPostTouchRunnable = + new Runnable() { + @Override + public void run() { + mPostTouchRunnable = null; + // Trigger snap alignment now that scrolling has stopped + handlePostTouchScrolling(0, 0); + } + }; + ViewCompat.postOnAnimationDelayed( + this, mPostTouchRunnable, ReactScrollViewHelper.MOMENTUM_DELAY); + } + return result; + } + } + return super.dispatchGenericMotionEvent(ev); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java index acb61528ecc..7b12e496bd8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java @@ -557,6 +557,38 @@ public boolean dispatchGenericMotionEvent(MotionEvent ev) { return false; } + // Handle ACTION_SCROLL events (mouse wheel, trackpad, joystick) + if (ev.getActionMasked() == MotionEvent.ACTION_SCROLL) { + float vScroll = ev.getAxisValue(MotionEvent.AXIS_VSCROLL); + if (vScroll != 0) { + // Perform the scroll + boolean result = super.dispatchGenericMotionEvent(ev); + // Schedule snap alignment to run after scrolling stops + if (result + && (mPagingEnabled + || mSnapInterval != 0 + || mSnapOffsets != null + || mSnapToAlignment != SNAP_ALIGNMENT_DISABLED)) { + // Cancel any pending post-touch runnable and reschedule + if (mPostTouchRunnable != null) { + removeCallbacks(mPostTouchRunnable); + } + mPostTouchRunnable = + new Runnable() { + @Override + public void run() { + mPostTouchRunnable = null; + // Trigger snap alignment now that scrolling has stopped + handlePostTouchScrolling(0, 0); + } + }; + ViewCompat.postOnAnimationDelayed( + this, mPostTouchRunnable, ReactScrollViewHelper.MOMENTUM_DELAY); + } + return result; + } + } + return super.dispatchGenericMotionEvent(ev); } From 4169376495bdd4b1cc842a481c07899e731aa3e0 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Wed, 26 Nov 2025 10:35:59 +0000 Subject: [PATCH 203/312] Updated version to 0.81.4-discord-16 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 71997c84ffc..0fcb83d84d8 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-15 +VERSION_NAME=0.81.4-discord-16 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 247655e448b3060bfa7a7a939cb55c96a66fc1a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Fri, 28 Nov 2025 16:24:18 +0100 Subject: [PATCH 204/312] reapply logs (#124) --- .../src/main/jni/react/fabric/FabricUIManagerBinding.cpp | 8 ++++++++ .../react/renderer/mounting/MountingCoordinator.cpp | 2 ++ .../ReactCommon/react/renderer/mounting/ShadowTree.cpp | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp index 884b108fade..319c7707e75 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp @@ -631,10 +631,18 @@ void FabricUIManagerBinding::schedulerShouldRenderTransactions( /* willPerformAsynchronously = */ true); if (mountingTransaction.has_value()) { auto transaction = std::move(*mountingTransaction); + LOG(WARNING) << "⚙️ schedulerShouldRenderTransactions (enableAccumulatedUpdatesInRawPropsAndroid), items: " + << mountingTransaction->getMutations().size() + << " pending mounting transaction(s) for new base revision: " + << mountingCoordinator->getBaseRevision().number; mountingManager->executeMount(transaction); } } else { std::vector pendingTransactions; + LOG(WARNING) << "⚙️ schedulerShouldRenderTransactions " + << pendingTransactions_.size() + << " pending mounting transaction(s) for new base revision: " + << mountingCoordinator->getBaseRevision().number; { // Retain the lock to access the pending transactions but not to execute diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp index 2f6627e1ede..37cd5d75f57 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp @@ -95,6 +95,8 @@ std::optional MountingCoordinator::pullTransaction( telemetry.willDiff(); + LOG(WARNING) << "⚙️ Diffing revision " << baseRevision_.number + << " to " << lastRevision_->number; auto mutations = calculateShadowViewMutations( *baseRevision_.rootShadowNode, *lastRevision_->rootShadowNode); diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index a07c8583549..3f6b968d993 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -395,9 +395,15 @@ void ShadowTree::mount(ShadowTreeRevision revision, bool mountSynchronously) // TODO: can a mount cause another mount, so we have to care about reentrancy? lock = std::unique_lock(mountMutex_); } + + LOG(WARNING) << "⚙️ Mounting revision " << revision.number + << " (" << (mountSynchronously ? "synchronously" : "asynchronously") << ")" + << ", shouldLock: " << (shouldLock ? "true" : "false"); mountingCoordinator_->push(std::move(revision)); delegate_.shadowTreeDidFinishTransaction( mountingCoordinator_, mountSynchronously); + LOG(WARNING) << "☑️ Finished mount-phase revision " << revision.number + << " (" << (mountSynchronously ? "synchronously" : "asynchronously") << ")"; } void ShadowTree::commitEmptyTree() const { From 57cc311c20f05d4002a0e9cc63462544d1d0ee2a Mon Sep 17 00:00:00 2001 From: CI Bot Date: Fri, 28 Nov 2025 16:40:42 +0000 Subject: [PATCH 205/312] Updated version to 0.81.4-discord-17 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 0fcb83d84d8..51be42b23e8 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-16 +VERSION_NAME=0.81.4-discord-17 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 30a0d91f2ee1f268551ac2907cfade2141311702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Mon, 1 Dec 2025 17:48:33 +0100 Subject: [PATCH 206/312] dev: add debugging logs (#127) * add more debugging logs to ReactViewGroup * more methods * omg --- .../react/views/view/ReactViewGroup.kt | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt index ebcea4c7024..6ec2d4ec4d4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt @@ -69,6 +69,8 @@ import java.util.ArrayList import kotlin.concurrent.Volatile import kotlin.math.max +import com.facebook.react.bridge.UiThreadUtil + /** * Backing for a React View. Has support for borders, but since borders aren't common, lazy * initializes most of the storage needed for them. @@ -1027,6 +1029,137 @@ public open class ReactViewGroup public constructor(context: Context?) : } //#region debug helper + override fun removeView(view: View?) { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val viewClass = view?.javaClass?.simpleName ?: "null" + val viewIndex = indexOfChild(view) + val stack = getStack() + val hierarchy = viewHierarchyDescription() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeView called for view of class $viewClass at index $viewIndex\nStack trace:\n$stack\nHierarchy:\n$hierarchy", + ) + } + + super.removeView(view) + } + + override fun removeViewAt(index: Int) { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val view = getChildAt(index) + val viewClass = view?.javaClass?.simpleName ?: "null" + val stack = getStack() + val hierarchy = viewHierarchyDescription() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeViewAt called for view of class $viewClass at index $index\nStack trace:\n$stack\nHierarchy:\n$hierarchy", + ) + } + + super.removeViewAt(index) + } + + override fun removeViews(start: Int, count: Int) { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val views = (start until start + count).map { getChildAt(it) } + val viewClasses = views.map { it?.javaClass?.simpleName ?: "null" } + val stack = getStack() + val hierarchy = viewHierarchyDescription() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeViews called for views of classes $viewClasses starting at index $start count $count\nStack trace:\n$stack\nHierarchy:\n$hierarchy", + ) + } + + super.removeViews(start, count) + } + + override fun removeViewInLayout(view: View?) { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val viewClass = view?.javaClass?.simpleName ?: "null" + val viewIndex = indexOfChild(view) + val stack = getStack() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeViewInLayout called for view of class $viewClass at index $viewIndex\nStack trace:\n$stack", + ) + } + + super.removeViewInLayout(view) + } + + override fun removeViewsInLayout(start: Int, count: Int) { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val views = (start until start + count).map { getChildAt(it) } + val viewClasses = views.map { it?.javaClass?.simpleName ?: "null" } + val stack = getStack() + val hierarchy = viewHierarchyDescription() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeViewsInLayout called for views of classes $viewClasses starting at index $start count $count\nStack trace:\n$stack\nHierarchy:\n$hierarchy", + ) + } + + super.removeViewsInLayout(start, count) + } + + override fun removeAllViewsInLayout() { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val views = (0 until childCount).map { getChildAt(it) } + val viewClasses = views.map { it?.javaClass?.simpleName ?: "null" } + val stack = getStack() + val hierarchy = viewHierarchyDescription() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeAllViewsInLayout called for views of classes $viewClasses\nStack trace:\n$stack\nHierarchy:\n$hierarchy", + ) + } + + super.removeAllViewsInLayout() + } + + override fun removeAllViews() { + UiThreadUtil.assertOnUiThread() + getNativeId()?.let { nativeId -> + val views = (0 until childCount).map { getChildAt(it) } + val viewClasses = views.map { it?.javaClass?.simpleName ?: "null" } + val stack = getStack() + val hierarchy = viewHierarchyDescription() + FLog.w( + "ReactViewGroup", + "[$nativeId] removeAllViews called for views of classes $viewClasses\nStack trace:\n$stack\nHierarchy:\n$hierarchy", + ) + } + + super.removeAllViews() + } + + public fun getNativeId(): String? = getTag(com.facebook.react.R.id.view_tag_native_id) as? String + + public fun getStack(): String = Thread + .currentThread() + .stackTrace + .drop(2) // Skip the call itself + .joinToString("\n") { " at ${it.className}.${it.methodName}(${it.fileName}:${it.lineNumber})" } + + private fun viewHierarchyDescription(): String { + val childrenViewInfo = describeChildren() + val childrenCountInfo = "children count info: getChildCount: $childCount" + val ancestry = try { + describeViewAncestry(this) + } catch (_: Exception) { + null + } + + return "View ancestry:\n$ancestry\n$childrenCountInfo\n$childrenViewInfo" + } + public fun describeViewAncestry(start: View): String { val sb = StringBuilder() var v: View? = start From b585c655e98a4960bf9bc7e48141603dfb553b69 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 1 Dec 2025 17:52:14 +0000 Subject: [PATCH 207/312] Updated version to 0.81.4-discord-18 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 51be42b23e8..7a9b3be57d5 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-17 +VERSION_NAME=0.81.4-discord-18 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From e51768894c81218077cd9caa16f62c55a2f89189 Mon Sep 17 00:00:00 2001 From: Can Undeger Date: Mon, 1 Dec 2025 13:30:24 -0500 Subject: [PATCH 208/312] [task] Setup the stroke effect (#122) * Setup the text stroke effect commit 6dd0e95740e2a45f6f505d8da18a82264f290b43 Author: Can Undeger Date: Wed Nov 19 16:26:35 2025 -0500 Add some logs to android commit 36d4caf07d73c33b655cd6fc2545515cdec4e3ca Author: Can Undeger Date: Tue Nov 18 13:03:23 2025 -0500 Upgrade to 0.81.4 commit c5c665d9766735c4be3f26132643796dc3ccc9d1 Author: Can Undeger Date: Tue Nov 18 12:35:50 2025 -0500 Make it so that the stroke as well as gradient are applied commit 62fb685b5898a81461565f15ea0ee8d946502a09 Author: Can Undeger Date: Mon Nov 17 11:32:45 2025 -0500 Fix stroke fill color commit da021f841167872adb58104d23626459e09a4487 Author: Can Undeger Date: Wed Nov 12 18:33:19 2025 -0500 Fix the gradient angle on ios commit 5d3232151e1f3953c811d3dce973f9cf7babe434 Author: Can Undeger Date: Wed Nov 12 18:00:34 2025 -0500 Add logging for the gradient angle commit ccf1a88adb5fcc2c6c58ca53af9c346352d9ec27 Author: Can Undeger Date: Wed Nov 12 15:37:18 2025 -0500 Fix ios text stroke once more commit 10d126e930825040195ab9d0de9482d022501eac Author: Can Undeger Date: Wed Nov 12 12:42:18 2025 -0500 Attempt to fix stroke on ios commit c5306e6be012bb19bcd7d4fff819e6846dbe916b Author: Can Undeger Date: Wed Nov 12 12:25:40 2025 -0500 Fix the upside down text issue commit 08b71421da4f6dd3987dd3d7e265aa08ada9f828 Author: Can Undeger Date: Mon Nov 10 16:21:04 2025 -0500 Add the gradient angle prop commit cf0d9e2cd51e594069d92707bd1b5f85b3ad7f2b Author: Can Undeger Date: Sun Nov 9 15:21:01 2025 -0500 Fix the ios build commit 2638b95536eb43cb7f25f46fb97aba43a94af6f1 Author: Can Undeger Date: Sun Nov 9 15:08:04 2025 -0500 FIX COLOR NOT WORKING commit e5e7ec9fd49da2b42941f876b12a9866e2518940 Author: Can Undeger Date: Sun Nov 9 14:30:43 2025 -0500 Update the ios stroke implementation commit e7ade51c8c4ec6588088a60a8d93ab2eb7ab32b1 Author: Can Undeger Date: Sun Nov 9 13:25:55 2025 -0500 Add logging for text stroke commit 8a330bad1c29e3aedcb7c0a37a361467beac1a46 Author: Can Undeger Date: Sun Nov 9 13:23:11 2025 -0500 Update the text stroke on ios commit 4fa7fecdae315e7fa2c0bf65dcabc65123bec1d5 Author: Can Undeger Date: Sun Nov 9 13:15:22 2025 -0500 Fix stroke color conversion commit 0986441473764829780dfa98a3605450e0551dba Author: Can Undeger Date: Fri Nov 7 11:33:32 2025 -0500 Try to fix the android build commit d88e464fe66b000068185b1051b3c6be7ec3cc16 Author: Can Undeger Date: Wed Nov 5 16:47:27 2025 -0500 Have a proper outer stroke on android commit bb912df8faca8a5c22e8f2c339988b50567f7467 Author: Can Undeger Date: Wed Nov 5 15:54:43 2025 -0500 Another attempt to fix the ios stroke commit ff262dd36f7debf142a3b0c10df6303875bc937c Author: Can Undeger Date: Wed Nov 5 15:22:39 2025 -0500 Fix the stroke on ios commit cc0503472c1ae1e079d4aaf2bd408707505c3dc0 Author: Can Undeger Date: Wed Nov 5 14:26:17 2025 -0500 Fix android and ios commit 95ffe8d38b590184ee227fa8d7d1a516c17c6fb7 Author: Can Undeger Date: Wed Nov 5 13:22:21 2025 -0500 Fix the android build commit a89930ebd72982c620cd637df5af7b47e1f97c5c Author: Can Undeger Date: Wed Nov 5 13:13:59 2025 -0500 Optimize the stroke effect commit 6cbb1769ff62fc37598f7f8a9027d9f6131068c8 Author: Can Undeger Date: Wed Nov 5 12:54:04 2025 -0500 Fix android logging issue commit a67cea7fc98e1973c2e171254ea344bc723a2b40 Author: Can Undeger Date: Wed Nov 5 12:30:39 2025 -0500 Add some logging for the stroke effect commit e00e48164e0689e2ad08318d1deddae11e08df3a Author: Can Undeger Date: Wed Nov 5 11:26:54 2025 -0500 Dont eat into the text with the stroke effect commit 10c3f7860f43923a61bae11cd79d36da6fbcf815 Author: Can Undeger Date: Tue Nov 4 16:17:07 2025 -0500 LwqCreate the stroke effect for the text component * Fix the text ellipsis issue on android * Clean up the text stroke effect * Fix text container size * Fix double stroke effect accounting * Fix ios text stroke layout size calculation * Fix the container size calculation for text with stroke effect --- .../View/ReactNativeStyleAttributes.js | 2 + .../Text/BaseText/RCTBaseTextViewManager.mm | 4 + .../Libraries/Text/RCTTextAttributes.h | 4 + .../Libraries/Text/RCTTextAttributes.mm | 34 +++++++- .../react-native/Libraries/Text/Text.d.ts | 15 ++++ .../Libraries/Text/Text/RCTTextShadowView.mm | 48 +++++++++-- .../Libraries/Text/Text/RCTTextView.mm | 83 +++++++++++++++++- .../Libraries/Text/TextNativeComponent.js | 6 ++ .../views/text/ReactBaseTextShadowNode.java | 43 +++++++++- .../react/views/text/TextAttributeProps.java | 55 +++++++++++- .../react/views/text/TextLayoutManager.kt | 29 ++++++- .../text/internal/span/LinearGradientSpan.kt | 23 ++++- .../text/internal/span/StrokeStyleSpan.kt | 86 +++++++++++++++++++ .../attributedstring/TextAttributes.cpp | 15 ++++ .../attributedstring/TextAttributes.h | 8 ++ .../renderer/attributedstring/conversions.h | 16 ++++ .../components/text/BaseTextProps.cpp | 22 +++++ 17 files changed, 474 insertions(+), 19 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/StrokeStyleSpan.kt diff --git a/packages/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js b/packages/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js index 4b1763143fc..ad5fe5ccb65 100644 --- a/packages/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js +++ b/packages/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js @@ -206,6 +206,8 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = { textShadowColor: colorAttributes, textShadowOffset: true, textShadowRadius: true, + textStrokeColor: colorAttributes, + textStrokeWidth: true, textTransform: true, userSelect: true, verticalAlign: true, diff --git a/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm b/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm index 6e88d6f9227..67c4d674396 100644 --- a/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm +++ b/packages/react-native/Libraries/Text/BaseText/RCTBaseTextViewManager.mm @@ -29,6 +29,7 @@ - (RCTShadowView *)shadowView RCT_REMAP_SHADOW_PROPERTY(color, textAttributes.foregroundColor, UIColor) RCT_REMAP_SHADOW_PROPERTY(backgroundColor, textAttributes.backgroundColor, UIColor) RCT_REMAP_SHADOW_PROPERTY(gradientColors, textAttributes.gradientColors, NSArray) +RCT_REMAP_SHADOW_PROPERTY(gradientAngle, textAttributes.gradientAngle, CGFloat) RCT_REMAP_SHADOW_PROPERTY(opacity, textAttributes.opacity, CGFloat) // Font RCT_REMAP_SHADOW_PROPERTY(fontFamily, textAttributes.fontFamily, NSString) @@ -54,6 +55,9 @@ - (RCTShadowView *)shadowView RCT_REMAP_SHADOW_PROPERTY(textShadowOffset, textAttributes.textShadowOffset, CGSize) RCT_REMAP_SHADOW_PROPERTY(textShadowRadius, textAttributes.textShadowRadius, CGFloat) RCT_REMAP_SHADOW_PROPERTY(textShadowColor, textAttributes.textShadowColor, UIColor) +// Stroke +RCT_REMAP_SHADOW_PROPERTY(textStrokeWidth, textAttributes.textStrokeWidth, CGFloat) +RCT_REMAP_SHADOW_PROPERTY(textStrokeColor, textAttributes.textStrokeColor, UIColor) // Special RCT_REMAP_SHADOW_PROPERTY(isHighlighted, textAttributes.isHighlighted, BOOL) RCT_REMAP_SHADOW_PROPERTY(textTransform, textAttributes.textTransform, RCTTextTransform) diff --git a/packages/react-native/Libraries/Text/RCTTextAttributes.h b/packages/react-native/Libraries/Text/RCTTextAttributes.h index ad48554f36f..b087336ebd9 100644 --- a/packages/react-native/Libraries/Text/RCTTextAttributes.h +++ b/packages/react-native/Libraries/Text/RCTTextAttributes.h @@ -27,6 +27,7 @@ extern NSString *const RCTTextAttributesTagAttributeName; @property (nonatomic, strong, nullable) UIColor *foregroundColor; @property (nonatomic, strong, nullable) UIColor *backgroundColor; @property (nonatomic, copy, nullable) NSArray *gradientColors; +@property (nonatomic, assign) CGFloat gradientAngle; @property (nonatomic, assign) CGFloat opacity; // Font @property (nonatomic, copy, nullable) NSString *fontFamily; @@ -53,6 +54,9 @@ extern NSString *const RCTTextAttributesTagAttributeName; @property (nonatomic, assign) CGSize textShadowOffset; @property (nonatomic, assign) CGFloat textShadowRadius; @property (nonatomic, strong, nullable) UIColor *textShadowColor; +// Stroke +@property (nonatomic, assign) CGFloat textStrokeWidth; +@property (nonatomic, strong, nullable) UIColor *textStrokeColor; // Special @property (nonatomic, assign) BOOL isHighlighted; @property (nonatomic, strong, nullable) NSNumber *tag; diff --git a/packages/react-native/Libraries/Text/RCTTextAttributes.mm b/packages/react-native/Libraries/Text/RCTTextAttributes.mm index acd15793943..5494e15c374 100644 --- a/packages/react-native/Libraries/Text/RCTTextAttributes.mm +++ b/packages/react-native/Libraries/Text/RCTTextAttributes.mm @@ -32,6 +32,8 @@ - (instancetype)init _textShadowRadius = NAN; _opacity = NAN; _textTransform = RCTTextTransformUndefined; + _textStrokeWidth = NAN; + _gradientAngle = NAN; } return self; @@ -47,6 +49,7 @@ - (void)applyTextAttributes:(RCTTextAttributes *)textAttributes _foregroundColor = textAttributes->_foregroundColor ?: _foregroundColor; _backgroundColor = textAttributes->_backgroundColor ?: _backgroundColor; _gradientColors = textAttributes->_gradientColors ?: _gradientColors; + _gradientAngle = !isnan(textAttributes->_gradientAngle) ? textAttributes->_gradientAngle : _gradientAngle; _opacity = !isnan(textAttributes->_opacity) ? (isnan(_opacity) ? 1.0 : _opacity) * textAttributes->_opacity : _opacity; @@ -90,6 +93,10 @@ - (void)applyTextAttributes:(RCTTextAttributes *)textAttributes _textShadowRadius = !isnan(textAttributes->_textShadowRadius) ? textAttributes->_textShadowRadius : _textShadowRadius; _textShadowColor = textAttributes->_textShadowColor ?: _textShadowColor; + // Stroke + _textStrokeWidth = !isnan(textAttributes->_textStrokeWidth) ? textAttributes->_textStrokeWidth : _textStrokeWidth; + _textStrokeColor = textAttributes->_textStrokeColor ?: _textStrokeColor; + // Special _isHighlighted = textAttributes->_isHighlighted || _isHighlighted; // * _tag = textAttributes->_tag ?: _tag; @@ -210,6 +217,15 @@ - (NSParagraphStyle *)effectiveParagraphStyle attributes[NSShadowAttributeName] = shadow; } + // We don't use NSStrokeWidthAttributeName because it centers the stroke on the text path + // Instead, we do custom two-pass rendering to get true outer stroke + if (!isnan(_textStrokeWidth) && _textStrokeWidth > 0) { + UIColor *strokeColorToUse = _textStrokeColor ?: effectiveForegroundColor; + attributes[@"RCTTextStrokeWidth"] = @(_textStrokeWidth); + attributes[@"RCTTextStrokeColor"] = strokeColorToUse; + } + + // Special if (_isHighlighted) { attributes[RCTTextAttributesIsHighlightedAttributeName] = @YES; @@ -303,7 +319,7 @@ - (UIColor *)effectiveForegroundColor [cgColors addObject:(id)color.CGColor]; } } - + if([cgColors count] > 0) { [cgColors addObject:cgColors[0]]; CAGradientLayer *gradient = [CAGradientLayer layer]; @@ -312,8 +328,17 @@ - (UIColor *)effectiveForegroundColor CGFloat height = _lineHeight * self.effectiveFontSizeMultiplier; gradient.frame = CGRectMake(0, 0, patternWidth, height); gradient.colors = cgColors; - gradient.startPoint = CGPointMake(0.0, 0.5); - gradient.endPoint = CGPointMake(1.0, 0.5); + + CGFloat angle = !isnan(_gradientAngle) ? _gradientAngle : 0.0; + CGFloat radians = angle * M_PI / 180.0; + + CGFloat startX = 0.5 - 0.5 * cos(radians); + CGFloat startY = 0.5 - 0.5 * sin(radians); + CGFloat endX = 0.5 + 0.5 * cos(radians); + CGFloat endY = 0.5 + 0.5 * sin(radians); + + gradient.startPoint = CGPointMake(startX, startY); + gradient.endPoint = CGPointMake(endX, endY); UIGraphicsBeginImageContextWithOptions(gradient.frame.size, NO, 0.0); [gradient renderInContext:UIGraphicsGetCurrentContext()]; @@ -397,6 +422,7 @@ - (BOOL)isEqual:(RCTTextAttributes *)textAttributes #define RCTTextAttributesCompareOthers(a) (a == textAttributes->a) return RCTTextAttributesCompareObjects(_foregroundColor) && RCTTextAttributesCompareObjects(_backgroundColor) && + RCTTextAttributesCompareObjects(_gradientColors) && RCTTextAttributesCompareFloats(_gradientAngle) && RCTTextAttributesCompareFloats(_opacity) && // Font RCTTextAttributesCompareObjects(_fontFamily) && RCTTextAttributesCompareFloats(_fontSize) && @@ -414,6 +440,8 @@ - (BOOL)isEqual:(RCTTextAttributes *)textAttributes // Shadow RCTTextAttributesCompareSize(_textShadowOffset) && RCTTextAttributesCompareFloats(_textShadowRadius) && RCTTextAttributesCompareObjects(_textShadowColor) && + // Stroke + RCTTextAttributesCompareFloats(_textStrokeWidth) && RCTTextAttributesCompareObjects(_textStrokeColor) && // Special RCTTextAttributesCompareOthers(_isHighlighted) && RCTTextAttributesCompareObjects(_tag) && RCTTextAttributesCompareOthers(_layoutDirection) && RCTTextAttributesCompareOthers(_textTransform); diff --git a/packages/react-native/Libraries/Text/Text.d.ts b/packages/react-native/Libraries/Text/Text.d.ts index c979aa8728f..06d0eef5e40 100644 --- a/packages/react-native/Libraries/Text/Text.d.ts +++ b/packages/react-native/Libraries/Text/Text.d.ts @@ -223,6 +223,21 @@ export interface TextProps * Adds a horizontal gradient using the int based color values. */ gradientColors?: number[] | undefined; + + /** + * Gradient angle in degrees. Default is 0 (horizontal). + */ + gradientAngle?: number | undefined; + + /** + * Width of the text stroke (outline). Creates an outer stroke effect. + */ + textStrokeWidth?: number | undefined; + + /** + * Color of the text stroke (outline). + */ + textStrokeColor?: ColorValue | undefined; } /** diff --git a/packages/react-native/Libraries/Text/Text/RCTTextShadowView.mm b/packages/react-native/Libraries/Text/Text/RCTTextShadowView.mm index 6c815d267ee..0b34a8629bd 100644 --- a/packages/react-native/Libraries/Text/Text/RCTTextShadowView.mm +++ b/packages/react-native/Libraries/Text/Text/RCTTextShadowView.mm @@ -405,13 +405,28 @@ - (CGFloat)lastBaselineForSize:(CGSize)size [attributedText enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attributedText.length) options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired - usingBlock:^(UIFont *font, NSRange range, __unused BOOL *stop) { - if (maximumDescender > font.descender) { - maximumDescender = font.descender; - } - }]; + usingBlock:^(UIFont *font, NSRange range, __unused BOOL *stop) { + if (maximumDescender > font.descender) { + maximumDescender = font.descender; + } + }]; + + // Account for stroke width in baseline calculation + __block CGFloat strokeWidth = 0; + [attributedText enumerateAttribute:@"RCTTextStrokeWidth" + inRange:NSMakeRange(0, attributedText.length) + options:0 + usingBlock:^(id value, NSRange range, BOOL *stop) { + if (value && [value isKindOfClass:[NSNumber class]]) { + CGFloat width = [value floatValue]; + if (width > 0) { + strokeWidth = MAX(strokeWidth, width); + *stop = YES; + } + } + }]; - return size.height + maximumDescender; + return size.height + maximumDescender + strokeWidth; } static YGSize RCTTextShadowViewMeasure( @@ -441,6 +456,27 @@ static YGSize RCTTextShadowViewMeasure( size.width -= letterSpacing; } + // Account for text stroke width (similar to Android implementation) + // Check if text has custom stroke attribute and add extra space + __block CGFloat strokeWidth = 0; + [textStorage enumerateAttribute:@"RCTTextStrokeWidth" + inRange:NSMakeRange(0, textStorage.length) + options:0 + usingBlock:^(id value, NSRange range, BOOL *stop) { + if (value && [value isKindOfClass:[NSNumber class]]) { + CGFloat width = [value floatValue]; + if (width > 0) { + strokeWidth = MAX(strokeWidth, width); + *stop = YES; + } + } + }]; + + if (strokeWidth > 0) { + size.width += strokeWidth; + size.height += strokeWidth; + } + size = (CGSize){ MIN(RCTCeilPixelValue(size.width), maximumSize.width), MIN(RCTCeilPixelValue(size.height), maximumSize.height)}; diff --git a/packages/react-native/Libraries/Text/Text/RCTTextView.mm b/packages/react-native/Libraries/Text/Text/RCTTextView.mm index 47632aa885c..0d92ec3dee0 100644 --- a/packages/react-native/Libraries/Text/Text/RCTTextView.mm +++ b/packages/react-native/Libraries/Text/Text/RCTTextView.mm @@ -7,6 +7,7 @@ #import +#import #import #import @@ -119,10 +120,88 @@ - (void)drawRect:(CGRect)rect NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer]; [layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:_contentFrame.origin]; - [layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:_contentFrame.origin]; - __block UIBezierPath *highlightPath = nil; + // Check if text has custom stroke attribute NSRange characterRange = [layoutManager characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL]; + __block BOOL hasStroke = NO; + __block CGFloat strokeWidth = 0; + __block UIColor *strokeColor = nil; + + [_textStorage enumerateAttribute:@"RCTTextStrokeWidth" + inRange:characterRange + options:0 + usingBlock:^(id value, NSRange range, BOOL *stop) { + if (value && [value isKindOfClass:[NSNumber class]]) { + CGFloat width = [value floatValue]; + if (width > 0) { + hasStroke = YES; + strokeWidth = width; + strokeColor = [_textStorage attribute:@"RCTTextStrokeColor" atIndex:range.location effectiveRange:NULL]; + + if (strokeColor) { + CGFloat r, g, b, a; + [strokeColor getRed:&r green:&g blue:&b alpha:&a]; + } + *stop = YES; + } + } + }]; + + if (hasStroke && strokeColor) { + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetLineWidth(context, strokeWidth); + CGContextSetLineJoin(context, kCGLineJoinRound); + CGContextSetLineCap(context, kCGLineCapRound); + + CGFloat strokeInset = strokeWidth / 2; + + // PASS 1: Draw stroke outline + CGContextSaveGState(context); + CGContextSetTextDrawingMode(context, kCGTextStroke); + + NSMutableAttributedString *strokeText = [_textStorage mutableCopy]; + [strokeText addAttribute:NSForegroundColorAttributeName + value:strokeColor + range:characterRange]; + + CGContextSetTextMatrix(context, CGAffineTransformIdentity); + CGContextTranslateCTM(context, _contentFrame.origin.x + strokeInset, self.bounds.size.height - _contentFrame.origin.y + strokeInset); + CGContextScaleCTM(context, 1.0, -1.0); + + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)strokeText); + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddRect(path, NULL, CGRectMake(0, 0, _contentFrame.size.width, _contentFrame.size.height)); + CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL); + CTFrameDraw(frame, context); + CFRelease(frame); + CFRelease(path); + CFRelease(framesetter); + CGContextRestoreGState(context); + + // PASS 2: Draw fill on top + CGContextSaveGState(context); + CGContextSetTextDrawingMode(context, kCGTextFill); + + CGContextSetTextMatrix(context, CGAffineTransformIdentity); + CGContextTranslateCTM(context, _contentFrame.origin.x + strokeInset, self.bounds.size.height - _contentFrame.origin.y + strokeInset); + CGContextScaleCTM(context, 1.0, -1.0); + + framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)_textStorage); + path = CGPathCreateMutable(); + CGPathAddRect(path, NULL, CGRectMake(0, 0, _contentFrame.size.width, _contentFrame.size.height)); + frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL); + CTFrameDraw(frame, context); + CFRelease(frame); + CFRelease(path); + CFRelease(framesetter); + CGContextRestoreGState(context); + + } else { + [layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:_contentFrame.origin]; + } + + __block UIBezierPath *highlightPath = nil; [_textStorage enumerateAttribute:RCTTextAttributesIsHighlightedAttributeName inRange:characterRange diff --git a/packages/react-native/Libraries/Text/TextNativeComponent.js b/packages/react-native/Libraries/Text/TextNativeComponent.js index 2cab7c40a26..57f12efd7d7 100644 --- a/packages/react-native/Libraries/Text/TextNativeComponent.js +++ b/packages/react-native/Libraries/Text/TextNativeComponent.js @@ -48,6 +48,9 @@ const textViewConfig = { android_hyphenationFrequency: true, lineBreakStrategyIOS: true, gradientColors: true, + gradientAngle: true, + textStrokeWidth: true, + textStrokeColor: true, }, directEventTypes: { topTextLayout: { @@ -63,6 +66,9 @@ const virtualTextViewConfig = { isPressable: true, maxFontSizeMultiplier: true, gradientColors: true, + gradientAngle: true, + textStrokeWidth: true, + textStrokeColor: true, }, uiViewClassName: 'RCTVirtualText', }; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java index 19fb9374527..bf75eb4ecbd 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java @@ -49,6 +49,7 @@ import com.facebook.react.views.text.internal.span.ReactUnderlineSpan; import com.facebook.react.views.text.internal.span.SetSpanOperation; import com.facebook.react.views.text.internal.span.ShadowStyleSpan; +import com.facebook.react.views.text.internal.span.StrokeStyleSpan; import com.facebook.react.views.text.internal.span.TextInlineImageSpan; import com.facebook.react.views.text.internal.span.TextInlineViewPlaceholderSpan; import com.facebook.yoga.YogaDirection; @@ -175,7 +176,8 @@ private static void buildSpannedFromShadowNode( } if (textShadowNode.mGradientColors != null && textShadowNode.mGradientColors.length >= 2) { int effectiveFontSize = textAttributes.getEffectiveFontSize(); - ops.add(new SetSpanOperation(start, end, new LinearGradientSpan(start * effectiveFontSize, textShadowNode.mGradientColors))); + float gradientAngle = Float.isNaN(textShadowNode.mGradientAngle) ? 0f : textShadowNode.mGradientAngle; + ops.add(new SetSpanOperation(start, end, new LinearGradientSpan(start * effectiveFontSize, textShadowNode.mGradientColors, gradientAngle))); } if (textShadowNode.mIsBackgroundColorSet) { ops.add( @@ -238,6 +240,17 @@ private static void buildSpannedFromShadowNode( textShadowNode.mTextShadowRadius, textShadowNode.mTextShadowColor))); } + if (!Float.isNaN(textShadowNode.mTextStrokeWidth) + && textShadowNode.mTextStrokeWidth > 0 + && textShadowNode.mIsTextStrokeColorSet) { + ops.add( + new SetSpanOperation( + start, + end, + new StrokeStyleSpan( + textShadowNode.mTextStrokeWidth, + textShadowNode.mTextStrokeColor))); + } float effectiveLineHeight = textAttributes.getEffectiveLineHeight(); if (!Float.isNaN(effectiveLineHeight) && (parentTextAttributes == null @@ -337,6 +350,7 @@ protected Spannable spannedFromShadowNode( protected int mBackgroundColor; protected @Nullable int[] mGradientColors = null; + protected float mGradientAngle = Float.NaN; protected @Nullable AccessibilityRole mAccessibilityRole = null; protected @Nullable Role mRole = null; @@ -353,6 +367,10 @@ protected Spannable spannedFromShadowNode( protected float mTextShadowRadius = 0; protected int mTextShadowColor = DEFAULT_TEXT_SHADOW_COLOR; + protected float mTextStrokeWidth = Float.NaN; + protected boolean mIsTextStrokeColorSet = false; + protected int mTextStrokeColor; + protected boolean mIsUnderlineTextDecorationSet = false; protected boolean mIsLineThroughTextDecorationSet = false; protected boolean mIncludeFontPadding = true; @@ -523,6 +541,12 @@ public void setGradientColors(@Nullable ReadableArray gradientColors) { } } + @ReactProp(name = "gradientAngle", defaultFloat = Float.NaN) + public void setGradientAngle(float gradientAngle) { + mGradientAngle = gradientAngle; + markUpdated(); + } + @ReactProp(name = ViewProps.BACKGROUND_COLOR, customType = "Color") public void setBackgroundColor(@Nullable Integer color) { // Background color needs to be handled here for virtual nodes so it can be incorporated into @@ -662,6 +686,23 @@ public void setTextShadowColor(int textShadowColor) { } } + @ReactProp(name = "textStrokeWidth", defaultFloat = Float.NaN) + public void setTextStrokeWidth(float textStrokeWidth) { + if (textStrokeWidth != mTextStrokeWidth) { + mTextStrokeWidth = textStrokeWidth; + markUpdated(); + } + } + + @ReactProp(name = "textStrokeColor", customType = "Color") + public void setTextStrokeColor(int textStrokeColor) { + if (textStrokeColor != mTextStrokeColor) { + mTextStrokeColor = textStrokeColor; + mIsTextStrokeColorSet = true; + markUpdated(); + } + } + @ReactProp(name = PROP_TEXT_TRANSFORM) public void setTextTransform(@Nullable String textTransform) { TextTransform textTransformEnum = TextTransform.UNSET; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java index bacc96b5d0b..fee5ecaff10 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java @@ -66,6 +66,9 @@ public class TextAttributeProps { public static final short TA_KEY_TEXT_TRANSFORM = 27; public static final short TA_KEY_MAX_FONT_SIZE_MULTIPLIER = 29; public static final short TA_KEY_GRADIENT_COLORS = 30; + public static final short TA_KEY_TEXT_STROKE_WIDTH = 31; + public static final short TA_KEY_TEXT_STROKE_COLOR = 32; + public static final short TA_KEY_GRADIENT_ANGLE = 33; public static final int UNSET = -1; @@ -109,6 +112,10 @@ public class TextAttributeProps { protected float mTextShadowRadius = 0; protected int mTextShadowColor = DEFAULT_TEXT_SHADOW_COLOR; + protected float mTextStrokeWidth = Float.NaN; + protected boolean mIsTextStrokeColorSet = false; + protected int mTextStrokeColor; + protected boolean mIsUnderlineTextDecorationSet = false; protected boolean mIsLineThroughTextDecorationSet = false; protected boolean mIncludeFontPadding = true; @@ -149,8 +156,9 @@ public class TextAttributeProps { protected boolean mContainsImages = false; protected float mHeightOfTallestInlineImage = Float.NaN; - + protected @Nullable int[] mGradientColors = null; + protected float mGradientAngle = Float.NaN; private TextAttributeProps() {} @@ -221,6 +229,12 @@ public static TextAttributeProps fromMapBuffer(MapBuffer props) { case TA_KEY_TEXT_SHADOW_OFFSET_DY: result.setTextShadowOffsetDy((float) entry.getDoubleValue()); break; + case TA_KEY_TEXT_STROKE_WIDTH: + result.setTextStrokeWidth((float) entry.getDoubleValue()); + break; + case TA_KEY_TEXT_STROKE_COLOR: + result.setTextStrokeColor(entry.getIntValue()); + break; case TA_KEY_IS_HIGHLIGHTED: break; case TA_KEY_LAYOUT_DIRECTION: @@ -238,6 +252,9 @@ public static TextAttributeProps fromMapBuffer(MapBuffer props) { case TA_KEY_GRADIENT_COLORS: result.setGradientColors(entry.getMapBufferValue()); break; + case TA_KEY_GRADIENT_ANGLE: + result.setGradientAngle((float) entry.getDoubleValue()); + break; case TA_KEY_MAX_FONT_SIZE_MULTIPLIER: result.setMaxFontSizeMultiplier((float) entry.getDoubleValue()); break; @@ -285,6 +302,11 @@ public static TextAttributeProps fromReadableMap(ReactStylesDiffMap props) { result.setAccessibilityRole(getStringProp(props, ViewProps.ACCESSIBILITY_ROLE)); result.setRole(getStringProp(props, ViewProps.ROLE)); result.setGradientColors(getArrayProp(props, "gradientColors")); + result.setGradientAngle(getFloatProp(props, "gradientAngle", Float.NaN)); + result.setTextStrokeWidth(getFloatProp(props, "textStrokeWidth", Float.NaN)); + if (props.hasKey("textStrokeColor")) { + result.setTextStrokeColor(props.getInt("textStrokeColor", 0)); + } return result; } @@ -794,6 +816,14 @@ private void setGradientColorsFromList(ArrayList colors) { return mGradientColors; } + public float getGradientAngle() { + return mGradientAngle; + } + + private void setGradientAngle(float gradientAngle) { + mGradientAngle = gradientAngle; + } + public static int getTextBreakStrategy(@Nullable String textBreakStrategy) { int androidTextBreakStrategy = DEFAULT_BREAK_STRATEGY; if (textBreakStrategy != null) { @@ -849,4 +879,27 @@ public static int getHyphenationFrequency(@Nullable String hyphenationFrequency) } return truncateAt; } + + public float getTextStrokeWidth() { + return mTextStrokeWidth; + } + + private void setTextStrokeWidth(float textStrokeWidth) { + mTextStrokeWidth = textStrokeWidth; + } + + public int getTextStrokeColor() { + return mTextStrokeColor; + } + + public boolean isTextStrokeColorSet() { + return mIsTextStrokeColorSet; + } + + private void setTextStrokeColor(int textStrokeColor) { + if (textStrokeColor != mTextStrokeColor) { + mTextStrokeColor = textStrokeColor; + mIsTextStrokeColorSet = true; + } + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt index 1855a613fa4..d2df5400b9a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt @@ -50,6 +50,7 @@ import com.facebook.react.views.text.internal.span.ReactTextPaintHolderSpan import com.facebook.react.views.text.internal.span.ReactUnderlineSpan import com.facebook.react.views.text.internal.span.SetSpanOperation import com.facebook.react.views.text.internal.span.ShadowStyleSpan +import com.facebook.react.views.text.internal.span.StrokeStyleSpan import com.facebook.react.views.text.internal.span.TextInlineViewPlaceholderSpan import com.facebook.yoga.YogaMeasureMode import com.facebook.yoga.YogaMeasureOutput @@ -257,11 +258,12 @@ internal object TextLayoutManager { } if (textAttributes.gradientColors != null && textAttributes.gradientColors!!.size >= 2) { val effectiveFontSize = textAttributes.effectiveFontSize + val gradientAngle = if (textAttributes.gradientAngle.isNaN()) 0f else textAttributes.gradientAngle ops.add( SetSpanOperation( start, end, - LinearGradientSpan(start * effectiveFontSize.toFloat(), textAttributes.gradientColors!!))) + LinearGradientSpan(start * effectiveFontSize.toFloat(), textAttributes.gradientColors!!, gradientAngle))) } if (textAttributes.mIsBackgroundColorSet) { ops.add( @@ -310,6 +312,17 @@ internal object TextLayoutManager { textAttributes.mTextShadowRadius, textAttributes.mTextShadowColor))) } + if (!textAttributes.textStrokeWidth.isNaN() && + textAttributes.textStrokeWidth > 0 && + textAttributes.isTextStrokeColorSet) { + val strokeWidth = textAttributes.textStrokeWidth + val strokeColor = textAttributes.textStrokeColor + ops.add( + SetSpanOperation( + start, + end, + StrokeStyleSpan(strokeWidth, strokeColor))) + } if (!textAttributes.effectiveLineHeight.isNaN()) { ops.add( SetSpanOperation( @@ -404,8 +417,9 @@ internal object TextLayoutManager { if (fragment.props.gradientColors != null && fragment.props.gradientColors!!.size >= 2) { val effectiveFontSize = fragment.props.effectiveFontSize + val gradientAngle = if (fragment.props.gradientAngle.isNaN()) 0f else fragment.props.gradientAngle spannable.setSpan( - LinearGradientSpan(start * effectiveFontSize.toFloat(), fragment.props.gradientColors!!), + LinearGradientSpan(start * effectiveFontSize.toFloat(), fragment.props.gradientColors!!, gradientAngle), start, end, spanFlags) @@ -466,6 +480,17 @@ internal object TextLayoutManager { spanFlags) } + if (!fragment.props.textStrokeWidth.isNaN() && + fragment.props.textStrokeWidth > 0 && + fragment.props.isTextStrokeColorSet) { + System.out.println("[TextLayoutManager] NEW ARCH - Adding StrokeStyleSpan: width=${fragment.props.textStrokeWidth}, color=${Integer.toHexString(fragment.props.textStrokeColor)}, start=$start, end=$end") + spannable.setSpan( + StrokeStyleSpan(fragment.props.textStrokeWidth, fragment.props.textStrokeColor), + start, + end, + spanFlags) + } + if (!fragment.props.effectiveLineHeight.isNaN()) { spannable.setSpan( CustomLineHeightSpan(fragment.props.effectiveLineHeight), start, end, spanFlags) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt index 8f4a4753572..dc2477d49d5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt @@ -9,18 +9,33 @@ import android.text.style.UpdateAppearance public class LinearGradientSpan( private val start: Float, private val colors: IntArray, + private val angle: Float = 0f, ) : CharacterStyle(), ReactSpan, UpdateAppearance { public override fun updateDrawState(tp: TextPaint) { // without setting the paint color, the gradient appears "faded" if no foreground color span is also applied // https://stackoverflow.com/a/52289927 tp.setColor(colors[0]) + + val radians = Math.toRadians(angle.toDouble()) + val width = 150.0f + val height = tp.textSize + + val centerX = start + width / 2 + val centerY = height / 2 + val length = Math.sqrt((width * width + height * height).toDouble()).toFloat() / 2 + + val startX = centerX - length * Math.cos(radians).toFloat() + val startY = centerY - length * Math.sin(radians).toFloat() + val endX = centerX + length * Math.cos(radians).toFloat() + val endY = centerY + length * Math.sin(radians).toFloat() + val textShader: Shader = LinearGradient( - start, - 0f, - start + 150.0f, - 0f, + startX, + startY, + endX, + endY, colors, null, Shader.TileMode.MIRROR, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/StrokeStyleSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/StrokeStyleSpan.kt new file mode 100644 index 00000000000..574038a1728 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/StrokeStyleSpan.kt @@ -0,0 +1,86 @@ +package com.facebook.react.views.text.internal.span + +import android.graphics.Canvas +import android.graphics.Paint +import android.text.style.ReplacementSpan + +/** + * A span that applies text stroke styling with two-pass rendering. + * First draws stroke, then draws fill on top to create outer stroke effect. + */ +public class StrokeStyleSpan( + private val strokeWidth: Float, + private val strokeColor: Int +) : ReplacementSpan(), ReactSpan { + + public override fun getSize( + paint: Paint, + text: CharSequence?, + start: Int, + end: Int, + fm: Paint.FontMetricsInt? + ): Int { + val width = paint.measureText(text, start, end) + + if (fm != null) { + paint.getFontMetricsInt(fm) + val halfStroke = (strokeWidth / 2).toInt() + fm.top -= halfStroke + fm.ascent -= halfStroke + fm.descent += halfStroke + fm.bottom += halfStroke + } + + return width.toInt() + } + + public override fun draw( + canvas: Canvas, + text: CharSequence?, + start: Int, + end: Int, + x: Float, + top: Int, + y: Int, + bottom: Int, + paint: Paint + ) { + if (text == null) return + + val textToDraw = text.subSequence(start, end).toString() + val strokeInset = strokeWidth / 2 + + // Store original paint settings + val originalStyle = paint.style + val originalColor = paint.color + val originalStrokeWidth = paint.strokeWidth + val originalStrokeJoin = paint.strokeJoin + val originalStrokeCap = paint.strokeCap + + // First pass: Draw stroke only (solid color) + paint.style = Paint.Style.STROKE + paint.strokeWidth = strokeWidth + paint.strokeJoin = Paint.Join.ROUND + paint.strokeCap = Paint.Cap.ROUND + paint.color = strokeColor + canvas.drawText(textToDraw, x + strokeInset, y.toFloat(), paint) + + // Second pass: Draw fill on top + paint.style = Paint.Style.FILL + paint.color = originalColor + if (text is android.text.Spanned && paint is android.text.TextPaint) { + val spans = text.getSpans(start, end, android.text.style.CharacterStyle::class.java) + for (span in spans) { + span.updateDrawState(paint) + } + } + canvas.drawText(textToDraw, x + strokeInset, y.toFloat(), paint) + + // Restore original paint settings + paint.style = originalStyle + paint.color = originalColor + paint.strokeWidth = originalStrokeWidth + paint.strokeJoin = originalStrokeJoin + paint.strokeCap = originalStrokeCap + } +} diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp index 47d5a25a1fd..b2b39a4275e 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp @@ -30,6 +30,9 @@ void TextAttributes::apply(TextAttributes textAttributes) { gradientColors = textAttributes.gradientColors.has_value() ? textAttributes.gradientColors : gradientColors; + gradientAngle = !std::isnan(textAttributes.gradientAngle) + ? textAttributes.gradientAngle + : gradientAngle; // Font fontFamily = !textAttributes.fontFamily.empty() ? textAttributes.fontFamily @@ -100,6 +103,14 @@ void TextAttributes::apply(TextAttributes textAttributes) { ? textAttributes.textShadowColor : textShadowColor; + // Stroke + textStrokeWidth = !std::isnan(textAttributes.textStrokeWidth) + ? textAttributes.textStrokeWidth + : textStrokeWidth; + textStrokeColor = textAttributes.textStrokeColor + ? textAttributes.textStrokeColor + : textStrokeColor; + // Special isHighlighted = textAttributes.isHighlighted.has_value() ? textAttributes.isHighlighted @@ -139,6 +150,7 @@ bool TextAttributes::operator==(const TextAttributes& rhs) const { textDecorationStyle, textShadowOffset, textShadowColor, + textStrokeColor, isHighlighted, isPressable, layoutDirection, @@ -162,6 +174,7 @@ bool TextAttributes::operator==(const TextAttributes& rhs) const { rhs.textDecorationStyle, rhs.textShadowOffset, rhs.textShadowColor, + rhs.textStrokeColor, rhs.isHighlighted, rhs.isPressable, rhs.layoutDirection, @@ -175,6 +188,8 @@ bool TextAttributes::operator==(const TextAttributes& rhs) const { floatEquality(letterSpacing, rhs.letterSpacing) && floatEquality(lineHeight, rhs.lineHeight) && floatEquality(textShadowRadius, rhs.textShadowRadius) && + floatEquality(textStrokeWidth, rhs.textStrokeWidth) && + floatEquality(gradientAngle, rhs.gradientAngle) && gradientColors == rhs.gradientColors; } diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h index 1dad21f636a..18be16ee734 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.h @@ -43,6 +43,7 @@ class TextAttributes : public DebugStringConvertible { SharedColor backgroundColor{}; Float opacity{std::numeric_limits::quiet_NaN()}; std::optional> gradientColors{}; + Float gradientAngle{std::numeric_limits::quiet_NaN()}; // Font std::string fontFamily{""}; @@ -75,6 +76,10 @@ class TextAttributes : public DebugStringConvertible { Float textShadowRadius{std::numeric_limits::quiet_NaN()}; SharedColor textShadowColor{}; + // Stroke + Float textStrokeWidth{std::numeric_limits::quiet_NaN()}; + SharedColor textStrokeColor{}; + // Special std::optional isHighlighted{}; std::optional isPressable{}; @@ -135,6 +140,9 @@ struct hash { textAttributes.textShadowOffset, textAttributes.textShadowRadius, textAttributes.textShadowColor, + textAttributes.textStrokeWidth, + textAttributes.textStrokeColor, + textAttributes.gradientAngle, textAttributes.isHighlighted, textAttributes.isPressable, textAttributes.layoutDirection, diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h index de0d4d977d0..87715523dd7 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h @@ -1056,6 +1056,9 @@ constexpr static MapBuffer::Key TA_KEY_TEXT_TRANSFORM = 27; constexpr static MapBuffer::Key TA_KEY_ALIGNMENT_VERTICAL = 28; constexpr static MapBuffer::Key TA_KEY_MAX_FONT_SIZE_MULTIPLIER = 29; constexpr static MapBuffer::Key TA_KEY_GRADIENT_COLORS = 30; +constexpr static MapBuffer::Key TA_KEY_TEXT_STROKE_WIDTH = 31; +constexpr static MapBuffer::Key TA_KEY_TEXT_STROKE_COLOR = 32; +constexpr static MapBuffer::Key TA_KEY_GRADIENT_ANGLE = 33; // constants for ParagraphAttributes serialization constexpr static MapBuffer::Key PA_KEY_MAX_NUMBER_OF_LINES = 0; @@ -1136,6 +1139,9 @@ inline MapBuffer toMapBuffer(const TextAttributes& textAttributes) { } builder.putMapBuffer(TA_KEY_GRADIENT_COLORS, gradientColorsBuilder.build()); } + if (!std::isnan(textAttributes.gradientAngle)) { + builder.putDouble(TA_KEY_GRADIENT_ANGLE, textAttributes.gradientAngle); + } if (!std::isnan(textAttributes.opacity)) { builder.putDouble(TA_KEY_OPACITY, textAttributes.opacity); } @@ -1224,6 +1230,16 @@ inline MapBuffer toMapBuffer(const TextAttributes& textAttributes) { builder.putDouble( TA_KEY_TEXT_SHADOW_OFFSET_DY, textAttributes.textShadowOffset->height); } + // Stroke + if (!std::isnan(textAttributes.textStrokeWidth)) { + builder.putDouble( + TA_KEY_TEXT_STROKE_WIDTH, textAttributes.textStrokeWidth); + } + if (textAttributes.textStrokeColor) { + builder.putInt( + TA_KEY_TEXT_STROKE_COLOR, + toAndroidRepr(textAttributes.textStrokeColor)); + } // Special if (textAttributes.isHighlighted.has_value()) { builder.putBool(TA_KEY_IS_HIGHLIGHTED, *textAttributes.isHighlighted); diff --git a/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp index 4dc23abc428..11e6fb44bf8 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp @@ -36,6 +36,12 @@ static TextAttributes convertRawProp( "gradientColors", sourceTextAttributes.gradientColors, defaultTextAttributes.gradientColors); + textAttributes.gradientAngle = convertRawProp( + context, + rawProps, + "gradientAngle", + sourceTextAttributes.gradientAngle, + defaultTextAttributes.gradientAngle); // Font textAttributes.fontFamily = convertRawProp( @@ -177,6 +183,20 @@ static TextAttributes convertRawProp( sourceTextAttributes.textShadowColor, defaultTextAttributes.textShadowColor); + // Stroke + textAttributes.textStrokeWidth = convertRawProp( + context, + rawProps, + "textStrokeWidth", + sourceTextAttributes.textStrokeWidth, + defaultTextAttributes.textStrokeWidth); + textAttributes.textStrokeColor = convertRawProp( + context, + rawProps, + "textStrokeColor", + sourceTextAttributes.textStrokeColor, + defaultTextAttributes.textStrokeColor); + // Special textAttributes.isHighlighted = convertRawProp( context, @@ -257,6 +277,8 @@ void BaseTextProps::setProp( defaults, value, textAttributes, foregroundColor, "color"); REBUILD_FIELD_SWITCH_CASE( defaults, value, textAttributes, gradientColors, "gradientColors"); + REBUILD_FIELD_SWITCH_CASE( + defaults, value, textAttributes, gradientAngle, "gradientAngle"); REBUILD_FIELD_SWITCH_CASE( defaults, value, textAttributes, fontFamily, "fontFamily"); REBUILD_FIELD_SWITCH_CASE( From eebaa2120ca534c0cfe9fb66522d9246159056bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Mon, 1 Dec 2025 20:23:16 +0100 Subject: [PATCH 209/312] always inclyde glog in MountingCoordinator.cpp --- .../ReactCommon/react/renderer/mounting/MountingCoordinator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp index 37cd5d75f57..3aaa336d7a7 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp @@ -15,8 +15,8 @@ #include #include "updateMountedFlag.h" -#ifdef RN_SHADOW_TREE_INTROSPECTION #include +#ifdef RN_SHADOW_TREE_INTROSPECTION #include #endif From c34d8e4239e9a89dcb44b4cb8f6c71129080981a Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 1 Dec 2025 20:30:11 +0000 Subject: [PATCH 210/312] Updated version to 0.81.4-discord-19 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 7a9b3be57d5..14338e8bed3 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-18 +VERSION_NAME=0.81.4-discord-19 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 4b33ff90ba0635d37abb68bb421fba9b0e7f114e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Mon, 1 Dec 2025 20:23:16 +0100 Subject: [PATCH 211/312] always inclyde glog in MountingCoordinator.cpp From 642d5e3a87fbca17475ef4af85f66078965e99b5 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 1 Dec 2025 21:38:15 +0000 Subject: [PATCH 212/312] Updated version to 0.81.4-discord-20 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 14338e8bed3..6d5be74d30e 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-19 +VERSION_NAME=0.81.4-discord-20 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 10f82a3cc05e60629c507a59c88514b1a9592e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Tue, 2 Dec 2025 17:33:02 +0100 Subject: [PATCH 213/312] add missing include --- .../ReactCommon/react/renderer/mounting/ShadowTree.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 3f6b968d993..316628852d4 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -19,6 +19,7 @@ #include "updateMountedFlag.h" #include "ShadowTreeDelegate.h" +#include // Discord - Wrap with ScopeGuard for a function to run on the end of the scope: #include From bf8c9180b78860e2959dbbddcf2511ea421736a7 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Tue, 2 Dec 2025 17:35:16 +0000 Subject: [PATCH 214/312] Updated version to 0.81.4-discord-21 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 6d5be74d30e..1c33327374f 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-20 +VERSION_NAME=0.81.4-discord-21 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 8f42f813d312fc9ee617bdb80566fde450fda40f Mon Sep 17 00:00:00 2001 From: Can Undeger Date: Tue, 9 Dec 2025 11:28:39 -0500 Subject: [PATCH 215/312] Fix text shadow cutoff on android (#126) * Fix the shadow cut off on android and update gradient Attemp to fix text shadow cutoff Update the text shadow on android to prevent cutoff Expand the shadow on if padding is provided Add the missing import Add some logging Make shadow span use padding Attempt to fix text shadow cutoff on android Another attempt at fixing the text shadow cutoff Another attempt at fixing the text shadow cutoff issue on Android. Add more logging Add more logs Add more and more logs Implement shadow offset compensation in ReactTextView Make sure to keep the text position stable when the shadow is added. Update linear gradient span to match iOS behavior. Address gradient issues Another attempt to fix the text stroke width Revert some of the gradient changes Update shader mode Update the implementation once more Revert to width expansion approach - shadow cutoff confirmed without it Add more logging to the ReactTextView Remove debug logging Remove remaining debug logs from text rendering files Remove unused padding parameters from ShadowStyleSpan - Remove padding constructor parameters that were never used in getSize() or draw() - Remove updatePadding() method that was never called - Remove padding retrieval code from ReactBaseTextShadowNode - Both old and new architectures now consistently use 4-parameter constructor Align new arch (Fabric) shadow handling with old arch (Paper) - Remove shadowTopOffset from PreparedLayoutTextView - Vertical shadow space is already handled via font metrics adjustment - Both architectures now only compensate horizontally - Matches old arch behavior and comment: 'vertical doesn't need compensation' Remove unused getShadowDy() method and min import - getShadowDy() was only used for vertical compensation which we removed - kotlin.math.min import is not used anywhere in the file * Remove no longer needed changes * Remove the unnecessary clipping changes * Decouple discord shadow style span from react native * Use the custom discord shadow style span in the text layout manager * Remove unnecessary import * Fixes the api visibility * Add more public visibility to the discord shadow style span * Remove unused getShadowDy() and getShadowColor() from DiscordShadowStyleSpan These getters are not used anywhere in the codebase. Only getShadowRadius() and getShadowDx() are used by getShadowAdjustment(). * Fix truncation issues with text shadows --- .../views/text/PreparedLayoutTextView.kt | 14 +- .../views/text/ReactBaseTextShadowNode.java | 4 +- .../react/views/text/ReactTextView.java | 11 +- .../react/views/text/TextLayoutManager.kt | 12 +- .../internal/span/DiscordShadowStyleSpan.kt | 158 ++++++++++++++++++ .../text/internal/span/LinearGradientSpan.kt | 9 +- 6 files changed, 194 insertions(+), 14 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DiscordShadowStyleSpan.kt diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt index b3c5aeacad4..c0a9d3e147a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt @@ -27,6 +27,7 @@ import com.facebook.proguard.annotations.DoNotStrip import com.facebook.react.uimanager.BackgroundStyleApplicator import com.facebook.react.uimanager.ReactCompoundView import com.facebook.react.uimanager.style.Overflow +import com.facebook.react.views.text.internal.span.DiscordShadowStyleSpan import com.facebook.react.views.text.internal.span.ReactTagSpan import kotlin.collections.ArrayList import kotlin.math.roundToInt @@ -99,15 +100,22 @@ internal class PreparedLayoutTextView(context: Context) : ViewGroup(context), Re } override fun onDraw(canvas: Canvas) { - if (overflow != Overflow.VISIBLE) { + val layout = preparedLayout?.layout + + // Get shadow adjustment from custom span if configured + val spanned = layout?.text as? Spanned + val shadowAdj = DiscordShadowStyleSpan.getShadowAdjustment(spanned) + + if (overflow != Overflow.VISIBLE && !shadowAdj.hasShadow) { BackgroundStyleApplicator.clipToPaddingBox(this, canvas) } super.onDraw(canvas) + canvas.translate( - paddingLeft.toFloat(), paddingTop.toFloat() + (preparedLayout?.verticalOffset ?: 0f)) + paddingLeft.toFloat() + shadowAdj.leftOffset, + paddingTop.toFloat() + (preparedLayout?.verticalOffset ?: 0f)) - val layout = preparedLayout?.layout if (layout != null) { if (selection != null) { selectionPaint.setColor( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java index bf75eb4ecbd..f97dbed7a34 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java @@ -48,7 +48,7 @@ import com.facebook.react.views.text.internal.span.ReactTagSpan; import com.facebook.react.views.text.internal.span.ReactUnderlineSpan; import com.facebook.react.views.text.internal.span.SetSpanOperation; -import com.facebook.react.views.text.internal.span.ShadowStyleSpan; +import com.facebook.react.views.text.internal.span.DiscordShadowStyleSpan; import com.facebook.react.views.text.internal.span.StrokeStyleSpan; import com.facebook.react.views.text.internal.span.TextInlineImageSpan; import com.facebook.react.views.text.internal.span.TextInlineViewPlaceholderSpan; @@ -234,7 +234,7 @@ private static void buildSpannedFromShadowNode( new SetSpanOperation( start, end, - new ShadowStyleSpan( + new DiscordShadowStyleSpan( textShadowNode.mTextShadowOffsetDx, textShadowNode.mTextShadowOffsetDy, textShadowNode.mTextShadowRadius, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index 906dfbce049..05ab1578659 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -52,6 +52,7 @@ import com.facebook.react.uimanager.style.BorderStyle; import com.facebook.react.uimanager.style.LogicalEdge; import com.facebook.react.uimanager.style.Overflow; +import com.facebook.react.views.text.internal.span.DiscordShadowStyleSpan; import com.facebook.react.views.text.internal.span.ReactTagSpan; import com.facebook.react.views.text.internal.span.TextInlineImageSpan; import com.facebook.react.views.text.internal.span.TextInlineViewPlaceholderSpan; @@ -360,11 +361,19 @@ protected void onDraw(Canvas canvas) { setText(spanned); } - if (mOverflow != Overflow.VISIBLE) { + // Get shadow adjustment from custom span if configured + DiscordShadowStyleSpan.ShadowAdjustment shadowAdj = + DiscordShadowStyleSpan.getShadowAdjustment(spanned); + + canvas.save(); + canvas.translate(shadowAdj.getLeftOffset(), 0); + + if (mOverflow != Overflow.VISIBLE && !shadowAdj.getHasShadow()) { BackgroundStyleApplicator.clipToPaddingBox(this, canvas); } super.onDraw(canvas); + canvas.restore(); } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt index d2df5400b9a..735dd1f8748 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt @@ -47,9 +47,9 @@ import com.facebook.react.views.text.internal.span.ReactOpacitySpan import com.facebook.react.views.text.internal.span.ReactStrikethroughSpan import com.facebook.react.views.text.internal.span.ReactTagSpan import com.facebook.react.views.text.internal.span.ReactTextPaintHolderSpan +import com.facebook.react.views.text.internal.span.DiscordShadowStyleSpan import com.facebook.react.views.text.internal.span.ReactUnderlineSpan import com.facebook.react.views.text.internal.span.SetSpanOperation -import com.facebook.react.views.text.internal.span.ShadowStyleSpan import com.facebook.react.views.text.internal.span.StrokeStyleSpan import com.facebook.react.views.text.internal.span.TextInlineViewPlaceholderSpan import com.facebook.yoga.YogaMeasureMode @@ -306,7 +306,7 @@ internal object TextLayoutManager { SetSpanOperation( start, end, - ShadowStyleSpan( + DiscordShadowStyleSpan( textAttributes.mTextShadowOffsetDx, textAttributes.mTextShadowOffsetDy, textAttributes.mTextShadowRadius, @@ -315,7 +315,7 @@ internal object TextLayoutManager { if (!textAttributes.textStrokeWidth.isNaN() && textAttributes.textStrokeWidth > 0 && textAttributes.isTextStrokeColorSet) { - val strokeWidth = textAttributes.textStrokeWidth + val strokeWidth = PixelUtil.toPixelFromDIP(textAttributes.textStrokeWidth.toDouble()).toFloat() val strokeColor = textAttributes.textStrokeColor ops.add( SetSpanOperation( @@ -470,7 +470,7 @@ internal object TextLayoutManager { fragment.props.textShadowRadius != 0f) && Color.alpha(fragment.props.textShadowColor) != 0) { spannable.setSpan( - ShadowStyleSpan( + DiscordShadowStyleSpan( fragment.props.textShadowOffsetDx, fragment.props.textShadowOffsetDy, fragment.props.textShadowRadius, @@ -483,9 +483,9 @@ internal object TextLayoutManager { if (!fragment.props.textStrokeWidth.isNaN() && fragment.props.textStrokeWidth > 0 && fragment.props.isTextStrokeColorSet) { - System.out.println("[TextLayoutManager] NEW ARCH - Adding StrokeStyleSpan: width=${fragment.props.textStrokeWidth}, color=${Integer.toHexString(fragment.props.textStrokeColor)}, start=$start, end=$end") + val strokeWidth = PixelUtil.toPixelFromDIP(fragment.props.textStrokeWidth.toDouble()).toFloat() spannable.setSpan( - StrokeStyleSpan(fragment.props.textStrokeWidth, fragment.props.textStrokeColor), + StrokeStyleSpan(strokeWidth, fragment.props.textStrokeColor), start, end, spanFlags) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DiscordShadowStyleSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DiscordShadowStyleSpan.kt new file mode 100644 index 00000000000..76afe866758 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DiscordShadowStyleSpan.kt @@ -0,0 +1,158 @@ +/* + * Copyright (c) Discord, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.views.text.internal.span + +import android.graphics.Canvas +import android.graphics.Paint +import android.text.Spanned +import android.text.style.ReplacementSpan +import kotlin.math.max + +/** + * A span that applies text shadow with proper bounds calculation. + * Extends ReplacementSpan to control measurement and drawing, ensuring shadows render correctly. + * This is Discord's custom implementation that contains all shadow logic. + */ +public class DiscordShadowStyleSpan( + private val dx: Float, + private val dy: Float, + private val radius: Float, + private val color: Int +) : ReplacementSpan(), ReactSpan { + + // Getters for shadow properties (used by getShadowAdjustment) + public fun getShadowRadius(): Float = radius + public fun getShadowDx(): Float = dx + + override fun getSize( + paint: Paint, + text: CharSequence?, + start: Int, + end: Int, + fm: Paint.FontMetricsInt? + ): Int { + val width = paint.measureText(text, start, end) + + if (fm != null) { + paint.getFontMetricsInt(fm) + + val shadowTopNeeded = max(0f, radius - dy) + val shadowBottomNeeded = max(0f, radius + dy) + + val topExpansion = shadowTopNeeded.toInt() + val bottomExpansion = shadowBottomNeeded.toInt() + + // Adjust font metrics to account for shadow + fm.top -= topExpansion + fm.ascent -= topExpansion + fm.descent += bottomExpansion + fm.bottom += bottomExpansion + } + + val shadowLeftNeeded = max(0f, radius - dx) + val shadowRightNeeded = max(0f, radius + dx) + + // Subtract 1 pixel to prevent TextView ellipsization while keeping shadow mostly intact + return (width + shadowLeftNeeded + shadowRightNeeded).toInt() - 1 + } + + override fun draw( + canvas: Canvas, + text: CharSequence?, + start: Int, + end: Int, + x: Float, + top: Int, + y: Int, + bottom: Int, + paint: Paint + ) { + if (text == null) return + + val textToDraw = text.subSequence(start, end).toString() + + // Offset text to keep shadow in positive coordinates + val shadowLeftNeeded = max(0f, radius - dx) + + // Store original shadow settings + val originalShadowRadius = paint.shadowLayerRadius + val originalShadowDx = paint.shadowLayerDx + val originalShadowDy = paint.shadowLayerDy + val originalShadowColor = paint.shadowLayerColor + + paint.setShadowLayer(radius, dx, dy, color) + + if (text is Spanned && paint is android.text.TextPaint) { + val spans = text.getSpans(start, end, android.text.style.CharacterStyle::class.java) + for (span in spans) { + if (span !is DiscordShadowStyleSpan) { + span.updateDrawState(paint) + } + } + } + + // Offset text by shadowLeftNeeded to keep shadow in positive coordinates + // The view will compensate with canvas translation + canvas.drawText(textToDraw, x + shadowLeftNeeded, y.toFloat(), paint) + + // Restore original shadow settings + if (originalShadowRadius > 0f) { + paint.setShadowLayer( + originalShadowRadius, originalShadowDx, originalShadowDy, originalShadowColor) + } else { + paint.clearShadowLayer() + } + } + + /** + * Result class for shadow adjustment calculation. + * Contains the horizontal offset needed to compensate for shadow positioning + * and whether a shadow is present. + */ + public data class ShadowAdjustment( + val leftOffset: Float, + val hasShadow: Boolean + ) { + public companion object { + @JvmStatic + public val NONE: ShadowAdjustment = ShadowAdjustment(0f, false) + } + } + + public companion object { + /** + * Helper method for ReactTextView and PreparedLayoutTextView to get shadow adjustment values. + * Calculates the horizontal offset needed to compensate for shadow positioning + * when the span offsets text to keep shadows in positive coordinates. + * + * @param spanned The text to check for shadow spans, or null if no text + * @return ShadowAdjustment with negative leftOffset (ready to use in canvas.translate) + */ + @JvmStatic + public fun getShadowAdjustment(spanned: Spanned?): ShadowAdjustment { + if (spanned == null) { + return ShadowAdjustment.NONE + } + + val spans = spanned.getSpans(0, spanned.length, DiscordShadowStyleSpan::class.java) + if (spans.isEmpty()) { + return ShadowAdjustment.NONE + } + + // Use the first shadow span to calculate offset + val span = spans[0] + val radius = span.getShadowRadius() + val dx = span.getShadowDx() + // Return negative offset so views can use it directly in canvas.translate + val shadowLeftOffset = -max(0f, radius - dx) + + return ShadowAdjustment(shadowLeftOffset, true) + } + } +} + diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt index dc2477d49d5..2a50bb1557e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LinearGradientSpan.kt @@ -18,7 +18,7 @@ public class LinearGradientSpan( tp.setColor(colors[0]) val radians = Math.toRadians(angle.toDouble()) - val width = 150.0f + val width = 100.0f val height = tp.textSize val centerX = start + width / 2 @@ -30,13 +30,18 @@ public class LinearGradientSpan( val endX = centerX + length * Math.cos(radians).toFloat() val endY = centerY + length * Math.sin(radians).toFloat() + // Match iOS: duplicate first color at end (RCTTextAttributes.mm:324) + val adjustedColors = IntArray(colors.size + 1) + System.arraycopy(colors, 0, adjustedColors, 0, colors.size) + adjustedColors[colors.size] = colors[0] + val textShader: Shader = LinearGradient( startX, startY, endX, endY, - colors, + adjustedColors, null, Shader.TileMode.MIRROR, ) From 1c02d8ea34fff80828cff6600b6aec3364a1c96e Mon Sep 17 00:00:00 2001 From: CI Bot Date: Tue, 9 Dec 2025 17:57:59 +0000 Subject: [PATCH 216/312] Updated version to 0.81.4-discord-22 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 1c33327374f..576648a1041 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-21 +VERSION_NAME=0.81.4-discord-22 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 9e56b47c2785cf5936eadb8718a93fe2b8513e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Wed, 10 Dec 2025 15:28:54 +0100 Subject: [PATCH 217/312] scrollview: add option to tag event while drawing (#128) --- .../facebook/react/shell/MainReactPackage.kt | 6 ++-- .../facebook/react/uimanager/events/Event.kt | 3 ++ .../scroll/ReactHorizontalScrollView.java | 4 ++- .../react/views/scroll/ReactScrollView.java | 35 +++++++++++-------- .../views/scroll/ReactScrollViewHelper.kt | 14 +++++--- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt index 2089157dc49..bca6cc178da 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt @@ -139,7 +139,7 @@ constructor(private val config: MainPackageConfig? = null) : ReactHorizontalScrollViewManager(), ReactHorizontalScrollContainerViewManager(), ReactProgressBarViewManager(), - ReactScrollViewManager(), + // ReactScrollViewManager(), ReactSwitchManager(), ReactSafeAreaViewManager(), SwipeRefreshLayoutManager(), @@ -172,8 +172,8 @@ constructor(private val config: MainPackageConfig? = null) : ModuleSpec.viewManagerSpec { ReactProgressBarViewManager() }, ReactSafeAreaViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactSafeAreaViewManager() }, - ReactScrollViewManager.REACT_CLASS to - ModuleSpec.viewManagerSpec { ReactScrollViewManager() }, + // ReactScrollViewManager.REACT_CLASS to + // ModuleSpec.viewManagerSpec { ReactScrollViewManager() }, ReactSwitchManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactSwitchManager() }, SwipeRefreshLayoutManager.REACT_CLASS to ModuleSpec.viewManagerSpec { SwipeRefreshLayoutManager() }, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.kt index d90bcdc98af..20743cd076a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.kt @@ -40,6 +40,9 @@ public abstract class Event> { public var viewTag: Int = 0 private set + /** @return whether this event is dispatched during a drawing pass */ + public var isDrawing: Boolean = false + /** * @return the time at which the event happened in the [android.os.SystemClock.uptimeMillis] base. */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java index 4e50334f4fa..4329255408b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java @@ -542,7 +542,9 @@ protected void onScrollChanged(int x, int y, int oldX, int oldY) { ReactScrollViewHelper.updateStateOnScrollChanged( this, mOnScrollDispatchHelper.getXFlingVelocity(), - mOnScrollDispatchHelper.getYFlingVelocity()); + mOnScrollDispatchHelper.getYFlingVelocity(), + false // TODO: potentially needs same change! + ); } } finally { Systrace.endSection(Systrace.TRACE_TAG_REACT); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java index 7b12e496bd8..25a0ed2c1f0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java @@ -463,24 +463,29 @@ private void scrollToChild(View child) { @Override protected void onScrollChanged(int x, int y, int oldX, int oldY) { - Systrace.beginSection(Systrace.TRACE_TAG_REACT, "ReactScrollView.onScrollChanged"); - try { - super.onScrollChanged(x, y, oldX, oldY); + onScrollChanged(x, y, oldX, oldY, false); + } - mActivelyScrolling = true; + protected void onScrollChanged(int x, int y, int oldX, int oldY, boolean isDrawing) { + Systrace.beginSection(Systrace.TRACE_TAG_REACT, "ReactScrollView.onScrollChanged"); + try { + super.onScrollChanged(x, y, oldX, oldY); - if (mOnScrollDispatchHelper.onScrollChanged(x, y)) { - if (mRemoveClippedSubviews) { - updateClippingRect(); - } - ReactScrollViewHelper.updateStateOnScrollChanged( - this, - mOnScrollDispatchHelper.getXFlingVelocity(), - mOnScrollDispatchHelper.getYFlingVelocity()); + mActivelyScrolling = true; + + if (mOnScrollDispatchHelper.onScrollChanged(x, y)) { + if (mRemoveClippedSubviews) { + updateClippingRect(); + } + ReactScrollViewHelper.updateStateOnScrollChanged( + this, + mOnScrollDispatchHelper.getXFlingVelocity(), + mOnScrollDispatchHelper.getYFlingVelocity(), + isDrawing); + } + } finally { + Systrace.endSection(Systrace.TRACE_TAG_REACT); } - } finally { - Systrace.endSection(Systrace.TRACE_TAG_REACT); - } } @Override diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt index 55e4d53fb94..f2360e0e9c6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt @@ -65,10 +65,10 @@ public object ReactScrollViewHelper { /** Shared by [ReactScrollView] and [ReactHorizontalScrollView]. */ @JvmStatic - public fun emitScrollEvent(scrollView: T, xVelocity: Float, yVelocity: Float) where + public fun emitScrollEvent(scrollView: T, xVelocity: Float, yVelocity: Float, isDrawing: Boolean = false) where T : HasScrollEventThrottle?, T : ViewGroup { - emitScrollEvent(scrollView, ScrollEventType.SCROLL, xVelocity, yVelocity) + emitScrollEvent(scrollView, ScrollEventType.SCROLL, xVelocity, yVelocity, isDrawing) } @JvmStatic @@ -111,6 +111,7 @@ public object ReactScrollViewHelper { scrollEventType: ScrollEventType, xVelocity: Float, yVelocity: Float, + isDrawing: Boolean = false ) where T : HasScrollEventThrottle?, T : ViewGroup { val now = System.currentTimeMillis() // Throttle the scroll event if scrollEventThrottle is set to be equal or more than 17 ms. @@ -146,7 +147,9 @@ public object ReactScrollViewHelper { contentView.width, contentView.height, scrollView.width, - scrollView.height)) + scrollView.height).also { + it.isDrawing = isDrawing + }) if (scrollEventType == ScrollEventType.SCROLL) { scrollView.lastScrollDispatchTime = now } @@ -368,7 +371,8 @@ public object ReactScrollViewHelper { public fun updateStateOnScrollChanged( scrollView: T, xVelocity: Float, - yVelocity: Float + yVelocity: Float, + isDrawing: Boolean = false ) where T : HasFlingAnimator?, T : HasScrollEventThrottle?, @@ -380,7 +384,7 @@ public object ReactScrollViewHelper { // "more correct" scroll position. It will frequently be /incorrect/ but this decreases // the error as much as possible. updateFabricScrollState(scrollView, scrollView.scrollX, scrollView.scrollY) - emitScrollEvent(scrollView, xVelocity, yVelocity) + emitScrollEvent(scrollView, xVelocity, yVelocity, isDrawing) } public fun registerFlingAnimator(scrollView: T) where From 3fc633c02843fcf3c60549aefb3bcc074505a304 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Wed, 10 Dec 2025 16:11:50 +0000 Subject: [PATCH 218/312] Updated version to 0.81.4-discord-23 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 576648a1041..70521f8aa64 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-22 +VERSION_NAME=0.81.4-discord-23 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 602448dfc3374688db3831c8a6e0d8267b3960e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 11 Dec 2025 10:53:54 +0100 Subject: [PATCH 219/312] apply: https://github.com/facebook/react-native/pull/54259 --- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index a37c175f651..89360c18536 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -1018,8 +1018,6 @@ public void updateRootLayoutSpecs( @Override public @Nullable View resolveView(int reactTag) { - UiThreadUtil.assertOnUiThread(); - SurfaceMountingManager surfaceManager = mMountingManager.getSurfaceManagerForView(reactTag); return surfaceManager == null ? null : surfaceManager.getView(reactTag); } From 9c3342875e83d91a910c4d09ec589604c0d15325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 11 Dec 2025 10:55:01 +0100 Subject: [PATCH 220/312] remove shadowTreeLockMountPhase experiment --- .../featureflags/ReactNativeFeatureFlags.kt | 8 +------- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 +---------- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +--- .../ReactNativeFeatureFlagsDefaults.kt | 4 +--- .../ReactNativeFeatureFlagsLocalAccessor.kt | 13 +----------- .../ReactNativeFeatureFlagsProvider.kt | 4 +--- .../JReactNativeFeatureFlagsCxxInterop.cpp | 16 +-------------- .../JReactNativeFeatureFlagsCxxInterop.h | 5 +---- .../featureflags/ReactNativeFeatureFlags.cpp | 6 +----- .../featureflags/ReactNativeFeatureFlags.h | 7 +------ .../ReactNativeFeatureFlagsAccessor.cpp | 20 +------------------ .../ReactNativeFeatureFlagsAccessor.h | 6 ++---- .../ReactNativeFeatureFlagsDefaults.h | 6 +----- .../ReactNativeFeatureFlagsDynamicProvider.h | 11 +--------- .../ReactNativeFeatureFlagsProvider.h | 3 +-- .../NativeReactNativeFeatureFlags.cpp | 7 +------ .../NativeReactNativeFeatureFlags.h | 4 +--- .../react/renderer/mounting/ShadowTree.cpp | 10 +--------- .../ReactNativeFeatureFlags.config.js | 10 ---------- .../featureflags/ReactNativeFeatureFlags.js | 7 +------ .../specs/NativeReactNativeFeatureFlags.js | 3 +-- 21 files changed, 21 insertions(+), 145 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index 852763bb7d7..8a10052cd03 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<7550955526f976d80ddc4eca0ba17486>> + * @generated SignedSource<> */ /** @@ -396,12 +396,6 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun virtualViewPrerenderRatio(): Double = accessor.virtualViewPrerenderRatio() - /** - * Makes sure that one thread needs to finish mounting first before a new one can - */ - @JvmStatic - public fun shadowTreeLockMountPhase(): Boolean = accessor.shadowTreeLockMountPhase() - /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 999da103210..4c31c559aa4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<889c062fb82ff5976adfcd29db539adc>> + * @generated SignedSource<<8e0125e82b359e6a175ffc49a4df5537>> */ /** @@ -81,7 +81,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var useTurboModuleInteropCache: Boolean? = null private var useTurboModulesCache: Boolean? = null private var virtualViewPrerenderRatioCache: Double? = null - private var shadowTreeLockMountPhaseCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -632,15 +631,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } - override fun shadowTreeLockMountPhase(): Boolean { - var cached = shadowTreeLockMountPhaseCache - if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.shadowTreeLockMountPhase() - shadowTreeLockMountPhaseCache = cached - } - return cached - } - override fun override(provider: ReactNativeFeatureFlagsProvider): Unit = ReactNativeFeatureFlagsCxxInterop.override(provider as Any) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index 9a0e72d362e..915e42883fc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<701b2ea9a0aabc82c49cfd48aba100d9>> + * @generated SignedSource<> */ /** @@ -150,8 +150,6 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun virtualViewPrerenderRatio(): Double - @DoNotStrip @JvmStatic public external fun shadowTreeLockMountPhase(): Boolean - @DoNotStrip @JvmStatic public external fun override(provider: Any) @DoNotStrip @JvmStatic public external fun dangerouslyReset() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 86592b028ce..3bc959967ac 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<0f75d476cfd17f6ab2d64f2a2e1fd8dc>> + * @generated SignedSource<> */ /** @@ -144,6 +144,4 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useTurboModules(): Boolean = false override fun virtualViewPrerenderRatio(): Double = 5.0 - - override fun shadowTreeLockMountPhase(): Boolean = false } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index fd00631cdde..b5aa6b46dd7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<91a23e6bedd7821becd20afc7c48092c>> + * @generated SignedSource<> */ /** @@ -85,7 +85,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var useTurboModuleInteropCache: Boolean? = null private var useTurboModulesCache: Boolean? = null private var virtualViewPrerenderRatioCache: Double? = null - private var shadowTreeLockMountPhaseCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -697,16 +696,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } - override fun shadowTreeLockMountPhase(): Boolean { - var cached = shadowTreeLockMountPhaseCache - if (cached == null) { - cached = currentProvider.shadowTreeLockMountPhase() - accessedFeatureFlags.add("shadowTreeLockMountPhase") - shadowTreeLockMountPhaseCache = cached - } - return cached - } - override fun override(provider: ReactNativeFeatureFlagsProvider) { if (accessedFeatureFlags.isNotEmpty()) { val accessedFeatureFlagsStr = accessedFeatureFlags.joinToString(separator = ", ") { it } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index 1d4a11fa5d8..de14fb57768 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<21704207ce520def05b05f89dfba1048>> */ /** @@ -144,6 +144,4 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun useTurboModules(): Boolean @DoNotStrip public fun virtualViewPrerenderRatio(): Double - - @DoNotStrip public fun shadowTreeLockMountPhase(): Boolean } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index abd8070b195..5ae6ba010df 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -405,12 +405,6 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } - bool shadowTreeLockMountPhase() override { - static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("shadowTreeLockMountPhase"); - return method(javaProvider_); - } - private: jni::global_ref javaProvider_; }; @@ -720,11 +714,6 @@ double JReactNativeFeatureFlagsCxxInterop::virtualViewPrerenderRatio( return ReactNativeFeatureFlags::virtualViewPrerenderRatio(); } -bool JReactNativeFeatureFlagsCxxInterop::shadowTreeLockMountPhase( - facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::shadowTreeLockMountPhase(); -} - void JReactNativeFeatureFlagsCxxInterop::override( facebook::jni::alias_ref /*unused*/, jni::alias_ref provider) { @@ -939,9 +928,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "virtualViewPrerenderRatio", JReactNativeFeatureFlagsCxxInterop::virtualViewPrerenderRatio), - makeNativeMethod( - "shadowTreeLockMountPhase", - JReactNativeFeatureFlagsCxxInterop::shadowTreeLockMountPhase), }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index 098df27eb35..a04ebe7fc0e 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<949a32e47d8b53bb25f5f66de645862c>> + * @generated SignedSource<<57f2dcf4b71512c6b15e8021258d6036>> */ /** @@ -213,9 +213,6 @@ class JReactNativeFeatureFlagsCxxInterop static double virtualViewPrerenderRatio( facebook::jni::alias_ref); - static bool shadowTreeLockMountPhase( - facebook::jni::alias_ref); - static void override( facebook::jni::alias_ref, jni::alias_ref provider); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 0a8cf75fb4d..667aec1cb3f 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<89255c959bb302b7ffb9c32701c112fb>> + * @generated SignedSource<<2cabd888b74b84201ff027457efc6007>> */ /** @@ -270,10 +270,6 @@ double ReactNativeFeatureFlags::virtualViewPrerenderRatio() { return getAccessor().virtualViewPrerenderRatio(); } -bool ReactNativeFeatureFlags::shadowTreeLockMountPhase() { - return getAccessor().shadowTreeLockMountPhase(); -} - void ReactNativeFeatureFlags::override( std::unique_ptr provider) { getAccessor().override(std::move(provider)); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index e1570bd1119..564d82bba30 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<4adf7c18e5b0458dd2c1c588cfb84849>> + * @generated SignedSource<> */ /** @@ -344,11 +344,6 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static double virtualViewPrerenderRatio(); - /** - * Makes sure that one thread needs to finish mounting first before a new one can - */ - RN_EXPORT static bool shadowTreeLockMountPhase(); - /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index 2048c187d93..d3b0351a093 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<4156971877ee1e11b83008b2c886c0b6>> + * @generated SignedSource<<7ae9a203a94e3a22197bc9eda69b741c>> */ /** @@ -1127,24 +1127,6 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() { return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::shadowTreeLockMountPhase() { - auto flagValue = shadowTreeLockMountPhase_.load(); - - if (!flagValue.has_value()) { - // This block is not exclusive but it is not necessary. - // If multiple threads try to initialize the feature flag, we would only - // be accessing the provider multiple times but the end state of this - // instance and the returned flag value would be the same. - - markFlagAsAccessed(61, "shadowTreeLockMountPhase"); - - flagValue = currentProvider_->shadowTreeLockMountPhase(); - shadowTreeLockMountPhase_ = flagValue; - } - - return flagValue.value(); -} - void ReactNativeFeatureFlagsAccessor::override( std::unique_ptr provider) { if (wasOverridden_) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 24ff2e63da3..8e2acc5b241 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<2863ca68e4d58e3221410fb6da0e676d>> + * @generated SignedSource<<74560113d0b23c05d7822eeba1c0dee4>> */ /** @@ -93,7 +93,6 @@ class ReactNativeFeatureFlagsAccessor { bool useTurboModuleInterop(); bool useTurboModules(); double virtualViewPrerenderRatio(); - bool shadowTreeLockMountPhase(); void override(std::unique_ptr provider); std::optional getAccessedFeatureFlagNames() const; @@ -105,7 +104,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 62> accessedFeatureFlags_; + std::array, 61> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> animatedShouldSignalBatch_; @@ -168,7 +167,6 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> useTurboModuleInterop_; std::atomic> useTurboModules_; std::atomic> virtualViewPrerenderRatio_; - std::atomic> shadowTreeLockMountPhase_; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 6ee90e1a1c2..3104ed208eb 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<62cd6308b20f7426192ba02b7c3e86d1>> + * @generated SignedSource<<20176ba5419dc79d6aef4ab819667907>> */ /** @@ -270,10 +270,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { double virtualViewPrerenderRatio() override { return 5.0; } - - bool shadowTreeLockMountPhase() override { - return false; - } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index afecb96fd12..f5c85f530a4 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<244db790cc754f31402981967cd902b5>> */ /** @@ -593,15 +593,6 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::virtualViewPrerenderRatio(); } - - bool shadowTreeLockMountPhase() override { - auto value = values_["shadowTreeLockMountPhase"]; - if (!value.isNull()) { - return value.getBool(); - } - - return ReactNativeFeatureFlagsDefaults::shadowTreeLockMountPhase(); - } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index 75dda5958b8..e9dd92d9494 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<2387ed12fe46fb5b606ad13a17511f03>> */ /** @@ -86,7 +86,6 @@ class ReactNativeFeatureFlagsProvider { virtual bool useTurboModuleInterop() = 0; virtual bool useTurboModules() = 0; virtual double virtualViewPrerenderRatio() = 0; - virtual bool shadowTreeLockMountPhase() = 0; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index 300a612e08d..1e9e0ffc9b2 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<45e1b08fd2438b27af82591b5cfa5744>> */ /** @@ -349,9 +349,4 @@ double NativeReactNativeFeatureFlags::virtualViewPrerenderRatio( return ReactNativeFeatureFlags::virtualViewPrerenderRatio(); } -bool NativeReactNativeFeatureFlags::shadowTreeLockMountPhase( - jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::shadowTreeLockMountPhase(); -} - } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index b3352eaf0f7..bc8014a5d80 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<6ed8bc9bc9f4aeb6546280f6bb10e89b>> + * @generated SignedSource<> */ /** @@ -157,8 +157,6 @@ class NativeReactNativeFeatureFlags bool useTurboModules(jsi::Runtime& runtime); double virtualViewPrerenderRatio(jsi::Runtime& runtime); - - bool shadowTreeLockMountPhase(jsi::Runtime& runtime); }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 316628852d4..7ad3cb63af7 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -390,16 +390,8 @@ ShadowTreeRevision ShadowTree::getCurrentRevision() const { void ShadowTree::mount(ShadowTreeRevision revision, bool mountSynchronously) const { - std::unique_lock lock; - bool shouldLock = ReactNativeFeatureFlags::shadowTreeLockMountPhase(); - if (shouldLock) { - // TODO: can a mount cause another mount, so we have to care about reentrancy? - lock = std::unique_lock(mountMutex_); - } - LOG(WARNING) << "⚙️ Mounting revision " << revision.number - << " (" << (mountSynchronously ? "synchronously" : "asynchronously") << ")" - << ", shouldLock: " << (shouldLock ? "true" : "false"); + << " (" << (mountSynchronously ? "synchronously" : "asynchronously") << ")"; mountingCoordinator_->push(std::move(revision)); delegate_.shadowTreeDidFinishTransaction( mountingCoordinator_, mountSynchronously); diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 468dc752516..c55d1311ca1 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -691,16 +691,6 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, - shadowTreeLockMountPhase: { - defaultValue: false, - metadata: { - dateAdded: '2025-11-04', - description: - 'Makes sure that one thread needs to finish mounting first before a new one can', - expectedReleaseValue: false, - purpose: 'experimentation', - }, - }, }, jsOnly: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index 47ca07af40a..dff7543dedf 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> * @flow strict * @noformat */ @@ -112,7 +112,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{ useTurboModuleInterop: Getter, useTurboModules: Getter, virtualViewPrerenderRatio: Getter, - shadowTreeLockMountPhase: Getter, }>; /** @@ -443,10 +442,6 @@ export const useTurboModules: Getter = createNativeFlagGetter('useTurbo * Initial prerender ratio for VirtualView. */ export const virtualViewPrerenderRatio: Getter = createNativeFlagGetter('virtualViewPrerenderRatio', 5); -/** - * Makes sure that one thread needs to finish mounting first before a new one can - */ -export const shadowTreeLockMountPhase: Getter = createNativeFlagGetter('shadowTreeLockMountPhase', false); /** * Overrides the feature flags with the provided methods. diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index 2de9cc2b702..4558b60203c 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<59e5b7277f7e6a0b95d600959960f4e4>> + * @generated SignedSource<<8b4f1275a16d5b83f5594da1eb89c6c1>> * @flow strict * @noformat */ @@ -86,7 +86,6 @@ export interface Spec extends TurboModule { +useTurboModuleInterop?: () => boolean; +useTurboModules?: () => boolean; +virtualViewPrerenderRatio?: () => number; - +shadowTreeLockMountPhase?: () => boolean; } const NativeReactNativeFeatureFlags: ?Spec = TurboModuleRegistry.get( From 1405f1686d9900c4884f1c17c648a79a1da36b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 11 Dec 2025 10:55:08 +0100 Subject: [PATCH 221/312] pod install RN tester --- packages/rn-tester/Podfile.lock | 612 ++++++++++++++++---------------- 1 file changed, 306 insertions(+), 306 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 3a8cd98336e..c140a0d4d73 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,12 +2,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.3) + - FBLazyVector (0.81.4) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.81.3): - - hermes-engine/Pre-built (= 0.81.3) - - hermes-engine/Pre-built (0.81.3) + - hermes-engine (0.81.4): + - hermes-engine/Pre-built (= 0.81.4) + - hermes-engine/Pre-built (0.81.4) - MyNativeView (0.81.0-main): - boost - DoubleConversion @@ -112,27 +112,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.3) - - RCTRequired (0.81.3) - - RCTTypeSafety (0.81.3): - - FBLazyVector (= 0.81.3) - - RCTRequired (= 0.81.3) - - React-Core (= 0.81.3) - - React (0.81.3): - - React-Core (= 0.81.3) - - React-Core/DevSupport (= 0.81.3) - - React-Core/RCTWebSocket (= 0.81.3) - - React-RCTActionSheet (= 0.81.3) - - React-RCTAnimation (= 0.81.3) - - React-RCTBlob (= 0.81.3) - - React-RCTImage (= 0.81.3) - - React-RCTLinking (= 0.81.3) - - React-RCTNetwork (= 0.81.3) - - React-RCTSettings (= 0.81.3) - - React-RCTText (= 0.81.3) - - React-RCTVibration (= 0.81.3) - - React-callinvoker (0.81.3) - - React-Core (0.81.3): + - RCTDeprecation (0.81.4) + - RCTRequired (0.81.4) + - RCTTypeSafety (0.81.4): + - FBLazyVector (= 0.81.4) + - RCTRequired (= 0.81.4) + - React-Core (= 0.81.4) + - React (0.81.4): + - React-Core (= 0.81.4) + - React-Core/DevSupport (= 0.81.4) + - React-Core/RCTWebSocket (= 0.81.4) + - React-RCTActionSheet (= 0.81.4) + - React-RCTAnimation (= 0.81.4) + - React-RCTBlob (= 0.81.4) + - React-RCTImage (= 0.81.4) + - React-RCTLinking (= 0.81.4) + - React-RCTNetwork (= 0.81.4) + - React-RCTSettings (= 0.81.4) + - React-RCTText (= 0.81.4) + - React-RCTVibration (= 0.81.4) + - React-callinvoker (0.81.4) + - React-Core (0.81.4): - boost - DoubleConversion - fast_float @@ -142,7 +142,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.3) + - React-Core/Default (= 0.81.4) - React-cxxreact - React-featureflags - React-hermes @@ -157,7 +157,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.3): + - React-Core/CoreModulesHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -182,7 +182,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.3): + - React-Core/Default (0.81.4): - boost - DoubleConversion - fast_float @@ -206,7 +206,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.3): + - React-Core/DevSupport (0.81.4): - boost - DoubleConversion - fast_float @@ -216,8 +216,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.3) - - React-Core/RCTWebSocket (= 0.81.3) + - React-Core/Default (= 0.81.4) + - React-Core/RCTWebSocket (= 0.81.4) - React-cxxreact - React-featureflags - React-hermes @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.3): + - React-Core/RCTActionSheetHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -257,7 +257,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.3): + - React-Core/RCTAnimationHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -282,7 +282,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.3): + - React-Core/RCTBlobHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -307,7 +307,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.3): + - React-Core/RCTImageHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.3): + - React-Core/RCTLinkingHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -357,7 +357,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.3): + - React-Core/RCTNetworkHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -382,7 +382,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTPushNotificationHeaders (0.81.3): + - React-Core/RCTPushNotificationHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -407,7 +407,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.3): + - React-Core/RCTSettingsHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -432,7 +432,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.3): + - React-Core/RCTTextHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -457,7 +457,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.3): + - React-Core/RCTVibrationHeaders (0.81.4): - boost - DoubleConversion - fast_float @@ -482,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.3): + - React-Core/RCTWebSocket (0.81.4): - boost - DoubleConversion - fast_float @@ -492,7 +492,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.3) + - React-Core/Default (= 0.81.4) - React-cxxreact - React-featureflags - React-hermes @@ -507,7 +507,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.3): + - React-CoreModules (0.81.4): - boost - DoubleConversion - fast_float @@ -515,20 +515,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.3) - - React-Core/CoreModulesHeaders (= 0.81.3) - - React-jsi (= 0.81.3) + - RCTTypeSafety (= 0.81.4) + - React-Core/CoreModulesHeaders (= 0.81.4) + - React-jsi (= 0.81.4) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.3) + - React-RCTImage (= 0.81.4) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.3): + - React-cxxreact (0.81.4): - boost - DoubleConversion - fast_float @@ -537,19 +537,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.3) - - React-debug (= 0.81.3) - - React-jsi (= 0.81.3) + - React-callinvoker (= 0.81.4) + - React-debug (= 0.81.4) + - React-jsi (= 0.81.4) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.3) - - React-perflogger (= 0.81.3) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) - React-runtimeexecutor - - React-timing (= 0.81.3) + - React-timing (= 0.81.4) - SocketRocket - - React-debug (0.81.3) - - React-defaultsnativemodule (0.81.3): + - React-debug (0.81.4) + - React-defaultsnativemodule (0.81.4): - boost - DoubleConversion - fast_float @@ -566,7 +566,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.3): + - React-domnativemodule (0.81.4): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.3): + - React-Fabric (0.81.4): - boost - DoubleConversion - fast_float @@ -600,23 +600,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.3) - - React-Fabric/attributedstring (= 0.81.3) - - React-Fabric/bridging (= 0.81.3) - - React-Fabric/componentregistry (= 0.81.3) - - React-Fabric/componentregistrynative (= 0.81.3) - - React-Fabric/components (= 0.81.3) - - React-Fabric/consistency (= 0.81.3) - - React-Fabric/core (= 0.81.3) - - React-Fabric/dom (= 0.81.3) - - React-Fabric/imagemanager (= 0.81.3) - - React-Fabric/leakchecker (= 0.81.3) - - React-Fabric/mounting (= 0.81.3) - - React-Fabric/observers (= 0.81.3) - - React-Fabric/scheduler (= 0.81.3) - - React-Fabric/telemetry (= 0.81.3) - - React-Fabric/templateprocessor (= 0.81.3) - - React-Fabric/uimanager (= 0.81.3) + - React-Fabric/animations (= 0.81.4) + - React-Fabric/attributedstring (= 0.81.4) + - React-Fabric/bridging (= 0.81.4) + - React-Fabric/componentregistry (= 0.81.4) + - React-Fabric/componentregistrynative (= 0.81.4) + - React-Fabric/components (= 0.81.4) + - React-Fabric/consistency (= 0.81.4) + - React-Fabric/core (= 0.81.4) + - React-Fabric/dom (= 0.81.4) + - React-Fabric/imagemanager (= 0.81.4) + - React-Fabric/leakchecker (= 0.81.4) + - React-Fabric/mounting (= 0.81.4) + - React-Fabric/observers (= 0.81.4) + - React-Fabric/scheduler (= 0.81.4) + - React-Fabric/telemetry (= 0.81.4) + - React-Fabric/templateprocessor (= 0.81.4) + - React-Fabric/uimanager (= 0.81.4) - React-featureflags - React-graphics - React-jsi @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.3): + - React-Fabric/animations (0.81.4): - boost - DoubleConversion - fast_float @@ -653,7 +653,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.3): + - React-Fabric/attributedstring (0.81.4): - boost - DoubleConversion - fast_float @@ -678,7 +678,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.3): + - React-Fabric/bridging (0.81.4): - boost - DoubleConversion - fast_float @@ -703,7 +703,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.3): + - React-Fabric/componentregistry (0.81.4): - boost - DoubleConversion - fast_float @@ -728,7 +728,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.3): + - React-Fabric/componentregistrynative (0.81.4): - boost - DoubleConversion - fast_float @@ -753,7 +753,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.3): + - React-Fabric/components (0.81.4): - boost - DoubleConversion - fast_float @@ -767,10 +767,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.3) - - React-Fabric/components/root (= 0.81.3) - - React-Fabric/components/scrollview (= 0.81.3) - - React-Fabric/components/view (= 0.81.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.4) + - React-Fabric/components/root (= 0.81.4) + - React-Fabric/components/scrollview (= 0.81.4) + - React-Fabric/components/view (= 0.81.4) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.3): + - React-Fabric/components/legacyviewmanagerinterop (0.81.4): - boost - DoubleConversion - fast_float @@ -807,7 +807,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.3): + - React-Fabric/components/root (0.81.4): - boost - DoubleConversion - fast_float @@ -832,7 +832,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.3): + - React-Fabric/components/scrollview (0.81.4): - boost - DoubleConversion - fast_float @@ -857,7 +857,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.3): + - React-Fabric/components/view (0.81.4): - boost - DoubleConversion - fast_float @@ -884,7 +884,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.3): + - React-Fabric/consistency (0.81.4): - boost - DoubleConversion - fast_float @@ -909,7 +909,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.3): + - React-Fabric/core (0.81.4): - boost - DoubleConversion - fast_float @@ -934,7 +934,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.3): + - React-Fabric/dom (0.81.4): - boost - DoubleConversion - fast_float @@ -959,7 +959,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.3): + - React-Fabric/imagemanager (0.81.4): - boost - DoubleConversion - fast_float @@ -984,7 +984,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.3): + - React-Fabric/leakchecker (0.81.4): - boost - DoubleConversion - fast_float @@ -1009,7 +1009,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.3): + - React-Fabric/mounting (0.81.4): - boost - DoubleConversion - fast_float @@ -1034,7 +1034,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.3): + - React-Fabric/observers (0.81.4): - boost - DoubleConversion - fast_float @@ -1048,7 +1048,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.3) + - React-Fabric/observers/events (= 0.81.4) - React-featureflags - React-graphics - React-jsi @@ -1060,7 +1060,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.3): + - React-Fabric/observers/events (0.81.4): - boost - DoubleConversion - fast_float @@ -1085,7 +1085,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.3): + - React-Fabric/scheduler (0.81.4): - boost - DoubleConversion - fast_float @@ -1112,7 +1112,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.3): + - React-Fabric/telemetry (0.81.4): - boost - DoubleConversion - fast_float @@ -1137,7 +1137,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.3): + - React-Fabric/templateprocessor (0.81.4): - boost - DoubleConversion - fast_float @@ -1162,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.3): + - React-Fabric/uimanager (0.81.4): - boost - DoubleConversion - fast_float @@ -1176,7 +1176,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.3) + - React-Fabric/uimanager/consistency (= 0.81.4) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1189,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.3): + - React-Fabric/uimanager/consistency (0.81.4): - boost - DoubleConversion - fast_float @@ -1215,7 +1215,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.3): + - React-FabricComponents (0.81.4): - boost - DoubleConversion - fast_float @@ -1230,8 +1230,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.3) - - React-FabricComponents/textlayoutmanager (= 0.81.3) + - React-FabricComponents/components (= 0.81.4) + - React-FabricComponents/textlayoutmanager (= 0.81.4) - React-featureflags - React-graphics - React-jsi @@ -1244,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.3): + - React-FabricComponents/components (0.81.4): - boost - DoubleConversion - fast_float @@ -1259,17 +1259,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.3) - - React-FabricComponents/components/iostextinput (= 0.81.3) - - React-FabricComponents/components/modal (= 0.81.3) - - React-FabricComponents/components/rncore (= 0.81.3) - - React-FabricComponents/components/safeareaview (= 0.81.3) - - React-FabricComponents/components/scrollview (= 0.81.3) - - React-FabricComponents/components/switch (= 0.81.3) - - React-FabricComponents/components/text (= 0.81.3) - - React-FabricComponents/components/textinput (= 0.81.3) - - React-FabricComponents/components/unimplementedview (= 0.81.3) - - React-FabricComponents/components/virtualview (= 0.81.3) + - React-FabricComponents/components/inputaccessory (= 0.81.4) + - React-FabricComponents/components/iostextinput (= 0.81.4) + - React-FabricComponents/components/modal (= 0.81.4) + - React-FabricComponents/components/rncore (= 0.81.4) + - React-FabricComponents/components/safeareaview (= 0.81.4) + - React-FabricComponents/components/scrollview (= 0.81.4) + - React-FabricComponents/components/switch (= 0.81.4) + - React-FabricComponents/components/text (= 0.81.4) + - React-FabricComponents/components/textinput (= 0.81.4) + - React-FabricComponents/components/unimplementedview (= 0.81.4) + - React-FabricComponents/components/virtualview (= 0.81.4) - React-featureflags - React-graphics - React-jsi @@ -1282,7 +1282,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.3): + - React-FabricComponents/components/inputaccessory (0.81.4): - boost - DoubleConversion - fast_float @@ -1309,7 +1309,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.3): + - React-FabricComponents/components/iostextinput (0.81.4): - boost - DoubleConversion - fast_float @@ -1336,7 +1336,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.3): + - React-FabricComponents/components/modal (0.81.4): - boost - DoubleConversion - fast_float @@ -1344,7 +1344,7 @@ PODS: - glog - hermes-engine - RCT-Folly - - RCT-Folly/Fabric + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1363,7 +1363,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.3): + - React-FabricComponents/components/rncore (0.81.4): - boost - DoubleConversion - fast_float @@ -1390,7 +1390,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.3): + - React-FabricComponents/components/safeareaview (0.81.4): - boost - DoubleConversion - fast_float @@ -1417,7 +1417,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.3): + - React-FabricComponents/components/scrollview (0.81.4): - boost - DoubleConversion - fast_float @@ -1444,7 +1444,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/switch (0.81.3): + - React-FabricComponents/components/switch (0.81.4): - boost - DoubleConversion - fast_float @@ -1471,7 +1471,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.3): + - React-FabricComponents/components/text (0.81.4): - boost - DoubleConversion - fast_float @@ -1498,7 +1498,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.3): + - React-FabricComponents/components/textinput (0.81.4): - boost - DoubleConversion - fast_float @@ -1525,7 +1525,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.3): + - React-FabricComponents/components/unimplementedview (0.81.4): - boost - DoubleConversion - fast_float @@ -1552,7 +1552,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.3): + - React-FabricComponents/components/virtualview (0.81.4): - boost - DoubleConversion - fast_float @@ -1579,7 +1579,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.3): + - React-FabricComponents/textlayoutmanager (0.81.4): - boost - DoubleConversion - fast_float @@ -1606,7 +1606,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.3): + - React-FabricImage (0.81.4): - boost - DoubleConversion - fast_float @@ -1615,21 +1615,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.3) - - RCTTypeSafety (= 0.81.3) + - RCTRequired (= 0.81.4) + - RCTTypeSafety (= 0.81.4) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.3) + - React-jsiexecutor (= 0.81.4) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.3): + - React-featureflags (0.81.4): - boost - DoubleConversion - fast_float @@ -1638,7 +1638,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.3): + - React-featureflagsnativemodule (0.81.4): - boost - DoubleConversion - fast_float @@ -1653,7 +1653,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.3): + - React-graphics (0.81.4): - boost - DoubleConversion - fast_float @@ -1666,7 +1666,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.3): + - React-hermes (0.81.4): - boost - DoubleConversion - fast_float @@ -1675,16 +1675,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.3) + - React-cxxreact (= 0.81.4) - React-jsi - - React-jsiexecutor (= 0.81.3) + - React-jsiexecutor (= 0.81.4) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.3) + - React-perflogger (= 0.81.4) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.3): + - React-idlecallbacksnativemodule (0.81.4): - boost - DoubleConversion - fast_float @@ -1700,7 +1700,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.3): + - React-ImageManager (0.81.4): - boost - DoubleConversion - fast_float @@ -1715,7 +1715,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.3): + - React-jserrorhandler (0.81.4): - boost - DoubleConversion - fast_float @@ -1730,7 +1730,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.3): + - React-jsi (0.81.4): - boost - DoubleConversion - fast_float @@ -1740,7 +1740,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.3): + - React-jsiexecutor (0.81.4): - boost - DoubleConversion - fast_float @@ -1749,15 +1749,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.3) - - React-jsi (= 0.81.3) + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.3) + - React-perflogger (= 0.81.4) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.3): + - React-jsinspector (0.81.4): - boost - DoubleConversion - fast_float @@ -1772,10 +1772,10 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.3) + - React-perflogger (= 0.81.4) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.3): + - React-jsinspectorcdp (0.81.4): - boost - DoubleConversion - fast_float @@ -1784,7 +1784,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.3): + - React-jsinspectornetwork (0.81.4): - boost - DoubleConversion - fast_float @@ -1797,7 +1797,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.3): + - React-jsinspectortracing (0.81.4): - boost - DoubleConversion - fast_float @@ -1808,7 +1808,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.3): + - React-jsitooling (0.81.4): - boost - DoubleConversion - fast_float @@ -1816,16 +1816,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.3) - - React-jsi (= 0.81.3) + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.3): + - React-jsitracing (0.81.4): - React-jsi - - React-logger (0.81.3): + - React-logger (0.81.4): - boost - DoubleConversion - fast_float @@ -1834,7 +1834,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.3): + - React-Mapbuffer (0.81.4): - boost - DoubleConversion - fast_float @@ -1844,7 +1844,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.3): + - React-microtasksnativemodule (0.81.4): - boost - DoubleConversion - fast_float @@ -1858,7 +1858,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-NativeModulesApple (0.81.3): + - React-NativeModulesApple (0.81.4): - boost - DoubleConversion - fast_float @@ -1878,8 +1878,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.3) - - React-perflogger (0.81.3): + - React-oscompat (0.81.4) + - React-perflogger (0.81.4): - boost - DoubleConversion - fast_float @@ -1888,7 +1888,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.3): + - React-performancetimeline (0.81.4): - boost - DoubleConversion - fast_float @@ -1901,9 +1901,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.3): - - React-Core/RCTActionSheetHeaders (= 0.81.3) - - React-RCTAnimation (0.81.3): + - React-RCTActionSheet (0.81.4): + - React-Core/RCTActionSheetHeaders (= 0.81.4) + - React-RCTAnimation (0.81.4): - boost - DoubleConversion - fast_float @@ -1919,7 +1919,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.3): + - React-RCTAppDelegate (0.81.4): - boost - DoubleConversion - fast_float @@ -1953,7 +1953,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.3): + - React-RCTBlob (0.81.4): - boost - DoubleConversion - fast_float @@ -1972,7 +1972,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.3): + - React-RCTFabric (0.81.4): - boost - DoubleConversion - fast_float @@ -2007,7 +2007,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.3): + - React-RCTFBReactNativeSpec (0.81.4): - boost - DoubleConversion - fast_float @@ -2021,10 +2021,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.3) + - React-RCTFBReactNativeSpec/components (= 0.81.4) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.3): + - React-RCTFBReactNativeSpec/components (0.81.4): - boost - DoubleConversion - fast_float @@ -2047,7 +2047,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.3): + - React-RCTImage (0.81.4): - boost - DoubleConversion - fast_float @@ -2063,14 +2063,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.3): - - React-Core/RCTLinkingHeaders (= 0.81.3) - - React-jsi (= 0.81.3) + - React-RCTLinking (0.81.4): + - React-Core/RCTLinkingHeaders (= 0.81.4) + - React-jsi (= 0.81.4) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.3) - - React-RCTNetwork (0.81.3): + - ReactCommon/turbomodule/core (= 0.81.4) + - React-RCTNetwork (0.81.4): - boost - DoubleConversion - fast_float @@ -2088,14 +2088,14 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTPushNotification (0.81.3): + - React-RCTPushNotification (0.81.4): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTRuntime (0.81.3): + - React-RCTRuntime (0.81.4): - boost - DoubleConversion - fast_float @@ -2115,7 +2115,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.3): + - React-RCTSettings (0.81.4): - boost - DoubleConversion - fast_float @@ -2130,7 +2130,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTTest (0.81.3): + - React-RCTTest (0.81.4): - boost - DoubleConversion - fast_float @@ -2138,15 +2138,15 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-Core (= 0.81.3) - - React-CoreModules (= 0.81.3) - - React-jsi (= 0.81.3) - - ReactCommon/turbomodule/core (= 0.81.3) + - React-Core (= 0.81.4) + - React-CoreModules (= 0.81.4) + - React-jsi (= 0.81.4) + - ReactCommon/turbomodule/core (= 0.81.4) - SocketRocket - - React-RCTText (0.81.3): - - React-Core/RCTTextHeaders (= 0.81.3) + - React-RCTText (0.81.4): + - React-Core/RCTTextHeaders (= 0.81.4) - Yoga - - React-RCTVibration (0.81.3): + - React-RCTVibration (0.81.4): - boost - DoubleConversion - fast_float @@ -2160,11 +2160,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.3) - - React-renderercss (0.81.3): + - React-rendererconsistency (0.81.4) + - React-renderercss (0.81.4): - React-debug - React-utils - - React-rendererdebug (0.81.3): + - React-rendererdebug (0.81.4): - boost - DoubleConversion - fast_float @@ -2174,7 +2174,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.3): + - React-RuntimeApple (0.81.4): - boost - DoubleConversion - fast_float @@ -2203,7 +2203,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.3): + - React-RuntimeCore (0.81.4): - boost - DoubleConversion - fast_float @@ -2225,7 +2225,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.3): + - React-runtimeexecutor (0.81.4): - boost - DoubleConversion - fast_float @@ -2235,10 +2235,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.3) + - React-jsi (= 0.81.4) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.3): + - React-RuntimeHermes (0.81.4): - boost - DoubleConversion - fast_float @@ -2259,7 +2259,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.3): + - React-runtimescheduler (0.81.4): - boost - DoubleConversion - fast_float @@ -2281,9 +2281,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.3): + - React-timing (0.81.4): - React-debug - - React-utils (0.81.3): + - React-utils (0.81.4): - boost - DoubleConversion - fast_float @@ -2293,11 +2293,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.3) + - React-jsi (= 0.81.4) - SocketRocket - - ReactAppDependencyProvider (0.81.3): + - ReactAppDependencyProvider (0.81.4): - ReactCodegen - - ReactCodegen (0.81.3): + - ReactCodegen (0.81.4): - boost - DoubleConversion - fast_float @@ -2323,7 +2323,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.3): + - ReactCommon (0.81.4): - boost - DoubleConversion - fast_float @@ -2331,9 +2331,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.3) + - ReactCommon/turbomodule (= 0.81.4) - SocketRocket - - ReactCommon-Samples (0.81.3): + - ReactCommon-Samples (0.81.4): - boost - DoubleConversion - fast_float @@ -2349,7 +2349,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - ReactCommon/turbomodule (0.81.3): + - ReactCommon/turbomodule (0.81.4): - boost - DoubleConversion - fast_float @@ -2358,15 +2358,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.3) - - React-cxxreact (= 0.81.3) - - React-jsi (= 0.81.3) - - React-logger (= 0.81.3) - - React-perflogger (= 0.81.3) - - ReactCommon/turbomodule/bridging (= 0.81.3) - - ReactCommon/turbomodule/core (= 0.81.3) + - React-callinvoker (= 0.81.4) + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) + - ReactCommon/turbomodule/bridging (= 0.81.4) + - ReactCommon/turbomodule/core (= 0.81.4) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.3): + - ReactCommon/turbomodule/bridging (0.81.4): - boost - DoubleConversion - fast_float @@ -2375,13 +2375,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.3) - - React-cxxreact (= 0.81.3) - - React-jsi (= 0.81.3) - - React-logger (= 0.81.3) - - React-perflogger (= 0.81.3) + - React-callinvoker (= 0.81.4) + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) - SocketRocket - - ReactCommon/turbomodule/core (0.81.3): + - ReactCommon/turbomodule/core (0.81.4): - boost - DoubleConversion - fast_float @@ -2390,14 +2390,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.3) - - React-cxxreact (= 0.81.3) - - React-debug (= 0.81.3) - - React-featureflags (= 0.81.3) - - React-jsi (= 0.81.3) - - React-logger (= 0.81.3) - - React-perflogger (= 0.81.3) - - React-utils (= 0.81.3) + - React-callinvoker (= 0.81.4) + - React-cxxreact (= 0.81.4) + - React-debug (= 0.81.4) + - React-featureflags (= 0.81.4) + - React-jsi (= 0.81.4) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) + - React-utils (= 0.81.4) - SocketRocket - ScreenshotManager (0.81.0-main): - boost @@ -2678,87 +2678,87 @@ EXTERNAL SOURCES: :path: "../react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + boost: 2510dbf7cb0576ee1373ade97a4a627a844364d0 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: a80c331df9c6958a9cc391631578602b7973b0c7 + FBLazyVector: 941bef1c8eeabd9fe1f501e30a5220beee913886 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 5463d3c4a8a0d35701605934008f34c171ce71d5 + glog: b76040d18988c5978b0fa384619df2ec2227be90 + hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 MyNativeView: 0387bccdf96db2946b3e4f44df7370b55da40682 NativeCxxModuleExample: 7d0b25d0b54a57727669cd7b06279499ced25daf OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 OSSLibraryExample: e829af5c61a90a691f3e51c583d9c1236a12d8d3 - RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f - RCTDeprecation: 78aa7764dbddbc2c87060d26a3ab19fb65dad4ce - RCTRequired: df28d0769df9b6ace47200ac80095f9dffba555d - RCTTypeSafety: ffa3fa28228934f05db6d9d31dc746542fc447e0 - React: 639d04fed84b2ff824861d863891eaef7cb92f9c - React-callinvoker: adedd891222fbe90849c0bdc8873b9b94f061a03 - React-Core: f98fdc6842c39b0f4d715c566fb6c330acd855ee - React-CoreModules: ca243a99705e9c5945a87500b525e8cb60384e0e - React-cxxreact: 3260344329710e38751a6426881dfa0972c62634 - React-debug: e7fa634481419ac0b821224af2113001a997b5f3 - React-defaultsnativemodule: 99df714e7ccdec2e47da11a8724250d52ff76496 - React-domnativemodule: bb0893b370395ae13ae3a6b96b1e2579d3cdeee9 - React-Fabric: c702556ed4692539b5419b6aa540d528e69cb19b - React-FabricComponents: b72f2dbe2b7ef60f6a157547e32aa07e7dab8627 - React-FabricImage: e277341ec76a77ea43d3ad2308b8ba0010d7076c - React-featureflags: aea1abd1fcb0f836375458efe16774b0ff96bf35 - React-featureflagsnativemodule: 72dd77359dcd9cb5959314f257443bfe1935c414 - React-graphics: 4242e5ff49737ede2c920bc8d5c0d61b97a2b001 - React-hermes: 9083f0ec5dd2fe38f00a70de2c69adec2b75eda6 - React-idlecallbacksnativemodule: a392435d2940ba3a040dc8ba67c7f1dd69495e1b - React-ImageManager: 74bd5cbbed6b4aff9f0a9b587b5131db2364900f - React-jserrorhandler: 392521673af0cf20e81927948dcbb67293dbfc07 - React-jsi: 9d2b263d419798560ec4b1a3fba8b4c76e0ef9a9 - React-jsiexecutor: 19f8f7951f15d99547d429b575688169fbb82fd7 - React-jsinspector: 97adc2efd843405992001f3a9608b210ae498d62 - React-jsinspectorcdp: 78f82904331c3f250d01774c341be202e7bca5d3 - React-jsinspectornetwork: 31673100437a0c910ca111c5128a613cf1e81bc4 - React-jsinspectortracing: 729858bd46638450a222ac892f9b8fde269c30c0 - React-jsitooling: dcd741b804bfd5a9e22ac1dc8fd5a085cc1ebad7 - React-jsitracing: c0ef2a171e9bd57829436c7114dad19b389cbaa6 - React-logger: 881f94d5ca5c50b64679fd5692330c192ae6e79c - React-Mapbuffer: d9fa53795351c53186f0c4d893afc9de629a7c45 - React-microtasksnativemodule: 4fbac4bcda4a57be275a9fa48cf03cc83da3163b - React-NativeModulesApple: 2c8e9f3d5d34122f853984ebc413a7d80dfa972c - React-oscompat: 16640399a646baeac6baab4264891cc4892eeb56 - React-perflogger: e450a9c345e833ec1c3fe5920c7bc303ecb4724b - React-performancetimeline: 73100eafb985145ea5b74a06968afa3a0cd53e23 - React-RCTActionSheet: 4c4adabfd8bc747cf39ed7f3e8691eb060a59ba3 - React-RCTAnimation: 4f3179965896dabe358a9aa7db142b10cb2db372 - React-RCTAppDelegate: 4cc275baf148f63b9d3ce0dec7df850fcacbc10e - React-RCTBlob: 03bf79cf438ed6bdc77255937d0bf29421a92590 - React-RCTFabric: 138e26a55aec0275aa26ab1fbc85260d8b443377 - React-RCTFBReactNativeSpec: 06e80d5d338477d233d43a80ac1451d07e61e5ea - React-RCTImage: 50e0b7de4c4858fdb484a1da1f971f6770bc2b31 - React-RCTLinking: ee7f37c879dd5cd29792b895fd9416f3cbb9b20b - React-RCTNetwork: 90292d96da937c93bdbf111a26ceb2099d99b926 - React-RCTPushNotification: d9fb659768bb641aa73539526e07210c57330458 - React-RCTRuntime: ac909d01c6c8a6bdc04cafc05e98e287af63cfed - React-RCTSettings: 84f1bbb3c9aa08d8e4d8f8ed59bf95d1b5e59579 - React-RCTTest: 4bc3a75f2845d78cecbc46e06c3e62e00eeea7ad - React-RCTText: 6c5ea9deff145e3065c10416b9e5dbc8ec614240 - React-RCTVibration: 33c3fd6e232cf89b3f4db7ea21f36ccc483179be - React-rendererconsistency: 234fcdca03f9380acd8f85bb11c4bcbd6901b3cb - React-renderercss: 04e37f7f83d402fb82c3f4b9c05941e03b5858cb - React-rendererdebug: 742a14850632fb7a8d118dc7a0f55ca0b04d018b - React-RuntimeApple: 7d08d9e503a87de79819ddc938a12722cbedbe91 - React-RuntimeCore: 721d435b57bec6a93d47d8de81cf460385b129b7 - React-runtimeexecutor: 6656b16e8afd3d5e4bfa446e760dfdcc0c198065 - React-RuntimeHermes: 05ccd43b8cac45fcc8be11c061855d38046a5485 - React-runtimescheduler: e82731c391b044bcc970cbe14f92bdeda81f4b25 - React-timing: f006091c1b28c2e27851c631e3e255f59639ca31 - React-utils: bc9c836b6e6ed848fcf7413de41fa05504004be4 - ReactAppDependencyProvider: ff33e383768c8bfb96cadd58174d7cb196c5c7f1 - ReactCodegen: e07d2f75d008fcf471f165fee0bfbe815d4c12a7 - ReactCommon: 5eb75122c48f80ca9a4582bd1bb4a27ad459b99d - ReactCommon-Samples: acabe5a6818c94a02e3db59e7f82af1c8613c2a4 + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 + RCTDeprecation: c0ed3249a97243002615517dff789bf4666cf585 + RCTRequired: 58719f5124f9267b5f9649c08bf23d9aea845b23 + RCTTypeSafety: 4aefa8328ab1f86da273f08517f1f6b343f6c2cc + React: 2073376f47c71b7e9a0af7535986a77522ce1049 + React-callinvoker: 751b6f2c83347a0486391c3f266f291f0f53b27e + React-Core: dff5d29973349b11dd6631c9498456d75f846d5e + React-CoreModules: c0ae04452e4c5d30e06f8e94692a49107657f537 + React-cxxreact: 376fd672c95dfb64ad5cc246e6a1e9edb78dec4c + React-debug: 7b56a0a7da432353287d2eedac727903e35278f5 + React-defaultsnativemodule: 393b81aaa6211408f50a6ef00a277847256dd881 + React-domnativemodule: 5fb5829baa7a7a0f217019cbad1eb226d94f7062 + React-Fabric: a17c4ae35503673b57b91c2d1388429e7cbee452 + React-FabricComponents: f87e70a70576b7fc90bd6efaf98f57c264bb02aa + React-FabricImage: d806eb2695d7ef355ec28d1a21f5a14ac26b1cae + React-featureflags: 1690ec3c453920b6308e23a4e24eb9c3632f9c75 + React-featureflagsnativemodule: 7b7e8483fc671c5a33aefd699b7c7a3c0bdfdfec + React-graphics: ea146ee799dc816524a3a0922fc7be0b5a52dcc1 + React-hermes: fcbdc45ecf38259fe3b12642bd0757c52270a107 + React-idlecallbacksnativemodule: a353f9162eaa7ad787e68aba9f52a1cfa8154098 + React-ImageManager: ec5cf55ce9cc81719eb5f1f51d23d04db851c86c + React-jserrorhandler: 594c593f3d60f527be081e2cace7710c2bd9f524 + React-jsi: 59ec3190dd364cca86a58869e7755477d2468948 + React-jsiexecutor: b87d78a2e8dd7a6f56e9cdac038da45de98c944f + React-jsinspector: b9204adf1af622c98e78af96ec1bca615c2ce2bd + React-jsinspectorcdp: 4a356fa69e412d35d3a38c44d4a6cc555c5931e8 + React-jsinspectornetwork: 7820056773178f321cbf18689e1ffcd38276a878 + React-jsinspectortracing: b341c5ef6e031a33e0bd462d67fd397e8e9cd612 + React-jsitooling: 401655e05cb966b0081225c5201d90734a567cb9 + React-jsitracing: 67eff6dea0cb58a1e7bd8b49243012d88c0f511e + React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48 + React-Mapbuffer: 9d2434a42701d6144ca18f0ca1c4507808ca7696 + React-microtasksnativemodule: 75b6604b667d297292345302cc5bfb6b6aeccc1b + React-NativeModulesApple: 879fbdc5dcff7136abceb7880fe8a2022a1bd7c3 + React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d + React-perflogger: 5536d2df3d18fe0920263466f7b46a56351c0510 + React-performancetimeline: 9041c53efa07f537164dcfe7670a36642352f4c2 + React-RCTActionSheet: 42195ae666e6d79b4af2346770f765b7c29435b9 + React-RCTAnimation: fa103ccc3503b1ed8dedca7e62e7823937748843 + React-RCTAppDelegate: 665d4baf19424cef08276e9ac0d8771eec4519f9 + React-RCTBlob: 0fa9530c255644db095f2c4fd8d89738d9d9ecc0 + React-RCTFabric: 1fcd8af6e25f92532f56b4ba092e58662c14d156 + React-RCTFBReactNativeSpec: db171247585774f9f0a30f75109cc51568686213 + React-RCTImage: ba824e61ce2e920a239a65d130b83c3a1d426dff + React-RCTLinking: d2dc199c37e71e6f505d9eca3e5c33be930014d4 + React-RCTNetwork: 87137d4b9bd77e5068f854dd5c1f30d4b072faf6 + React-RCTPushNotification: ca9c096b09d90972dbf4d604ae181109671a9328 + React-RCTRuntime: 137fafaa808a8b7e76a510e8be45f9f827899daa + React-RCTSettings: 71f5c7fd7b5f4e725a4e2114a4b4373d0e46048f + React-RCTTest: 9a9be55957a94098d1b7227d8a9319edc605445f + React-RCTText: b94d4699b49285bee22b8ebf768924d607eccee3 + React-RCTVibration: 6e3993c4f6c36a3899059f9a9ead560ddaf5a7d7 + React-rendererconsistency: b4785e5ed837dc7c242bbc5fdd464b33ef5bfae7 + React-renderercss: e6fb0ba387b389c595ffa86b8b628716d31f58dc + React-rendererdebug: 60a03de5c7ea59bf2d39791eb43c4c0f5d8b24e3 + React-RuntimeApple: 3df6788cd9b938bb8cb28298d80b5fbd98a4d852 + React-RuntimeCore: fad8adb4172c414c00ff6980250caf35601a0f5d + React-runtimeexecutor: d2db7e72d97751855ea0bf5273d2ac84e5ea390c + React-RuntimeHermes: 04faa4cf9a285136a6d73738787fe36020170613 + React-runtimescheduler: f6a1c9555e7131b4a8b64cce01489ad0405f6e8d + React-timing: 1e6a8acb66e2b7ac9d418956617fd1fdb19322fd + React-utils: 52bbb03f130319ef82e4c3bc7a85eaacdb1fec87 + ReactAppDependencyProvider: 433ddfb4536948630aadd5bd925aff8a632d2fe3 + ReactCodegen: cb2a3dea7ad220568d9453e17d275dbd9f9bc044 + ReactCommon: 394c6b92765cf6d211c2c3f7f6bc601dffb316a6 + ReactCommon-Samples: d083c8092a5ad0df33b1ca589cb2d909fbd6914e ScreenshotManager: cd9e43b0c749ba38101effc22be58f4a69440d5f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 6b30b3f0beeeacf5a3fe68af23442196b196959a + Yoga: a3ed390a19db0459bd6839823a6ac6d9c6db198d PODFILE CHECKSUM: b0abc972ac4c3a335250548a31500196b1a2c163 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 From e3edb38f677265731a8867aa97f1ebdd33fd8b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 11 Dec 2025 11:24:30 +0100 Subject: [PATCH 222/312] add featureflag runtimeCrashUiThreadUtils to enable for certain user group (#129) --- .../com/facebook/react/bridge/UiThreadUtil.kt | 10 ++++++++++ .../featureflags/ReactNativeFeatureFlags.kt | 8 +++++++- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 ++++++++++- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +++- .../ReactNativeFeatureFlagsDefaults.kt | 4 +++- .../ReactNativeFeatureFlagsLocalAccessor.kt | 13 +++++++++++- .../ReactNativeFeatureFlagsProvider.kt | 4 +++- .../JReactNativeFeatureFlagsCxxInterop.cpp | 16 ++++++++++++++- .../JReactNativeFeatureFlagsCxxInterop.h | 5 ++++- .../featureflags/ReactNativeFeatureFlags.cpp | 6 +++++- .../featureflags/ReactNativeFeatureFlags.h | 7 ++++++- .../ReactNativeFeatureFlagsAccessor.cpp | 20 ++++++++++++++++++- .../ReactNativeFeatureFlagsAccessor.h | 6 ++++-- .../ReactNativeFeatureFlagsDefaults.h | 6 +++++- .../ReactNativeFeatureFlagsDynamicProvider.h | 11 +++++++++- .../ReactNativeFeatureFlagsProvider.h | 3 ++- .../NativeReactNativeFeatureFlags.cpp | 7 ++++++- .../NativeReactNativeFeatureFlags.h | 4 +++- .../ReactNativeFeatureFlags.config.js | 10 ++++++++++ .../featureflags/ReactNativeFeatureFlags.js | 7 ++++++- .../specs/NativeReactNativeFeatureFlags.js | 3 ++- 21 files changed, 146 insertions(+), 20 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UiThreadUtil.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UiThreadUtil.kt index 421091a14de..3b8133bd6c4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UiThreadUtil.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UiThreadUtil.kt @@ -9,7 +9,9 @@ package com.facebook.react.bridge import android.os.Handler import android.os.Looper +import com.facebook.infer.annotation.Assertions import com.facebook.react.common.build.ReactBuildConfig +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags /** Utility for interacting with the UI thread. */ public object UiThreadUtil { @@ -35,6 +37,10 @@ public object UiThreadUtil { */ @JvmStatic public fun assertOnUiThread() { + if (ReactNativeFeatureFlags.runtimeCrashUiThreadUtils()) { + Assertions.assertCondition(isOnUiThread(), "Expected to run on UI thread!") + return + } if (ReactBuildConfig.DEBUG) { SoftAssertions.assertCondition(isOnUiThread(), "Expected to run on UI thread!") } @@ -47,6 +53,10 @@ public object UiThreadUtil { */ @JvmStatic public fun assertNotOnUiThread() { + if (ReactNativeFeatureFlags.runtimeCrashUiThreadUtils()) { + Assertions.assertCondition(!isOnUiThread(), "Expected not to run on UI thread!") + return + } if (ReactBuildConfig.DEBUG) { SoftAssertions.assertCondition(!isOnUiThread(), "Expected not to run on UI thread!") } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index 8a10052cd03..0303f9e53c6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<21b64dde474f052173af1442e222e62c>> */ /** @@ -396,6 +396,12 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun virtualViewPrerenderRatio(): Double = accessor.virtualViewPrerenderRatio() + /** + * Instead of logging a soft exception crash the app in UiThreadUtils. + */ + @JvmStatic + public fun runtimeCrashUiThreadUtils(): Boolean = accessor.runtimeCrashUiThreadUtils() + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 4c31c559aa4..0e756c2fbf1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8e0125e82b359e6a175ffc49a4df5537>> + * @generated SignedSource<<3716e04e3220977d4f1be506ac6c8201>> */ /** @@ -81,6 +81,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var useTurboModuleInteropCache: Boolean? = null private var useTurboModulesCache: Boolean? = null private var virtualViewPrerenderRatioCache: Double? = null + private var runtimeCrashUiThreadUtilsCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -631,6 +632,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun runtimeCrashUiThreadUtils(): Boolean { + var cached = runtimeCrashUiThreadUtilsCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.runtimeCrashUiThreadUtils() + runtimeCrashUiThreadUtilsCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider): Unit = ReactNativeFeatureFlagsCxxInterop.override(provider as Any) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index 915e42883fc..ce1988e7772 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<3e77a3faa835b76ce4618699340bf153>> */ /** @@ -150,6 +150,8 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun virtualViewPrerenderRatio(): Double + @DoNotStrip @JvmStatic public external fun runtimeCrashUiThreadUtils(): Boolean + @DoNotStrip @JvmStatic public external fun override(provider: Any) @DoNotStrip @JvmStatic public external fun dangerouslyReset() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 3bc959967ac..4a522463ec7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<854ea702c230ffc221d192b28470a967>> */ /** @@ -144,4 +144,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useTurboModules(): Boolean = false override fun virtualViewPrerenderRatio(): Double = 5.0 + + override fun runtimeCrashUiThreadUtils(): Boolean = false } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index b5aa6b46dd7..a0bf982ff44 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -85,6 +85,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var useTurboModuleInteropCache: Boolean? = null private var useTurboModulesCache: Boolean? = null private var virtualViewPrerenderRatioCache: Double? = null + private var runtimeCrashUiThreadUtilsCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -696,6 +697,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } + override fun runtimeCrashUiThreadUtils(): Boolean { + var cached = runtimeCrashUiThreadUtilsCache + if (cached == null) { + cached = currentProvider.runtimeCrashUiThreadUtils() + accessedFeatureFlags.add("runtimeCrashUiThreadUtils") + runtimeCrashUiThreadUtilsCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider) { if (accessedFeatureFlags.isNotEmpty()) { val accessedFeatureFlagsStr = accessedFeatureFlags.joinToString(separator = ", ") { it } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index de14fb57768..a8af04115c2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<21704207ce520def05b05f89dfba1048>> + * @generated SignedSource<> */ /** @@ -144,4 +144,6 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun useTurboModules(): Boolean @DoNotStrip public fun virtualViewPrerenderRatio(): Double + + @DoNotStrip public fun runtimeCrashUiThreadUtils(): Boolean } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 5ae6ba010df..619bc19f8d6 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -405,6 +405,12 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } + bool runtimeCrashUiThreadUtils() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("runtimeCrashUiThreadUtils"); + return method(javaProvider_); + } + private: jni::global_ref javaProvider_; }; @@ -714,6 +720,11 @@ double JReactNativeFeatureFlagsCxxInterop::virtualViewPrerenderRatio( return ReactNativeFeatureFlags::virtualViewPrerenderRatio(); } +bool JReactNativeFeatureFlagsCxxInterop::runtimeCrashUiThreadUtils( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::runtimeCrashUiThreadUtils(); +} + void JReactNativeFeatureFlagsCxxInterop::override( facebook::jni::alias_ref /*unused*/, jni::alias_ref provider) { @@ -928,6 +939,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "virtualViewPrerenderRatio", JReactNativeFeatureFlagsCxxInterop::virtualViewPrerenderRatio), + makeNativeMethod( + "runtimeCrashUiThreadUtils", + JReactNativeFeatureFlagsCxxInterop::runtimeCrashUiThreadUtils), }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index a04ebe7fc0e..9dde8d95a03 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<57f2dcf4b71512c6b15e8021258d6036>> + * @generated SignedSource<<425f1171eab19457655a1e44c70ccce9>> */ /** @@ -213,6 +213,9 @@ class JReactNativeFeatureFlagsCxxInterop static double virtualViewPrerenderRatio( facebook::jni::alias_ref); + static bool runtimeCrashUiThreadUtils( + facebook::jni::alias_ref); + static void override( facebook::jni::alias_ref, jni::alias_ref provider); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 667aec1cb3f..dcb49bb5c99 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<2cabd888b74b84201ff027457efc6007>> + * @generated SignedSource<<8ad0f05f80746e940f1a328cc740b74e>> */ /** @@ -270,6 +270,10 @@ double ReactNativeFeatureFlags::virtualViewPrerenderRatio() { return getAccessor().virtualViewPrerenderRatio(); } +bool ReactNativeFeatureFlags::runtimeCrashUiThreadUtils() { + return getAccessor().runtimeCrashUiThreadUtils(); +} + void ReactNativeFeatureFlags::override( std::unique_ptr provider) { getAccessor().override(std::move(provider)); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index 564d82bba30..01b5220576a 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<785cec50c339623ac36278c7eb2fb960>> */ /** @@ -344,6 +344,11 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static double virtualViewPrerenderRatio(); + /** + * Instead of logging a soft exception crash the app in UiThreadUtils. + */ + RN_EXPORT static bool runtimeCrashUiThreadUtils(); + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index d3b0351a093..6e3309301ac 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<7ae9a203a94e3a22197bc9eda69b741c>> + * @generated SignedSource<<0b1c7aa30d0a6ac67cb7d9fbec1f4782>> */ /** @@ -1127,6 +1127,24 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() { return flagValue.value(); } +bool ReactNativeFeatureFlagsAccessor::runtimeCrashUiThreadUtils() { + auto flagValue = runtimeCrashUiThreadUtils_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(61, "runtimeCrashUiThreadUtils"); + + flagValue = currentProvider_->runtimeCrashUiThreadUtils(); + runtimeCrashUiThreadUtils_ = flagValue; + } + + return flagValue.value(); +} + void ReactNativeFeatureFlagsAccessor::override( std::unique_ptr provider) { if (wasOverridden_) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 8e2acc5b241..f17a0683c46 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<74560113d0b23c05d7822eeba1c0dee4>> + * @generated SignedSource<<9390960564d09a73a63256c0d70c0fe3>> */ /** @@ -93,6 +93,7 @@ class ReactNativeFeatureFlagsAccessor { bool useTurboModuleInterop(); bool useTurboModules(); double virtualViewPrerenderRatio(); + bool runtimeCrashUiThreadUtils(); void override(std::unique_ptr provider); std::optional getAccessedFeatureFlagNames() const; @@ -104,7 +105,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 61> accessedFeatureFlags_; + std::array, 62> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> animatedShouldSignalBatch_; @@ -167,6 +168,7 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> useTurboModuleInterop_; std::atomic> useTurboModules_; std::atomic> virtualViewPrerenderRatio_; + std::atomic> runtimeCrashUiThreadUtils_; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 3104ed208eb..c2a0452c8f7 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<20176ba5419dc79d6aef4ab819667907>> + * @generated SignedSource<<2a54f4c7b1e548f6efec9dbf69628964>> */ /** @@ -270,6 +270,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { double virtualViewPrerenderRatio() override { return 5.0; } + + bool runtimeCrashUiThreadUtils() override { + return false; + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index f5c85f530a4..13158df63c4 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<244db790cc754f31402981967cd902b5>> + * @generated SignedSource<> */ /** @@ -593,6 +593,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::virtualViewPrerenderRatio(); } + + bool runtimeCrashUiThreadUtils() override { + auto value = values_["runtimeCrashUiThreadUtils"]; + if (!value.isNull()) { + return value.getBool(); + } + + return ReactNativeFeatureFlagsDefaults::runtimeCrashUiThreadUtils(); + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index e9dd92d9494..3bff20ec4a6 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<2387ed12fe46fb5b606ad13a17511f03>> + * @generated SignedSource<> */ /** @@ -86,6 +86,7 @@ class ReactNativeFeatureFlagsProvider { virtual bool useTurboModuleInterop() = 0; virtual bool useTurboModules() = 0; virtual double virtualViewPrerenderRatio() = 0; + virtual bool runtimeCrashUiThreadUtils() = 0; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index 1e9e0ffc9b2..49741ba03ce 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<45e1b08fd2438b27af82591b5cfa5744>> + * @generated SignedSource<<838c1a240c704205ec9874459e8aad7c>> */ /** @@ -349,4 +349,9 @@ double NativeReactNativeFeatureFlags::virtualViewPrerenderRatio( return ReactNativeFeatureFlags::virtualViewPrerenderRatio(); } +bool NativeReactNativeFeatureFlags::runtimeCrashUiThreadUtils( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::runtimeCrashUiThreadUtils(); +} + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index bc8014a5d80..968fc0b929e 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<45145b6c6a668a32a803275425582d0f>> */ /** @@ -157,6 +157,8 @@ class NativeReactNativeFeatureFlags bool useTurboModules(jsi::Runtime& runtime); double virtualViewPrerenderRatio(jsi::Runtime& runtime); + + bool runtimeCrashUiThreadUtils(jsi::Runtime& runtime); }; } // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index c55d1311ca1..5fc31902859 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -691,6 +691,16 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, + runtimeCrashUiThreadUtils: { + defaultValue: false, + metadata: { + dateAdded: '2025-12-11', + description: 'Instead of logging a soft exception crash the app in UiThreadUtils.', + expectedReleaseValue: true, + purpose: 'experimentation', + }, + ossReleaseStage: 'none', + }, }, jsOnly: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index dff7543dedf..c5dfc0b1e78 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<3f339630fb5cff04f64898f7140dd78d>> * @flow strict * @noformat */ @@ -112,6 +112,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{ useTurboModuleInterop: Getter, useTurboModules: Getter, virtualViewPrerenderRatio: Getter, + runtimeCrashUiThreadUtils: Getter, }>; /** @@ -442,6 +443,10 @@ export const useTurboModules: Getter = createNativeFlagGetter('useTurbo * Initial prerender ratio for VirtualView. */ export const virtualViewPrerenderRatio: Getter = createNativeFlagGetter('virtualViewPrerenderRatio', 5); +/** + * Instead of logging a soft exception crash the app in UiThreadUtils. + */ +export const runtimeCrashUiThreadUtils: Getter = createNativeFlagGetter('runtimeCrashUiThreadUtils', false); /** * Overrides the feature flags with the provided methods. diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index 4558b60203c..7cbf3572edc 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8b4f1275a16d5b83f5594da1eb89c6c1>> + * @generated SignedSource<> * @flow strict * @noformat */ @@ -86,6 +86,7 @@ export interface Spec extends TurboModule { +useTurboModuleInterop?: () => boolean; +useTurboModules?: () => boolean; +virtualViewPrerenderRatio?: () => number; + +runtimeCrashUiThreadUtils?: () => boolean; } const NativeReactNativeFeatureFlags: ?Spec = TurboModuleRegistry.get( From 8ae4c6324199d86824255fdef1f7ac938f162a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 11 Dec 2025 12:21:40 +0100 Subject: [PATCH 223/312] avoid printing view hierarchy in prod --- .../react/fabric/mounting/SurfaceMountingManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java index a1675f9ea40..86e9da4293b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java @@ -1139,6 +1139,11 @@ public View getView(int reactTag) { } public void printSurfaceState() { + if (!ReactBuildConfig.DEBUG) { + // this is too noisy in prod and is overloading our breadcrumbs + return; + } + FLog.e(TAG, "Views created for surface {%d}:", getSurfaceId()); for (ViewState viewState : mTagToViewState.values()) { String viewManagerName = From 2f1be1d5595a008582ac57da00666106b13ea111 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Thu, 11 Dec 2025 13:07:03 +0000 Subject: [PATCH 224/312] Updated version to 0.81.4-discord-24 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 70521f8aa64..a26d3fbccc4 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-23 +VERSION_NAME=0.81.4-discord-24 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From 8deb743af209e2b3e4fc894af70ace7b6afab875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Fri, 12 Dec 2025 21:59:03 +0100 Subject: [PATCH 225/312] remove excessive logs --- .../src/main/jni/react/fabric/FabricUIManagerBinding.cpp | 8 -------- .../react/renderer/mounting/MountingCoordinator.cpp | 2 -- .../ReactCommon/react/renderer/mounting/ShadowTree.cpp | 4 ---- 3 files changed, 14 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp index 319c7707e75..884b108fade 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp @@ -631,18 +631,10 @@ void FabricUIManagerBinding::schedulerShouldRenderTransactions( /* willPerformAsynchronously = */ true); if (mountingTransaction.has_value()) { auto transaction = std::move(*mountingTransaction); - LOG(WARNING) << "⚙️ schedulerShouldRenderTransactions (enableAccumulatedUpdatesInRawPropsAndroid), items: " - << mountingTransaction->getMutations().size() - << " pending mounting transaction(s) for new base revision: " - << mountingCoordinator->getBaseRevision().number; mountingManager->executeMount(transaction); } } else { std::vector pendingTransactions; - LOG(WARNING) << "⚙️ schedulerShouldRenderTransactions " - << pendingTransactions_.size() - << " pending mounting transaction(s) for new base revision: " - << mountingCoordinator->getBaseRevision().number; { // Retain the lock to access the pending transactions but not to execute diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp index 3aaa336d7a7..73fff70aa66 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp @@ -95,8 +95,6 @@ std::optional MountingCoordinator::pullTransaction( telemetry.willDiff(); - LOG(WARNING) << "⚙️ Diffing revision " << baseRevision_.number - << " to " << lastRevision_->number; auto mutations = calculateShadowViewMutations( *baseRevision_.rootShadowNode, *lastRevision_->rootShadowNode); diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 7ad3cb63af7..b617a981683 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -390,13 +390,9 @@ ShadowTreeRevision ShadowTree::getCurrentRevision() const { void ShadowTree::mount(ShadowTreeRevision revision, bool mountSynchronously) const { - LOG(WARNING) << "⚙️ Mounting revision " << revision.number - << " (" << (mountSynchronously ? "synchronously" : "asynchronously") << ")"; mountingCoordinator_->push(std::move(revision)); delegate_.shadowTreeDidFinishTransaction( mountingCoordinator_, mountSynchronously); - LOG(WARNING) << "☑️ Finished mount-phase revision " << revision.number - << " (" << (mountSynchronously ? "synchronously" : "asynchronously") << ")"; } void ShadowTree::commitEmptyTree() const { From 583d8062564e8f82446c961aa447a840a67b7004 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Fri, 12 Dec 2025 22:03:52 +0000 Subject: [PATCH 226/312] Updated version to 0.81.4-discord-25 --- packages/react-native/ReactAndroid/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index a26d3fbccc4..bc7555295bf 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.81.4-discord-24 +VERSION_NAME=0.81.4-discord-25 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true From a80c64a932373162bf8693f1d43473a8e7dfffa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 18 Dec 2025 14:58:51 +0100 Subject: [PATCH 227/312] fix(android): handle transitioning views (#130) * first impl * add UIManager methods * add custom view manager to test code * paper implement method * refactor code: make ViewTransitioNCoordinator handle the main stuff * fix tests with discord changes * test for viewtransitioncoordinator * add test to verify ViewTransitionCoordinator * fix various edge cases * test case * remove debug logs * wip: add deleteView to queue as well * refactor: make childTag first arg * removed checked todo item * fix queue getting stuck * fix correctness of queues clearing up properly * avoid confusing double loop * cleanup previous mechanisms * refactor: exec. first removes immediately There were two mistake in the previous implementation. Let's say we have: - markTransition A - remove A - delete A then we need to execute the remove A immediately, instead of queuing it. A will be removed from its parent, but as its in transition, will keep its pointer to the parent. This will cause the onDetach listener to fire naturally. The second mistake was to drain the queue when markViewInTransition=false was being called. This will be called e.g. during drawing passes (ie. on animation end), and we don't want to change the view hierarchy during draw passes! With the previous fix the onDetach should always be called, so running it in markViewInTransition is not necessary any longer * add explicit handling for when view has parent but markViewInTransition was not called --- .../com/facebook/react/bridge/UIManager.kt | 14 + .../react/fabric/FabricUIManager.java | 8 + .../mounting/SurfaceMountingManager.java | 226 +++++-- .../react/fabric/mounting/ViewOperations.kt | 113 ++++ .../mounting/ViewTransitionCoordinator.kt | 264 ++++++++ .../facebook/react/shell/MainReactPackage.kt | 6 +- .../react/uimanager/UIManagerModule.java | 6 + .../react/uimanager/ViewGroupManager.kt | 39 +- .../views/view/ReactClippingViewManager.kt | 19 +- .../SurfaceMountingManagerIntegrationTest.kt | 629 ++++++++++++++++++ .../mounting/ViewTransitionCoordinatorTest.kt | 192 ++++++ .../react/runtime/ReactHostDelegateTest.kt | 6 +- .../facebook/testutils/fakes/FakeUIManager.kt | 4 + .../react/uiapp/RNTesterApplication.kt | 7 +- .../uiapp/component/CustomViewManager.kt | 79 +++ .../Playground/CustomViewNativeComponent.js | 22 + .../examples/Playground/RNTesterPlayground.js | 115 +++- packages/rn-tester/package.json | 3 + 18 files changed, 1623 insertions(+), 129 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewOperations.kt create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinator.kt create mode 100644 packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/SurfaceMountingManagerIntegrationTest.kt create mode 100644 packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinatorTest.kt create mode 100644 packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/CustomViewManager.kt create mode 100644 packages/rn-tester/js/examples/Playground/CustomViewNativeComponent.js diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.kt index 21cf94272ec..b69fdd505f6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.kt @@ -177,4 +177,18 @@ public interface UIManager : PerformanceCounter { * @param reactTag The react tag for the specific view */ public fun sweepActiveTouchForTag(surfaceId: Int, reactTag: Int) + + /** + * Mark a view as being in or out of an Android view transition. + * + * When a ViewManager calls ViewGroup.startViewTransition/endViewTransition, or uses + * LayoutTransition it should call this method to notify the UI manager. This allows + * the mounting system to queue operations that would otherwise fail because the view + * is temporarily in a transitioning state. + * + * @param surfaceId The surface ID where the view is rendered + * @param reactTag The react tag for the specific view + * @param isTransitioning True if the view is entering a transition, false if exiting + */ + public fun markViewAsInTransition(surfaceId: Int, reactTag: Int, isTransitioning: Boolean) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 89360c18536..9115873cd96 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -496,6 +496,14 @@ public void sweepActiveTouchForTag(int surfaceId, int reactTag) { } } + @Override + public void markViewAsInTransition(int surfaceId, int reactTag, boolean isTransitioning) { + SurfaceMountingManager surfaceMountingManager = mMountingManager.getSurfaceManager(surfaceId); + if (surfaceMountingManager != null) { + surfaceMountingManager.markViewInTransition(reactTag, isTransitioning); + } + } + /** * Method added to Fabric for backward compatibility reasons, as users on Paper could call * [addUiBlock] and [prependUiBlock] on UIManagerModule. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java index 86e9da4293b..6fd53fc5709 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java @@ -9,7 +9,9 @@ import static com.facebook.infer.annotation.ThreadConfined.ANY; import static com.facebook.infer.annotation.ThreadConfined.UI; +import static com.facebook.react.fabric.mounting.ViewOperationsKt.DELETE_VIEW_PARENT_TAG; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -76,9 +78,6 @@ public class SurfaceMountingManager { private RootViewManager mRootViewManager; private MountItemExecutor mMountItemExecutor; - @ThreadConfined(UI) - private final Set mErroneouslyReaddedReactTags = new HashSet<>(); - // This set is used to keep track of views that are currently being interacted with (i.e. // views that saw a ACTION_DOWN but not a ACTION_UP event yet). This is used to prevent // views from being removed while they are being interacted with as their event emitter will @@ -95,6 +94,9 @@ public class SurfaceMountingManager { private final int mSurfaceId; + // Coordinates view operations that need to wait for Android view transitions + private final ViewTransitionCoordinator mViewTransitionCoordinator; + public SurfaceMountingManager( int surfaceId, @NonNull JSResponderHandler jsResponderHandler, @@ -108,6 +110,7 @@ public SurfaceMountingManager( mRootViewManager = rootViewManager; mMountItemExecutor = mountItemExecutor; mThemedReactContext = reactContext; + mViewTransitionCoordinator = new ViewTransitionCoordinator(surfaceId); } public boolean isStopped() { @@ -294,6 +297,9 @@ public void stopSurface() { // causes further operations to noop. mIsStopped = true; + // Clear all pending operations + mViewTransitionCoordinator.clearAllPending(); + // Reset all StateWrapper objects // Since this can happen on any thread, is it possible to race between StateWrapper destruction // and some accesses from View classes in the UI thread? @@ -342,6 +348,32 @@ public void stopSurface() { } } + /** + * Mark a view as being in or out of an Android view transition. + * This is called by ViewManagers when they call ViewGroup.startViewTransition/endViewTransition. + * + * @param tag The React tag of the view + * @param isTransitioning True if the view is entering a transition, false if exiting + */ + @UiThread + public void markViewInTransition(final int tag, boolean isTransitioning) { + UiThreadUtil.assertOnUiThread(); + + ViewState viewState = getNullableViewState(tag); + if (viewState == null) { + return; + } + + View view = viewState.mView; + + // Delegate to coordinator with a callback to drain queues when transition completes + mViewTransitionCoordinator.markViewInTransition( + tag, + isTransitioning, + view, + () -> mViewTransitionCoordinator.drainOperationsForChild(tag, this)); + } + @UiThread public void addViewAt(final int parentTag, final int tag, final int index) { UiThreadUtil.assertOnUiThread(); @@ -369,62 +401,74 @@ public void addViewAt(final int parentTag, final int tag, final int index) { "Unable to find view for viewState " + viewState + " and tag " + tag); } - // Display children before inserting - if (SHOW_CHANGED_VIEW_HIERARCHIES) { - FLog.e(TAG, "addViewAt: [" + tag + "] -> [" + parentTag + "] idx: " + index + " BEFORE"); - logViewHierarchy(parentView, false); + ViewParent viewParent = view.getParent(); + boolean shouldEnqueueOperation = mViewTransitionCoordinator.shouldEnqueueOperation(tag, parentTag); + // Fast path: no queue, no parent, we can just add the view immediately + if (!shouldEnqueueOperation && viewParent == null) { + addViewAtInternal(parentView, view, index); + return; } - ViewParent viewParent = view.getParent(); - if (viewParent != null) { - int actualParentId = - viewParent instanceof ViewGroup ? ((ViewGroup) viewParent).getId() : View.NO_ID; - ReactSoftExceptionLogger.logSoftException( + + // Either we explicitly need to enqueue, or … + if (!shouldEnqueueOperation) { + // … the view has a parent, which we treat as signal to enqueue (as the view must be in transition) + mViewTransitionCoordinator.markViewInTransition( + tag, + true, + view, + () -> mViewTransitionCoordinator.drainOperationsForChild(tag, this) + ); + } + + AddViewOperation operation = + new AddViewOperation(tag, parentTag, index, parentView, view); + mViewTransitionCoordinator.enqueueOperation(operation); + } + + /** + * Internal method to add a view to its parent. This is called either directly from addViewAt + * (for immediate execution) or from the coordinator (for delayed execution). + */ + @UiThread + private void addViewAtInternal(ViewGroup parentView, View child, int atIndex) { + UiThreadUtil.assertOnUiThread(); + if (isStopped()) { + return; + } + + if (child.getParent() != null) { + throw new IllegalViewOperationException( + "addViewAtInternal: cannot insert view [" + + child.getId() + + "] into parent [" + + parentView.getId() + + "]: View already has a parent: [" + + ((ViewGroup) child.getParent()).getId() + + "]"); + } + + // Display children before inserting + if (SHOW_CHANGED_VIEW_HIERARCHIES) { + FLog.e( TAG, - new IllegalStateException( - "addViewAt: cannot insert view [" - + tag - + "] into parent [" - + parentTag - + "]: View already has a parent: [" - + actualParentId - + "] " - + " Parent: " - + viewParent.getClass().getSimpleName() - + " View: " - + view.getClass().getSimpleName())); - - // We've hit an error case, and `addView` will crash below - // if we don't take evasive action (it is an error to add a View - // to the hierarchy if it already has a parent). - // We don't know /why/ this happens yet, but it does happen - // very infrequently in production. - // Thus, we do three things here: - // (1) We logged a SoftException above, so if there's a crash later - // on, we might have some hints about what caused it. - // (2) We remove the View from its parent. - // (3) In case the View was removed from the hierarchy with the - // RemoveDeleteTree instruction, and is now being readded - which - // should be impossible - we mark this as a "readded" View and - // thus prevent the RemoveDeleteTree worker from deleting this - // View in the future. - if (viewParent instanceof ViewGroup) { - ((ViewGroup) viewParent).removeView(view); - } - mErroneouslyReaddedReactTags.add(tag); + "addViewAt: [" + child.getId() + "] -> [" + parentView.getId() + "] idx: " + atIndex + + " BEFORE"); + logViewHierarchy(parentView, false); } + ViewState parentViewState = getViewState(parentView.getId()); try { - getViewGroupManager(parentViewState).addView(parentView, view, index); + getViewGroupManager(parentViewState).addView(parentView, child, atIndex); } catch (IllegalStateException | IndexOutOfBoundsException e) { // Wrap error with more context for debugging throw new IllegalStateException( "addViewAt: failed to insert view [" - + tag + + child.getId() + "] into parent [" - + parentTag + + parentView.getId() + "] at index " - + index, + + atIndex, e); } @@ -441,31 +485,34 @@ public void addViewAt(final int parentTag, final int tag, final int index) { @Override public void run() { FLog.e( - TAG, "addViewAt: [" + tag + "] -> [" + parentTag + "] idx: " + index + " AFTER"); + TAG, + "addViewAt: [" + + child.getId() + + "] -> [" + + parentView.getId() + + "] idx: " + + atIndex + + " AFTER"); logViewHierarchy(parentView, false); } }); } } + /** + * Execute an AddViewOperation from the coordinator. + * This is called by ViewOperation.execute() after notifying the coordinator. + */ + public void executeAddViewOperation(AddViewOperation operation) { + addViewAtInternal(operation.getParent(), operation.getChild(), operation.getIndex()); + } + @UiThread public void removeViewAt(final int tag, final int parentTag, int index) { if (isStopped()) { return; } - // This is "impossible". See comments above. - if (mErroneouslyReaddedReactTags.contains(tag)) { - ReactSoftExceptionLogger.logSoftException( - TAG, - new IllegalViewOperationException( - "removeViewAt tried to remove a React View that was actually reused. This indicates a" - + " bug in the Differ (specifically instruction ordering). [" - + tag - + "]")); - return; - } - UiThreadUtil.assertOnUiThread(); ViewState parentViewState = getNullableViewState(parentTag); @@ -496,12 +543,33 @@ public void removeViewAt(final int tag, final int parentTag, int index) { throw new IllegalStateException("Unable to find view for tag [" + parentTag + "]"); } + if (mViewTransitionCoordinator.shouldEnqueueOperation(tag, parentTag, /* checkTransitionStatus */ false)) { + // ^ checkTransitionStatus = false means we don't check if the view is marked as in transition. + // When a view is in transition we want to call removeViewAt immediately, so it gets marked for removal + // and the onDetach listener will actually fire at some point. + // Only queue if there is already a queue (ie. remove (immediate), add (queued), remove (queued)) + RemoveViewOperation operation = + new RemoveViewOperation(tag, parentTag, index, parentView); + mViewTransitionCoordinator.enqueueOperation(operation); + return; + } + + removeViewAtInternal(parentTag, parentView, tag, index); + } + + /** + * Internal method to remove a view from its parent. This is called either directly from + * removeViewAt (for immediate execution) or from the coordinator (for delayed execution). + */ + @UiThread + private void removeViewAtInternal(int parentTag, final ViewGroup parentView, final int tag, int index) { if (SHOW_CHANGED_VIEW_HIERARCHIES) { // Display children before deleting any FLog.e(TAG, "removeViewAt: [" + tag + "] -> [" + parentTag + "] idx: " + index + " BEFORE"); logViewHierarchy(parentView, false); } + ViewState parentViewState = getViewState(parentTag); IViewGroupManager viewGroupManager = getViewGroupManager(parentViewState); // Verify that the view we're about to remove has the same tag we expect @@ -565,6 +633,7 @@ public void removeViewAt(final int tag, final int parentTag, int index) { } try { + Log.d("SurfaceMountingManager", "Removing view with tag " + tag + " at index " + index + " from parent " + parentTag); viewGroupManager.removeViewAt(parentView, index); } catch (RuntimeException e) { // Note: `getChildCount` may not always be accurate! @@ -619,6 +688,14 @@ public void run() { } } + public void executeRemoveViewOperation(RemoveViewOperation operation) { + removeViewAtInternal( + operation.getParentTag(), + operation.getParentView(), + operation.getChildTag(), + operation.getIndex()); + } + @UiThread public void createView( @NonNull String componentName, @@ -1032,6 +1109,8 @@ private void onViewStateDeleted(ViewState viewState) { viewState.mEventEmitter = null; } + // TODO: i think we should also clear out pending operations? + // For non-root views we notify viewmanager with {@link ViewManager#onDropInstance} ViewManager viewManager = viewState.mViewManager; if (!viewState.mIsRoot && viewManager != null) { @@ -1046,13 +1125,24 @@ public void deleteView(int reactTag) { return; } + if (mViewTransitionCoordinator.shouldEnqueueOperation(reactTag, DELETE_VIEW_PARENT_TAG)) { + DeleteViewOperation operation = new DeleteViewOperation(reactTag); + mViewTransitionCoordinator.enqueueOperation(operation); + return; + } + + deleteViewInternal(reactTag); + } + + @UiThread + private void deleteViewInternal(int reactTag) { ViewState viewState = getNullableViewState(reactTag); if (viewState == null) { ReactSoftExceptionLogger.logSoftException( - ReactSoftExceptionLogger.Categories.SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE, - new ReactNoCrashSoftException( - "Unable to find viewState for tag: " + reactTag + " for deleteView")); + ReactSoftExceptionLogger.Categories.SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE, + new ReactNoCrashSoftException( + "Unable to find viewState for tag: " + reactTag + " for deleteView")); return; } @@ -1067,12 +1157,18 @@ public void deleteView(int reactTag) { // To delete we simply remove the tag from the registry. // We want to rely on the correct set of MountInstructions being sent to the platform, // or StopSurface being called, so we do not handle deleting descendants of the View. + android.util.Log.d("SurfaceMountingManager", "Deleting view with tag: " + reactTag); mTagToViewState.remove(reactTag); onViewStateDeleted(viewState); } } + @UiThread + protected void executeDeleteViewOperation(DeleteViewOperation operation) { + deleteViewInternal(operation.getChildTag()); + } + @UiThread public void preallocateView( @NonNull String componentName, @@ -1226,8 +1322,7 @@ private static class ViewState { @Nullable EventEmitterWrapper mEventEmitter = null; @ThreadConfined(UI) - @Nullable - Queue mPendingEventQueue = null; + @Nullable Queue mPendingEventQueue = null; private ViewState(int reactTag) { this(reactTag, null, null, false); @@ -1285,4 +1380,5 @@ public void dispatch(EventEmitterWrapper eventEmitter) { } } } + } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewOperations.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewOperations.kt new file mode 100644 index 00000000000..4f2d4f66156 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewOperations.kt @@ -0,0 +1,113 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.fabric.mounting + +import android.view.View +import android.view.ViewGroup +import com.facebook.infer.annotation.ThreadConfined + +/** + * These ViewOperations are used by [ViewTransitionCoordinator] when a view is marked + * as in transition: https://developer.android.com/reference/android/view/ViewGroup#startViewTransition(android.view.View) + */ +internal interface ViewOperation { + val childTag: Int + val parentTag: Int + val index: Int? + + /** + * Check if this operation is ready to execute. + * An operation is ready when: + * 1. The child view is not attached to any parent (for add operations) + * 2. This operation is first in line for the child (determined by coordinator) + */ + fun isReadyToExecute(coordinator: ViewTransitionCoordinator): Boolean + + /** + * Execute the operation. This is called by the coordinator when the operation + * becomes ready to execute. + */ + fun execute(manager: SurfaceMountingManager) +} + +@ThreadConfined(ThreadConfined.UI) +internal data class AddViewOperation( + override val childTag: Int, + override val parentTag: Int, + override val index: Int, + val parent: ViewGroup, + val child: View +) : ViewOperation { + + override fun isReadyToExecute(coordinator: ViewTransitionCoordinator): Boolean { + if (child.parent != null) { + // The child is still attached to a parent, so we can't add it yet + return false + } + + return coordinator.isFirstInLineForChild(childTag, parentTag) + } + + override fun execute(manager: SurfaceMountingManager) { + manager.executeAddViewOperation(this) + } + + override fun toString(): String { + return "AddViewOperation(parent=$parentTag, child=$childTag, index=$index)" + } +} + + +@ThreadConfined(ThreadConfined.UI) +internal data class RemoveViewOperation( + override val childTag: Int, + override val parentTag: Int, + override val index: Int, + val parentView: ViewGroup +) : ViewOperation { + + override fun isReadyToExecute(coordinator: ViewTransitionCoordinator): Boolean { + // Remove operations are always ready - we just need to maintain order + // within the queue for the parent + return coordinator.isFirstInLineForChild(childTag, parentTag) + } + + override fun execute(manager: SurfaceMountingManager) { + manager.executeRemoveViewOperation(this) + } + + override fun toString(): String { + return "RemoveViewOperation(parent=$parentTag, child=$childTag, index=$index)" + } +} + +/** Delete operations don't have a parent view, so we use a hardcoded value */ +public const val DELETE_VIEW_PARENT_TAG: Int = -1337 + +@ThreadConfined(ThreadConfined.UI) +internal data class DeleteViewOperation( + override val childTag: Int, + override val parentTag: Int, + override val index: Int? +) : ViewOperation { + constructor(reactTag: Int) : this(reactTag, DELETE_VIEW_PARENT_TAG, null) + + override fun isReadyToExecute(coordinator: ViewTransitionCoordinator): Boolean { + // Remove operations are always ready - we just need to maintain order + // within the queue for the parent + return coordinator.isFirstInLineForChild(childTag, parentTag) + } + + override fun execute(manager: SurfaceMountingManager) { + manager.executeDeleteViewOperation(this) + } + + override fun toString(): String { + return "DeleteViewOperation(child=$childTag)" + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinator.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinator.kt new file mode 100644 index 00000000000..238e9cdbe4c --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinator.kt @@ -0,0 +1,264 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.fabric.mounting + +import android.util.Log +import android.view.View +import androidx.annotation.VisibleForTesting +import com.facebook.infer.annotation.ThreadConfined +import com.facebook.react.bridge.UiThreadUtil +import com.facebook.react.common.build.ReactBuildConfig +import java.util.LinkedList + +/** + * Coordinates pending view operations across Android view transitions. + * + * When Android starts a view transition (via ViewGroup.startViewTransition), views cannot be + * immediately added or removed from the view hierarchy until the transition completes and the + * view detaches. This coordinator manages a queue of pending operations and ensures they execute + * in the correct order once transitions complete. + * + * Key responsibilities: + * - Track which views are currently in transitions + * - Queue operations that can't execute immediately + * - Coordinate cross-parent dependencies (when a view needs to be added to multiple parents) + * - Drain queues when views become ready + */ +@ThreadConfined(ThreadConfined.UI) +internal class ViewTransitionCoordinator(private val surfaceId: Int) { + + companion object { + private const val TAG = "ViewTransitionCoordinator" + } + + // Views currently in Android transitions (via ViewGroup.startViewTransition) + private val viewsInTransition = mutableSetOf() + + // Per-parent queues of pending operations + // Key: parent tag, Value: list of operations waiting to execute + private val parentQueues = mutableMapOf>() + + // Key: child tag, Value: ordered list of parent tags waiting for this child + private val childToParentOrder = mutableMapOf>() + + /** + * Mark a view as being in or out of an Android transition. + */ + fun markViewInTransition( + tag: Int, + transitioning: Boolean, + view: View?, + onDetach: Runnable + ) { + UiThreadUtil.assertOnUiThread() + + if (transitioning) { + if (viewsInTransition.contains(tag)) { + Log.d("HannoDebug", "View [$tag] is already marked as in transition on surface [$surfaceId], ignoring") + return + } + + viewsInTransition.add(tag) + Log.d("HannoDebug", "Marking view [$tag] as in transition on surface [$surfaceId]") + + if (view != null) { + // TODO: we re-create the listener every time for the same view; consider caching it by view + val listener = object : View.OnAttachStateChangeListener { + override fun onViewAttachedToWindow(v: View) {} + + override fun onViewDetachedFromWindow(v: View) { + Log.d("HannoDebug", "[$tag] detached from window, running detach queue") + view.removeOnAttachStateChangeListener(this) + // Looking at how endViewTransition is implemented, dispatchDetachedFromWindow + // gets called _before_ the parent relation is removed, so we need to post this to the end of the frame: + UiThreadUtil.runOnUiThread { + viewsInTransition.remove(tag) // TODO: i think this should be the devs responsibility + Log.d("HannoDebug", "[$tag] detached, run queue now!") + onDetach.run() + } + } + } + view.addOnAttachStateChangeListener(listener) + } + } else { + viewsInTransition.remove(tag) + Log.d("HannoDebug", "Marking view [$tag] as NOT in transition on surface [$surfaceId]") + // NOTE: we don't remove the listener here, as "endViewTransition" may be called + // before the view actually detaches. The listener will remove itself when the view detaches at some point. + } + } + + @JvmOverloads + fun shouldEnqueueOperation(childTag: Int, parentTag: Int, checkTransitionStatus: Boolean = true): Boolean { + if (childToParentOrder.containsKey(childTag)) { + // If the child is queued on some parents we can be sure that the operation needs to be queued + return true + } + + // If parent has a queue, everything goes to the queue to maintain order + if (parentQueues.containsKey(parentTag)) { + Log.d("HannoDebug", "shouldEnqueueOperation $parentTag:$childTag -> true (parent has queue)") + return true + } + + // If child is transitioning, we need to queue + if (checkTransitionStatus && viewsInTransition.contains(childTag)) { + Log.d( + "HannoDebug", + "shouldEnqueueOperation $parentTag:$childTag -> true (child in transition)" + ) + return true + } + + return false + } + + fun enqueueOperation(operation: ViewOperation) { + UiThreadUtil.assertOnUiThread() + + val parentTag = operation.parentTag + val childTag = operation.childTag + + val queue = parentQueues.getOrPut(parentTag) { mutableListOf() } + queue.add(operation) + + // Track cross-queue ordering for add operations + val orderList = childToParentOrder.getOrPut(childTag) { LinkedList() } + val lastItem = orderList.lastOrNull() + if (lastItem != parentTag) { + orderList.add(parentTag) + } + + if (ReactBuildConfig.DEBUG) { + Log.d( + TAG, + "[$surfaceId] Enqueued operation: $operation" + ) + } + } + + private var drainingParentTag: Int? = null + /** + * Drain all pending operations for a specific child tag. + * This is called when a child view becomes ready (e.g., transitions complete, view detaches). + */ + fun drainOperationsForChild(childTag: Int, manager: SurfaceMountingManager) { + UiThreadUtil.assertOnUiThread() + + var madeProgress: Boolean + do { + val parentOrderForChild = childToParentOrder[childTag] + if (parentOrderForChild.isNullOrEmpty()) { + Log.d("HannoDebug", "No pending operations for child tag [$childTag]. Nothing to drain.") + break + } + + val parentTag = parentOrderForChild.first + val queue = parentQueues[parentTag] + + if (queue == null) { + error("No queue for parentTag=$parentTag. This should not happen as childToParentOrder indicates there are pending operations. childToParentOrder=$childToParentOrder") + } + if (drainingParentTag == parentTag) { + // we are already draining this parent (re-entrancy), avoid infinite loop + Log.d("HannoDebug", "Already draining parentTag=$parentTag, breaking to avoid double loop") + break + } + drainingParentTag = parentTag + + Log.d("HannoDebug", "Draining operations $parentTag:$childTag, queue=$queue") + madeProgress = drainQueue(parentTag, queue, manager) + Log.d( + "HannoDebug", + "Drained for $parentTag:$childTag, madeProgress=$madeProgress, queue=$queue, childToParentOrder=$childToParentOrder" + ) + + if (queue.isEmpty()) { + parentQueues.remove(parentTag) + } + + } while (madeProgress) + + drainingParentTag = null + } + + private val executedChildIdsForParent = mutableMapOf>() + /** + * Drain a single parent's queue, executing all ready operations. + * + * @return true if any progress was made (operations executed) + */ + private fun drainQueue( + parentTag: Int, + queue: MutableList, + manager: SurfaceMountingManager + ): Boolean { + var madeProgress = false + + val iterator = queue.iterator() + while (iterator.hasNext()) { + val operation = iterator.next() + + if (!operation.isReadyToExecute(this) || viewsInTransition.contains(operation.childTag)) { + Log.d("HannoDebug", "Operation not ready to execute: $operation") + break + } + + if (ReactBuildConfig.DEBUG) { + Log.d( + TAG, + "[$surfaceId] Executing $operation" + ) + } + + iterator.remove() // remove before executing, as execution may re-enter draining + + val executedChildIds = executedChildIdsForParent.getOrPut(parentTag) { mutableSetOf() } + executedChildIds.add(operation.childTag) + + operation.execute(manager) + Log.d("HannoDebug", "Executed operation: $operation, updated childToParentOrder=$childToParentOrder, queue=$queue") + madeProgress = true + } + + val executedChildIds = executedChildIdsForParent[parentTag] + if (queue.isEmpty() && executedChildIds != null) { + // we drained the whole queue for this parent, now we need to remove this parent from all executed child's order lists + for (childId in executedChildIds) { + val parentOrderForChild = childToParentOrder[childId] + if (parentOrderForChild?.first != parentTag) { + error("Internal error: operation parentTag $parentTag is not first in childToParentOrder for childTag $childId: $childToParentOrder") + } + parentOrderForChild.removeFirst() + if (parentOrderForChild.isEmpty()) { + childToParentOrder.remove(childId) + } + } + executedChildIdsForParent.remove(parentTag) + } + + return madeProgress + } + + + fun isFirstInLineForChild(childTag: Int, parentTag: Int): Boolean { + val orderList = childToParentOrder[childTag] + return orderList.isNullOrEmpty() || orderList.first == parentTag + } + + fun clearAllPending() { + parentQueues.clear() + childToParentOrder.clear() + viewsInTransition.clear() + } + + @VisibleForTesting + fun isEmpty(): Boolean { + return parentQueues.isEmpty() && childToParentOrder.isEmpty() && viewsInTransition.isEmpty() + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt index bca6cc178da..2089157dc49 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt @@ -139,7 +139,7 @@ constructor(private val config: MainPackageConfig? = null) : ReactHorizontalScrollViewManager(), ReactHorizontalScrollContainerViewManager(), ReactProgressBarViewManager(), - // ReactScrollViewManager(), + ReactScrollViewManager(), ReactSwitchManager(), ReactSafeAreaViewManager(), SwipeRefreshLayoutManager(), @@ -172,8 +172,8 @@ constructor(private val config: MainPackageConfig? = null) : ModuleSpec.viewManagerSpec { ReactProgressBarViewManager() }, ReactSafeAreaViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactSafeAreaViewManager() }, - // ReactScrollViewManager.REACT_CLASS to - // ModuleSpec.viewManagerSpec { ReactScrollViewManager() }, + ReactScrollViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactScrollViewManager() }, ReactSwitchManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactSwitchManager() }, SwipeRefreshLayoutManager.REACT_CLASS to ModuleSpec.viewManagerSpec { SwipeRefreshLayoutManager() }, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index e7aaf46c6a5..c705f153f3f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -235,6 +235,12 @@ public void sweepActiveTouchForTag(int surfaceId, int reactTag) { // Not implemented for Paper. } + + @Override + public void markViewAsInTransition(int surfaceId, int reactTag, boolean isTransitioning) { + // Not implemented for Paper. + } + /** * This method is intended to reuse the {@link ViewManagerRegistry} with FabricUIManager. Do not * use this method as this will be removed in the near future. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt index 1fa38d4be4e..d377f54e9ec 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt @@ -28,44 +28,8 @@ constructor(reactContext: ReactApplicationContext? = null) : public override fun updateExtraData(root: T, extraData: Any): Unit = Unit - // parent: childIndex[] - Used when we can't immediately add a view - protected val operationsMap: WeakHashMap> = WeakHashMap() - - public fun addViewSafely(parent: T, child: View, index: Int, callback: () -> Unit) { - UiThreadUtil.assertOnUiThread() - - if (child.parent == null) { - callback() - return - } - - operationsMap.getOrPut(parent) { - mutableMapOf() - }[index] = true - - // When the child-parent relation is removed, onDetachedFromWindow will be called. - // Its important to wait for detaching as the view might be in a transition, and isn't removed immediately. - child.doOnDetach { - // Looking at how endViewTransition is implemented, dispatchDetachedFromWindow - // gets called _before_ the parent relation is removed, so we need to post this to the end of the frame: - child.post { - if(operationsMap.remove(parent) == null) { - // The addView operation was already countered by a removeView operation while we were waiting - FLog.w("ReactClippingViewManager", "Tried to add a view to a parent after the child was detached, but a remove operation was already enqueued") - return@post - } - FLog.w("ReactClippingViewManager", "addView(): ${child::class.java.simpleName} had a parent, removed from previous parent and after onDetach adding to new parent $parent") - callback() - } - } - - // With the detach listener in place, we can now remove the view from the previous parent: - // Note: This call here is potentially redundant, as SurfaceMountingManager.kt is already removing it - (child.parent as? ViewGroup)?.removeView(child) - } - public override fun addView(parent: T, child: View, index: Int): Unit = - addViewSafely(parent, child, index) { parent.addView(child, index) } + parent.addView(child, index) /** * Convenience method for batching a set of addView calls Note that this adds the views to the @@ -86,7 +50,6 @@ constructor(reactContext: ReactApplicationContext? = null) : public override fun removeViewAt(parent: T, index: Int) { UiThreadUtil.assertOnUiThread() parent.removeViewAt(index) - operationsMap[parent]?.remove(index) } /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt index d49b1ce8689..2f2453e97a1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt @@ -8,15 +8,10 @@ package com.facebook.react.views.view import android.view.View -import android.view.ViewGroup -import androidx.core.view.doOnDetach -import com.facebook.common.logging.FLog import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.uimanager.ReactClippingViewGroupHelper import com.facebook.react.uimanager.ViewGroupManager import com.facebook.react.uimanager.annotations.ReactProp -import java.util.HashMap -import java.util.WeakHashMap /** * View manager which handles clipped subviews. Useful for custom views which extends from @@ -34,13 +29,11 @@ public abstract class ReactClippingViewManager : ViewGroupMa override fun addView(parent: T, child: View, index: Int) { UiThreadUtil.assertOnUiThread() - addViewSafely(parent, child, index) { - val removeClippedSubviews = parent.removeClippedSubviews - if (removeClippedSubviews) { - parent.addViewWithSubviewClippingEnabled(child, index) - } else { - parent.addView(child, index) - } + val removeClippedSubviews = parent.removeClippedSubviews + if (removeClippedSubviews) { + parent.addViewWithSubviewClippingEnabled(child, index) + } else { + parent.addView(child, index) } } @@ -74,7 +67,6 @@ public abstract class ReactClippingViewManager : ViewGroupMa } else { parent.removeViewAt(index) } - operationsMap[parent]?.remove(index) } override fun removeAllViews(parent: T) { @@ -85,7 +77,6 @@ public abstract class ReactClippingViewManager : ViewGroupMa parent.removeAllViewsWithSubviewClippingEnabled() } else { parent.removeAllViews() - operationsMap.remove(parent) } } } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/SurfaceMountingManagerIntegrationTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/SurfaceMountingManagerIntegrationTest.kt new file mode 100644 index 00000000000..5bad21e3f2b --- /dev/null +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/SurfaceMountingManagerIntegrationTest.kt @@ -0,0 +1,629 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.fabric.mounting + +import android.app.Activity +import android.os.Looper +import android.view.ViewGroup +import androidx.core.view.doOnDetach +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.BridgeReactContext +import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance +import com.facebook.react.fabric.mounting.MountingManager.MountItemExecutor +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests +import com.facebook.react.touch.JSResponderHandler +import com.facebook.react.uimanager.RootViewManager +import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.react.uimanager.ViewManager +import com.facebook.react.uimanager.ViewManagerRegistry +import com.facebook.react.views.view.ReactViewManager +import com.facebook.testutils.shadows.ShadowArguments +import com.facebook.testutils.shadows.ShadowNativeArray +import com.facebook.testutils.shadows.ShadowNativeLoader +import com.facebook.testutils.shadows.ShadowNativeMap +import com.facebook.testutils.shadows.ShadowReadableNativeArray +import com.facebook.testutils.shadows.ShadowReadableNativeMap +import com.facebook.testutils.shadows.ShadowSoLoader +import com.facebook.testutils.shadows.ShadowWritableNativeArray +import com.facebook.testutils.shadows.ShadowWritableNativeMap +import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.assertThatThrownBy +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.Shadows +import org.robolectric.annotation.Config +import org.robolectric.shadows.ShadowLog +import java.util.concurrent.CountDownLatch + +@RunWith(RobolectricTestRunner::class) +@Config( + shadows = [ + ShadowArguments::class, + ShadowSoLoader::class, + ShadowNativeLoader::class, + ShadowNativeArray::class, + ShadowNativeMap::class, + ShadowWritableNativeMap::class, + ShadowWritableNativeArray::class, + ShadowReadableNativeMap::class, + ShadowReadableNativeArray::class, + ] +) +class SurfaceMountingManagerIntegrationTest { + + private lateinit var surfaceMountingManager: SurfaceMountingManager + private lateinit var reactContext: BridgeReactContext + private lateinit var themedReactContext: ThemedReactContext + private lateinit var viewManagerRegistry: ViewManagerRegistry + private lateinit var rootViewManager: RootViewManager + private lateinit var mountItemExecutor: MountItemExecutor + private val surfaceId = 1 + private lateinit var activity: Activity + + @Before + fun setup() { + ReactNativeFeatureFlagsForTests.setUp() + reactContext = BridgeReactContext(RuntimeEnvironment.getApplication()) + reactContext.initializeWithInstance(createMockCatalystInstance()) + themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) + + val viewManagers = listOf>(ReactViewManager()) + viewManagerRegistry = ViewManagerRegistry(viewManagers) + rootViewManager = RootViewManager() + mountItemExecutor = MountItemExecutor { } + + surfaceMountingManager = SurfaceMountingManager( + surfaceId, + JSResponderHandler(), + viewManagerRegistry, + rootViewManager, + mountItemExecutor, + themedReactContext + ) + + val controller = Robolectric.buildActivity(Activity::class.java) + controller.setup() // Moves the activity to the "resumed" state + activity = controller.get() + + ShadowLog.stream = System.out + } + + @Test + fun testAddViewAt_immediateExecution_whenNoTransition() { + val parentTag = 100 + val childTag = 200 + + val parentView = createView(parentTag) + val childView = createView(childTag) + + // Verify parent starts empty + assertThat(parentView.childCount).isEqualTo(0) + + // Add child to parent (should execute immediately since no transition) + surfaceMountingManager.addViewAt(parentTag, childTag, 0) + + // Verify child was added immediately + assertThat(parentView.childCount).isEqualTo(1) + assertThat(parentView.getChildAt(0)).isEqualTo(childView) + } + + @Test + fun testRemoveViewAt_queuesOperation_whenParentHasQueuedOperations() { + val parentTag = 100 + val childTag = 200 + + val parentView = createView(parentTag) + val childView = createView(childTag) + + activity.setContentView(parentView) + + // Add child to parent first + surfaceMountingManager.addViewAt(parentTag, childTag, 0) + assertThat(parentView.childCount).isEqualTo(1) + assertThat(childView.isAttachedToWindow).isTrue() + + // Mark child as in transition + parentView.startViewTransition(childView) + surfaceMountingManager.markViewInTransition(childTag, true) + + val latch = CountDownLatch(1) + childView.doOnDetach { + latch.countDown() + } + + // Remove child (should queue since child is in transition) + surfaceMountingManager.removeViewAt(childTag, parentTag, 0) + + // Confusing part: the child has been removed from the parent BUT the child still has its mParent set + assertThat(parentView.childCount).isEqualTo(0) + assertThat(childView.parent).isEqualTo(parentView) + + // Mark child as not transitioning (should drain operations) + parentView.endViewTransition(childView) + surfaceMountingManager.markViewInTransition(childTag, false) + + assertThat(latch.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + assertThat(parentView.childCount).isEqualTo(0) + assertThat(childView.parent).isNull() + } + + @Test + fun testAddViewAt_maintainsParentOrderForSameChild() { + val parent = 10 + val parent1Tag = 100 + val parent2Tag = 200 + val childTag = 300 + + val parentView = createView(parent) + val parent1View = createView(parent1Tag) + val parent2View = createView(parent2Tag) + val childView = createView(childTag) + + activity.setContentView(parentView) + + surfaceMountingManager.addViewAt(parent, parent1Tag, 0) + surfaceMountingManager.addViewAt(parent, parent2Tag, 1) + + // Add child to parent one + surfaceMountingManager.addViewAt(parent1Tag, childTag, 0) + + // Mark child as in transition + parent1View.startViewTransition(childView) + surfaceMountingManager.markViewInTransition(childTag, true) + + val latch = CountDownLatch(1) + childView.doOnDetach { + latch.countDown() + } + + // Queue remove from parent1, then add to parent2 + surfaceMountingManager.removeViewAt(childTag, parent1Tag, 0) + surfaceMountingManager.addViewAt(parent2Tag, childTag, 0) + + assertThat(parent1View.childCount).isEqualTo(0) + assertThat(childView.parent).isEqualTo(parent1View) + assertThat(parent2View.childCount).isEqualTo(0) + + // Mark child as not transitioning (should drain operations) + surfaceMountingManager.markViewInTransition(childTag, false) + parent1View.endViewTransition(childView) + + // Wait for doOnDetach to fire, but don't run the shadow looper inside it … + assertThat(latch.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + // … otherwise ViewTransitionCoordinator's code would run its UIThreadUtil.runOnUiThread + // during dispatchDetachedFromWindow, which is before the parent fields are cleared. + // So run the looper after the detach here: + Shadows.shadowOf(Looper.getMainLooper()).idle() + + // Verify child ends up in parent2 (the last operation) + // Operations should execute: add to parent1, then remove from parent1 and add to parent2 + assertThat(parent1View.childCount).isEqualTo(0) + assertThat(parent2View.childCount).isEqualTo(1) + assertThat(parent2View.getChildAt(0)).isEqualTo(childView) + assertThat(childView.parent).isEqualTo(parent2View) + } + + @Test + fun testRemoveAndDelete_shouldFullyDrain() { + // 1. Parent A has remove operations for child1 and child2 + // 2. Both children also have delete operations queued + // 3. Parent A's queue drains completely (both removes execute) + // 4. Only child2 (last operation) gets to drain and clean up + // 5. Child1 is stuck with parent A in its childToParentOrder + // 6. Child1's delete operation can never execute because it's not "first in line" + + val parentTag = 300 + val child1Tag = 100 + val child2Tag = 200 + + val parentView = createView(parentTag) + val childView1 = createView(child1Tag) + val childView2 = createView(child2Tag) + + activity.setContentView(parentView) + + surfaceMountingManager.addViewAt(parentTag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentTag, child2Tag, 1) + assertThat(parentView.childCount).isEqualTo(2) + assertThat(childView1.isAttachedToWindow).isTrue() + assertThat(childView2.isAttachedToWindow).isTrue() + + parentView.startViewTransition(childView1) + parentView.startViewTransition(childView2) + surfaceMountingManager.markViewInTransition(child1Tag, true) + surfaceMountingManager.markViewInTransition(child2Tag, true) + + val latch = CountDownLatch(2) + childView1.doOnDetach { + latch.countDown() + } + childView2.doOnDetach { + latch.countDown() + } + + // Queue remove operations for both children, important: reverse order + surfaceMountingManager.removeViewAt(child2Tag, parentTag, 1) + surfaceMountingManager.removeViewAt(child1Tag, parentTag, 0) + + // Queue delete operations for both children + surfaceMountingManager.deleteView(child1Tag) + surfaceMountingManager.deleteView(child2Tag) + + // At this point: + // - parentQueues[300] = [Remove(child1), Remove(child2)] + // - parentQueues[-1337] = [Delete(child1), Delete(child2)] + // - childToParentOrder[100] = [300, -1337] + // - childToParentOrder[200] = [300, -1337] + + // Verify operations are queued + assertThat(parentView.childCount).isEqualTo(0) + assertThat(childView1.parent).isEqualTo(parentView) + assertThat(childView2.parent).isEqualTo(parentView) + + // Mark children as not transitioning, triggering drains + // This will cause parent 300 to drain completely + surfaceMountingManager.markViewInTransition(child1Tag, false) + surfaceMountingManager.markViewInTransition(child2Tag, false) + parentView.endViewTransition(childView1) + parentView.endViewTransition(childView2) + + assertThat(latch.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + // Both removes should have executed + assertThat(parentView.childCount).isEqualTo(0) + assertThat(childView1.parent).isNull() + assertThat(childView2.parent).isNull() + + // Both deletes should eventually execute + assertThatThrownBy { + surfaceMountingManager.getView(child1Tag) + } + + assertThatThrownBy { + surfaceMountingManager.getView(child2Tag) + } + + val coordinator = getCoordinator() + assertThat(coordinator.isEmpty()).isTrue() + } + + @Test + fun testRemoveAndReparent_shouldNotDeadlock() { + // Scenario: Remove from parent A, then add to parent B + + val parentATag = 100 + val parentBTag = 200 + val child1Tag = 300 + val child2Tag = 400 + + val parentAView = createView(parentATag) + val parentBView = createView(parentBTag) + val childView1 = createView(child1Tag) + val childView2 = createView(child2Tag) + + activity.setContentView(parentAView) + + // Add both children to parent A + surfaceMountingManager.addViewAt(parentATag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentATag, child2Tag, 1) + assertThat(parentAView.childCount).isEqualTo(2) + + // Mark children as in transition + parentAView.startViewTransition(childView1) + parentAView.startViewTransition(childView2) + surfaceMountingManager.markViewInTransition(child1Tag, true) + surfaceMountingManager.markViewInTransition(child2Tag, true) + + val latch = CountDownLatch(2) + childView1.doOnDetach { + latch.countDown() + } + childView2.doOnDetach { + latch.countDown() + } + + // Remove from parent A + surfaceMountingManager.removeViewAt(child2Tag, parentATag, 1) + surfaceMountingManager.removeViewAt(child1Tag, parentATag, 0) + + // Reparent to parent B + surfaceMountingManager.addViewAt(parentBTag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentBTag, child2Tag, 1) + + // At this point: + // - childToParentOrder[child1] = [parentA, parentB] + // - childToParentOrder[child2] = [parentA, parentB] + + assertThat(parentAView.childCount).isEqualTo(0) + assertThat(childView1.parent).isEqualTo(parentAView) + assertThat(childView2.parent).isEqualTo(parentAView) + assertThat(parentBView.childCount).isEqualTo(0) + + // Mark children as not transitioning + surfaceMountingManager.markViewInTransition(child1Tag, false) + surfaceMountingManager.markViewInTransition(child2Tag, false) + parentAView.endViewTransition(childView1) + parentAView.endViewTransition(childView2) + + assertThat(latch.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + // Both removes should execute + assertThat(parentAView.childCount).isEqualTo(0) + + // Both adds should execute (deadlock would prevent this) + assertThat(parentBView.childCount).isEqualTo(2) + assertThat(parentBView.getChildAt(0)).isEqualTo(childView1) + assertThat(parentBView.getChildAt(1)).isEqualTo(childView2) + + // Verify coordinator is fully clean + val coordinator = getCoordinator() + assertThat(coordinator.isEmpty()).isTrue() + } + + @Test + fun testMultipleReparenting_shouldNotDeadlock() { + // Bug scenario: Reparent through multiple parents A -> B -> C + // When parent A drains, only child2 cleans up, leaving child1 deadlocked + + val parentATag = 100 + val parentBTag = 200 + val parentCTag = 300 + val child1Tag = 400 + val child2Tag = 500 + + val parentAView = createView(parentATag) + val parentBView = createView(parentBTag) + val parentCView = createView(parentCTag) + val childView1 = createView(child1Tag) + val childView2 = createView(child2Tag) + + activity.setContentView(parentAView) + + // Add both children to parent A + surfaceMountingManager.addViewAt(parentATag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentATag, child2Tag, 1) + assertThat(parentAView.childCount).isEqualTo(2) + + // Mark children as in transition + parentAView.startViewTransition(childView1) + parentAView.startViewTransition(childView2) + surfaceMountingManager.markViewInTransition(child1Tag, true) + surfaceMountingManager.markViewInTransition(child2Tag, true) + + val latch = CountDownLatch(2) + childView1.doOnDetach { + latch.countDown() + } + childView2.doOnDetach { + latch.countDown() + } + + // Reparent A -> B + surfaceMountingManager.removeViewAt(child2Tag, parentATag, 1) + surfaceMountingManager.removeViewAt(child1Tag, parentATag, 0) + surfaceMountingManager.addViewAt(parentBTag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentBTag, child2Tag, 1) + + // Reparent B -> C + surfaceMountingManager.removeViewAt(child2Tag, parentBTag, 1) + surfaceMountingManager.removeViewAt(child1Tag, parentBTag, 0) + surfaceMountingManager.addViewAt(parentCTag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentCTag, child2Tag, 1) + + // At this point: + // - childToParentOrder[child1] = [A, B, C] + // - childToParentOrder[child2] = [A, B, C] + + // Mark children as not transitioning + surfaceMountingManager.markViewInTransition(child1Tag, false) + surfaceMountingManager.markViewInTransition(child2Tag, false) + parentAView.endViewTransition(childView1) + parentAView.endViewTransition(childView2) + + assertThat(latch.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + // All operations should execute + assertThat(parentAView.childCount).isEqualTo(0) + assertThat(parentBView.childCount).isEqualTo(0) + assertThat(parentCView.childCount).isEqualTo(2) + assertThat(parentCView.getChildAt(0)).isEqualTo(childView1) + assertThat(parentCView.getChildAt(1)).isEqualTo(childView2) + + val coordinator = getCoordinator() + assertThat(coordinator.isEmpty()).isTrue() + } + + @Test + fun testPartialDrainThenFullDrain_shouldCleanupAllChildren() { + // If a queue partially drains (some ops execute, then blocks on one), + // then later fully drains, all children should be cleaned up from childToParentOrder! + // + // Scenario: + // 1. Queue: [Remove(child1), Remove(child2), Remove(child3), Remove(child4)] + // 2. First drain: child1, child2 execute, then blocks on child3 (still in transition) + // 3. Second drain: child3, child4 execute (queue fully drained) + // 4. Only child3 and child4 get cleaned up from childToParentOrder + // 5. child1 and child2 are left with stale parent reference + + val parentATag = 100 + val parentBTag = 200 + val child1Tag = 300 + val child2Tag = 400 + val child3Tag = 500 + val child4Tag = 600 + + val parentAView = createView(parentATag) + val parentBView = createView(parentBTag) + val childView1 = createView(child1Tag) + val childView2 = createView(child2Tag) + val childView3 = createView(child3Tag) + val childView4 = createView(child4Tag) + + activity.setContentView(parentAView) + + // Add all children to parent A + surfaceMountingManager.addViewAt(parentATag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentATag, child2Tag, 1) + surfaceMountingManager.addViewAt(parentATag, child3Tag, 2) + surfaceMountingManager.addViewAt(parentATag, child4Tag, 3) + assertThat(parentAView.childCount).isEqualTo(4) + + // Mark all children as in transition + parentAView.startViewTransition(childView1) + parentAView.startViewTransition(childView2) + parentAView.startViewTransition(childView3) + parentAView.startViewTransition(childView4) + surfaceMountingManager.markViewInTransition(child1Tag, true) + surfaceMountingManager.markViewInTransition(child2Tag, true) + surfaceMountingManager.markViewInTransition(child3Tag, true) + surfaceMountingManager.markViewInTransition(child4Tag, true) + + val latchA = CountDownLatch(2) + childView1.doOnDetach { + latchA.countDown() + } + childView2.doOnDetach { + latchA.countDown() + } + val latchB = CountDownLatch(2) + childView3.doOnDetach { + latchB.countDown() + } + childView4.doOnDetach { + latchB.countDown() + } + + // Queue removes from parent A + surfaceMountingManager.removeViewAt(child4Tag, parentATag, 3) + surfaceMountingManager.removeViewAt(child3Tag, parentATag, 2) + surfaceMountingManager.removeViewAt(child2Tag, parentATag, 1) + surfaceMountingManager.removeViewAt(child1Tag, parentATag, 0) + + // Queue adds to parent B (this is where we'll detect the bug) + surfaceMountingManager.addViewAt(parentBTag, child1Tag, 0) + surfaceMountingManager.addViewAt(parentBTag, child2Tag, 1) + surfaceMountingManager.addViewAt(parentBTag, child3Tag, 2) + surfaceMountingManager.addViewAt(parentBTag, child4Tag, 3) + + // At this point: + // - parentQueues[parentA] = [Remove(child4), Remove(child3), Remove(child2), Remove(child1)] + // - parentQueues[parentB] = [Add(child1), Add(child2), Add(child3), Add(child4)] + // - childToParentOrder[child1] = [parentA, parentB] + // - childToParentOrder[child2] = [parentA, parentB] + // - childToParentOrder[child3] = [parentA, parentB] + // - childToParentOrder[child4] = [parentA, parentB] + + // First partial drain: Mark child4 and child3 as ready + // This will execute Remove(child4) and Remove(child3), then block on Remove(child2) + surfaceMountingManager.markViewInTransition(child4Tag, false) + surfaceMountingManager.markViewInTransition(child3Tag, false) + parentAView.endViewTransition(childView4) + parentAView.endViewTransition(childView3) + + // Partial drain happened: child1 and child2 removed, but child3 blocks the queue + // Bug: child1 and child2 are NOT cleaned up from childToParentOrder yet + assertThat(latchB.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + // Second full drain: Mark child2 and child1 as ready + // This will execute Remove(child2) and Remove(child1), fully draining parent A's queue + surfaceMountingManager.markViewInTransition(child2Tag, false) + surfaceMountingManager.markViewInTransition(child1Tag, false) + parentAView.endViewTransition(childView2) + parentAView.endViewTransition(childView1) + + assertThat(latchA.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + // Parent A should be fully drained + assertThat(parentAView.childCount).isEqualTo(0) + + // Now all adds to parent B should execute + // Bug: If child1 and child2 still have [parentA, parentB] in childToParentOrder, + // their Add operations to parent B will be blocked (not "first in line") + assertThat(parentBView.childCount).isEqualTo(4) + assertThat(parentBView.getChildAt(0)).isEqualTo(childView1) + assertThat(parentBView.getChildAt(1)).isEqualTo(childView2) + assertThat(parentBView.getChildAt(2)).isEqualTo(childView3) + assertThat(parentBView.getChildAt(3)).isEqualTo(childView4) + + // Verify coordinator is fully clean + val coordinator = getCoordinator() + assertThat(coordinator.isEmpty()).isTrue() + } + + private fun createView(tag: Int): ViewGroup { + val viewType = "RCTView" + val props = Arguments.createMap() + val stateWrapper = null + val eventEmitter = null + + surfaceMountingManager.createView( + viewType, + tag, + props, + stateWrapper, + eventEmitter, + true, + ) + + return surfaceMountingManager.getView(tag) as ViewGroup + } + + @Test + fun testViewNotMarkedButWithParent_worksAsWell() { + val parent1Id = 100 + val parent2Id = 200 + val childId = 300 + + val parent1View = createView(parent1Id) + val parent2View = createView(parent2Id) + val childView = createView(childId) + + activity.setContentView(parent1View) + + surfaceMountingManager.addViewAt(parent1Id, childId, 0) + assertThat(parent1View.childCount).isEqualTo(1) + + // Manual transaction, not using markViewInTransition + parent1View.startViewTransition(childView) + parent1View.removeView(childView) + + // Now try adding to new parent, this should be queued + assertThat(childView.parent).isNotNull() + surfaceMountingManager.addViewAt(parent2Id, childId, 0) + + val latch = CountDownLatch(1) + childView.doOnDetach { + latch.countDown() + } + + parent1View.endViewTransition(childView) + assertThat(latch.await(1, java.util.concurrent.TimeUnit.SECONDS)).isTrue() + Shadows.shadowOf(Looper.getMainLooper()).idle() + + assertThat(parent1View.childCount).isEqualTo(0) + assertThat(parent2View.childCount).isEqualTo(1) + assertThat(parent2View.getChildAt(0)).isEqualTo(childView) + } + + private fun getCoordinator(): ViewTransitionCoordinator { + val coordinatorField = SurfaceMountingManager::class.java.getDeclaredField("mViewTransitionCoordinator") + coordinatorField.isAccessible = true + return coordinatorField.get(surfaceMountingManager) as ViewTransitionCoordinator + } +} diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinatorTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinatorTest.kt new file mode 100644 index 00000000000..2a31c691c89 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/mounting/ViewTransitionCoordinatorTest.kt @@ -0,0 +1,192 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.fabric.mounting + +import android.view.View +import android.widget.FrameLayout +import com.facebook.react.bridge.BridgeReactContext +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests +import com.facebook.testutils.shadows.ShadowSoLoader +import org.assertj.core.api.Assertions.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.mock +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) +class ViewTransitionCoordinatorTest { + + private lateinit var coordinator: ViewTransitionCoordinator + private lateinit var mockManager: SurfaceMountingManager + private lateinit var reactContext: ReactApplicationContext + + @Before + fun setup() { + ReactNativeFeatureFlagsForTests.setUp() + reactContext = BridgeReactContext(RuntimeEnvironment.getApplication()) + coordinator = ViewTransitionCoordinator(surfaceId = 1) + mockManager = mock(SurfaceMountingManager::class.java) + } + + @Test + fun testViewInTransition_shouldEnqueueOperations() { + val childTag = 100 + val parentTag = 200 + + // Initially, operations should not be enqueued + assertThat(coordinator.shouldEnqueueOperation(childTag, parentTag)) + .isFalse() + + // Mark view as in transition + coordinator.markViewInTransition( + tag = childTag, + transitioning = true, + view = null, + onDetach = {} + ) + + // Now operations should be enqueued + assertThat(coordinator.shouldEnqueueOperation(childTag, parentTag)) + .isTrue() + } + + @Test + fun testEnqueueAndDrainAddOperation() { + val childTag = 100 + val parentTag = 200 + val index = 0 + + val parentView = FrameLayout(reactContext) + val childView = View(reactContext) + + // Mark view as transitioning + coordinator.markViewInTransition( + tag = childTag, + transitioning = true, + view = null, + onDetach = {} + ) + + // Create and enqueue an add operation + val operation = AddViewOperation( + parentTag = parentTag, + childTag = childTag, + index = index, + parent = parentView, + child = childView + ) + + coordinator.enqueueOperation(operation) + + // Operation should be queued + assertThat(coordinator.shouldEnqueueOperation(childTag, parentTag)) + .isTrue() + + // Mark view as not transitioning anymore + coordinator.markViewInTransition( + tag = childTag, + transitioning = false, + view = null, + onDetach = { + // This would normally be called when view detaches + coordinator.drainOperationsForChild(childTag, mockManager) + } + ) + } + + @Test + fun testQueueMaintainsOrderForParent() { + val parent1Tag = 200 + val parent2Tag = 300 + val childTag = 100 + + val parentView1 = FrameLayout(reactContext) + val parentView2 = FrameLayout(reactContext) + val childView = View(reactContext) + + // Mark child as transitioning + coordinator.markViewInTransition( + tag = childTag, + transitioning = true, + view = null, + onDetach = {} + ) + + // Enqueue operations to different parents + val op1 = AddViewOperation( + childTag = childTag, + parentTag = parent1Tag, + index = 0, + parent = parentView1, + child = childView + ) + + val op2 = AddViewOperation( + childTag = childTag, + parentTag = parent2Tag, + index = 0, + parent = parentView2, + child = childView + ) + + coordinator.enqueueOperation(op1) + coordinator.enqueueOperation(op2) + + // Both parents should have queues now + assertThat(coordinator.shouldEnqueueOperation(999, parent1Tag)) + .isTrue() + assertThat(coordinator.shouldEnqueueOperation(999, parent2Tag)) + .isTrue() + + // The first parent should be first in line for the child + assertThat(coordinator.isFirstInLineForChild(childTag, parent1Tag)) + .isTrue() + assertThat(coordinator.isFirstInLineForChild(childTag, parent2Tag)) + .isFalse() + } + + @Test + fun testClearAllPending() { + val childTag = 100 + val parentTag = 200 + + // Mark view as transitioning + coordinator.markViewInTransition( + tag = childTag, + transitioning = true, + view = null, + onDetach = {} + ) + + val operation = AddViewOperation( + childTag = childTag, + parentTag = parentTag, + index = 0, + parent = FrameLayout(reactContext), + child = View(reactContext) + ) + + coordinator.enqueueOperation(operation) + + // Verify queue exists + assertThat(coordinator.shouldEnqueueOperation(childTag, parentTag)) + .isTrue() + + // Clear all pending + coordinator.clearAllPending() + + // Queue should be cleared, and view should not be in transition + assertThat(coordinator.shouldEnqueueOperation(childTag, parentTag)) + .isFalse() + } +} diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/runtime/ReactHostDelegateTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/runtime/ReactHostDelegateTest.kt index 0407c0ae127..3bbb4390980 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/runtime/ReactHostDelegateTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/runtime/ReactHostDelegateTest.kt @@ -7,6 +7,7 @@ package com.facebook.react.runtime +import android.content.Context import com.facebook.react.ReactPackageTurboModuleManagerDelegate import com.facebook.react.bridge.JSBundleLoader import com.facebook.react.common.annotations.UnstableReactNativeAPI @@ -36,12 +37,15 @@ class ReactHostDelegateTest { Mockito.mock(ReactPackageTurboModuleManagerDelegate.Builder::class.java) val hermesInstance: JSRuntimeFactory = Mockito.mock(HermesInstance::class.java) val jsMainModulePathMocked = "mockedJSMainModulePath" + val createReactSurfaceViewCallback: (Context, ReactSurfaceImpl) -> ReactSurfaceView = + { ctx, surfaceImpl -> ReactSurfaceView(ctx, surfaceImpl) } val delegate = DefaultReactHostDelegate( jsMainModulePath = jsMainModulePathMocked, jsBundleLoader = jsBundleLoader, jsRuntimeFactory = hermesInstance, - turboModuleManagerDelegateBuilder = turboModuleManagerDelegateBuilderMock) + turboModuleManagerDelegateBuilder = turboModuleManagerDelegateBuilderMock, + createReactSurfaceViewCallback = createReactSurfaceViewCallback) assertThat(delegate.jsMainModulePath).isEqualTo(jsMainModulePathMocked) } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/testutils/fakes/FakeUIManager.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/testutils/fakes/FakeUIManager.kt index f0841bf89d0..ef97fd84f14 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/testutils/fakes/FakeUIManager.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/testutils/fakes/FakeUIManager.kt @@ -120,6 +120,10 @@ class FakeUIManager : UIManager, UIBlockViewResolver { error("Not yet implemented") } + override fun markViewAsInTransition(surfaceId: Int, reactTag: Int, isTransitioning: Boolean) { + error("Not yet implemented") + } + override val performanceCounters: Map? get() = null } diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt index 9859d5b110b..0d9f7ff4146 100644 --- a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.kt @@ -29,6 +29,7 @@ import com.facebook.react.osslibraryexample.OSSLibraryExamplePackage import com.facebook.react.popupmenu.PopupMenuPackage import com.facebook.react.shell.MainReactPackage import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.react.uiapp.component.CustomViewManager import com.facebook.react.uiapp.component.MyLegacyViewManager import com.facebook.react.uiapp.component.MyNativeViewManager import com.facebook.react.uiapp.component.ReportFullyDrawnViewManager @@ -92,7 +93,7 @@ internal class RNTesterApplication : Application(), ReactApplication { }, object : ReactPackage, ViewManagerOnDemandReactPackage { override fun getViewManagerNames(reactContext: ReactApplicationContext) = - listOf("RNTMyNativeView", "RNTMyLegacyNativeView", "RNTReportFullyDrawnView") + listOf("RNTMyNativeView", "RNTMyLegacyNativeView", "RNTReportFullyDrawnView", CustomViewManager.REACT_CLASS) override fun createViewManagers( reactContext: ReactApplicationContext @@ -100,7 +101,8 @@ internal class RNTesterApplication : Application(), ReactApplication { listOf( MyNativeViewManager(), MyLegacyViewManager(reactContext), - ReportFullyDrawnViewManager()) + ReportFullyDrawnViewManager(), + CustomViewManager()) override fun createViewManager( reactContext: ReactApplicationContext, @@ -110,6 +112,7 @@ internal class RNTesterApplication : Application(), ReactApplication { "RNTMyNativeView" -> MyNativeViewManager() "RNTMyLegacyNativeView" -> MyLegacyViewManager(reactContext) "RNTReportFullyDrawnView" -> ReportFullyDrawnViewManager() + CustomViewManager.REACT_CLASS -> CustomViewManager() else -> null } }) diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/CustomViewManager.kt b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/CustomViewManager.kt new file mode 100644 index 00000000000..b02b95bf23e --- /dev/null +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/CustomViewManager.kt @@ -0,0 +1,79 @@ +package com.facebook.react.uiapp.component + +import android.util.Log +import android.view.View +import android.view.ViewGroup +import androidx.core.view.children +import com.facebook.react.bridge.UiThreadUtil +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.react.uimanager.UIManagerHelper +import com.facebook.react.uimanager.ViewGroupManager +import com.facebook.react.uimanager.ViewManagerDelegate +import com.facebook.react.views.view.ReactViewGroup +import com.facebook.react.viewmanagers.CustomViewManagerInterface +import com.facebook.react.viewmanagers.CustomViewManagerDelegate + +@ReactModule(name = CustomViewManager.REACT_CLASS) +public class CustomViewManager : ViewGroupManager(), CustomViewManagerInterface { + private val delegate: CustomViewManagerDelegate = + CustomViewManagerDelegate(this) + + override fun getDelegate(): ViewManagerDelegate = delegate + + override fun getName(): String = REACT_CLASS + + override fun createViewInstance(reactContext: ThemedReactContext): ReactViewGroup = ReactViewGroup(reactContext) + + private val listOfTransitions = mutableListOf>() + public override fun startViewTransition(view: ReactViewGroup?) { + if (view == null) return + + val reactContext = UIManagerHelper.getReactContext(view) + val reactTag = view.id + val uiManager = UIManagerHelper.getUIManagerForReactTag(reactContext, reactTag) + val surfaceId = UIManagerHelper.getSurfaceId(reactContext) + + view.children.forEach { child -> + Log.d("HannoDebug", "Starting view transition for child: ${child.javaClass.simpleName}:${child.id}") + uiManager!!.markViewAsInTransition(surfaceId, child.id, true) + view.startViewTransition(child) + listOfTransitions.add(Pair(view, child)) + if (child is ViewGroup) { + child.children.forEach { + Log.d("HannoDebug", "Starting view transition for grandchild: ${it.javaClass.simpleName}:${it.id}") + uiManager.markViewAsInTransition(surfaceId, it.id, true) + child.startViewTransition(it) + listOfTransitions.add(Pair(child, it) ) + } + } + } + (view.parent as? ViewGroup)?.startViewTransition(view)?.also { + listOfTransitions.add(Pair(view.parent as ViewGroup, view) ) + } + } + + public override fun endViewTransition(view: ReactViewGroup?) { + if (view == null) return + + val reactContext = UIManagerHelper.getReactContext(view) + val reactTag = view.id + val uiManager = UIManagerHelper.getUIManagerForReactTag(reactContext, reactTag) + val surfaceId = UIManagerHelper.getSurfaceId(reactContext) + + // TODO: once fixed also stress test with .reversed(), it should work correctly then + listOfTransitions.reversed().forEach { (parent, child) -> + Log.d("HannoDebug", "Ending view transition for child: ${child.javaClass.simpleName}:${child.id}") + + UiThreadUtil.runOnUiThread({ + parent.endViewTransition(child) + uiManager!!.markViewAsInTransition(surfaceId, child.id, false) + }) + } + listOfTransitions.clear() + } + + public companion object { + public const val REACT_CLASS: String = "CustomView" + } +} diff --git a/packages/rn-tester/js/examples/Playground/CustomViewNativeComponent.js b/packages/rn-tester/js/examples/Playground/CustomViewNativeComponent.js new file mode 100644 index 00000000000..9bfcccafcda --- /dev/null +++ b/packages/rn-tester/js/examples/Playground/CustomViewNativeComponent.js @@ -0,0 +1,22 @@ +// @flow strict-local + +import type {HostComponent, ViewProps} from 'react-native'; +import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; +import {codegenNativeCommands} from 'react-native'; + +type NativeProps = $ReadOnly<{| + ...ViewProps, +|}>; + +export default (codegenNativeComponent( + 'CustomView', +): HostComponent); + +interface NativeCommands { + +startViewTransition: (viewRef: React.ElementRef>) => void; + +endViewTransition: (viewRef: React.ElementRef>) => void; +} + +export const Commands: NativeCommands = codegenNativeCommands({ + supportedCommands: ['startViewTransition', 'endViewTransition'], +}); diff --git a/packages/rn-tester/js/examples/Playground/RNTesterPlayground.js b/packages/rn-tester/js/examples/Playground/RNTesterPlayground.js index d37d0d4a915..418eec0155d 100644 --- a/packages/rn-tester/js/examples/Playground/RNTesterPlayground.js +++ b/packages/rn-tester/js/examples/Playground/RNTesterPlayground.js @@ -12,21 +12,124 @@ import type {RNTesterModuleExample} from '../../types/RNTesterTypes'; import RNTesterText from '../../components/RNTesterText'; import * as React from 'react'; -import {StyleSheet, View} from 'react-native'; + +import {useMemo, useRef, useState} from 'react'; +import {View, Text, Button, StyleSheet} from 'react-native'; +// import CustomViewNativeComponent, {Commands} from '@discordapp/rtn-codegen/js/CustomViewNativeComponent'; +import CustomViewNativeComponent, { Commands } from './CustomViewNativeComponent'; function Playground() { + const [changeZIndex, setChangeZIndex] = useState(false); + const viewRef = useRef>(null); + + const startViewTransition = () => { + if (viewRef.current) { + Commands.startViewTransition(viewRef.current); + } + }; + const endViewTransition = () => { + if (viewRef.current) { + Commands.endViewTransition(viewRef.current); + } + }; + return ( - - - Edit "RNTesterPlayground.js" to change this file - + + +