From 07579d4945e0fee0120c84463b52544a9dae0e2a Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Mon, 7 Jul 2025 14:42:52 +0100 Subject: [PATCH 001/319] 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 000000000000..6cbff7e69d0f --- /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/319] 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 b22fb3e822db..d076bf4acb8b 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 cdb4a85c899e..7f7c7bd2bc92 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/319] 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 84b36a75d708..1a4653e8cb0e 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 1b15cd15041f..cae6eddfe14c 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 0be39ceb9224..ebb1df1cfa92 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 92dba5dace2e..41bf955e7a8f 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 24f6810e3aa7..68fefa3d1fc1 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 8ca79a5c39d0..cec04847ce71 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 cbafe6bf36b1..d23321b76bc0 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 ece94b94e658..2af12dd8b654 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 10ead7344c54..95945f8bdcb8 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 48263c87d2c0..65b675b0962d 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 299f145e4e6b..545ba38d2ba2 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 5897ef53b244..9c48d9809d42 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 fb0d4556cfb7..32aa6bc4e3fe 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 ccfe78e7afa4..a8f7353e1c08 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 48b016fcb2b8..938369d2aade 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 baf6f178868d..d575a5a1ef2f 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 17aaae7809ac..0d6f2e93ecc4 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 bf4a934ebcc4..0e2eebf74a17 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 16068f79d45b..b547ea6c1da7 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 abe99392696d..5d07f5a4900a 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 38344be5bf0d..aeaeba0f479b 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 96311c75092f..220d35a9bc8d 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 cfee63f4daef..3fdfc0f156b6 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 69ce4f75320e..b8737d7bd19d 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 7c0c467db7a6..d145451dbe1b 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 2405d32ce682..29cb572f085f 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 0c876d971a62..b3488570cbbb 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 8c40a5c8a248..fe00343737e9 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 6d32169ee715..951e69765b45 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 9c6463d33673..b80d825f4e6c 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 3a706f61b288..b455336782f4 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 dd596f66ec25..ba68327908d2 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 daa3725bc168..598ae89bbf40 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 b5edd1b17394..edd0d5215702 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/319] 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 1a4653e8cb0e..84b36a75d708 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 cae6eddfe14c..1b15cd15041f 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 ebb1df1cfa92..0be39ceb9224 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 41bf955e7a8f..92dba5dace2e 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 68fefa3d1fc1..24f6810e3aa7 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 cec04847ce71..8ca79a5c39d0 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 d23321b76bc0..cbafe6bf36b1 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 2af12dd8b654..ece94b94e658 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 95945f8bdcb8..10ead7344c54 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 65b675b0962d..48263c87d2c0 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 545ba38d2ba2..299f145e4e6b 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 9c48d9809d42..5897ef53b244 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 32aa6bc4e3fe..fb0d4556cfb7 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 a8f7353e1c08..ccfe78e7afa4 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 938369d2aade..48b016fcb2b8 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 d575a5a1ef2f..baf6f178868d 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 0d6f2e93ecc4..17aaae7809ac 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 0e2eebf74a17..bf4a934ebcc4 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 b547ea6c1da7..16068f79d45b 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 5d07f5a4900a..abe99392696d 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 aeaeba0f479b..38344be5bf0d 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 220d35a9bc8d..96311c75092f 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 3fdfc0f156b6..cfee63f4daef 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 b8737d7bd19d..69ce4f75320e 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 d145451dbe1b..7c0c467db7a6 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 29cb572f085f..2405d32ce682 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 b3488570cbbb..0c876d971a62 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 fe00343737e9..8c40a5c8a248 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 951e69765b45..6d32169ee715 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 b80d825f4e6c..9c6463d33673 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 b455336782f4..3a706f61b288 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 ba68327908d2..dd596f66ec25 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 598ae89bbf40..daa3725bc168 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 edd0d5215702..b5edd1b17394 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/319] [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 d9dec121dd55..deed11a15419 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/319] 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 84b36a75d708..1a4653e8cb0e 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 1b15cd15041f..cae6eddfe14c 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 0be39ceb9224..ebb1df1cfa92 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 92dba5dace2e..41bf955e7a8f 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 24f6810e3aa7..68fefa3d1fc1 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 8ca79a5c39d0..cec04847ce71 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 cbafe6bf36b1..d23321b76bc0 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 ece94b94e658..2af12dd8b654 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 10ead7344c54..95945f8bdcb8 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 48263c87d2c0..65b675b0962d 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 299f145e4e6b..545ba38d2ba2 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 5897ef53b244..9c48d9809d42 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 fb0d4556cfb7..32aa6bc4e3fe 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 ccfe78e7afa4..a8f7353e1c08 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 48b016fcb2b8..938369d2aade 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 baf6f178868d..d575a5a1ef2f 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 17aaae7809ac..0d6f2e93ecc4 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 bf4a934ebcc4..0e2eebf74a17 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 16068f79d45b..b547ea6c1da7 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 abe99392696d..5d07f5a4900a 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 38344be5bf0d..aeaeba0f479b 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 96311c75092f..220d35a9bc8d 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 cfee63f4daef..3fdfc0f156b6 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 69ce4f75320e..b8737d7bd19d 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 7c0c467db7a6..d145451dbe1b 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 2405d32ce682..29cb572f085f 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 0c876d971a62..b3488570cbbb 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 8c40a5c8a248..fe00343737e9 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 6d32169ee715..951e69765b45 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 9c6463d33673..b80d825f4e6c 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 3a706f61b288..b455336782f4 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 dd596f66ec25..ba68327908d2 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 daa3725bc168..598ae89bbf40 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 b5edd1b17394..edd0d5215702 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/319] 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 1a4653e8cb0e..84b36a75d708 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 cae6eddfe14c..1b15cd15041f 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 ebb1df1cfa92..0be39ceb9224 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 41bf955e7a8f..92dba5dace2e 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 68fefa3d1fc1..24f6810e3aa7 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 cec04847ce71..8ca79a5c39d0 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 d23321b76bc0..cbafe6bf36b1 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 2af12dd8b654..ece94b94e658 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 95945f8bdcb8..10ead7344c54 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 65b675b0962d..48263c87d2c0 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 545ba38d2ba2..299f145e4e6b 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 9c48d9809d42..5897ef53b244 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 32aa6bc4e3fe..fb0d4556cfb7 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 a8f7353e1c08..ccfe78e7afa4 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 938369d2aade..48b016fcb2b8 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 d575a5a1ef2f..baf6f178868d 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 0d6f2e93ecc4..17aaae7809ac 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 0e2eebf74a17..bf4a934ebcc4 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 b547ea6c1da7..16068f79d45b 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 5d07f5a4900a..abe99392696d 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 aeaeba0f479b..38344be5bf0d 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 220d35a9bc8d..96311c75092f 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 3fdfc0f156b6..cfee63f4daef 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 b8737d7bd19d..69ce4f75320e 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 d145451dbe1b..7c0c467db7a6 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 29cb572f085f..2405d32ce682 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 b3488570cbbb..0c876d971a62 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 fe00343737e9..8c40a5c8a248 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 951e69765b45..6d32169ee715 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 b80d825f4e6c..9c6463d33673 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 b455336782f4..3a706f61b288 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 ba68327908d2..dd596f66ec25 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 598ae89bbf40..daa3725bc168 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 edd0d5215702..b5edd1b17394 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/319] 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 deed11a15419..d9dec121dd55 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/319] [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 e4983229f644..4921aba754a0 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 2a568e1874e6..d503ff9c511e 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/319] 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 84b36a75d708..1a4653e8cb0e 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 1b15cd15041f..cae6eddfe14c 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 0be39ceb9224..ebb1df1cfa92 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 92dba5dace2e..41bf955e7a8f 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 24f6810e3aa7..68fefa3d1fc1 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 8ca79a5c39d0..cec04847ce71 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 cbafe6bf36b1..d23321b76bc0 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 ece94b94e658..2af12dd8b654 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 10ead7344c54..95945f8bdcb8 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 48263c87d2c0..65b675b0962d 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 299f145e4e6b..545ba38d2ba2 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 5897ef53b244..9c48d9809d42 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 fb0d4556cfb7..32aa6bc4e3fe 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 ccfe78e7afa4..a8f7353e1c08 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 48b016fcb2b8..938369d2aade 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 baf6f178868d..d575a5a1ef2f 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 17aaae7809ac..0d6f2e93ecc4 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 bf4a934ebcc4..0e2eebf74a17 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 16068f79d45b..b547ea6c1da7 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 abe99392696d..5d07f5a4900a 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 38344be5bf0d..aeaeba0f479b 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 96311c75092f..220d35a9bc8d 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 cfee63f4daef..3fdfc0f156b6 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 69ce4f75320e..b8737d7bd19d 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 7c0c467db7a6..d145451dbe1b 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 2405d32ce682..29cb572f085f 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 0c876d971a62..b3488570cbbb 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 8c40a5c8a248..fe00343737e9 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 6d32169ee715..951e69765b45 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 9c6463d33673..b80d825f4e6c 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 3a706f61b288..b455336782f4 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 dd596f66ec25..ba68327908d2 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 daa3725bc168..598ae89bbf40 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 b5edd1b17394..edd0d5215702 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/319] [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 d503ff9c511e..8aa66016adef 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/319] 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 1a4653e8cb0e..cfa2ef628dbc 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 41bf955e7a8f..caee25f966b0 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 6bb60084cb0b..991c90977f51 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 cfc98552a627..725cf30226a1 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 32aa6bc4e3fe..274bc9256b4f 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 fe00343737e9..7b507a0570cc 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 64439cd63553..801045592b50 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 25db5e6af41d..2f49ab2716c4 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/319] @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 36cc66caf888..100db6288248 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 0214403d67c8..fc85587d15e3 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 00508e089a3e..428cd61ed9e6 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 fc70f58c1979..fc5b2b28b8ae 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 c6a3c87d9490..9ad6912d215f 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 eff3c4288287..e974a935798e 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 acf881246c4a..66b767066e3f 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 47945767493c..12793d95d947 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 9360b51f7342..306eb49aa3cb 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 258bb6bcf472..4d81bc58c116 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 a8b45e5745fa..304a0d003b43 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 2745a672cade..b05e6bb7dc6e 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 2ccc7a0edd43..732fe6deedd2 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 1ade7b5d98aa..28a3c0acca34 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 28e3bc0772b5..d13a565d6e0b 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 3fec048a7705..ca7baa180813 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 88ea2110858d..a8b3e7ceae60 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 944d56892ad9..b0ee31db64c6 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 d6e12cc369f7..0e35427ebcf0 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 65d1a01a8f09..6b87da715383 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 393ac8ade429..000000000000 --- 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 11b2814c48bb..66b1519c1652 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 8a98a43c91fc..c36a9be09521 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 c153eda77334..0d94958392de 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 d61f559e8a76..d0fac3071cfa 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 f0c97b732222..bd2464d010f9 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 3403b6d8f278..38033aae0a54 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 4f009cb1adf2..473e2eb4c0ba 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 e3488696fcc4..2e7ccf0b10d9 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 c908d39aae38..66c90ef5e12c 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 39aae4363332..f538b5475ee4 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 e2b2f5865edc..ac8639e22045 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 47d10eb489a6..b02a717e09e7 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 e1bf44598aca..6c43884936a9 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 dddd3312063d..05ca30df409d 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/319] 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 8fc1c7a4d990..ec25a5ba6f65 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 18308e8ac513..ec364e3b3f96 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 356901ebdf22..e5e67bfcb0a6 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 bac3a0e05197..6b5880e98c11 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 8ca229aa09e3..f769f3063d5e 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/319] 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 ec25a5ba6f65..a7bd337287f6 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 ec364e3b3f96..2717ab09e6b7 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 f769f3063d5e..d01a1d330069 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/319] 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 df1a332ac22f..e77e7c4e2e49 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 d2091b00cde5..1bb46163e0a2 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/319] 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 cdaf01e2a790..80b726edfd53 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/319] 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 2e2bd60415ef..437a80be92cc 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 427a74719095..b0cab4521289 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 82e27b2c3ef2..f2692e24c24d 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 fbe0b69e37f1..cc2f5c3d7e63 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 8ffd5c2923dd..e0eaca0aefc4 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 1016a81ad6c6..8bd2c214f601 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 2b8212346cbf..9768c13d4b38 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 795801379b91..63eb78aeb59a 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 be613510df54..6049b7d6b9f8 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 0920534b444a..f5ebc834cbec 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 5dd782ed308a..974f046fef10 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 f0984dc0601a..2b1ca69d69e8 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 f4756ab4af6e..0a213adb9556 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 2c9e811738ba..3448123ee3fa 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 b2884cff041d..0a20f7335235 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 bd9af5b75f8f..29de1623771b 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 345d97686fe6..b672e27c3a63 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 127dc2cec705..d6282664acff 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 687d25201ec6..3014edde8e84 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 7510bb3db467..9433e579bdcb 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 45a8697a1d6b..60e18530c97a 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 6059f09ef1e9..9b127209819a 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 dc6c8c37cf1c..443088bcad4a 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 2de4f6afd63d..224c512030e4 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 91dbb1d6ce91..6f79020f0c3f 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 63efbdaf4650..21206aba7aaa 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 e6eda1f7e441..03e9ad0896cb 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 cb3cbba45bc3..d83e10202c61 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 ea0932fa40c4..b68c407a2f48 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 c1a55996c928..b5335894e5b9 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 edc219a3d516..063f0de34fce 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 8641c8d06794..3c97b10ea0c3 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 f7b860087b76..ca55e1a8a240 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 3579b4b32a98..3be0cac40b54 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 222f33f67605..d6bc746f77b8 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 4bfaae3f62eb..df364406aff9 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 305ab3ac1beb..fc5b29a94b03 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 0c4e9748752c..9f518ff6e8b9 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 ecd07167cd3e..17f1d0120235 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 7f0216450e24..fe20e6063870 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 6f351f597c4d..1af95039868c 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 412da4335dcb..b21eb5b7c10d 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 cfeafdc923e6..ca21eafd2c0d 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 b6ea134e8fcc..46c3c994495b 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 acc74f4e42d1..c213513db898 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 ed8b6ee38a37..c40bcd43d51b 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 2472be4235a5..27eeb6b40b6c 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 f8f0b70268f8..fb32c2a11eaa 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 fc73fed8a163..86216f7d89b3 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 f3ff4b90ed1f..71ba87068e8c 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 a7bd337287f6..6c350b0346bc 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 f6226b00c07e..2cd7ef437254 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 951e69765b45..49b21ae02f16 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 20b40fdaccb4..34cf8a7c3437 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 a65d1032d41b..e96768635781 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/319] 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 65a4a4483459..4892ce8ab278 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 6c350b0346bc..7108f147cf1d 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 000000000000..16c2d7621505 --- /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/319] 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 ef60eba2ad14..a6896b846783 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/319] 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 1b3991d46793..a24a08ceed99 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/319] 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 487566103e24..9e18e93b55fb 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/319] 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 a24a08ceed99..1e9fef41e962 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 9f6c9310a690..994990b83c4a 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 f0902b7441de..db117f7dfc8b 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/319] 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 a3f1bad1c0e1..25b03daf1a67 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/319] 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 002b867c48b3..d4081da476bb 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 ff23a68d70f3..d4081da476bb 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 ff23a68d70f3..d4081da476bb 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/319] 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 8c4eaef934db..db7904286d87 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 fbdf5c1bff7a..d42bd5f9e707 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 5ae7d432ebb3..8068c8149731 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/319] 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 1e9fef41e962..a24a08ceed99 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 994990b83c4a..9f6c9310a690 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 db117f7dfc8b..f0902b7441de 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/319] 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 cfa2ef628dbc..996776fa2c15 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 cae6eddfe14c..7dae6f065dc3 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 ebb1df1cfa92..cb34ae7f773e 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 caee25f966b0..9caecb623eb4 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 68fefa3d1fc1..6db7d9e719b5 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 cec04847ce71..913ee761003e 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 d23321b76bc0..2fd144634b60 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 2af12dd8b654..bcfe6ec308f1 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 95945f8bdcb8..65c866e119fa 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 65b675b0962d..d042ed2ef64a 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 545ba38d2ba2..33114ca1c49b 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 9c48d9809d42..31531cc5b65d 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 274bc9256b4f..0bbbfaa7fe81 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 a8f7353e1c08..0c080ca3c6ee 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 938369d2aade..a537136ba10f 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 d575a5a1ef2f..bd10537265cc 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 0d6f2e93ecc4..f51c1530232b 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 0e2eebf74a17..e5c05de822f7 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 b547ea6c1da7..b6822de8b0f7 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 5d07f5a4900a..37c434435931 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 aeaeba0f479b..6e69f12bb538 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 220d35a9bc8d..96218070735d 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 3fdfc0f156b6..ee1edf1ee693 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 b8737d7bd19d..76c813f5173f 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 d145451dbe1b..0310c0dda3aa 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 29cb572f085f..4f9a897f321c 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 b3488570cbbb..a2eb6d7bc95c 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 7b507a0570cc..de878477d9a7 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 49b21ae02f16..cd2c2580dbf8 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 b80d825f4e6c..8caf56bbf2af 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 b455336782f4..47b0e26eee87 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 ba68327908d2..d1d901e02673 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 598ae89bbf40..58bae0b15be8 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 edd0d5215702..675dc8f5a334 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/319] [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 8aa66016adef..de68e92dbcc1 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/319] 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 d49ba6beac38..4518adb6a5b1 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 2568a07fcca4..acbe8b24c850 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/319] 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 5f18e4240820..2cf830c40b8c 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/319] 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 de878477d9a7..91b304dce4b2 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/319] 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 ac3f24a7b570..56d0b9f2706b 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/319] [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 5749c19ba640..ad23224a8eb5 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 f92b01c5ee3c..5ff85821a335 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/319] [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 ad23224a8eb5..9b9ec6751cfa 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/319] 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 7b80fbc99296..1dcaebb2fb93 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 2b494041a009..24177338f955 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 2410cb49a325..8f356720f0b9 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 e4da3cec69cf..1ca985162229 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 bf535ade7455..85b8dc28dafc 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/319] 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 85b8dc28dafc..bf535ade7455 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/319] [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 da0fefc85cc9..96f0ef3bf8be 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 98b94a42ab97..4a965f526876 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 005c34d70c13..ac7ba42df0c0 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 8fb7c868f421..7a559e2b3883 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 40f181990047..3469d3ab04b7 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 32dc0a1e2d0d..ecacb9c45ef1 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 e7c491089b2c..c18b292a933e 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 ea1b239441a0..5e812f4a5d83 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 9e894e249783..a384a3b0006c 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 3d5ae99d1fbc..262c68e63bef 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 632a9878a1b6..df585d8c6e23 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 cc991214e13d..fc18530eaa61 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 8ee25afabd37..86dc5b3d7eae 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 f80b0b991138..57cd86951e55 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 2ee1c5dd3835..f283d6d641ba 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 765468e4ee89..a9e9a58c8005 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 2f0a127f62e2..ac2506e700f8 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 3819fbf4579d..f05433332df1 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 f34e0c270715..eb4e64ad0712 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 e91e643ccd22..c803f80e027e 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 87b6a7afa47d..6824ae9389c9 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 74e6001241f0..def532446ecf 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 f5720762666b..5bd2bea32154 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 d91d5dbad0c0..600adf6f8d41 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/319] 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 996776fa2c15..98068f89ea3f 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 7dae6f065dc3..8e92b70d1c22 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 cb34ae7f773e..03311bffbafa 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 9caecb623eb4..18a472fb01b4 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 6db7d9e719b5..02611ad049d9 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 913ee761003e..faf422cb18dc 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 2fd144634b60..d7ed541a8586 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 bcfe6ec308f1..fd1e83ffe533 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 65c866e119fa..5744acdca91a 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 d042ed2ef64a..3a4ca4962a04 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 33114ca1c49b..795f9a4ed33b 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 31531cc5b65d..c14898f41ecc 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 0bbbfaa7fe81..b1ba78e908c8 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 0c080ca3c6ee..be8ef6753474 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 a537136ba10f..933c9c9bbbaa 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 bd10537265cc..2745aa202bd6 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 f51c1530232b..29d9e4f15a2e 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 e5c05de822f7..1508ec8cfca6 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 b6822de8b0f7..0dc7012fbda2 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 37c434435931..d5d94955a263 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 6e69f12bb538..4e50d0505fac 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 96218070735d..cbb37586f17d 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 ee1edf1ee693..88f1a2aa15ba 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 76c813f5173f..72daddca1483 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 0310c0dda3aa..3008d258ad0c 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 4f9a897f321c..a261452ab234 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 a2eb6d7bc95c..4b1df51f0f7d 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 91b304dce4b2..a6b28359ee6e 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 cd2c2580dbf8..8b508843e880 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 8caf56bbf2af..37f752f09211 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 47b0e26eee87..05531dec3b6a 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 d1d901e02673..b66e23fe0bee 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 58bae0b15be8..90c83ce7f284 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 675dc8f5a334..a2d8f150a382 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/319] [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 de68e92dbcc1..0b118bfe6625 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/319] [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 41c7e6e869c8..d2c3eeed4e36 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 807e03a742cf..4e4e0d6d6c68 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 ff22a0cb3a09..1d26e17e8fcc 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 5ba4f8dc2aaa..50b21597c9ed 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 22dbe356ee58..47953b676007 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 137efb0a08b2..69f9f05e4087 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 7f7c7bd2bc92..cdb4a85c899e 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 1ca985162229..da115d6030e7 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 98068f89ea3f..e0e4c453695f 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 8e92b70d1c22..9bf621c14da4 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 03311bffbafa..20c630bd39e7 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 18a472fb01b4..91009bc6e49b 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 02611ad049d9..1e16761e6e8f 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 faf422cb18dc..45fd700129d3 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 d7ed541a8586..0f56d212f858 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 fd1e83ffe533..f053c351faa1 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 5744acdca91a..f43a525815b3 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 3a4ca4962a04..674ba25e4395 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 795f9a4ed33b..32c666dc5e6d 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 c14898f41ecc..58e8a317a4b2 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 b1ba78e908c8..533c0e0fdc9c 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 be8ef6753474..23f3635812bf 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 2745aa202bd6..d35451628411 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 29d9e4f15a2e..cf9138ff2999 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 1508ec8cfca6..1706e6b6d923 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 0dc7012fbda2..87fa84b8dfbc 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 d5d94955a263..9be3b433d0d6 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 a6b28359ee6e..57b0376c0955 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 37f752f09211..0e7ace08cdab 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 b66e23fe0bee..971aebfbd728 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 90c83ce7f284..d2e14fe4e5c4 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 a67e918abb7f..471c2ef3c24a 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 a2d8f150a382..c16d941bbe64 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 2f49ab2716c4..a552058a9b04 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/319] 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 57b0376c0955..98cdc69de4cf 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/319] [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 96f0ef3bf8be..b2fb68f5d371 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 4a965f526876..9edc477ef4f2 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 ac7ba42df0c0..afd221a4bf23 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 7a559e2b3883..e59da172abad 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 3469d3ab04b7..baa7b54af776 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 ecacb9c45ef1..2d32fcd900e3 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 c18b292a933e..1da19692aed5 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 5e812f4a5d83..0bcbbc10fc9a 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 a384a3b0006c..42312d4bf225 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 262c68e63bef..1feef5681839 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 df585d8c6e23..6663518acd87 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 fc18530eaa61..877131981d29 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 86dc5b3d7eae..c71e8133664c 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 57cd86951e55..0dc1de80ceda 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 f283d6d641ba..46ec128d23b7 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 a9e9a58c8005..c45e55ce07a6 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 ac2506e700f8..3df0f3be4a19 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 f05433332df1..cda934866a54 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 eb4e64ad0712..5696d5a7c7fc 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 c803f80e027e..483a1915fd6b 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 6824ae9389c9..33e10e102a8d 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 def532446ecf..7bb81fa3bf01 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 5bd2bea32154..ee5043e87bcc 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 600adf6f8d41..e64f0920b3e3 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/319] 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 fc5b2b28b8ae..3a47b5a53031 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 e974a935798e..09c33f458104 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/319] 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 a7177fccf159..94ffb6fea6dd 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 c02c6ddd74ff..0ac0d5fe6747 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/319] 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 da115d6030e7..e68f9a815188 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/319] 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 4921aba754a0..b2d05c5e88fe 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 9e18e93b55fb..ffdf21320f66 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 bd26c3634f44..65e34bb6e482 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 b57075acdf4a..11a6c9bee21f 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/319] 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 5f232cd0e581..f8aee12b8228 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/319] 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 e0e4c453695f..81cbb8648f0b 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 9bf621c14da4..df7a6d818d94 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 20c630bd39e7..b8bd8eae6318 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 91009bc6e49b..61eab96baf42 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 1e16761e6e8f..5254df852360 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 45fd700129d3..f603568ae029 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 0f56d212f858..62b6a2a698ce 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 f053c351faa1..4c102fab8fef 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 f43a525815b3..dedf8ed1125d 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 674ba25e4395..3aaf906a1aaa 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 32c666dc5e6d..bed0e13a97a7 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 58e8a317a4b2..9b0d1ac78c23 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 533c0e0fdc9c..91e08621fb21 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 23f3635812bf..ac9ac4107d0f 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 933c9c9bbbaa..2ca8e4453d50 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 d35451628411..c9a48dd34c13 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 cf9138ff2999..99db9131012d 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 1706e6b6d923..70ea6679e604 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 87fa84b8dfbc..e3b11f4daf30 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 9be3b433d0d6..01c088de7f93 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 4e50d0505fac..d6d272946685 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 cbb37586f17d..54a1f7ead200 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 88f1a2aa15ba..4f32b8505fae 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 72daddca1483..e69d85f3336c 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 3008d258ad0c..072b1bbf009c 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 a261452ab234..b1ebe2e5c722 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 4b1df51f0f7d..36c96a9f75e1 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 98cdc69de4cf..15810fa3127c 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 8b508843e880..bfe4b5e35dc5 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 0e7ace08cdab..dcd31ea6309f 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 05531dec3b6a..324588b60426 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 971aebfbd728..0ae0aeb4f1a9 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 d2e14fe4e5c4..f2bf5487a9d9 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 c16d941bbe64..f74944940500 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/319] [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 0b118bfe6625..6d54a9552211 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/319] 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 e68f9a815188..7996d461d64f 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/319] 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 536b0542f786..4ed8dd2738c9 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/319] 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 81cbb8648f0b..21b85ef28342 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 40fd2a13e723..5d7860f365de 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 7d436ae692b6..f273e4791f8a 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/319] 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 21b85ef28342..b92b5cc9b54a 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 df7a6d818d94..7e416af32921 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 b8bd8eae6318..b316db6106dc 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 61eab96baf42..c939e9298418 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 5254df852360..4f89b61f7e87 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 f603568ae029..f5962438c5e7 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 62b6a2a698ce..89ac702a8110 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 4c102fab8fef..22d3b9066ed8 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 dedf8ed1125d..b7fd10cc2f8a 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 3aaf906a1aaa..6abddf929fd4 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 bed0e13a97a7..faf5b22de8ff 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 9b0d1ac78c23..566c3e46074e 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 91e08621fb21..707dd18ba6c6 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 ac9ac4107d0f..bfa6c30c53b6 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 2ca8e4453d50..c8028c15612a 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 c9a48dd34c13..2cd91b7acfcf 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 99db9131012d..6f180a112633 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 70ea6679e604..0454badb4456 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 e3b11f4daf30..23b792d15f97 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 01c088de7f93..a2f8d7d3d7a4 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 d6d272946685..5db8673b5251 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 54a1f7ead200..dad4883dff3b 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 4f32b8505fae..c2cfd138266e 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 e69d85f3336c..0f1d9db91191 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 072b1bbf009c..d5d9bea9cbb4 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 b1ebe2e5c722..f6168b7b5296 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 36c96a9f75e1..c350947bb98e 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 15810fa3127c..b7598302ded4 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 bfe4b5e35dc5..563b04991044 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 dcd31ea6309f..b9234a26ad54 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 324588b60426..e128c4cdc67d 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 0ae0aeb4f1a9..a584fb54ec81 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 f2bf5487a9d9..4ba305dbf3b7 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 f74944940500..14ae960beb74 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/319] 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 b92b5cc9b54a..8c3a3973f1a9 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 7e416af32921..7bb77ef5c576 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 b316db6106dc..59d7bf3a2785 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 c939e9298418..462c5f1c2d19 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 4f89b61f7e87..556cd7e07492 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 f5962438c5e7..553a9aa2eaf4 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 89ac702a8110..9aaa38989776 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 22d3b9066ed8..45cbcbe5616d 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 b7fd10cc2f8a..191b9c1a7248 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 6abddf929fd4..1a3a6c390b11 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 faf5b22de8ff..3ed4f165a255 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 566c3e46074e..a7632a97adb9 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 707dd18ba6c6..ae2e397d462c 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 bfa6c30c53b6..b6ebbccdaf75 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 c8028c15612a..c0b5e8b5d462 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 2cd91b7acfcf..3603693db582 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 6f180a112633..850ac8432a84 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 0454badb4456..cce1e180ab64 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 23b792d15f97..ad60124fb74a 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 a2f8d7d3d7a4..d4396895af5e 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 5db8673b5251..bb5d4ee5d40d 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 dad4883dff3b..2db95d7ed91a 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 c2cfd138266e..6e58c4a2e434 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 0f1d9db91191..ffe5881c0ce8 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 d5d9bea9cbb4..3451bcbf0580 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 f6168b7b5296..06c2f8972914 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 c350947bb98e..e35a4d9019db 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 b7598302ded4..22bb82454411 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 563b04991044..01b0d127d79a 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 b9234a26ad54..8ac0538da3de 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 e128c4cdc67d..e27f4a64fe09 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 a584fb54ec81..3fe8b6f34aab 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 4ba305dbf3b7..4af31dd14ad9 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 14ae960beb74..5fd54ffe9045 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/319] 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 6d54a9552211..c025ff3550e5 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/319] 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 8c3a3973f1a9..1f9e3a85f66c 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 7bb77ef5c576..0f003391b903 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 59d7bf3a2785..f8f7e02e6b15 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 462c5f1c2d19..3bd526bcb6bb 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 556cd7e07492..adf8c463431f 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 553a9aa2eaf4..d3bf406fb340 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 9aaa38989776..ae0af8a00b9b 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 45cbcbe5616d..e91cdbdc23ae 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 191b9c1a7248..1fbbb922e89d 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 1a3a6c390b11..8fab78a52b5d 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 3ed4f165a255..083659f9ea65 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 a7632a97adb9..43f5f4b4db70 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 ae2e397d462c..81da581acb78 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 b6ebbccdaf75..840e71427ae4 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 c0b5e8b5d462..198d66492b99 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 3603693db582..898267641ebe 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 850ac8432a84..70a99976c20b 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 cce1e180ab64..d725b713c5c9 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 ad60124fb74a..4d3cf4768592 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 d4396895af5e..f520abf077a0 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 bb5d4ee5d40d..3511f853d179 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 2db95d7ed91a..d481370abaae 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 6e58c4a2e434..9027e9072583 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 ffe5881c0ce8..cf6ecb87ce39 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 3451bcbf0580..1ce215e65ca7 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 06c2f8972914..c4df682e7953 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 e35a4d9019db..144429eca42f 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 22bb82454411..0618645c4af3 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 01b0d127d79a..ec7a93558431 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 8ac0538da3de..03ca65609dec 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 e27f4a64fe09..1d1045612db5 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 3fe8b6f34aab..a9982c8082ba 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 4af31dd14ad9..56d7603a99ea 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 5fd54ffe9045..b4fea5faec44 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/319] [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 f5ebc834cbec..1abb84e7e473 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 2b1ca69d69e8..cd5f7f8bd3be 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 0a213adb9556..28a6fc6e78b9 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 3448123ee3fa..9ee30be053f8 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 0a20f7335235..588b4c4d104b 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 29de1623771b..6df5afd9f1e2 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 b672e27c3a63..83e81864640d 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 9bfa3d1ef788..9ee322ba4489 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 9433e579bdcb..a5cc33ecc99a 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 443088bcad4a..78d77ffa539a 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 224c512030e4..cff367fda21e 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 6f79020f0c3f..d17a80a0b00e 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 21206aba7aaa..8e3c2d61b934 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 03e9ad0896cb..4b73c020dcee 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 b68c407a2f48..7b61bc7d0be4 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 b5335894e5b9..274177995178 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 063f0de34fce..089f80ea3c98 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 3c97b10ea0c3..88cfdc7f30ca 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 ca55e1a8a240..6119ccb41057 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 3be0cac40b54..6d4dafcc7076 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 d6bc746f77b8..46327b2c74d6 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 df364406aff9..a41e3d3a3526 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 fc5b29a94b03..051ee3fc86c3 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 9f518ff6e8b9..6e190bbfe6d9 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 3dd85feeb2c2..216fd443ad3c 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 17f1d0120235..c16a9a875b27 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 fe20e6063870..41df93a4f64a 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 1af95039868c..87e7cb21045c 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 b21eb5b7c10d..50862be68387 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 ca21eafd2c0d..56823e61d623 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 46c3c994495b..24b163f5e4d4 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 c213513db898..ac7d4419db23 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 c40bcd43d51b..7c84db0bca95 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 cb781783c819..8168f2b46358 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 27eeb6b40b6c..d3061f63bb06 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 86216f7d89b3..155735ca9d8a 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 2cd7ef437254..29464f1bc56b 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 676d8b80eb4f..707b0f0bd693 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/319] 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 8bd86ccc2f08..1e95eb6d44a6 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 bf63d6957215..a33757e1e15a 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 930b241647bb..eda21cd69be4 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 62f9607de9e0..0994b851ed0e 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/319] 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 32ebe58e05f4..c10c2a2f6223 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/319] 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 707b0f0bd693..e9f5a89fd922 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/319] 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 11a6c9bee21f..236103b1a361 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/319] 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 aee76f07a9f0..e3887b38365e 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/319] 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 c387085ea236..3e4827039322 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/319] 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 4d3cf4768592..0a2adfb74961 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/319] 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 3ae438892382..70ca3fe2a5c7 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 e3887b38365e..599622af6bc4 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/319] [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 c025ff3550e5..731203dd9217 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/319] [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 24db0a950299..d3b88afad780 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 3e4827039322..c748b549463b 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 1f3c29b00629..9df03fb29d84 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 dffe4dc800ee..6d89ba623039 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 552dd5def91a..ba836bf5fd44 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 974f046fef10..5a4536860117 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 9ee30be053f8..a501b020470b 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 000000000000..de4cef29aaa3 --- /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 000000000000..2cffdf139f5d --- /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 000000000000..d1981f17c062 --- /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 000000000000..cd62f626ba68 --- /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 029c4cf79643..7d621ac6bf86 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 6ddb0cb20d97..1f9f75a3bb42 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/319] 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 b5d724226fbe..577bebe144b2 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 150f3e5fd550..5802350a2ee9 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/319] 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 a2c4e530b215..acb69b45e62e 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 d5d932229dcd..554dbca091f7 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 b5d50ccb4bb4..1dcdf55e1902 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 c6bd62c87fc8..d2ddf3c02cab 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/319] 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 1f9e3a85f66c..6c10d825126e 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 0f003391b903..32ce296816e9 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 f8f7e02e6b15..d0b9fa76bd21 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 e2b0d02e7b2b..979ed0caae9b 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 adf8c463431f..4ee4b56d02ca 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 d3bf406fb340..d7584852d6e1 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 ae0af8a00b9b..0fa622ee4f6b 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 e91cdbdc23ae..558fcdfce2fa 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 1fbbb922e89d..db993f2d63dd 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 8fab78a52b5d..e5b617b1fd04 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 083659f9ea65..be8b024ea30d 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 43f5f4b4db70..ae1e679d3293 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 81da581acb78..1a03a33ee93b 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 840e71427ae4..0975a6e6e7de 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 198d66492b99..6fe7294ece04 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 898267641ebe..ffbd587f5e05 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 70a99976c20b..ae3f8dcc8e04 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 d725b713c5c9..643411348dd7 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 0a2adfb74961..b4f1a40970ac 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 f520abf077a0..0971a92040a4 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 3511f853d179..f207e21361f9 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 d481370abaae..ec7f66c4f7b1 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 9027e9072583..3e7f9b0ada33 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 cf6ecb87ce39..1d67bf46a274 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 1ce215e65ca7..2202547db7eb 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 c4df682e7953..61662cd759dc 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 144429eca42f..68dba56b018b 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 0618645c4af3..ac44ae591353 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 acb69b45e62e..77f3e252786c 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 03ca65609dec..c417a1b3ee07 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 1d1045612db5..36b57d86f367 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 a9982c8082ba..aace891ee455 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 56d7603a99ea..8954a3886bd6 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 b4fea5faec44..fd40e4e3eb43 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/319] 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 731203dd9217..94d015e60766 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/319] 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 b2e5600bc5d3..d8e9c7cec2f5 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 3ce12e28ebc7..3c51ad584e11 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 002273410bd6..a3c52e39f386 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 db611c8db17f..f2fa2fc852f6 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/319] 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 16c2d7621505..1385b71ffb4a 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 3dc996471318..18ef3877b563 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 56d0b9f2706b..66fa888758eb 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/319] [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 fa9c93736115..2e89b8c281dd 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 85f8ca32aaf1..3d40455a43a3 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 f8bee6923f90..c11d0ccf1632 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 a24a08ceed99..e593c2dc32a1 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 d0228e0d4d91..69814d866257 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 d0d015ccc55d..aa973151b949 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 6b182daa3acb..63c1a937341b 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 0633be11254e..8987aed03763 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 b512daeafd8f..4c1d72be560b 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 37dbf64c1876..3344bf7c4d8c 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 67168982baaa..bb3a461c8a1c 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 35e81ec63503..448f163308c6 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 51ffc864b16f..0cf910be5bfd 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 d531e870b851..dc1a5dd9cab8 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 fa26aa56e1c1..000000000000 --- 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 bd35388167ba..a842f3a0d291 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/319] [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 22be6e092cd2..764dec3d0fb4 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 b2fb68f5d371..8a10052cd038 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 9edc477ef4f2..4c31c559aa4d 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 afd221a4bf23..915e42883fc0 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 e59da172abad..70dc144b28f5 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 baa7b54af776..b5aa6b46dd70 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 2d32fcd900e3..1b8ad3bdc5c6 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 1da19692aed5..de14fb57768d 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 88313b35fea5..f72ab667427d 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 0bcbbc10fc9a..5ae6ba010dff 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 42312d4bf225..a04ebe7fc0ee 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 f315cca6dd1f..61cc16c08345 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 c70874855211..738738437b01 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 293d2ffc8abf..ef069ed7e41d 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 9add683e2a44..bdc4d6bbbbb4 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 02d9445192e2..1ab3243ad12b 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 000000000000..b33d269ac298 --- /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 000000000000..342a8ee11004 --- /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 1feef5681839..667aec1cb3ff 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 6663518acd87..564d82bba309 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 877131981d29..d3b0351a0937 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 c71e8133664c..8e2acc5b2410 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 0dc1de80ceda..e0742c9c5c97 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 46ec128d23b7..f5c85f530a49 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 c45e55ce07a6..230dc476cefe 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 3df0f3be4a19..e9dd92d94940 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 cda934866a54..1e9e0ffc9b27 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 5696d5a7c7fc..bc8014a5d80e 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 690aedc35011..5bf3c6e4179e 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 f7e56418ef0b..6258d1375dae 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 7bb81fa3bf01..feb33a2d55d0 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 ee5043e87bcc..108ed5134979 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 e64f0920b3e3..4558b60203c7 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/319] 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 6c10d825126e..ec8370088379 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 32ce296816e9..e1443431cb38 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 d0b9fa76bd21..601a31fb7072 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 979ed0caae9b..6866f961b4b6 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 4ee4b56d02ca..c39c1272c60e 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 d7584852d6e1..31beb0573363 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 0fa622ee4f6b..8f7bbadde26a 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 558fcdfce2fa..66ae3c54c601 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 db993f2d63dd..42f4fe12f00b 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 e5b617b1fd04..c56194f5838e 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 be8b024ea30d..943036e3ae89 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 ae1e679d3293..c34efd63e188 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 1a03a33ee93b..a90177b9f43c 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 0975a6e6e7de..a4c18a9efd77 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 6fe7294ece04..c91bd95f33b9 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 ffbd587f5e05..79ff2c2f9938 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 ae3f8dcc8e04..8ea994d7aa92 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 643411348dd7..f043cde4a8cb 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 b4f1a40970ac..e0ccb56ec8d0 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 0971a92040a4..34387ce5a793 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 f207e21361f9..bc506ff68714 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 ec7f66c4f7b1..876178aef267 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 3e7f9b0ada33..a5a70e7de884 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 1d67bf46a274..7ac773785110 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 2202547db7eb..422ca5664118 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 61662cd759dc..3fbe72762f32 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 68dba56b018b..3a8ca681b01f 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 ac44ae591353..c4923de74a6e 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 77f3e252786c..dddef0e66560 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 c417a1b3ee07..dd1b4dccce06 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 36b57d86f367..f5741f2a35b0 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 aace891ee455..9aac43c5dd39 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 8954a3886bd6..49f50cad47b3 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 fd40e4e3eb43..a2343874cf29 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/319] 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 94d015e60766..b16bb0844780 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/319] 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 d8e9c7cec2f5..b2e5600bc5d3 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 3c51ad584e11..3ce12e28ebc7 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 a3c52e39f386..002273410bd6 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 f2fa2fc852f6..db611c8db17f 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/319] 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 ec8370088379..8379e423cd14 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 e1443431cb38..de912c5621f1 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 601a31fb7072..16446f3d069e 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 6866f961b4b6..c29902a83af3 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 c39c1272c60e..5586e825873c 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 31beb0573363..39b07468a0ed 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 8f7bbadde26a..863ab40af56c 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 66ae3c54c601..c981e18ee688 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 42f4fe12f00b..9611982d18bc 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 c56194f5838e..7167468b3a7e 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 943036e3ae89..3e8f7b3e0eb3 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 c34efd63e188..7cabaf3efc13 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 a90177b9f43c..696c5488d766 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 a4c18a9efd77..e97c772e553a 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 c91bd95f33b9..6497281e26c8 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 79ff2c2f9938..caf261f811fc 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 8ea994d7aa92..0b0bbb1bd644 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 f043cde4a8cb..f78d4255975c 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 e0ccb56ec8d0..daa41f95d37b 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 34387ce5a793..4ed54d716e4f 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 bc506ff68714..33c0e58a8b8f 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 876178aef267..49d06d71cc21 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 a5a70e7de884..44ef7824cc00 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 7ac773785110..255f008ea907 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 422ca5664118..d8874b260af2 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 3fbe72762f32..5f8c57aa3c38 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 3a8ca681b01f..2468a6ba3d2c 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 c4923de74a6e..3d92ca570ea2 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 dddef0e66560..14ed8b192a89 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 dd1b4dccce06..c6ab2a3cef17 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 f5741f2a35b0..0cecd9b69521 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 9aac43c5dd39..50cd75b8f610 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 49f50cad47b3..f2c76a4e4dad 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 a2343874cf29..0fb5e0c05fab 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/319] 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 b16bb0844780..3a8cd98336e3 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/319] 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 b2e5600bc5d3..d8e9c7cec2f5 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 3ce12e28ebc7..3c51ad584e11 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 002273410bd6..a3c52e39f386 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 db611c8db17f..f2fa2fc852f6 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/319] 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 a3c52e39f386..c64c256a4591 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/319] 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 8379e423cd14..1916f9d02ff8 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 de912c5621f1..3f5cb83bd195 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 16446f3d069e..10c9c131d6b7 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 c29902a83af3..79cc3e04ff4d 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 5586e825873c..17396b103e29 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 39b07468a0ed..075550a6b091 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 863ab40af56c..9a70b1cb298f 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 c981e18ee688..f9cc2260ab38 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 9611982d18bc..86eba38e8570 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 7167468b3a7e..ba8930e3ee2e 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 3e8f7b3e0eb3..6b85964fbe53 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 7cabaf3efc13..1e59de2c8a39 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 696c5488d766..6fa770cb1a0e 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 e97c772e553a..fa59d004ab45 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 6497281e26c8..9c03691a4941 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 caf261f811fc..5f0093f10d99 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 0b0bbb1bd644..dc6957fbe7a9 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 f78d4255975c..92290bd89e1e 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 daa41f95d37b..3b18e02d94ee 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 4ed54d716e4f..800141036f56 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 33c0e58a8b8f..a56538384555 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 49d06d71cc21..5f7b7168890d 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 44ef7824cc00..e06cc24c94ef 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 255f008ea907..5265b86b2feb 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 d8874b260af2..a5741f3e4d75 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 5f8c57aa3c38..3348a5fa9136 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 2468a6ba3d2c..1f2c801b0035 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 3d92ca570ea2..6b6b0ba2be72 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 14ed8b192a89..5b648740a601 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 c6ab2a3cef17..d4f5e7208a5a 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 0cecd9b69521..a14ba762d465 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 50cd75b8f610..62290aba1875 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 f2c76a4e4dad..859e1e601e82 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 0fb5e0c05fab..328dab78f154 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/319] 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 de7c8700f3e5..a33799d9f9cd 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 3fd7238911f5..8c1990e66eaf 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/319] [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 e30a2305df8e..0c7a0c0650b8 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/319] [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 000000000000..fb41c7bc2772 --- /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/319] [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 f708543cf457..acb61528eccf 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/319] [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 63942f03f6ee..403583f205ac 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 ad634f0b90fc..0f59bb01936b 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/319] 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 b04b51f844e1..9f47d5eb7f0e 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/319] [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 c711027d172b..64cae1227415 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/319] 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 f92bfc42e3ae..cf9da4ed2a8f 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 8c1990e66eaf..256b50511b4f 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/319] [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 92325f1ad078..ae3dd62eb009 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/319] 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 89b666dcf025..6bde343933ac 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 6bfe3206bccb..a534bf5831fb 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/319] 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 a786da2db649..dcb03b107153 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 ac7e88db84ff..36cb09adf1a5 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 735d69bd2909..a76546e6c126 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/319] [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 5d30f853c3b2..80e8a70d5264 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/319] 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 43dd1f7c18ee..7841115b995f 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 3a47b5a53031..c2f928e276c0 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 8850773c4e9c..000000000000 --- 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 000000000000..604f4162151f --- /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 5b4cee489b41..d44bc0de4410 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 7be93b440eb2..f9ea93f9d4b3 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 05ca30df409d..9859d5b110b9 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/319] 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 0f59bb01936b..db7a890ffdaa 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 f8d82543ee85..e6941ca591d0 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 566c0fc35d39..3f5188bc6375 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/319] [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 256b50511b4f..eb44017e2d50 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/319] 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 5b8aaa525bd6..c0eac6faa03d 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/319] [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 64cae1227415..f53350b4c55d 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/319] [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 fcd48e2cd9c6..b8847cc2c78e 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 c36a9be09521..2d34f463984a 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/319] 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 36aafbbbab17..67e4cfea6b69 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/319] 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 81eb319e50b6..7259c788bdc3 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/319] [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 671abca4ba1d..8aca8494cde8 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/319] [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 4ed9ea7dc9a2..ec7226319214 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 e593c2dc32a1..6a54b387501a 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 69814d866257..b4ecab3d09b5 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/319] [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 6a54b387501a..8642652fa489 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 32287a7c8139..2e44520d6620 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/319] [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 b4ecab3d09b5..59d1f26a1eb4 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/319] 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 56923bcab13a..9c89ac48e77e 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 8852179b6ce2..fa126875caba 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 0c7a0c0650b8..5c29c4c7e5f8 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 2f38990e226c..0c92fb262576 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 af7668077f90..c03f6038d0fc 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/319] [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 e1efd2f73425..e32a5f9134c2 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/319] [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 c13a0d90ea24..19510ccd5b22 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 f30392dd3ebc..08b3562bcad5 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/319] 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 345c1ac29ab3..6472fe0fbba6 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 6ad2ea8ec913..67a6ea74b770 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/319] [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 c5994609bd11..6db1845a00af 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/319] 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 39093efef09c..189b59621031 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/319] 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 59d1f26a1eb4..92f7a7eca9d6 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 d44bc0de4410..c67a11a617b9 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 517466055c72..db5feca66715 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 a76546e6c126..584481408092 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/319] 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 e6941ca591d0..a9f0fe3c732f 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/319] 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 8dcd8c7c6f4c..3623a28a43db 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/319] 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 3623a28a43db..41e606228196 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/319] 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 ba0bb7c565cb..10f9658ec6f5 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/319] 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 e9ce272b5f55..6e88d6f92279 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 1b72abe51df4..ad48554f36f3 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 7841115b995f..865cdfd397af 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 9133cecaf3d8..c979aa8728fd 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 709dd5613ede..6141ca5e8862 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 5bdd5cbaba7a..dbe7ddbf8b16 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 000000000000..76a6d88e0be0 --- /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/319] [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 656f601f2920..5678db935c6d 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/319] 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 865cdfd397af..acd157939436 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/319] 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 dbe7ddbf8b16..19fb9374527c 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 76a6d88e0be0..8f4a4753572c 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/319] 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 70dc144b28f5..d5d5ede6adc8 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/319] 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 ff70d67148fb..d96f80fe23cc 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 13b203f0abd9..99c42f31e943 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 aef54dee6681..eb0f888792a1 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 ed585390890b..a5e310f8bc2d 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 6cc4e5b6feb7..58a0ca09305f 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 1e675096b312..543497784801 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 6199a2ca6545..2fe2fc4e0b0c 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 4b52ade0b58e..fee1029cf459 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 16ab55a39916..411d6f7e4828 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 61978317ff5e..67f1102480e5 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 3ccff28c083f..884b108faded 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 39e724038c65..ca3140ec363e 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 a501b020470b..0aedcf803839 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 49cd7d574c51..ecca9aecd76a 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 e25f755ecd78..42243f286e57 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 0a88e2433937..c9dc06dfd87f 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 9ab7416ffeea..016e21718d40 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 e649a273742e..97a8c8f05f81 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/319] 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 fee1029cf459..9e0f958ba825 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 dee20e3f89b0..a1675f9ea406 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/319] 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 9e0f958ba825..0eaed724d0de 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/319] [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 3bc9143d7ed7..791df54613bf 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/319] 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 8642652fa489..20d36af695ef 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 031f534afec3..612b252c8898 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 8f230012dc6a..fd3ac8b7bfdc 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 000000000000..f631ed716334 --- /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 8aca8494cde8..01a01c0698b3 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/319] 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 01a01c0698b3..2f1f538727df 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/319] 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 d5d5ede6adc8..32a2eb8b59a7 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 e0742c9c5c97..174c493e5e03 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 108ed5134979..f5760b9c8a06 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/319] 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 20d36af695ef..603cf16441bc 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/319] 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 32a2eb8b59a7..5509621183d3 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 174c493e5e03..34a7f99d298b 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 feb33a2d55d0..c55d1311ca11 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 f5760b9c8a06..ab88b483f454 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/319] 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 6969b0e70052..4cb787882561 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 e8d9b4359cea..bd25d702aa73 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 3856a0645ba5..397786bc1fef 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/319] 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 ff0cdb1d5ac5..6761feb943fa 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/319] 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 0948dc932ee2..28df7cd309d7 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/319] 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 2a40e37149bb..91f8922b850f 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/319] 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 b05e6bb7dc6e..084dc44b276d 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 66b1519c1652..3818ca18efe8 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 6f37120a46a2..780e7700571e 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 2d34f463984a..36995518f57d 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 10190871f42f..828db77a9f7a 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 4ed8dd2738c9..d88c329b24c0 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/319] 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 f631ed716334..02774e02e456 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/319] 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 2f2453e97a1d..e3f012f51ceb 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/319] [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 e3f012f51ceb..0897a23f518b 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/319] 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 d09f3a7ee3c5..00203fcb686a 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/319] 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 02774e02e456..9f44918d1607 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/319] 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 28df7cd309d7..5d3a9967a67f 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 86250eaa6040..b28b674581a5 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/319] 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 8dcad92e61de..6a1b7fb3be4d 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/319] 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 b8847cc2c78e..2cb3bc65d331 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/319] 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 2cb3bc65d331..ec37b0601057 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/319] 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 97a8c8f05f81..b2318b3e4f79 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/319] 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 ecca9aecd76a..ef42aa4f4ee9 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 42243f286e57..20fc3211bb2c 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/319] 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 3818ca18efe8..6c380f98ada9 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/319] 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 5d3a9967a67f..28df7cd309d7 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 b28b674581a5..86250eaa6040 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/319] 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 86250eaa6040..0f18034c7b6d 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 25b644329044..0ce0ff76bc9c 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/319] 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 603cf16441bc..9a6453f106c2 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/319] 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 2fe2fc4e0b0c..a37c175f6516 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 2f1f538727df..e7aaf46c6a53 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/319] 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 02787bc1e5e1..e3fd453d5590 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 483a1915fd6b..9dedbce7b249 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 14402722045e..ed73511d4a8d 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 70d762b516c9..05060a23f077 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 edee8ac36bca..b47f224b8189 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 43de6ef06f48..5b794fcb458d 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 2e15c6ca89e5..e01238b853eb 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/319] 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 9a6453f106c2..2b9e40ce8d4c 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 7b0300bc35c9..fd6773d6a1be 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 d13a565d6e0b..a80c011b7483 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 0a949f0fb081..fc1db6b78f17 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 469fc5c23357..6011e0aee497 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 20bce41f2dcf..a2bc266f15f3 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/319] 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 016e21718d40..fd45cd3484fd 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/319] 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 fd45cd3484fd..757370899660 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/319] [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 0478f532243a..13d6b48d0133 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/319] 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 6141ca5e8862..2cab7c40a26c 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 67baca4e1165..bacc96b5d0b7 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 7598ae752334..1855a613fa47 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 2982e5923693..47d5a25a1fdf 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 8a7e26c57b66..1dad21f636ad 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 639e44c34435..de0d4d977d08 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 01bbdbccdf4a..4dc23abc4280 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 271156139b7d..3fb20d1dd62a 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 869b111297ec..4bf94caf4896 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/319] 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 12793d95d947..edd1cd53366e 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 fd6773d6a1be..b13b7e9c5c1d 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/319] 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 a5741f3e4d75..a870ab83074a 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/319] 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 a870ab83074a..68927b334171 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/319] 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 fc7275b9ec40..49ce97fbfc30 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/319] 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 6c625367010a..c3bc1d96b117 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/319] 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 d88c329b24c0..39399a66744f 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/319] 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 e3fd453d5590..02787bc1e5e1 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 9dedbce7b249..483a1915fd6b 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 ed73511d4a8d..14402722045e 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 05060a23f077..70d762b516c9 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 b47f224b8189..edee8ac36bca 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 5b794fcb458d..43de6ef06f48 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 e01238b853eb..2e15c6ca89e5 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/319] 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 0897a23f518b..a08b8d2bf377 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/319] 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 49ce97fbfc30..6a0d992c7348 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/319] 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 991c90977f51..7a56389e0f3f 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/319] 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 68927b334171..5e82d403f026 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/319] 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 80e8a70d5264..4f371d4f7baf 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/319] 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 4f371d4f7baf..a4d78b669f92 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/319] 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 5e82d403f026..60a72c08e8ed 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/319] 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 02787bc1e5e1..e3fd453d5590 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 483a1915fd6b..9dedbce7b249 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 14402722045e..ed73511d4a8d 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 70d762b516c9..05060a23f077 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 edee8ac36bca..b47f224b8189 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 43de6ef06f48..5b794fcb458d 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 2e15c6ca89e5..e01238b853eb 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/319] [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 2b9e40ce8d4c..fccfb7617f5e 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 8af445da612e..af57701b835d 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/319] 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 60a72c08e8ed..470eca1dda09 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/319] 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 536912d2f533..c3f11db37e1e 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/319] 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 470eca1dda09..bec8ab5b2943 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/319] 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 0aedcf803839..e0d883ab8ce3 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/319] 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 bec8ab5b2943..b440380fb256 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/319] 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 8a10052cd038..852763bb7d75 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 4c31c559aa4d..999da103210d 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 915e42883fc0..9a0e72d362e6 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 5509621183d3..86592b028ceb 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 b5aa6b46dd70..fd00631cdde8 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 de14fb57768d..1d4a11fa5d84 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 5ae6ba010dff..abd8070b1954 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 a04ebe7fc0ee..098df27eb35e 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 667aec1cb3ff..0a8cf75fb4de 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 564d82bba309..e1570bd1119a 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 d3b0351a0937..2048c187d934 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 8e2acc5b2410..24ff2e63da3f 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 34a7f99d298b..6ee90e1a1c2b 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 f5c85f530a49..afecb96fd12b 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 e9dd92d94940..75dda5958b83 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 1e9e0ffc9b27..300a612e08db 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 bc8014a5d80e..b3352eaf0f72 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 c55d1311ca11..468dc752516a 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 ab88b483f454..47ca07af40a6 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 4558b60203c7..2de9cc2b7029 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/319] 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 9dedbce7b249..a07c8583549b 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 33e10e102a8d..7e92bd3109df 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/319] 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 c3243f47f9ab..5ef7e04b27e7 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/319] 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 b440380fb256..8e1af22de8df 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/319] 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 08b3562bcad5..ff1601610814 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/319] 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 8e1af22de8df..3e09ceb6fdeb 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/319] 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 fccfb7617f5e..52daf1a2892b 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/319] 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 3e09ceb6fdeb..e4f1cb89cfa9 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/319] 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 6011e0aee497..ca3bb2b7b9ec 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 a2bc266f15f3..5ac03785f483 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/319] 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 e4f1cb89cfa9..a0cddd8f3dc6 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/319] 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 ca3bb2b7b9ec..73724c38a28b 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/319] 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 a0cddd8f3dc6..500db05c132d 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/319] 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 ebbdbeb598a7..1fa38d4be4ee 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 a08b8d2bf377..d49b1ce8689a 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/319] 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 500db05c132d..8e6f1ec85701 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/319] 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 71a280b4b5c9..000000000000 --- 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 6ff4f6bd3e24..ae440d7ab572 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/319] 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 8e6f1ec85701..6185d795e201 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/319] 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 6bde343933ac..ebcea4c7024a 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/319] 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 6185d795e201..71997c84ffc6 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/319] 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 2a462c438f86..4e50334f4fad 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 acb61528eccf..7b12e496bd85 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/319] 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 71997c84ffc6..0fcb83d84d85 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/319] 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 884b108faded..319c7707e75b 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 2f6627e1edec..37cd5d75f57e 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 a07c8583549b..3f6b968d993a 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/319] 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 0fcb83d84d85..51be42b23e83 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/319] 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 ebcea4c7024a..6ec2d4ec4d49 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/319] 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 51be42b23e83..7a9b3be57d52 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/319] [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 4b1763143fc8..ad5fe5ccb65e 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 6e88d6f92279..67c4d674396e 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 ad48554f36f3..b087336ebd91 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 acd157939436..5494e15c3741 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 c979aa8728fd..06d0eef5e40f 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 6c815d267eef..0b34a8629bd2 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 47632aa885cd..0d92ec3dee0f 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 2cab7c40a26c..57f12efd7d73 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 19fb9374527c..bf75eb4ecbd2 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 bacc96b5d0b7..fee5ecaff106 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 1855a613fa47..d2df5400b9a4 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 8f4a4753572c..dc2477d49d51 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 000000000000..574038a1728d --- /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 47d5a25a1fdf..b2b39a4275ea 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 1dad21f636ad..18be16ee734d 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 de0d4d977d08..87715523dd77 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 4dc23abc4280..11e6fb44bf8e 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/319] 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 37cd5d75f57e..3aaa336d7a7f 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/319] 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 7a9b3be57d52..14338e8bed31 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/319] 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/319] 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 14338e8bed31..6d5be74d30e7 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/319] 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 3f6b968d993a..316628852d41 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/319] 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 6d5be74d30e7..1c33327374f3 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/319] 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 b3c5aeacad4e..c0a9d3e147aa 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 bf75eb4ecbd2..f97dbed7a34f 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 906dfbce0490..05ab15786594 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 d2df5400b9a4..735dd1f87488 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 000000000000..76afe866758b --- /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 dc2477d49d51..2a50bb1557e2 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/319] 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 1c33327374f3..576648a1041e 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/319] 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 2089157dc494..bca6cc178dac 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 d90bcdc98afe..20743cd076a0 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 4e50334f4fad..4329255408b2 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 7b12e496bd85..25a0ed2c1f04 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 55e4d53fb94c..f2360e0e9c62 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/319] 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 576648a1041e..70521f8aa640 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/319] 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 a37c175f6516..89360c185365 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/319] 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 852763bb7d75..8a10052cd038 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 999da103210d..4c31c559aa4d 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 9a0e72d362e6..915e42883fc0 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 86592b028ceb..3bc959967ace 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 fd00631cdde8..b5aa6b46dd70 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 1d4a11fa5d84..de14fb57768d 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 abd8070b1954..5ae6ba010dff 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 098df27eb35e..a04ebe7fc0ee 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 0a8cf75fb4de..667aec1cb3ff 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 e1570bd1119a..564d82bba309 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 2048c187d934..d3b0351a0937 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 24ff2e63da3f..8e2acc5b2410 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 6ee90e1a1c2b..3104ed208eb9 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 afecb96fd12b..f5c85f530a49 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 75dda5958b83..e9dd92d94940 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 300a612e08db..1e9e0ffc9b27 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 b3352eaf0f72..bc8014a5d80e 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 316628852d41..7ad3cb63af79 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 468dc752516a..c55d1311ca11 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 47ca07af40a6..dff7543dedf3 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 2de9cc2b7029..4558b60203c7 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/319] 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 3a8cd98336e3..c140a0d4d73b 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/319] 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 421091a14de5..3b8133bd6c46 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 8a10052cd038..0303f9e53c6b 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 4c31c559aa4d..0e756c2fbf13 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 915e42883fc0..ce1988e7772c 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 3bc959967ace..4a522463ec7e 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 b5aa6b46dd70..a0bf982ff44b 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 de14fb57768d..a8af04115c24 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 5ae6ba010dff..619bc19f8d64 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 a04ebe7fc0ee..9dde8d95a03b 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 667aec1cb3ff..dcb49bb5c99d 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 564d82bba309..01b5220576a6 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 d3b0351a0937..6e3309301acd 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 8e2acc5b2410..f17a0683c46f 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 3104ed208eb9..c2a0452c8f79 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 f5c85f530a49..13158df63c45 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 e9dd92d94940..3bff20ec4a61 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 1e9e0ffc9b27..49741ba03ce3 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 bc8014a5d80e..968fc0b929ed 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 c55d1311ca11..5fc31902859f 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 dff7543dedf3..c5dfc0b1e781 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 4558b60203c7..7cbf3572edc4 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/319] 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 a1675f9ea406..86e9da4293b1 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/319] 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 70521f8aa640..a26d3fbccc4f 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/319] 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 319c7707e75b..884b108faded 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 3aaa336d7a7f..73fff70aa66a 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 7ad3cb63af79..b617a981683c 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/319] 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 a26d3fbccc4f..bc7555295bfe 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/319] 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 21cf94272ec8..b69fdd505f68 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 89360c185365..9115873cd962 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 86e9da4293b1..6fd53fc57095 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 000000000000..4f2d4f66156c --- /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 000000000000..238e9cdbe4cf --- /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 bca6cc178dac..2089157dc494 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 e7aaf46c6a53..c705f153f3f8 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 1fa38d4be4ee..d377f54e9ec3 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 d49b1ce8689a..2f2453e97a1d 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 000000000000..5bad21e3f2b5 --- /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 000000000000..2a31c691c89c --- /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 0407c0ae127f..3bbb43909802 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 f0841bf89d07..ef97fd84f145 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 9859d5b110b9..0d9f7ff41469 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 000000000000..b02b95bf23ef --- /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 000000000000..9bfcccafcda2 --- /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 d37d0d4a9154..418eec0155d6 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 - + + +