From 0c8e15e8bb16ec279290d2390caf75e83d52f518 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Mon, 13 Jan 2025 15:57:54 +0100 Subject: [PATCH 01/60] [LOCAL] Bump Hermes --- 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..4d7c96a0fd55 --- /dev/null +++ b/packages/react-native/sdks/.hermesversion @@ -0,0 +1 @@ +hermes-2025-01-13-RNv0.78.0-a942ef374897d85da38e9c8904574f8376555388 \ No newline at end of file From 94b7082a461d8d73fe8a576d84a183297048691c Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 13 Jan 2025 19:19:03 +0000 Subject: [PATCH 02/60] Revert "Do not reset rn-artifacts-version on release branch (#48572)" This reverts commit a28d3961bd6ce561d20419c49ce37596896bcdf0. --- .github/actions/build-android/action.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/actions/build-android/action.yml b/.github/actions/build-android/action.yml index 4f32483d975a..b18e605c8eb9 100644 --- a/.github/actions/build-android/action.yml +++ b/.github/actions/build-android/action.yml @@ -20,8 +20,6 @@ runs: - name: Set React Native Version shell: bash run: node ./scripts/releases/set-rn-artifacts-version.js --build-type ${{ inputs.release-type }} - # We don't want to re-set the artifacts version if we're on the release branch. - if: ${{ !contains(github.ref, '-stable') }} - name: Setup gradle uses: ./.github/actions/setup-gradle with: From b713f273b6df654e4274ae00a849c39d2efccedc Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Wed, 15 Jan 2025 08:40:26 +0000 Subject: [PATCH 03/60] Release 0.78.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 | 6 +++--- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/package.json | 2 +- packages/dev-middleware/package.json | 4 ++-- .../eslint-config-react-native/package.json | 4 ++-- .../eslint-plugin-react-native/package.json | 2 +- packages/eslint-plugin-specs/package.json | 4 ++-- packages/gradle-plugin/package.json | 2 +- packages/helloworld/package.json | 12 ++++++------ packages/metro-config/package.json | 6 +++--- packages/normalize-color/package.json | 2 +- packages/polyfills/package.json | 2 +- .../react-native-babel-preset/package.json | 4 ++-- .../package.json | 4 ++-- packages/react-native-bots/package.json | 2 +- .../package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- packages/react-native-fantom/package.json | 18 +++++++++--------- packages/react-native-info/package.json | 2 +- .../package.json | 4 ++-- .../react-native-test-library/package.json | 6 +++--- .../Libraries/Core/ReactNativeVersion.js | 6 +++--- packages/react-native/React/Base/RCTVersion.m | 6 +++--- .../ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.java | 6 +++--- .../ReactCommon/cxxreact/ReactNativeVersion.h | 6 +++--- packages/react-native/package.json | 16 ++++++++-------- packages/rn-tester/package.json | 6 +++--- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- 33 files changed, 78 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index 142e0a219322..0979a97b2875 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "@babel/preset-flow": "^7.24.7", "@definitelytyped/dtslint": "^0.0.127", "@jest/create-cache-key-function": "^29.6.3", - "@react-native/metro-babel-transformer": "0.77.0-main", - "@react-native/metro-config": "0.77.0-main", + "@react-native/metro-babel-transformer": "0.78.0-rc.0", + "@react-native/metro-config": "0.78.0-rc.0", "@tsconfig/node18": "1.0.1", "@types/react": "^19.0.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 07f15969ba65..c697f396b188 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.77.0-main", + "version": "0.78.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 98924cb4aae7..cddec2d9f382 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.77.0-main", + "version": "0.78.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.77.0-main" + "@react-native/codegen": "0.78.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 f1daf525ec57..9e7a58f97e17 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.77.0-main", + "version": "0.78.0-rc.0", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,8 +22,8 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.77.0-main", - "@react-native/metro-babel-transformer": "0.77.0-main", + "@react-native/dev-middleware": "0.78.0-rc.0", + "@react-native/metro-babel-transformer": "0.78.0-rc.0", "chalk": "^4.0.0", "debug": "^2.2.0", "invariant": "^2.2.4", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 99f098a80e8e..9f68c2fa4390 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.77.0-main", + "version": "0.78.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 03ca64cf90e1..b1b52eca925b 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 3dfde88432fe..38aa0adda5f4 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.77.0-main", + "version": "0.78.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.77.0-main", + "@react-native/debugger-frontend": "0.78.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 a1aee9ed4437..160b58ecb380 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.77.0-main", + "version": "0.78.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.77.0-main", + "@react-native/eslint-plugin": "0.78.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 82151c1f614e..1ca54adc8e5b 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.77.0-main", + "version": "0.78.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 ca94060a48ee..fa5575ea113d 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.77.0-main", + "version": "0.78.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.77.0-main", + "@react-native/codegen": "0.78.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 a3d8c09a6449..6d29c74f6b58 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/helloworld/package.json b/packages/helloworld/package.json index e83ee2926863..b5ab12057d35 100644 --- a/packages/helloworld/package.json +++ b/packages/helloworld/package.json @@ -1,6 +1,6 @@ { "name": "helloworld", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "private": true, "scripts": { "bootstrap": "node ./cli.js bootstrap", @@ -13,16 +13,16 @@ }, "dependencies": { "react": "19.0.0", - "react-native": "1000.0.0" + "react-native": "0.78.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.77.0-main", - "@react-native/core-cli-utils": "0.77.0-main", - "@react-native/eslint-config": "0.77.0-main", - "@react-native/metro-config": "0.77.0-main", + "@react-native/babel-preset": "0.78.0-rc.0", + "@react-native/core-cli-utils": "0.78.0-rc.0", + "@react-native/eslint-config": "0.78.0-rc.0", + "@react-native/metro-config": "0.78.0-rc.0", "chalk": "^4.1.2", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 875347ef99a9..ec61fe23a0ad 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.77.0-main", - "@react-native/metro-babel-transformer": "0.77.0-main", + "@react-native/js-polyfills": "0.78.0-rc.0", + "@react-native/metro-babel-transformer": "0.78.0-rc.0", "metro-config": "^0.81.0", "metro-runtime": "^0.81.0" } diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index 5db370d8b5c3..e7060ce3d5be 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.77.0-main", + "version": "0.78.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 b80037150fdb..508b940849c9 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.77.0-main", + "version": "0.78.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 ba57efc69415..f350ffa3a8bc 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.77.0-main", + "version": "0.78.0-rc.0", "description": "Babel preset for React Native applications", "main": "src/index.js", "repository": { @@ -55,7 +55,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.77.0-main", + "@react-native/babel-plugin-codegen": "0.78.0-rc.0", "babel-plugin-syntax-hermes-parser": "0.25.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 524baafe464a..5c5f64c8f1e0 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.77.0-main", + "version": "0.78.0-rc.0", "description": "Babel transformer for React Native applications.", "main": "src/index.js", "repository": { @@ -16,7 +16,7 @@ "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.77.0-main", + "@react-native/babel-preset": "0.78.0-rc.0", "hermes-parser": "0.25.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-bots/package.json b/packages/react-native-bots/package.json index facc1e3fcab8..635fac9cb473 100644 --- a/packages/react-native-bots/package.json +++ b/packages/react-native-bots/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/bots", "description": "React Native Bots", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "private": true, "license": "MIT", "repository": { diff --git a/packages/react-native-codegen-typescript-test/package.json b/packages/react-native-codegen-typescript-test/package.json index 5d124daf46c8..b715e0a3024c 100644 --- a/packages/react-native-codegen-typescript-test/package.json +++ b/packages/react-native-codegen-typescript-test/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen-typescript-test", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "private": true, "description": "TypeScript related unit test for @react-native/codegen", "license": "MIT", @@ -19,7 +19,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.77.0-main" + "@react-native/codegen": "0.78.0-rc.0" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 80f3e14e6586..7c041c007899 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.77.0-main", + "version": "0.78.0-rc.0", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-fantom/package.json b/packages/react-native-fantom/package.json index c4c61cc5384f..0e0fbfb93b1e 100644 --- a/packages/react-native-fantom/package.json +++ b/packages/react-native-fantom/package.json @@ -1,11 +1,11 @@ { - "name": "@react-native/fantom", - "private": true, - "version": "0.77.0-main", - "main": "src/index.js", - "description": "Internal integration testing and benchmarking tool for React Native", - "peerDependencies":{ - "jest":"^29.7.0", - "jest-snapshot": "^29.7.0" - } + "name": "@react-native/fantom", + "private": true, + "version": "0.78.0-rc.0", + "main": "src/index.js", + "description": "Internal integration testing and benchmarking tool for React Native", + "peerDependencies": { + "jest": "^29.7.0", + "jest-snapshot": "^29.7.0" + } } diff --git a/packages/react-native-info/package.json b/packages/react-native-info/package.json index 6381b4f2cb63..64a07beea34a 100644 --- a/packages/react-native-info/package.json +++ b/packages/react-native-info/package.json @@ -1,6 +1,6 @@ { "name": "react-native-info", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "main": "build/index.js", "license": "MIT", "private": true, diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index c07e3fd1ad9f..b918fa891454 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.77.0-main", + "version": "0.78.0-rc.0", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -17,7 +17,7 @@ ], "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.77.0-main" + "@react-native/codegen": "0.78.0-rc.0" }, "peerDependencies": { "@types/react": "^19.0.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index c378871432ff..221bc43b331f 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/oss-library-example", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "private": true, "description": "Package that includes native module exapmle, native component example, targets both the old and the new architecture. It should serve as an example of a real-world OSS library.", "license": "MIT", @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.77.0-main", - "react-native": "1000.0.0" + "@react-native/babel-preset": "0.78.0-rc.0", + "react-native": "0.78.0-rc.0" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 786a34fcdd1f..8aaf7fffc687 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -14,10 +14,10 @@ const version: $ReadOnly<{ patch: number, prerelease: string | null, }> = { - major: 1000, - minor: 0, + major: 0, + minor: 78, patch: 0, - prerelease: null, + prerelease: 'rc.0', }; module.exports = {version}; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 69ce4f75320e..4aca54d56d50 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: @(78), 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 8866d933a00e..cfca124afa93 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.78.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.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java index dd881ce78cac..b25e3400d51f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java @@ -15,8 +15,8 @@ public class ReactNativeVersion { public static final Map VERSION = MapBuilder.of( - "major", 1000, - "minor", 0, + "major", 0, + "minor", 78, "patch", 0, - "prerelease", null); + "prerelease", "rc.0"); } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index c2509cc0404a..53c51cd63ee9 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -15,10 +15,10 @@ namespace facebook::react { constexpr struct { - int32_t Major = 1000; - int32_t Minor = 0; + int32_t Major = 0; + int32_t Minor = 78; 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 b2df8ae87aab..9f6b83aa9c31 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.78.0-rc.0", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -108,13 +108,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.77.0-main", - "@react-native/codegen": "0.77.0-main", - "@react-native/community-cli-plugin": "0.77.0-main", - "@react-native/gradle-plugin": "0.77.0-main", - "@react-native/js-polyfills": "0.77.0-main", - "@react-native/normalize-colors": "0.77.0-main", - "@react-native/virtualized-lists": "0.77.0-main", + "@react-native/assets-registry": "0.78.0-rc.0", + "@react-native/codegen": "0.78.0-rc.0", + "@react-native/community-cli-plugin": "0.78.0-rc.0", + "@react-native/gradle-plugin": "0.78.0-rc.0", + "@react-native/js-polyfills": "0.78.0-rc.0", + "@react-native/normalize-colors": "0.78.0-rc.0", + "@react-native/virtualized-lists": "0.78.0-rc.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 00e65fc2e614..31af89e70b8a 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/tester", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "private": true, "description": "React Native tester app.", "license": "MIT", @@ -27,8 +27,8 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { - "@react-native/oss-library-example": "0.77.0-main", - "@react-native/popup-menu-android": "0.77.0-main", + "@react-native/oss-library-example": "0.78.0-rc.0", + "@react-native/popup-menu-android": "0.78.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 ac400bc87f4a..c9f48c7ec841 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.77.0-main", + "version": "0.78.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 d292128acb63..3bc615036407 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.77.0-main", + "version": "0.78.0-rc.0", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { From 5c7823f32c0493b5b96ab87d9cb32a51059b8f52 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Tue, 14 Jan 2025 08:11:25 -0800 Subject: [PATCH 04/60] Properly test JSC for template_app e2e tests (#48656) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48656 While working on 0.78, I realize we were not testing the template app with JSC. This change should fix this. ## Changelog: [Internal] - Disable Hermes for the JSC E2E tests with Maestro Reviewed By: cortinico, fabriziocucci Differential Revision: D68147849 fbshipit-source-id: 4fbe005b5d04d6163a37041d1bd57fd48a9dfda8 --- .github/workflows/test-all.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index fe6de2c89c64..cbe2a66e6ed0 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -369,6 +369,11 @@ jobs: sed -i 's/newArchEnabled=true/newArchEnabled=false/' android/gradle.properties fi + if [[ ${{matrix.jsengine}} == "JSC" ]]; then + echo "Using JSC instead of Hermes" + sed -i 's/hermesEnabled=true/hermesEnabled=false/' android/gradle.properties + fi + # Build cd android CAPITALIZED_FLAVOR=$(echo "${{ matrix.flavor }}" | awk '{print toupper(substr($0, 1, 1)) substr($0, 2)}') From ddfa8a780b511d5928645da89986e35e251f2dc9 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 15 Jan 2025 01:04:29 -0800 Subject: [PATCH 05/60] Use RNTester App downloaded from CI instead of building (#48637) Summary: This change improves the E2E testing by downloading the iOS RNTesterApp that is built in CI instead of building it locally. This should let us save 10 to 20 minutes when we test a new release. ## Changelog: [Internal] - Use the RNTester app built in CI for release testing on iOS Pull Request resolved: https://github.com/facebook/react-native/pull/48637 Test Plan: - build the app in ci - run `yarn test-e2e-local -c ` and `yarn test-e2e-local -h false -c ` and verify that the iOS app is not built, but run in the simulator Reviewed By: cortinico Differential Revision: D68161477 Pulled By: cipolleschi fbshipit-source-id: 577d110f9ff0197a2d3348a08a60e60a4d0a752b --- .github/workflows/test-all.yml | 2 +- scripts/release-testing/test-e2e-local.js | 78 ++++++++++++------- .../utils/github-actions-utils.js | 10 +++ 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index cbe2a66e6ed0..a2a77530c9db 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -157,7 +157,7 @@ jobs: react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} test_ios_rntester: - runs-on: macos-13 + runs-on: macos-13-large needs: [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos] env: diff --git a/scripts/release-testing/test-e2e-local.js b/scripts/release-testing/test-e2e-local.js index fcb23721ee4a..7698b1427eab 100644 --- a/scripts/release-testing/test-e2e-local.js +++ b/scripts/release-testing/test-e2e-local.js @@ -85,40 +85,66 @@ async function testRNTesterIOS( } version of RNTester iOS with the new Architecture enabled`, ); + // if everything succeeded so far, we can launch Metro and the app + // start the Metro server in a separate window + launchPackagerInSeparateWindow(pwd().toString()); + // remember that for this to be successful // you should have run bundle install once // in your local setup - if (argv.hermes === true && ciArtifacts != null) { - const hermesURL = await ciArtifacts.artifactURLHermesDebug(); - const hermesZipPath = path.join(ciArtifacts.baseTmpPath(), 'hermes.zip'); - // download hermes source code from manifold - ciArtifacts.downloadArtifact(hermesURL, hermesZipPath); - // GHA zips by default the artifacts. - const outputFolder = path.join(ciArtifacts.baseTmpPath(), 'hermes'); - exec(`rm -rf ${outputFolder}`); - exec(`unzip ${hermesZipPath} -d ${outputFolder}`); - const hermesPath = path.join(outputFolder, 'hermes-ios-Debug.tar.gz'); - - console.info(`Downloaded Hermes in ${hermesPath}`); - exec( - `HERMES_ENGINE_TARBALL_PATH=${hermesPath} RCT_NEW_ARCH_ENABLED=1 bundle exec pod install --ansi`, + if (ciArtifacts != null) { + const appOutputFolder = path.join( + ciArtifacts.baseTmpPath(), + '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}`); + } + + // boot device + const bootedDevice = String( + exec('xcrun simctl list | grep "iPhone 16 Pro" | grep Booted', { + silent: true, + }), + ).trim(); + if (!bootedDevice || bootedDevice.length === 0) { + exec('xcrun simctl boot "iPhone 16 Pro"'); + } + + // 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=${ argv.hermes === true ? 1 : 0 } CI=${onReleaseBranch.toString()} RCT_NEW_ARCH_ENABLED=1 bundle exec pod install --ansi`, ); - } - - // if everything succeeded so far, we can launch Metro and the app - // start the Metro server in a separate window - launchPackagerInSeparateWindow(pwd().toString()); - // launch the app on iOS simulator - exec( - 'npx react-native run-ios --scheme RNTester --simulator "iPhone 15 Pro"', - ); + // launch the app on iOS simulator + exec( + 'npx react-native run-ios --scheme RNTester --simulator "iPhone 15 Pro"', + ); + } } /** @@ -201,7 +227,7 @@ async function testRNTesterAndroid( * - @onReleaseBranch whether we are on a release branch or not */ async function testRNTester( - circleCIArtifacts /*:Unwrap> */, + ciArtifacts /*:Unwrap> */, onReleaseBranch /*: boolean */, ) { // FIXME: make sure that the commands retains colors @@ -210,9 +236,9 @@ async function testRNTester( pushd('packages/rn-tester'); if (argv.platform === 'ios') { - await testRNTesterIOS(circleCIArtifacts, onReleaseBranch); + await testRNTesterIOS(ciArtifacts, onReleaseBranch); } else { - await testRNTesterAndroid(circleCIArtifacts); + await testRNTesterAndroid(ciArtifacts); } popd(); } diff --git a/scripts/release-testing/utils/github-actions-utils.js b/scripts/release-testing/utils/github-actions-utils.js index 501e3e9c3d79..b9e3d4668504 100644 --- a/scripts/release-testing/utils/github-actions-utils.js +++ b/scripts/release-testing/utils/github-actions-utils.js @@ -214,6 +214,14 @@ async function artifactURLForHermesRNTesterAPK( return getArtifactURL('rntester-hermes-debug'); } +async function artifactURLForJSCRNTesterApp() /*: Promise */ { + return getArtifactURL('RNTesterApp-NewArch-JSC-Debug'); +} + +async function artifactURLForHermesRNTesterApp() /*: Promise */ { + return getArtifactURL('RNTesterApp-NewArch-Hermes-Debug'); +} + async function artifactURLForMavenLocal() /*: Promise */ { return getArtifactURL('maven-local'); } @@ -247,6 +255,8 @@ module.exports = { downloadArtifact, artifactURLForJSCRNTesterAPK, artifactURLForHermesRNTesterAPK, + artifactURLForJSCRNTesterApp, + artifactURLForHermesRNTesterApp, artifactURLForMavenLocal, artifactURLHermesDebug, artifactURLForReactNative, From 5bff540ad33a76c6a4718217bd92908195ae577a Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Thu, 16 Jan 2025 02:57:24 -0800 Subject: [PATCH 06/60] Fix ruby (#48721) Summary: Following the suggestions [here](https://stackoverflow.com/questions/79360526/uninitialized-constant-activesupportloggerthreadsafelevellogger-nameerror), it seems that concurrent-ruby has been released tonight and it is bugged. Let's pin it to the right version. ## Changelog: [iOS][Changed] - Pin 'concurrent-ruby' to a working version Pull Request resolved: https://github.com/facebook/react-native/pull/48721 Test Plan: GHA Reviewed By: robhogan Differential Revision: D68262719 Pulled By: cipolleschi fbshipit-source-id: fc6410e28cc96f9d3769d3082a77cac0a3efe6db --- Gemfile | 1 + packages/helloworld/Gemfile | 1 + packages/rn-tester/Gemfile | 1 + 3 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index ec2e5c6b0f13..4dd36df9782c 100644 --- a/Gemfile +++ b/Gemfile @@ -6,3 +6,4 @@ ruby ">= 2.6.10" gem 'cocoapods', '~> 1.13', '!= 1.15.0', '!= 1.15.1' gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' gem 'xcodeproj', '< 1.26.0' +gem 'concurrent-ruby', '< 1.3.4' diff --git a/packages/helloworld/Gemfile b/packages/helloworld/Gemfile index a8af404e61ae..1036ed276bed 100644 --- a/packages/helloworld/Gemfile +++ b/packages/helloworld/Gemfile @@ -5,3 +5,4 @@ ruby ">= 2.6.10" gem 'cocoapods', '~> 1.13', '!= 1.15.0', '!= 1.15.1' gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' gem 'xcodeproj', '< 1.26.0' +gem 'concurrent-ruby', '< 1.3.4' diff --git a/packages/rn-tester/Gemfile b/packages/rn-tester/Gemfile index 22f0060db385..120dcb2bf5d1 100644 --- a/packages/rn-tester/Gemfile +++ b/packages/rn-tester/Gemfile @@ -9,3 +9,4 @@ gem 'cocoapods', '~> 1.13', '!= 1.15.0', '!= 1.15.1' gem 'rexml' gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' gem 'xcodeproj', '< 1.26.0' +gem 'concurrent-ruby', '< 1.3.4' From 36e2ae6a9c0387716feab7fd688564e50fd7557c Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 14 Jan 2025 11:05:07 -0800 Subject: [PATCH 07/60] fix Pressable when transform style is animated (#48672) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48672 ## Changelog: [General] [Fixed] - Buttons becoming unresponsive when transform is animated # The problem D67872307 changes when `ensureUpdateSubscriptionExists` is called to in `__attach`. This breaks the functionality because `__attach` is called before flag `__isNative` is set and subscriptions are never setup. # Fix The diff sets up subscriptions in `__makeNative` method. Reviewed By: yungsters Differential Revision: D68154908 fbshipit-source-id: e2ac108b064a66dda08902653d6bd20286f92458 --- .../react-native/Libraries/Animated/nodes/AnimatedValue.js | 6 ++++++ .../__tests__/__snapshots__/public-api-test.js.snap | 1 + 2 files changed, 7 insertions(+) diff --git a/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js b/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js index 889bfa51825e..2e500bf64b48 100644 --- a/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js +++ b/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js @@ -9,6 +9,7 @@ */ import type {EventSubscription} from '../../vendor/emitter/EventEmitter'; +import type {PlatformConfig} from '../AnimatedPlatformConfig'; import type Animation, {EndCallback} from '../animations/Animation'; import type {InterpolationConfigType} from './AnimatedInterpolation'; import type AnimatedNode from './AnimatedNode'; @@ -131,6 +132,11 @@ export default class AnimatedValue extends AnimatedWithChildren { return this._value + this._offset; } + __makeNative(platformConfig: ?PlatformConfig): void { + super.__makeNative(platformConfig); + this.#ensureUpdateSubscriptionExists(); + } + #ensureUpdateSubscriptionExists(): void { if (this.#updateSubscription != null) { return; diff --git a/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap b/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap index 32b72e85d0ba..96d1f4fd869c 100644 --- a/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap +++ b/packages/react-native/Libraries/__tests__/__snapshots__/public-api-test.js.snap @@ -1169,6 +1169,7 @@ declare export default class AnimatedValue extends AnimatedWithChildren { __attach(): void; __detach(): void; __getValue(): number; + __makeNative(platformConfig: ?PlatformConfig): void; setValue(value: number): void; setOffset(offset: number): void; flattenOffset(): void; From bb5f971389b97936190254adb37ea0abf55fdfb5 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Wed, 15 Jan 2025 05:40:15 -0800 Subject: [PATCH 08/60] Animated: Fix `onUserDrivenAnimationEnded` w/ Insertion Effects (#48678) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48678 While diagnosing a recent issue in which `AnimatedValue` instances were not being correctly updated as expected, the insertion effects feature flag was identified as a root cause. Upon further investigation, it appears that this is because the `onUserDrivenAnimationEnded` listener was not implemented the same way in the two feature flag states: - When `useInsertionEffectsForAnimations` is disabled, `useAnimatedProps` listens to `onUserDrivenAnimationEnded` in a passive effect, after all nodes have been attached. - When `useInsertionEffectsForAnimations` is enabled, `useAnimatedProps` listens to `onUserDrivenAnimationEnded` in an insertion effect when attaching nodes. The bugs occurs because `useAnimatedProps` checks whether native driver is employed to decide whether to listen to `onUserDrivenAnimationEnded`. However, we do not know whether native driver will be employed during the insertion effect. (Actually, we do not necessarily know that in a passive effect, either... but that is a separate matter.) This fixes the bug when that occurs when `useInsertionEffectsForAnimations` is enabled, by moving the listening logic of `onUserDrivenAnimationEnded` into a passive effect. This is the same way that it is implemented when `useInsertionEffectsForAnimations` is disabled. Changelog: [Internal] Reviewed By: javache, sammy-SC Differential Revision: D68171721 fbshipit-source-id: 50b23348fd4641580581cacebc920959651f96a7 --- .../Libraries/Animated/useAnimatedProps.js | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/react-native/Libraries/Animated/useAnimatedProps.js b/packages/react-native/Libraries/Animated/useAnimatedProps.js index 9c66dfa827da..98fc56783730 100644 --- a/packages/react-native/Libraries/Animated/useAnimatedProps.js +++ b/packages/react-native/Libraries/Animated/useAnimatedProps.js @@ -276,6 +276,20 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void { // if the queue is empty. When multiple animated components are mounted at // the same time. Only first component flushes the queue and the others will noop. NativeAnimatedHelper.API.flushQueue(); + let drivenAnimationEndedListener: ?EventSubscription = null; + if (node.__isNative) { + drivenAnimationEndedListener = + NativeAnimatedHelper.nativeEventEmitter.addListener( + 'onUserDrivenAnimationEnded', + data => { + node.update(); + }, + ); + } + + return () => { + drivenAnimationEndedListener?.remove(); + }; }); useInsertionEffect(() => { @@ -287,17 +301,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void { useInsertionEffect(() => { node.__attach(); - let drivenAnimationEndedListener: ?EventSubscription = null; - - if (node.__isNative) { - drivenAnimationEndedListener = - NativeAnimatedHelper.nativeEventEmitter.addListener( - 'onUserDrivenAnimationEnded', - data => { - node.update(); - }, - ); - } if (prevNodeRef.current != null) { const prevNode = prevNodeRef.current; // TODO: Stop restoring default values (unless `reset` is called). @@ -312,8 +315,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void { } else { prevNodeRef.current = node; } - - drivenAnimationEndedListener?.remove(); }; }, [node]); } From 3abb4cab7d1fba738987dca5f317e395dd985d27 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Wed, 15 Jan 2025 17:00:44 -0800 Subject: [PATCH 09/60] Animated: Defer `onAnimatedValueUpdate` on Attach + Native (#48715) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48715 {D68154908} fixed a problem with the `onAnimatedValueUpdate` listener not being correctly attached if `__attach` were called before `__makeNative` (which sets `__isNative` to true). We're potentially seeing production symptoms of stuttering interactions and user responsiveness, after queuing up many operations. Our hypothesis is that in scenarios where `ensureUpdateSubscriptionExists` is being called during `__makeNative` (instead of during `__attach`), a backup of operations occurs leading to these symptoms. This diff attempts to validate and mitigate this hypothesis by deferring `ensureUpdateSubscriptionExists` to when an `AnimatedValue` instance has had both `__attach` and `__makeNative` invoked. Changelog: [Internal] Differential Revision: D68236594 fbshipit-source-id: 2089100a773ebfc161fb5b567123eb58a893939f --- .../Libraries/Animated/nodes/AnimatedValue.js | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js b/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js index 2e500bf64b48..8ab98a06246a 100644 --- a/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js +++ b/packages/react-native/Libraries/Animated/nodes/AnimatedValue.js @@ -85,6 +85,7 @@ function _executeAsAnimatedBatch(id: string, operation: () => void) { * See https://reactnative.dev/docs/animatedvalue */ export default class AnimatedValue extends AnimatedWithChildren { + #attached: boolean = false; #updateSubscription: ?EventSubscription = null; _value: number; @@ -107,14 +108,8 @@ export default class AnimatedValue extends AnimatedWithChildren { } __attach(): void { - if (this.__isNative) { - // NOTE: In theory, we should only need to call this when any listeners - // are added. However, there is a global `onUserDrivenAnimationEnded` - // listener that relies on `onAnimatedValueUpdate` having fired to update - // the values in JavaScript. If that listener is removed, this could be - // re-optimized. - this.#ensureUpdateSubscriptionExists(); - } + this.#attached = true; + this.#ensureUpdateSubscriptionExists(); } __detach(): void { @@ -126,6 +121,7 @@ export default class AnimatedValue extends AnimatedWithChildren { } this.stopAnimation(); super.__detach(); + this.#attached = false; } __getValue(): number { @@ -137,10 +133,22 @@ export default class AnimatedValue extends AnimatedWithChildren { this.#ensureUpdateSubscriptionExists(); } + /** + * NOTE: In theory, we should only need to call this when any listeners + * are added. However, there is a global `onUserDrivenAnimationEnded` + * listener that relies on `onAnimatedValueUpdate` having fired to update + * the values in JavaScript. If that listener is removed, this could be + * re-optimized. + */ #ensureUpdateSubscriptionExists(): void { if (this.#updateSubscription != null) { return; } + // The order in which `__attach` and `__makeNative` are called is not + // deterministic, and we only want to do this when both have occurred. + if (!this.#attached || !this.__isNative) { + return; + } const nativeTag = this.__getNativeTag(); NativeAnimatedAPI.startListeningToAnimatedNodeValue(nativeTag); const subscription: EventSubscription = From 1f412d0826683989c5fd6051287e3bf31ee54b56 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Mon, 20 Jan 2025 20:09:09 +0000 Subject: [PATCH 10/60] Release 0.78.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 | 6 +++--- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/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/helloworld/package.json | 12 ++++++------ packages/metro-config/package.json | 6 +++--- 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-bots/package.json | 2 +- .../package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- packages/react-native-fantom/package.json | 2 +- packages/react-native-info/package.json | 2 +- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 6 +++--- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.java | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- packages/rn-tester/package.json | 6 +++--- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- 33 files changed, 62 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 0979a97b2875..64312ff69357 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "@babel/preset-flow": "^7.24.7", "@definitelytyped/dtslint": "^0.0.127", "@jest/create-cache-key-function": "^29.6.3", - "@react-native/metro-babel-transformer": "0.78.0-rc.0", - "@react-native/metro-config": "0.78.0-rc.0", + "@react-native/metro-babel-transformer": "0.78.0-rc.1", + "@react-native/metro-config": "0.78.0-rc.1", "@tsconfig/node18": "1.0.1", "@types/react": "^19.0.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index c697f396b188..51bc46ba6644 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.78.0-rc.0", + "version": "0.78.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 cddec2d9f382..7fa3ae8535d5 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.78.0-rc.0", + "version": "0.78.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.78.0-rc.0" + "@react-native/codegen": "0.78.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 9e7a58f97e17..a6049e1448b4 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.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,8 +22,8 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.78.0-rc.0", - "@react-native/metro-babel-transformer": "0.78.0-rc.0", + "@react-native/dev-middleware": "0.78.0-rc.1", + "@react-native/metro-babel-transformer": "0.78.0-rc.1", "chalk": "^4.0.0", "debug": "^2.2.0", "invariant": "^2.2.4", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 9f68c2fa4390..07c44c3e4061 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.78.0-rc.0", + "version": "0.78.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 b1b52eca925b..b8164d4c8e44 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 38aa0adda5f4..100280550910 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.78.0-rc.0", + "version": "0.78.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.78.0-rc.0", + "@react-native/debugger-frontend": "0.78.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 160b58ecb380..35b06f542ea9 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.78.0-rc.0", + "version": "0.78.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.78.0-rc.0", + "@react-native/eslint-plugin": "0.78.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 1ca54adc8e5b..77d24670bb3d 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.78.0-rc.0", + "version": "0.78.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 fa5575ea113d..f7407e8e73b6 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.78.0-rc.0", + "version": "0.78.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.78.0-rc.0", + "@react-native/codegen": "0.78.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 6d29c74f6b58..7a8d1a9fe562 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/helloworld/package.json b/packages/helloworld/package.json index b5ab12057d35..f0f14a4399b7 100644 --- a/packages/helloworld/package.json +++ b/packages/helloworld/package.json @@ -1,6 +1,6 @@ { "name": "helloworld", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "private": true, "scripts": { "bootstrap": "node ./cli.js bootstrap", @@ -13,16 +13,16 @@ }, "dependencies": { "react": "19.0.0", - "react-native": "0.78.0-rc.0" + "react-native": "0.78.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.78.0-rc.0", - "@react-native/core-cli-utils": "0.78.0-rc.0", - "@react-native/eslint-config": "0.78.0-rc.0", - "@react-native/metro-config": "0.78.0-rc.0", + "@react-native/babel-preset": "0.78.0-rc.1", + "@react-native/core-cli-utils": "0.78.0-rc.1", + "@react-native/eslint-config": "0.78.0-rc.1", + "@react-native/metro-config": "0.78.0-rc.1", "chalk": "^4.1.2", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index ec61fe23a0ad..1aeb86b4668f 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.78.0-rc.0", - "@react-native/metro-babel-transformer": "0.78.0-rc.0", + "@react-native/js-polyfills": "0.78.0-rc.1", + "@react-native/metro-babel-transformer": "0.78.0-rc.1", "metro-config": "^0.81.0", "metro-runtime": "^0.81.0" } diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index e7060ce3d5be..ccbc86cc7596 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.78.0-rc.0", + "version": "0.78.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 508b940849c9..b2d11dab182a 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.78.0-rc.0", + "version": "0.78.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 f350ffa3a8bc..fd2b977b6c75 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.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Babel preset for React Native applications", "main": "src/index.js", "repository": { @@ -55,7 +55,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.78.0-rc.0", + "@react-native/babel-plugin-codegen": "0.78.0-rc.1", "babel-plugin-syntax-hermes-parser": "0.25.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 5c5f64c8f1e0..f52894b803e6 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.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Babel transformer for React Native applications.", "main": "src/index.js", "repository": { @@ -16,7 +16,7 @@ "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.0-rc.0", + "@react-native/babel-preset": "0.78.0-rc.1", "hermes-parser": "0.25.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-bots/package.json b/packages/react-native-bots/package.json index 635fac9cb473..cebb0fd8c348 100644 --- a/packages/react-native-bots/package.json +++ b/packages/react-native-bots/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/bots", "description": "React Native Bots", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "private": true, "license": "MIT", "repository": { diff --git a/packages/react-native-codegen-typescript-test/package.json b/packages/react-native-codegen-typescript-test/package.json index b715e0a3024c..8a4d8488c56d 100644 --- a/packages/react-native-codegen-typescript-test/package.json +++ b/packages/react-native-codegen-typescript-test/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen-typescript-test", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "private": true, "description": "TypeScript related unit test for @react-native/codegen", "license": "MIT", @@ -19,7 +19,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.78.0-rc.0" + "@react-native/codegen": "0.78.0-rc.1" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 7c041c007899..18b366191bb5 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.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-fantom/package.json b/packages/react-native-fantom/package.json index 0e0fbfb93b1e..a41c36feaa48 100644 --- a/packages/react-native-fantom/package.json +++ b/packages/react-native-fantom/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/fantom", "private": true, - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "main": "src/index.js", "description": "Internal integration testing and benchmarking tool for React Native", "peerDependencies": { diff --git a/packages/react-native-info/package.json b/packages/react-native-info/package.json index 64a07beea34a..d86a7e7ab698 100644 --- a/packages/react-native-info/package.json +++ b/packages/react-native-info/package.json @@ -1,6 +1,6 @@ { "name": "react-native-info", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "main": "build/index.js", "license": "MIT", "private": true, diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index b918fa891454..b28666f0d644 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.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -17,7 +17,7 @@ ], "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.78.0-rc.0" + "@react-native/codegen": "0.78.0-rc.1" }, "peerDependencies": { "@types/react": "^19.0.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index 221bc43b331f..c73b95f604ba 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/oss-library-example", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "private": true, "description": "Package that includes native module exapmle, native component example, targets both the old and the new architecture. It should serve as an example of a real-world OSS library.", "license": "MIT", @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.0-rc.0", - "react-native": "0.78.0-rc.0" + "@react-native/babel-preset": "0.78.0-rc.1", + "react-native": "0.78.0-rc.1" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 8aaf7fffc687..daa82a6d720d 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -17,7 +17,7 @@ const version: $ReadOnly<{ major: 0, minor: 78, patch: 0, - prerelease: 'rc.0', + prerelease: 'rc.1', }; module.exports = {version}; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 4aca54d56d50..a00ef40704f4 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(78), 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 cfca124afa93..1646810a2f5e 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.78.0-rc.0 +VERSION_NAME=0.78.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.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java index b25e3400d51f..cdd6aa919f4b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java @@ -18,5 +18,5 @@ public class ReactNativeVersion { "major", 0, "minor", 78, "patch", 0, - "prerelease", "rc.0"); + "prerelease", "rc.1"); } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 53c51cd63ee9..19f0768ab1b8 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -18,7 +18,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 78; 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 9f6b83aa9c31..2947323b6f0e 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -108,13 +108,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.78.0-rc.0", - "@react-native/codegen": "0.78.0-rc.0", - "@react-native/community-cli-plugin": "0.78.0-rc.0", - "@react-native/gradle-plugin": "0.78.0-rc.0", - "@react-native/js-polyfills": "0.78.0-rc.0", - "@react-native/normalize-colors": "0.78.0-rc.0", - "@react-native/virtualized-lists": "0.78.0-rc.0", + "@react-native/assets-registry": "0.78.0-rc.1", + "@react-native/codegen": "0.78.0-rc.1", + "@react-native/community-cli-plugin": "0.78.0-rc.1", + "@react-native/gradle-plugin": "0.78.0-rc.1", + "@react-native/js-polyfills": "0.78.0-rc.1", + "@react-native/normalize-colors": "0.78.0-rc.1", + "@react-native/virtualized-lists": "0.78.0-rc.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 31af89e70b8a..7be3da5c01a8 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/tester", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "private": true, "description": "React Native tester app.", "license": "MIT", @@ -27,8 +27,8 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { - "@react-native/oss-library-example": "0.78.0-rc.0", - "@react-native/popup-menu-android": "0.78.0-rc.0", + "@react-native/oss-library-example": "0.78.0-rc.1", + "@react-native/popup-menu-android": "0.78.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 c9f48c7ec841..7491e05f8b29 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.78.0-rc.0", + "version": "0.78.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 3bc615036407..ce42e09b3e21 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.78.0-rc.0", + "version": "0.78.0-rc.1", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { From 7e883be8003681d40d3840817abe63df149e26ed Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Wed, 22 Jan 2025 10:32:32 +0000 Subject: [PATCH 11/60] Update Podfile.lock Changelog: [Internal] --- packages/rn-tester/Podfile.lock | 582 ++++++++++++++++---------------- 1 file changed, 291 insertions(+), 291 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 7d6b03bb3920..00850e0a1ae3 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,13 +2,13 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (6.1.4) - - FBLazyVector (1000.0.0) + - FBLazyVector (0.78.0-rc.1) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (1000.0.0): - - hermes-engine/Pre-built (= 1000.0.0) - - hermes-engine/Pre-built (1000.0.0) - - MyNativeView (0.77.0-main): + - hermes-engine (0.78.0-rc.1): + - hermes-engine/Pre-built (= 0.78.0-rc.1) + - hermes-engine/Pre-built (0.78.0-rc.1) + - MyNativeView (0.78.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -29,7 +29,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - NativeCxxModuleExample (0.77.0-main): + - NativeCxxModuleExample (0.78.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -51,7 +51,7 @@ PODS: - ReactCommon/turbomodule/core - Yoga - OCMock (3.9.4) - - OSSLibraryExample (0.77.0-main): + - OSSLibraryExample (0.78.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -91,32 +91,32 @@ PODS: - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - - 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): + - RCTDeprecation (0.78.0-rc.1) + - RCTRequired (0.78.0-rc.1) + - RCTTypeSafety (0.78.0-rc.1): + - FBLazyVector (= 0.78.0-rc.1) + - RCTRequired (= 0.78.0-rc.1) + - React-Core (= 0.78.0-rc.1) + - React (0.78.0-rc.1): + - React-Core (= 0.78.0-rc.1) + - React-Core/DevSupport (= 0.78.0-rc.1) + - React-Core/RCTWebSocket (= 0.78.0-rc.1) + - React-RCTActionSheet (= 0.78.0-rc.1) + - React-RCTAnimation (= 0.78.0-rc.1) + - React-RCTBlob (= 0.78.0-rc.1) + - React-RCTImage (= 0.78.0-rc.1) + - React-RCTLinking (= 0.78.0-rc.1) + - React-RCTNetwork (= 0.78.0-rc.1) + - React-RCTSettings (= 0.78.0-rc.1) + - React-RCTText (= 0.78.0-rc.1) + - React-RCTVibration (= 0.78.0-rc.1) + - React-callinvoker (0.78.0-rc.1) + - React-Core (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 1000.0.0) + - React-Core/Default (= 0.78.0-rc.1) - React-cxxreact - React-featureflags - React-hermes @@ -128,7 +128,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (1000.0.0): + - React-Core/CoreModulesHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -145,7 +145,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (1000.0.0): + - React-Core/Default (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -161,13 +161,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (1000.0.0): + - React-Core/DevSupport (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 1000.0.0) - - React-Core/RCTWebSocket (= 1000.0.0) + - React-Core/Default (= 0.78.0-rc.1) + - React-Core/RCTWebSocket (= 0.78.0-rc.1) - React-cxxreact - React-featureflags - React-hermes @@ -179,7 +179,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (1000.0.0): + - React-Core/RCTActionSheetHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -196,7 +196,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (1000.0.0): + - React-Core/RCTAnimationHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -213,7 +213,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (1000.0.0): + - React-Core/RCTBlobHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -230,7 +230,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (1000.0.0): + - React-Core/RCTImageHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -247,7 +247,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (1000.0.0): + - React-Core/RCTLinkingHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -264,7 +264,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (1000.0.0): + - React-Core/RCTNetworkHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -281,7 +281,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTPushNotificationHeaders (1000.0.0): + - React-Core/RCTPushNotificationHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -298,7 +298,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (1000.0.0): + - React-Core/RCTSettingsHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -315,7 +315,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (1000.0.0): + - React-Core/RCTTextHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (1000.0.0): + - React-Core/RCTVibrationHeaders (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -349,12 +349,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (1000.0.0): + - React-Core/RCTWebSocket (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 1000.0.0) + - React-Core/Default (= 0.78.0-rc.1) - React-cxxreact - React-featureflags - React-hermes @@ -366,22 +366,22 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (1000.0.0): + - React-CoreModules (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - - RCTTypeSafety (= 1000.0.0) - - React-Core/CoreModulesHeaders (= 1000.0.0) - - React-jsi (= 1000.0.0) + - RCTTypeSafety (= 0.78.0-rc.1) + - React-Core/CoreModulesHeaders (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 1000.0.0) + - React-RCTImage (= 0.78.0-rc.1) - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (1000.0.0): + - React-cxxreact (0.78.0-rc.1): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -389,16 +389,16 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 1000.0.0) - - React-debug (= 1000.0.0) - - React-jsi (= 1000.0.0) + - React-callinvoker (= 0.78.0-rc.1) + - React-debug (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) - React-jsinspector - - React-logger (= 1000.0.0) - - React-perflogger (= 1000.0.0) - - React-runtimeexecutor (= 1000.0.0) - - React-timing (= 1000.0.0) - - React-debug (1000.0.0) - - React-defaultsnativemodule (1000.0.0): + - React-logger (= 0.78.0-rc.1) + - React-perflogger (= 0.78.0-rc.1) + - React-runtimeexecutor (= 0.78.0-rc.1) + - React-timing (= 0.78.0-rc.1) + - React-debug (0.78.0-rc.1) + - React-defaultsnativemodule (0.78.0-rc.1): - hermes-engine - RCT-Folly - React-domnativemodule @@ -408,7 +408,7 @@ PODS: - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - React-domnativemodule (1000.0.0): + - React-domnativemodule (0.78.0-rc.1): - hermes-engine - RCT-Folly - React-Fabric @@ -419,7 +419,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - Yoga - - React-Fabric (1000.0.0): + - React-Fabric (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -431,22 +431,22 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 1000.0.0) - - React-Fabric/attributedstring (= 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.78.0-rc.1) + - React-Fabric/attributedstring (= 0.78.0-rc.1) + - React-Fabric/componentregistry (= 0.78.0-rc.1) + - React-Fabric/componentregistrynative (= 0.78.0-rc.1) + - React-Fabric/components (= 0.78.0-rc.1) + - React-Fabric/consistency (= 0.78.0-rc.1) + - React-Fabric/core (= 0.78.0-rc.1) + - React-Fabric/dom (= 0.78.0-rc.1) + - React-Fabric/imagemanager (= 0.78.0-rc.1) + - React-Fabric/leakchecker (= 0.78.0-rc.1) + - React-Fabric/mounting (= 0.78.0-rc.1) + - React-Fabric/observers (= 0.78.0-rc.1) + - React-Fabric/scheduler (= 0.78.0-rc.1) + - React-Fabric/telemetry (= 0.78.0-rc.1) + - React-Fabric/templateprocessor (= 0.78.0-rc.1) + - React-Fabric/uimanager (= 0.78.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -456,7 +456,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (1000.0.0): + - React-Fabric/animations (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -477,7 +477,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (1000.0.0): + - React-Fabric/attributedstring (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -498,7 +498,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (1000.0.0): + - React-Fabric/componentregistry (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -519,7 +519,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (1000.0.0): + - React-Fabric/componentregistrynative (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -540,7 +540,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (1000.0.0): + - React-Fabric/components (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -552,9 +552,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 1000.0.0) - - React-Fabric/components/root (= 1000.0.0) - - React-Fabric/components/view (= 1000.0.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.78.0-rc.1) + - React-Fabric/components/root (= 0.78.0-rc.1) + - React-Fabric/components/view (= 0.78.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -564,7 +564,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (1000.0.0): + - React-Fabric/components/legacyviewmanagerinterop (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -585,7 +585,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (1000.0.0): + - React-Fabric/components/root (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -606,7 +606,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (1000.0.0): + - React-Fabric/components/view (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/consistency (1000.0.0): + - React-Fabric/consistency (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -649,7 +649,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/core (1000.0.0): + - React-Fabric/core (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -670,7 +670,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (1000.0.0): + - React-Fabric/dom (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -691,7 +691,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (1000.0.0): + - React-Fabric/imagemanager (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -712,7 +712,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (1000.0.0): + - React-Fabric/leakchecker (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -733,7 +733,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (1000.0.0): + - React-Fabric/mounting (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -754,7 +754,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (1000.0.0): + - React-Fabric/observers (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -766,7 +766,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 1000.0.0) + - React-Fabric/observers/events (= 0.78.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -776,7 +776,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (1000.0.0): + - React-Fabric/observers/events (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -797,7 +797,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (1000.0.0): + - React-Fabric/scheduler (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -820,7 +820,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (1000.0.0): + - React-Fabric/telemetry (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -841,7 +841,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (1000.0.0): + - React-Fabric/templateprocessor (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -862,7 +862,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (1000.0.0): + - React-Fabric/uimanager (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -874,7 +874,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 1000.0.0) + - React-Fabric/uimanager/consistency (= 0.78.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -885,7 +885,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (1000.0.0): + - React-Fabric/uimanager/consistency (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -907,7 +907,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (1000.0.0): + - React-FabricComponents (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -920,8 +920,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 1000.0.0) - - React-FabricComponents/textlayoutmanager (= 1000.0.0) + - React-FabricComponents/components (= 0.78.0-rc.1) + - React-FabricComponents/textlayoutmanager (= 0.78.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -932,7 +932,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (1000.0.0): + - React-FabricComponents/components (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -945,15 +945,15 @@ PODS: - 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/inputaccessory (= 0.78.0-rc.1) + - React-FabricComponents/components/iostextinput (= 0.78.0-rc.1) + - React-FabricComponents/components/modal (= 0.78.0-rc.1) + - React-FabricComponents/components/rncore (= 0.78.0-rc.1) + - React-FabricComponents/components/safeareaview (= 0.78.0-rc.1) + - React-FabricComponents/components/scrollview (= 0.78.0-rc.1) + - React-FabricComponents/components/text (= 0.78.0-rc.1) + - React-FabricComponents/components/textinput (= 0.78.0-rc.1) + - React-FabricComponents/components/unimplementedview (= 0.78.0-rc.1) - React-featureflags - React-graphics - React-jsi @@ -964,7 +964,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (1000.0.0): + - React-FabricComponents/components/inputaccessory (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -987,7 +987,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (1000.0.0): + - React-FabricComponents/components/iostextinput (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1010,7 +1010,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (1000.0.0): + - React-FabricComponents/components/modal (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1033,7 +1033,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (1000.0.0): + - React-FabricComponents/components/rncore (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1056,7 +1056,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (1000.0.0): + - React-FabricComponents/components/safeareaview (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1079,7 +1079,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (1000.0.0): + - React-FabricComponents/components/scrollview (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1102,7 +1102,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (1000.0.0): + - React-FabricComponents/components/text (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1125,7 +1125,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (1000.0.0): + - React-FabricComponents/components/textinput (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1148,7 +1148,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (1000.0.0): + - React-FabricComponents/components/unimplementedview (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1171,7 +1171,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (1000.0.0): + - React-FabricComponents/textlayoutmanager (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1194,29 +1194,29 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (1000.0.0): + - React-FabricImage (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - - RCTRequired (= 1000.0.0) - - RCTTypeSafety (= 1000.0.0) + - RCTRequired (= 0.78.0-rc.1) + - RCTTypeSafety (= 0.78.0-rc.1) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 1000.0.0) + - React-jsiexecutor (= 0.78.0-rc.1) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (1000.0.0): + - React-featureflags (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - - React-featureflagsnativemodule (1000.0.0): + - React-featureflagsnativemodule (0.78.0-rc.1): - hermes-engine - RCT-Folly - React-featureflags @@ -1224,7 +1224,7 @@ PODS: - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - React-graphics (1000.0.0): + - React-graphics (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1234,20 +1234,20 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-hermes (1000.0.0): + - React-hermes (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 1000.0.0) + - React-cxxreact (= 0.78.0-rc.1) - React-jsi - - React-jsiexecutor (= 1000.0.0) + - React-jsiexecutor (= 0.78.0-rc.1) - React-jsinspector - - React-perflogger (= 1000.0.0) + - React-perflogger (= 0.78.0-rc.1) - React-runtimeexecutor - - React-idlecallbacksnativemodule (1000.0.0): + - React-idlecallbacksnativemodule (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly @@ -1256,7 +1256,7 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimescheduler - ReactCommon/turbomodule/core - - React-ImageManager (1000.0.0): + - React-ImageManager (0.78.0-rc.1): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1265,7 +1265,7 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (1000.0.0): + - React-jserrorhandler (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1274,7 +1274,7 @@ PODS: - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - React-jsi (1000.0.0): + - React-jsi (0.78.0-rc.1): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -1282,18 +1282,18 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-jsiexecutor (1000.0.0): + - React-jsiexecutor (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 1000.0.0) - - React-jsi (= 1000.0.0) + - React-cxxreact (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) - React-jsinspector - - React-perflogger (= 1000.0.0) - - React-jsinspector (1000.0.0): + - React-perflogger (= 0.78.0-rc.1) + - React-jsinspector (0.78.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1301,25 +1301,25 @@ PODS: - React-featureflags - React-jsi - React-jsinspectortracing - - React-perflogger (= 1000.0.0) - - React-runtimeexecutor (= 1000.0.0) - - React-jsinspectortracing (1000.0.0): + - React-perflogger (= 0.78.0-rc.1) + - React-runtimeexecutor (= 0.78.0-rc.1) + - React-jsinspectortracing (0.78.0-rc.1): - RCT-Folly - - React-jsitracing (1000.0.0): + - React-jsitracing (0.78.0-rc.1): - React-jsi - - React-logger (1000.0.0): + - React-logger (0.78.0-rc.1): - glog - - React-Mapbuffer (1000.0.0): + - React-Mapbuffer (0.78.0-rc.1): - glog - React-debug - - React-microtasksnativemodule (1000.0.0): + - React-microtasksnativemodule (0.78.0-rc.1): - hermes-engine - RCT-Folly - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - React-NativeModulesApple (1000.0.0): + - React-NativeModulesApple (0.78.0-rc.1): - glog - hermes-engine - React-callinvoker @@ -1330,18 +1330,18 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (1000.0.0): + - React-perflogger (0.78.0-rc.1): - DoubleConversion - RCT-Folly (= 2024.11.18.00) - - React-performancetimeline (1000.0.0): + - React-performancetimeline (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - React-cxxreact - React-featureflags - React-jsinspectortracing - React-timing - - React-RCTActionSheet (1000.0.0): - - React-Core/RCTActionSheetHeaders (= 1000.0.0) - - React-RCTAnimation (1000.0.0): + - React-RCTActionSheet (0.78.0-rc.1): + - React-Core/RCTActionSheetHeaders (= 0.78.0-rc.1) + - React-RCTAnimation (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1349,7 +1349,7 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTAppDelegate (1000.0.0): + - React-RCTAppDelegate (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety @@ -1373,7 +1373,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (1000.0.0): + - React-RCTBlob (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1387,7 +1387,7 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTFabric (1000.0.0): + - React-RCTFabric (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1410,7 +1410,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTFBReactNativeSpec (1000.0.0): + - React-RCTFBReactNativeSpec (0.78.0-rc.1): - hermes-engine - RCT-Folly - RCTRequired @@ -1420,7 +1420,7 @@ PODS: - React-jsiexecutor - React-NativeModulesApple - ReactCommon - - React-RCTImage (1000.0.0): + - React-RCTImage (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1429,14 +1429,14 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTLinking (1000.0.0): - - React-Core/RCTLinkingHeaders (= 1000.0.0) - - React-jsi (= 1000.0.0) + - React-RCTLinking (0.78.0-rc.1): + - React-Core/RCTLinkingHeaders (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 1000.0.0) - - React-RCTNetwork (1000.0.0): + - ReactCommon/turbomodule/core (= 0.78.0-rc.1) + - React-RCTNetwork (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1444,14 +1444,14 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTPushNotification (1000.0.0): + - React-RCTPushNotification (0.78.0-rc.1): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTSettings (1000.0.0): + - React-RCTSettings (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1459,31 +1459,31 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTTest (1000.0.0): + - React-RCTTest (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - - React-Core (= 1000.0.0) - - React-CoreModules (= 1000.0.0) - - React-jsi (= 1000.0.0) - - ReactCommon/turbomodule/core (= 1000.0.0) - - React-RCTText (1000.0.0): - - React-Core/RCTTextHeaders (= 1000.0.0) + - React-Core (= 0.78.0-rc.1) + - React-CoreModules (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) + - ReactCommon/turbomodule/core (= 0.78.0-rc.1) + - React-RCTText (0.78.0-rc.1): + - React-Core/RCTTextHeaders (= 0.78.0-rc.1) - Yoga - - React-RCTVibration (1000.0.0): + - React-RCTVibration (0.78.0-rc.1): - RCT-Folly (= 2024.11.18.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-rendererconsistency (1000.0.0) - - React-rendererdebug (1000.0.0): + - React-rendererconsistency (0.78.0-rc.1) + - React-rendererdebug (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - React-debug - - React-rncore (1000.0.0) - - React-RuntimeApple (1000.0.0): + - React-rncore (0.78.0-rc.1) + - React-RuntimeApple (0.78.0-rc.1): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-callinvoker @@ -1504,7 +1504,7 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (1000.0.0): + - React-RuntimeCore (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1519,9 +1519,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (1000.0.0): - - React-jsi (= 1000.0.0) - - React-RuntimeHermes (1000.0.0): + - React-runtimeexecutor (0.78.0-rc.1): + - React-jsi (= 0.78.0-rc.1) + - React-RuntimeHermes (0.78.0-rc.1): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-featureflags @@ -1531,7 +1531,7 @@ PODS: - React-jsitracing - React-RuntimeCore - React-utils - - React-runtimescheduler (1000.0.0): + - React-runtimescheduler (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -1546,16 +1546,16 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (1000.0.0) - - React-utils (1000.0.0): + - React-timing (0.78.0-rc.1) + - React-utils (0.78.0-rc.1): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - React-debug - - React-jsi (= 1000.0.0) - - ReactAppDependencyProvider (1000.0.0): + - React-jsi (= 0.78.0-rc.1) + - ReactAppDependencyProvider (0.78.0-rc.1): - ReactCodegen - - ReactCodegen (1000.0.0): + - ReactCodegen (0.78.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1576,9 +1576,9 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (1000.0.0): - - ReactCommon/turbomodule (= 1000.0.0) - - ReactCommon-Samples (1000.0.0): + - ReactCommon (0.78.0-rc.1): + - ReactCommon/turbomodule (= 0.78.0-rc.1) + - ReactCommon-Samples (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1590,48 +1590,48 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule (1000.0.0): + - ReactCommon/turbomodule (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - 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) - - ReactCommon/turbomodule/bridging (1000.0.0): + - React-callinvoker (= 0.78.0-rc.1) + - React-cxxreact (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) + - React-logger (= 0.78.0-rc.1) + - React-perflogger (= 0.78.0-rc.1) + - ReactCommon/turbomodule/bridging (= 0.78.0-rc.1) + - ReactCommon/turbomodule/core (= 0.78.0-rc.1) + - ReactCommon/turbomodule/bridging (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - 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/core (1000.0.0): + - React-callinvoker (= 0.78.0-rc.1) + - React-cxxreact (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) + - React-logger (= 0.78.0-rc.1) + - React-perflogger (= 0.78.0-rc.1) + - ReactCommon/turbomodule/core (0.78.0-rc.1): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - 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) - - ScreenshotManager (0.77.0-main): + - React-callinvoker (= 0.78.0-rc.1) + - React-cxxreact (= 0.78.0-rc.1) + - React-debug (= 0.78.0-rc.1) + - React-featureflags (= 0.78.0-rc.1) + - React-jsi (= 0.78.0-rc.1) + - React-logger (= 0.78.0-rc.1) + - React-perflogger (= 0.78.0-rc.1) + - React-utils (= 0.78.0-rc.1) + - ScreenshotManager (0.78.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1753,7 +1753,7 @@ EXTERNAL SOURCES: :podspec: "../react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: '' + :tag: hermes-2025-01-13-RNv0.78.0-a942ef374897d85da38e9c8904574f8376555388 MyNativeView: :path: NativeComponentExample NativeCxxModuleExample: @@ -1891,78 +1891,78 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 - FBLazyVector: d3c2dd739a63c1a124e775df075dc7c517a719cb + FBLazyVector: ca1027b5fd51467e762a783d3dcd362fce5a6547 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 - hermes-engine: 60e4048240c6d6c4bf6fe622e6ea9a1fb6d9706d - MyNativeView: d92d8827d14b7c296f84424a8aed94fad2c689f5 - NativeCxxModuleExample: a9058817bb3f1776256d9def25c341fa1aa9cc07 + hermes-engine: 4f30ac09d90c9ea90f9e912f574c9f8110f0f32a + MyNativeView: 579fbc5b050b7e20c5ef62f6eb1dc1896db6c582 + NativeCxxModuleExample: c974a1842b9abe9f5ca18dfbdb4583dd7312203e OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 - OSSLibraryExample: fb99bfb6f1033e5ac3cc1e382343e90676cc5a7a - RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 - RCTDeprecation: 3808e36294137f9ee5668f4df2e73dc079cd1dcf - RCTRequired: a00614e2da5344c2cda3d287050b6cee00e21dc6 - RCTTypeSafety: 459a16418c6b413060d35434ba3e83f5b0bd2651 - React: 170a01a19ba2525ab7f11243e2df6b19bf268093 - React-callinvoker: f08f425e4043cd1998a158b6e39a6aed1fd1d718 - React-Core: a1d04289bb054eb9f2de0b1ddbbd5ff22b8dbab9 - React-CoreModules: 60a8ca66ac2348dee82ecc768b4d631f02baa549 - React-cxxreact: 7d2cf5415a8e75e0d4b3e9a467e1a72c76a15a24 - React-debug: 195df38487d3f48a7af04deddeb4a5c6d4440416 - React-defaultsnativemodule: 809281bb19b5ba6aad8973694f6a73f3e10d8c5d - React-domnativemodule: 31be96c046c8537cbdf92943b07cd9fe8d830d19 - React-Fabric: 93aea764b03a651c7b103d3a07b2535c3a3c08b2 - React-FabricComponents: 5d813c8f71c50c397c7320dbf130ebffba2422a4 - React-FabricImage: be4b453a55590a65b2d35dbf956dae3a8f1853f9 - React-featureflags: 7faf26669323dc8b2869ba9d15cfa453b71685f1 - React-featureflagsnativemodule: 09e3acf24f068d883d93bbfc5a20a00d3835b6c0 - React-graphics: 1981e7fe8e9a7046577d8fc9df17c022ed927be5 - React-hermes: 695f334095ee48442dee2783970199525cecaf72 - React-idlecallbacksnativemodule: 899e0a7fc71a51f1fda81d26fea67456780e0019 - React-ImageManager: 575cefd6f3fe4a9998409eebe9c26eee9ed702f7 - React-jserrorhandler: 021a49bbc21c7612c53acb3397cd9f61e8a4db84 - React-jsi: e666d26bdc29dccfe681075979b924cbe1f183a8 - React-jsiexecutor: 7300101e6928e353da00e7d2e9647ac86b8501bc - React-jsinspector: ab0371bb964beed1af6d9bab664cc30bde684ff9 - React-jsinspectortracing: 701e33adfb5b14f0fb675a97ab2e0c63283cad43 - React-jsitracing: ef82947481b8bf7d49adbaacd8ae0e01028b8ddb - React-logger: b19e99fbaaf73d83adaca8917c133d1da71df8de - React-Mapbuffer: 11fabe7a2a035584622004cd476699897492927b - React-microtasksnativemodule: 8558ac343d183b631db1453dca484640b0eb3c05 - React-NativeModulesApple: 0596f545e307887fc7bcee2abf958190599934e1 - React-perflogger: a6ddeb969540aab135d6adbaa132938518587f63 - React-performancetimeline: bbdd8e1bc2c06d5fe7e3f37c37e47f21a87d02d9 - React-RCTActionSheet: 1bf8cc8086ad1c15da3407dfb7bc9dd94dc7595d - React-RCTAnimation: ac4a08b91b12a5d61e522698162d92a52581dcc5 - React-RCTAppDelegate: 148645da9bc427c825da55d2b63686545ca463f3 - React-RCTBlob: 310559ebf6e64228675806a145f43aa7197a9d14 - React-RCTFabric: 64387d220300433e81bb4cc045bcd53b114215dc - React-RCTFBReactNativeSpec: 5ac2a4a112a4fdd830bf33816563cee67b0793f6 - React-RCTImage: d84619c84f38ba644ec0d6fb8049cee8435b28c3 - React-RCTLinking: 4b179cdacf8dfab5ee483546ff9353797361f520 - React-RCTNetwork: 830b1da36cd5950b88248e1cb4a939906d1f28e4 - React-RCTPushNotification: c9868b10d51b51081cdcec5833cc9567bfc27b59 - React-RCTSettings: 9ff4d7a991f6199eafa3dfde10c138fe96f1731d - React-RCTTest: b3b23ad60a85dc33e5b48ffaf9a4694a0cea23e6 - React-RCTText: e5a08c3829b35f1db001c9cbdf1917936f5dbd25 - React-RCTVibration: 0a46dd90d07c0e6323781b0b67829932a53e0c44 - React-rendererconsistency: 777c894edc43dde01499189917ac54ee76ae6a6a - React-rendererdebug: 5578683edef6807f7b01c90d0d4981409abce41c - React-rncore: 4a81ce7b8e47448973a6b29c765b07e01715921e - React-RuntimeApple: 6c664f1800a3dee277af5efa6b82fb7a08fd78ee - React-RuntimeCore: 378bf39635fe0b6c7ef10aa8dd222e08ca093081 - React-runtimeexecutor: fb2d342a477bb13f7128cceb711ee8311edce0c0 - React-RuntimeHermes: d2ae89cd74457bfe5790287d29fa0848bc89ed0c - React-runtimescheduler: 78f50328f9c9b6d39dbee4b193145b9e84e77433 - React-timing: 9d49179631e5e3c759e6e82d4c613c73da80a144 - React-utils: 1a450d57b1bdf1c6946b36ce16f33e897d110b6b - ReactAppDependencyProvider: d62d00ee22412c6ac6074ea5e220a6a26737cdab - ReactCodegen: 7cfa434acb2911bda43c92149ea7a6b7935bb696 - ReactCommon: 86a4859be6f6455e177185a1bcfefd43477f859a - ReactCommon-Samples: 921a9a38ed66f267559171430ae000a5aa0973d8 - ScreenshotManager: 6c5a166001490d34391f6d7c441409849544f730 + OSSLibraryExample: 31a75de6272cafe760ba4f3b6e8a582c8d3c1bf7 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 + RCTDeprecation: d26f07b97b34d9e9c93d09b95c3f7f2380f797b4 + RCTRequired: 00b12066335e477c039c631fdd7a6f2b768e573b + RCTTypeSafety: 51115e55fba96189d1d7dc435bfb56adbf7cc393 + React: a2329b41c7889da4848b05f186c00993f6c21180 + React-callinvoker: 6b8f4eee747a0f7e94a93a96c9a70a5abe64d678 + React-Core: a3568149feee0488020cf58eddaa9b3713686121 + React-CoreModules: 2762a77dfb728d64fa1b8de37e32b014fe203eb2 + React-cxxreact: 8b21f790ca1d992cd2c47494f20a60f5228fb120 + React-debug: 3598ecaaddcaf176b9ba706f6ebb729014bde1f5 + React-defaultsnativemodule: c63420c2e6597a1a7d8630190c68ee11c294e284 + React-domnativemodule: 41832975e89859c154e7cdfecb127d10d1f0e109 + React-Fabric: b5b0ac7d8e77b4599a560f63e9f7336b4fe41bae + React-FabricComponents: 89d6a42300a33316f388b9436095e448104595eb + React-FabricImage: 00790a9fb6fdc38f003c4e6be5eab9287ce44c8b + React-featureflags: cd67232d473b287337b6f28c40d8b7ef6c7d2ab4 + React-featureflagsnativemodule: dda07acf88c3124606fed904940721376219c49d + React-graphics: dfdc123688da49608ffd7947f906787f2220b979 + React-hermes: 7f8a11fded0388dbfe72fdbbac3cab240cf661e0 + React-idlecallbacksnativemodule: 62b10e54550763e56836826c82a5166941b177bf + React-ImageManager: 6c30d61bcae05a1dd0833ecc59e3dbb3d964dbdd + React-jserrorhandler: 1b911b1df322e3c3c88ffbe3cd91a65cd2355e32 + React-jsi: 30ecca0aca80da9f253bfcf8fdeb06ed82f1fbd2 + React-jsiexecutor: dbb1ca80012a48ab4697a66512d202b2e55c1871 + React-jsinspector: 9253f30933a78e135f4b510a4fabc1ea3a8f59ab + React-jsinspectortracing: 07c872d22af2838772607494b467d2def2e80363 + React-jsitracing: 90877d4bb4a897cf6e0075eead332650e50a820a + React-logger: 8d96a93e2071ea8769e125ad1f2b919e09fc653e + React-Mapbuffer: 0052ee03ceb290b74a531e48529a7f90b1b7e49f + React-microtasksnativemodule: 7348e24320f3b8af4f230ee6d8b895161ea1ee81 + React-NativeModulesApple: 54d2c2ee150632222746bb11ac8cc46e60946691 + React-perflogger: 596f6443f9536ca01a24398d231abfd2122418d9 + React-performancetimeline: 14615e28d3ebe9c9c7fddb73c85af0e6e23d1083 + React-RCTActionSheet: 45e28202a7986b70434d2375fc02ee68b1f87082 + React-RCTAnimation: 7e7f94815c0886f110aa3f107155009cc6eb2895 + React-RCTAppDelegate: 6c9e993b386844593b020178d2302e7fdabbab30 + React-RCTBlob: 4050ee867ae16d92e7764ba86c4dbf13c17d4b42 + React-RCTFabric: 453e88d905c6a9c185627262ed0a2ab3ae0b3144 + React-RCTFBReactNativeSpec: d8595cecbef8ee1eccba968905313a4e5398353c + React-RCTImage: b843589d5e34041110656e2bdbaacc097f3cdd7e + React-RCTLinking: aba38f49076140d9fec95ec281f94b38629e0dec + React-RCTNetwork: d9515648fab0128c4c01327774c855f294d6ee5d + React-RCTPushNotification: e938260640cd733989ab552c2efe262e2a7f4a17 + React-RCTSettings: 4cde0079a2cfe6552d65d75bf3080ac40018dacc + React-RCTTest: fadae7ee56fae17f679e8a26f389aed00e1fdaaf + React-RCTText: 0aa8cfdb28486bedd839cbe46e405ec77e85410f + React-RCTVibration: 0b1117ad7ec1b7a2b3b526f9e6f7f958ce65efe5 + React-rendererconsistency: 3aa947ecc01022afc3d530821aca461284494878 + React-rendererdebug: bdada0b4b5c1bd64bb595dec0d6dc651d4e5a039 + React-rncore: 96c83d7dade700003320265380b7c4741af60ca6 + React-RuntimeApple: 510e9496603998489e7485e4775f5fbecec0d3e9 + React-RuntimeCore: 76909a8e030528132bc064583d91fddf9214cfd9 + React-runtimeexecutor: f8f51e274459fecb12ee60727b4f5067484ad053 + React-RuntimeHermes: d46795aa1cf5b86c33f5e0e885fcac2754db90b6 + React-runtimescheduler: 15edb80188be32faadd92106d2ddee2c6e810fe2 + React-timing: 16de18b703b05422a277c84e66bc1b1dbb3d1d20 + React-utils: 029acb2f254deb800a5a279f92a2c3fee80f7267 + ReactAppDependencyProvider: d8c8d73e775f7e367e65b629d0dedcb830e490d5 + ReactCodegen: d6893f46b61542453a3a5cefea434922ae4bff9f + ReactCommon: c99ace9bc7fd37ab0860e05b84758770a5193861 + ReactCommon-Samples: efd28144639ba2372a36a346e6f7a47920887b2b + ScreenshotManager: 0ccb24ae0229c095708d8637953acce967fcdfdb SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 216ee0d4bcba7186f47624eeac1477a068bceea0 + Yoga: d7af68bbe88ef55fd73754fe6942746eff12919c PODFILE CHECKSUM: 8591f96a513620a2a83a0b9a125ad3fa32ea1369 From 8207a091078e201f5a037d6ae07f9f0e329fb17d Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Thu, 23 Jan 2025 11:37:16 -0800 Subject: [PATCH 12/60] Fix images not displayed when extension is implicit (#48888) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48888 We have a report from OSS where Images are not displayed properly in case they are saved on disk with no extension. We previously had a fix attempt iwith [this pr](https://github.com/facebook/react-native/pull/46971), but this was breaking some internal apps. This second attempt should work for both cases. ## Changelog: [iOS][Fixed] - Load images even when the extension is implicit Reviewed By: cortinico Differential Revision: D68555813 fbshipit-source-id: bc25970aafe3e6e5284163b663d36e00b3df3d82 --- .../react-native/Libraries/Image/RCTImageLoader.mm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/Image/RCTImageLoader.mm b/packages/react-native/Libraries/Image/RCTImageLoader.mm index 68a12d351227..3caaf7bdf10a 100644 --- a/packages/react-native/Libraries/Image/RCTImageLoader.mm +++ b/packages/react-native/Libraries/Image/RCTImageLoader.mm @@ -477,7 +477,15 @@ - (RCTImageURLLoaderRequest *)_loadImageOrDataWithURLRequest:(NSURLRequest *)req // Add missing png extension if (request.URL.fileURL && request.URL.pathExtension.length == 0) { - mutableRequest.URL = [request.URL URLByAppendingPathExtension:@"png"]; + // Check if there exists a file with that url on disk already + // This should fix issue https://github.com/facebook/react-native/issues/46870 + if ([[NSFileManager defaultManager] fileExistsAtPath:request.URL.path]) { + mutableRequest.URL = request.URL; + } else { + // This is the default behavior in case there is no file on disk with no extension. + // We assume that the extension is `png`. + mutableRequest.URL = [request.URL URLByAppendingPathExtension:@"png"]; + } } if (_redirectDelegate != nil) { mutableRequest.URL = [_redirectDelegate redirectAssetsURL:mutableRequest.URL]; From 465f49ea2a5f3ba85f253f2c061b34b8bceefef7 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 28 Jan 2025 13:44:52 +0000 Subject: [PATCH 13/60] Release 0.78.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 | 6 +++--- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/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/helloworld/package.json | 12 ++++++------ packages/metro-config/package.json | 6 +++--- 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-bots/package.json | 2 +- .../package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- packages/react-native-fantom/package.json | 2 +- packages/react-native-info/package.json | 2 +- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 6 +++--- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.java | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- packages/rn-tester/package.json | 6 +++--- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- 33 files changed, 62 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 64312ff69357..43aec7e0fe2a 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "@babel/preset-flow": "^7.24.7", "@definitelytyped/dtslint": "^0.0.127", "@jest/create-cache-key-function": "^29.6.3", - "@react-native/metro-babel-transformer": "0.78.0-rc.1", - "@react-native/metro-config": "0.78.0-rc.1", + "@react-native/metro-babel-transformer": "0.78.0-rc.2", + "@react-native/metro-config": "0.78.0-rc.2", "@tsconfig/node18": "1.0.1", "@types/react": "^19.0.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 51bc46ba6644..d5c8f2bb39b5 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.78.0-rc.1", + "version": "0.78.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 7fa3ae8535d5..ad4ae4a779b7 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.78.0-rc.1", + "version": "0.78.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.78.0-rc.1" + "@react-native/codegen": "0.78.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 a6049e1448b4..c69aa72eb2d8 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.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,8 +22,8 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.78.0-rc.1", - "@react-native/metro-babel-transformer": "0.78.0-rc.1", + "@react-native/dev-middleware": "0.78.0-rc.2", + "@react-native/metro-babel-transformer": "0.78.0-rc.2", "chalk": "^4.0.0", "debug": "^2.2.0", "invariant": "^2.2.4", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 07c44c3e4061..287cc53a9964 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.78.0-rc.1", + "version": "0.78.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 b8164d4c8e44..522d5b978b40 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index 100280550910..6cc9601f0076 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.78.0-rc.1", + "version": "0.78.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.78.0-rc.1", + "@react-native/debugger-frontend": "0.78.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 35b06f542ea9..d0c75fb173d7 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.78.0-rc.1", + "version": "0.78.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.78.0-rc.1", + "@react-native/eslint-plugin": "0.78.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 77d24670bb3d..0767743475bb 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.78.0-rc.1", + "version": "0.78.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 f7407e8e73b6..175a9d86157d 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.78.0-rc.1", + "version": "0.78.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.78.0-rc.1", + "@react-native/codegen": "0.78.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 7a8d1a9fe562..95cd7e4358ac 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/helloworld/package.json b/packages/helloworld/package.json index f0f14a4399b7..6a6fa59aeb3d 100644 --- a/packages/helloworld/package.json +++ b/packages/helloworld/package.json @@ -1,6 +1,6 @@ { "name": "helloworld", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "private": true, "scripts": { "bootstrap": "node ./cli.js bootstrap", @@ -13,16 +13,16 @@ }, "dependencies": { "react": "19.0.0", - "react-native": "0.78.0-rc.1" + "react-native": "0.78.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.78.0-rc.1", - "@react-native/core-cli-utils": "0.78.0-rc.1", - "@react-native/eslint-config": "0.78.0-rc.1", - "@react-native/metro-config": "0.78.0-rc.1", + "@react-native/babel-preset": "0.78.0-rc.2", + "@react-native/core-cli-utils": "0.78.0-rc.2", + "@react-native/eslint-config": "0.78.0-rc.2", + "@react-native/metro-config": "0.78.0-rc.2", "chalk": "^4.1.2", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 1aeb86b4668f..4b868dfafcf8 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.78.0-rc.1", - "@react-native/metro-babel-transformer": "0.78.0-rc.1", + "@react-native/js-polyfills": "0.78.0-rc.2", + "@react-native/metro-babel-transformer": "0.78.0-rc.2", "metro-config": "^0.81.0", "metro-runtime": "^0.81.0" } diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index ccbc86cc7596..50ddd17138a0 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.78.0-rc.1", + "version": "0.78.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 b2d11dab182a..6b6b8bb83695 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.78.0-rc.1", + "version": "0.78.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 fd2b977b6c75..43a3592a37bc 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.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Babel preset for React Native applications", "main": "src/index.js", "repository": { @@ -55,7 +55,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.78.0-rc.1", + "@react-native/babel-plugin-codegen": "0.78.0-rc.2", "babel-plugin-syntax-hermes-parser": "0.25.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 f52894b803e6..75ce4ff0b21d 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.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Babel transformer for React Native applications.", "main": "src/index.js", "repository": { @@ -16,7 +16,7 @@ "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.0-rc.1", + "@react-native/babel-preset": "0.78.0-rc.2", "hermes-parser": "0.25.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-bots/package.json b/packages/react-native-bots/package.json index cebb0fd8c348..af535b3ad75c 100644 --- a/packages/react-native-bots/package.json +++ b/packages/react-native-bots/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/bots", "description": "React Native Bots", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "private": true, "license": "MIT", "repository": { diff --git a/packages/react-native-codegen-typescript-test/package.json b/packages/react-native-codegen-typescript-test/package.json index 8a4d8488c56d..6cdfce7cccc1 100644 --- a/packages/react-native-codegen-typescript-test/package.json +++ b/packages/react-native-codegen-typescript-test/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen-typescript-test", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "private": true, "description": "TypeScript related unit test for @react-native/codegen", "license": "MIT", @@ -19,7 +19,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.78.0-rc.1" + "@react-native/codegen": "0.78.0-rc.2" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 18b366191bb5..f2c726ef6794 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.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-fantom/package.json b/packages/react-native-fantom/package.json index a41c36feaa48..420b02cbb648 100644 --- a/packages/react-native-fantom/package.json +++ b/packages/react-native-fantom/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/fantom", "private": true, - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "main": "src/index.js", "description": "Internal integration testing and benchmarking tool for React Native", "peerDependencies": { diff --git a/packages/react-native-info/package.json b/packages/react-native-info/package.json index d86a7e7ab698..94580f122f13 100644 --- a/packages/react-native-info/package.json +++ b/packages/react-native-info/package.json @@ -1,6 +1,6 @@ { "name": "react-native-info", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "main": "build/index.js", "license": "MIT", "private": true, diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index b28666f0d644..935b95640a45 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.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -17,7 +17,7 @@ ], "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.78.0-rc.1" + "@react-native/codegen": "0.78.0-rc.2" }, "peerDependencies": { "@types/react": "^19.0.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index c73b95f604ba..5584d61b312e 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/oss-library-example", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "private": true, "description": "Package that includes native module exapmle, native component example, targets both the old and the new architecture. It should serve as an example of a real-world OSS library.", "license": "MIT", @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.0-rc.1", - "react-native": "0.78.0-rc.1" + "@react-native/babel-preset": "0.78.0-rc.2", + "react-native": "0.78.0-rc.2" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index daa82a6d720d..236be4534b38 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -17,7 +17,7 @@ const version: $ReadOnly<{ major: 0, minor: 78, patch: 0, - prerelease: 'rc.1', + prerelease: 'rc.2', }; module.exports = {version}; diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index a00ef40704f4..e0de3e54f41d 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -24,7 +24,7 @@ RCTVersionMajor: @(0), RCTVersionMinor: @(78), 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 1646810a2f5e..f8f06ca872d9 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.78.0-rc.1 +VERSION_NAME=0.78.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.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java index cdd6aa919f4b..17b63d747381 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java @@ -18,5 +18,5 @@ public class ReactNativeVersion { "major", 0, "minor", 78, "patch", 0, - "prerelease", "rc.1"); + "prerelease", "rc.2"); } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 19f0768ab1b8..79d00ca65a5e 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -18,7 +18,7 @@ constexpr struct { int32_t Major = 0; int32_t Minor = 78; 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 2947323b6f0e..0a4381dd1535 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -108,13 +108,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.78.0-rc.1", - "@react-native/codegen": "0.78.0-rc.1", - "@react-native/community-cli-plugin": "0.78.0-rc.1", - "@react-native/gradle-plugin": "0.78.0-rc.1", - "@react-native/js-polyfills": "0.78.0-rc.1", - "@react-native/normalize-colors": "0.78.0-rc.1", - "@react-native/virtualized-lists": "0.78.0-rc.1", + "@react-native/assets-registry": "0.78.0-rc.2", + "@react-native/codegen": "0.78.0-rc.2", + "@react-native/community-cli-plugin": "0.78.0-rc.2", + "@react-native/gradle-plugin": "0.78.0-rc.2", + "@react-native/js-polyfills": "0.78.0-rc.2", + "@react-native/normalize-colors": "0.78.0-rc.2", + "@react-native/virtualized-lists": "0.78.0-rc.2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index 7be3da5c01a8..680e9553276b 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/tester", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "private": true, "description": "React Native tester app.", "license": "MIT", @@ -27,8 +27,8 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { - "@react-native/oss-library-example": "0.78.0-rc.1", - "@react-native/popup-menu-android": "0.78.0-rc.1", + "@react-native/oss-library-example": "0.78.0-rc.2", + "@react-native/popup-menu-android": "0.78.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 7491e05f8b29..d8532010eced 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.78.0-rc.1", + "version": "0.78.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 ce42e09b3e21..8e8a12a9d324 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.78.0-rc.1", + "version": "0.78.0-rc.2", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { From 76da20aab41f910f0d45fdbd90db6713536a39e3 Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Wed, 29 Jan 2025 11:42:42 +0000 Subject: [PATCH 14/60] Update Podfile.lock Changelog: [Internal] --- packages/rn-tester/Podfile.lock | 578 ++++++++++++++++---------------- 1 file changed, 289 insertions(+), 289 deletions(-) diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 00850e0a1ae3..29be3021c525 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,13 +2,13 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - fast_float (6.1.4) - - FBLazyVector (0.78.0-rc.1) + - FBLazyVector (0.78.0-rc.2) - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.78.0-rc.1): - - hermes-engine/Pre-built (= 0.78.0-rc.1) - - hermes-engine/Pre-built (0.78.0-rc.1) - - MyNativeView (0.78.0-rc.1): + - hermes-engine (0.78.0-rc.2): + - hermes-engine/Pre-built (= 0.78.0-rc.2) + - hermes-engine/Pre-built (0.78.0-rc.2) + - MyNativeView (0.78.0-rc.2): - DoubleConversion - glog - hermes-engine @@ -29,7 +29,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - NativeCxxModuleExample (0.78.0-rc.1): + - NativeCxxModuleExample (0.78.0-rc.2): - DoubleConversion - glog - hermes-engine @@ -51,7 +51,7 @@ PODS: - ReactCommon/turbomodule/core - Yoga - OCMock (3.9.4) - - OSSLibraryExample (0.78.0-rc.1): + - OSSLibraryExample (0.78.0-rc.2): - DoubleConversion - glog - hermes-engine @@ -91,32 +91,32 @@ PODS: - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.78.0-rc.1) - - RCTRequired (0.78.0-rc.1) - - RCTTypeSafety (0.78.0-rc.1): - - FBLazyVector (= 0.78.0-rc.1) - - RCTRequired (= 0.78.0-rc.1) - - React-Core (= 0.78.0-rc.1) - - React (0.78.0-rc.1): - - React-Core (= 0.78.0-rc.1) - - React-Core/DevSupport (= 0.78.0-rc.1) - - React-Core/RCTWebSocket (= 0.78.0-rc.1) - - React-RCTActionSheet (= 0.78.0-rc.1) - - React-RCTAnimation (= 0.78.0-rc.1) - - React-RCTBlob (= 0.78.0-rc.1) - - React-RCTImage (= 0.78.0-rc.1) - - React-RCTLinking (= 0.78.0-rc.1) - - React-RCTNetwork (= 0.78.0-rc.1) - - React-RCTSettings (= 0.78.0-rc.1) - - React-RCTText (= 0.78.0-rc.1) - - React-RCTVibration (= 0.78.0-rc.1) - - React-callinvoker (0.78.0-rc.1) - - React-Core (0.78.0-rc.1): + - RCTDeprecation (0.78.0-rc.2) + - RCTRequired (0.78.0-rc.2) + - RCTTypeSafety (0.78.0-rc.2): + - FBLazyVector (= 0.78.0-rc.2) + - RCTRequired (= 0.78.0-rc.2) + - React-Core (= 0.78.0-rc.2) + - React (0.78.0-rc.2): + - React-Core (= 0.78.0-rc.2) + - React-Core/DevSupport (= 0.78.0-rc.2) + - React-Core/RCTWebSocket (= 0.78.0-rc.2) + - React-RCTActionSheet (= 0.78.0-rc.2) + - React-RCTAnimation (= 0.78.0-rc.2) + - React-RCTBlob (= 0.78.0-rc.2) + - React-RCTImage (= 0.78.0-rc.2) + - React-RCTLinking (= 0.78.0-rc.2) + - React-RCTNetwork (= 0.78.0-rc.2) + - React-RCTSettings (= 0.78.0-rc.2) + - React-RCTText (= 0.78.0-rc.2) + - React-RCTVibration (= 0.78.0-rc.2) + - React-callinvoker (0.78.0-rc.2) + - React-Core (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.78.0-rc.1) + - React-Core/Default (= 0.78.0-rc.2) - React-cxxreact - React-featureflags - React-hermes @@ -128,7 +128,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.78.0-rc.1): + - React-Core/CoreModulesHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -145,7 +145,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.78.0-rc.1): + - React-Core/Default (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -161,13 +161,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.78.0-rc.1): + - React-Core/DevSupport (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.78.0-rc.1) - - React-Core/RCTWebSocket (= 0.78.0-rc.1) + - React-Core/Default (= 0.78.0-rc.2) + - React-Core/RCTWebSocket (= 0.78.0-rc.2) - React-cxxreact - React-featureflags - React-hermes @@ -179,7 +179,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.78.0-rc.1): + - React-Core/RCTActionSheetHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -196,7 +196,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.78.0-rc.1): + - React-Core/RCTAnimationHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -213,7 +213,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.78.0-rc.1): + - React-Core/RCTBlobHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -230,7 +230,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.78.0-rc.1): + - React-Core/RCTImageHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -247,7 +247,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.78.0-rc.1): + - React-Core/RCTLinkingHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -264,7 +264,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.78.0-rc.1): + - React-Core/RCTNetworkHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -281,7 +281,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTPushNotificationHeaders (0.78.0-rc.1): + - React-Core/RCTPushNotificationHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -298,7 +298,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.78.0-rc.1): + - React-Core/RCTSettingsHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -315,7 +315,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.78.0-rc.1): + - React-Core/RCTTextHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -332,7 +332,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.78.0-rc.1): + - React-Core/RCTVibrationHeaders (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -349,12 +349,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.78.0-rc.1): + - React-Core/RCTWebSocket (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.78.0-rc.1) + - React-Core/Default (= 0.78.0-rc.2) - React-cxxreact - React-featureflags - React-hermes @@ -366,22 +366,22 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.78.0-rc.1): + - React-CoreModules (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - - RCTTypeSafety (= 0.78.0-rc.1) - - React-Core/CoreModulesHeaders (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) + - RCTTypeSafety (= 0.78.0-rc.2) + - React-Core/CoreModulesHeaders (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.78.0-rc.1) + - React-RCTImage (= 0.78.0-rc.2) - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (0.78.0-rc.1): + - React-cxxreact (0.78.0-rc.2): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -389,16 +389,16 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.0-rc.1) - - React-debug (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) + - React-callinvoker (= 0.78.0-rc.2) + - React-debug (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) - React-jsinspector - - React-logger (= 0.78.0-rc.1) - - React-perflogger (= 0.78.0-rc.1) - - React-runtimeexecutor (= 0.78.0-rc.1) - - React-timing (= 0.78.0-rc.1) - - React-debug (0.78.0-rc.1) - - React-defaultsnativemodule (0.78.0-rc.1): + - React-logger (= 0.78.0-rc.2) + - React-perflogger (= 0.78.0-rc.2) + - React-runtimeexecutor (= 0.78.0-rc.2) + - React-timing (= 0.78.0-rc.2) + - React-debug (0.78.0-rc.2) + - React-defaultsnativemodule (0.78.0-rc.2): - hermes-engine - RCT-Folly - React-domnativemodule @@ -408,7 +408,7 @@ PODS: - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - React-domnativemodule (0.78.0-rc.1): + - React-domnativemodule (0.78.0-rc.2): - hermes-engine - RCT-Folly - React-Fabric @@ -419,7 +419,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.78.0-rc.1): + - React-Fabric (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -431,22 +431,22 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.78.0-rc.1) - - React-Fabric/attributedstring (= 0.78.0-rc.1) - - React-Fabric/componentregistry (= 0.78.0-rc.1) - - React-Fabric/componentregistrynative (= 0.78.0-rc.1) - - React-Fabric/components (= 0.78.0-rc.1) - - React-Fabric/consistency (= 0.78.0-rc.1) - - React-Fabric/core (= 0.78.0-rc.1) - - React-Fabric/dom (= 0.78.0-rc.1) - - React-Fabric/imagemanager (= 0.78.0-rc.1) - - React-Fabric/leakchecker (= 0.78.0-rc.1) - - React-Fabric/mounting (= 0.78.0-rc.1) - - React-Fabric/observers (= 0.78.0-rc.1) - - React-Fabric/scheduler (= 0.78.0-rc.1) - - React-Fabric/telemetry (= 0.78.0-rc.1) - - React-Fabric/templateprocessor (= 0.78.0-rc.1) - - React-Fabric/uimanager (= 0.78.0-rc.1) + - React-Fabric/animations (= 0.78.0-rc.2) + - React-Fabric/attributedstring (= 0.78.0-rc.2) + - React-Fabric/componentregistry (= 0.78.0-rc.2) + - React-Fabric/componentregistrynative (= 0.78.0-rc.2) + - React-Fabric/components (= 0.78.0-rc.2) + - React-Fabric/consistency (= 0.78.0-rc.2) + - React-Fabric/core (= 0.78.0-rc.2) + - React-Fabric/dom (= 0.78.0-rc.2) + - React-Fabric/imagemanager (= 0.78.0-rc.2) + - React-Fabric/leakchecker (= 0.78.0-rc.2) + - React-Fabric/mounting (= 0.78.0-rc.2) + - React-Fabric/observers (= 0.78.0-rc.2) + - React-Fabric/scheduler (= 0.78.0-rc.2) + - React-Fabric/telemetry (= 0.78.0-rc.2) + - React-Fabric/templateprocessor (= 0.78.0-rc.2) + - React-Fabric/uimanager (= 0.78.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -456,7 +456,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.78.0-rc.1): + - React-Fabric/animations (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -477,7 +477,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.78.0-rc.1): + - React-Fabric/attributedstring (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -498,7 +498,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.78.0-rc.1): + - React-Fabric/componentregistry (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -519,7 +519,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.78.0-rc.1): + - React-Fabric/componentregistrynative (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -540,7 +540,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.78.0-rc.1): + - React-Fabric/components (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -552,9 +552,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.78.0-rc.1) - - React-Fabric/components/root (= 0.78.0-rc.1) - - React-Fabric/components/view (= 0.78.0-rc.1) + - React-Fabric/components/legacyviewmanagerinterop (= 0.78.0-rc.2) + - React-Fabric/components/root (= 0.78.0-rc.2) + - React-Fabric/components/view (= 0.78.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -564,7 +564,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.78.0-rc.1): + - React-Fabric/components/legacyviewmanagerinterop (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -585,7 +585,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.78.0-rc.1): + - React-Fabric/components/root (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -606,7 +606,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.78.0-rc.1): + - React-Fabric/components/view (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -628,7 +628,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/consistency (0.78.0-rc.1): + - React-Fabric/consistency (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -649,7 +649,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/core (0.78.0-rc.1): + - React-Fabric/core (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -670,7 +670,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.78.0-rc.1): + - React-Fabric/dom (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -691,7 +691,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.78.0-rc.1): + - React-Fabric/imagemanager (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -712,7 +712,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.78.0-rc.1): + - React-Fabric/leakchecker (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -733,7 +733,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.78.0-rc.1): + - React-Fabric/mounting (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -754,7 +754,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.78.0-rc.1): + - React-Fabric/observers (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -766,7 +766,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.78.0-rc.1) + - React-Fabric/observers/events (= 0.78.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -776,7 +776,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.78.0-rc.1): + - React-Fabric/observers/events (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -797,7 +797,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.78.0-rc.1): + - React-Fabric/scheduler (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -820,7 +820,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.78.0-rc.1): + - React-Fabric/telemetry (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -841,7 +841,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.78.0-rc.1): + - React-Fabric/templateprocessor (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -862,7 +862,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.78.0-rc.1): + - React-Fabric/uimanager (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -874,7 +874,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.78.0-rc.1) + - React-Fabric/uimanager/consistency (= 0.78.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -885,7 +885,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.78.0-rc.1): + - React-Fabric/uimanager/consistency (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -907,7 +907,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.78.0-rc.1): + - React-FabricComponents (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -920,8 +920,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.78.0-rc.1) - - React-FabricComponents/textlayoutmanager (= 0.78.0-rc.1) + - React-FabricComponents/components (= 0.78.0-rc.2) + - React-FabricComponents/textlayoutmanager (= 0.78.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -932,7 +932,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.78.0-rc.1): + - React-FabricComponents/components (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -945,15 +945,15 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.78.0-rc.1) - - React-FabricComponents/components/iostextinput (= 0.78.0-rc.1) - - React-FabricComponents/components/modal (= 0.78.0-rc.1) - - React-FabricComponents/components/rncore (= 0.78.0-rc.1) - - React-FabricComponents/components/safeareaview (= 0.78.0-rc.1) - - React-FabricComponents/components/scrollview (= 0.78.0-rc.1) - - React-FabricComponents/components/text (= 0.78.0-rc.1) - - React-FabricComponents/components/textinput (= 0.78.0-rc.1) - - React-FabricComponents/components/unimplementedview (= 0.78.0-rc.1) + - React-FabricComponents/components/inputaccessory (= 0.78.0-rc.2) + - React-FabricComponents/components/iostextinput (= 0.78.0-rc.2) + - React-FabricComponents/components/modal (= 0.78.0-rc.2) + - React-FabricComponents/components/rncore (= 0.78.0-rc.2) + - React-FabricComponents/components/safeareaview (= 0.78.0-rc.2) + - React-FabricComponents/components/scrollview (= 0.78.0-rc.2) + - React-FabricComponents/components/text (= 0.78.0-rc.2) + - React-FabricComponents/components/textinput (= 0.78.0-rc.2) + - React-FabricComponents/components/unimplementedview (= 0.78.0-rc.2) - React-featureflags - React-graphics - React-jsi @@ -964,7 +964,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.78.0-rc.1): + - React-FabricComponents/components/inputaccessory (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -987,7 +987,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.78.0-rc.1): + - React-FabricComponents/components/iostextinput (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1010,7 +1010,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.78.0-rc.1): + - React-FabricComponents/components/modal (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1033,7 +1033,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.78.0-rc.1): + - React-FabricComponents/components/rncore (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1056,7 +1056,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.78.0-rc.1): + - React-FabricComponents/components/safeareaview (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1079,7 +1079,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.78.0-rc.1): + - React-FabricComponents/components/scrollview (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1102,7 +1102,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.78.0-rc.1): + - React-FabricComponents/components/text (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1125,7 +1125,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.78.0-rc.1): + - React-FabricComponents/components/textinput (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1148,7 +1148,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.78.0-rc.1): + - React-FabricComponents/components/unimplementedview (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1171,7 +1171,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.78.0-rc.1): + - React-FabricComponents/textlayoutmanager (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1194,29 +1194,29 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.78.0-rc.1): + - React-FabricImage (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - - RCTRequired (= 0.78.0-rc.1) - - RCTTypeSafety (= 0.78.0-rc.1) + - RCTRequired (= 0.78.0-rc.2) + - RCTTypeSafety (= 0.78.0-rc.2) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.78.0-rc.1) + - React-jsiexecutor (= 0.78.0-rc.2) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.78.0-rc.1): + - React-featureflags (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - - React-featureflagsnativemodule (0.78.0-rc.1): + - React-featureflagsnativemodule (0.78.0-rc.2): - hermes-engine - RCT-Folly - React-featureflags @@ -1224,7 +1224,7 @@ PODS: - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - React-graphics (0.78.0-rc.1): + - React-graphics (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1234,20 +1234,20 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.78.0-rc.1): + - React-hermes (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.78.0-rc.1) + - React-cxxreact (= 0.78.0-rc.2) - React-jsi - - React-jsiexecutor (= 0.78.0-rc.1) + - React-jsiexecutor (= 0.78.0-rc.2) - React-jsinspector - - React-perflogger (= 0.78.0-rc.1) + - React-perflogger (= 0.78.0-rc.2) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.78.0-rc.1): + - React-idlecallbacksnativemodule (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly @@ -1256,7 +1256,7 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimescheduler - ReactCommon/turbomodule/core - - React-ImageManager (0.78.0-rc.1): + - React-ImageManager (0.78.0-rc.2): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1265,7 +1265,7 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.78.0-rc.1): + - React-jserrorhandler (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1274,7 +1274,7 @@ PODS: - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - React-jsi (0.78.0-rc.1): + - React-jsi (0.78.0-rc.2): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -1282,18 +1282,18 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-jsiexecutor (0.78.0-rc.1): + - React-jsiexecutor (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) + - React-cxxreact (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) - React-jsinspector - - React-perflogger (= 0.78.0-rc.1) - - React-jsinspector (0.78.0-rc.1): + - React-perflogger (= 0.78.0-rc.2) + - React-jsinspector (0.78.0-rc.2): - DoubleConversion - glog - hermes-engine @@ -1301,25 +1301,25 @@ PODS: - React-featureflags - React-jsi - React-jsinspectortracing - - React-perflogger (= 0.78.0-rc.1) - - React-runtimeexecutor (= 0.78.0-rc.1) - - React-jsinspectortracing (0.78.0-rc.1): + - React-perflogger (= 0.78.0-rc.2) + - React-runtimeexecutor (= 0.78.0-rc.2) + - React-jsinspectortracing (0.78.0-rc.2): - RCT-Folly - - React-jsitracing (0.78.0-rc.1): + - React-jsitracing (0.78.0-rc.2): - React-jsi - - React-logger (0.78.0-rc.1): + - React-logger (0.78.0-rc.2): - glog - - React-Mapbuffer (0.78.0-rc.1): + - React-Mapbuffer (0.78.0-rc.2): - glog - React-debug - - React-microtasksnativemodule (0.78.0-rc.1): + - React-microtasksnativemodule (0.78.0-rc.2): - hermes-engine - RCT-Folly - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - React-NativeModulesApple (0.78.0-rc.1): + - React-NativeModulesApple (0.78.0-rc.2): - glog - hermes-engine - React-callinvoker @@ -1330,18 +1330,18 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.78.0-rc.1): + - React-perflogger (0.78.0-rc.2): - DoubleConversion - RCT-Folly (= 2024.11.18.00) - - React-performancetimeline (0.78.0-rc.1): + - React-performancetimeline (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - React-cxxreact - React-featureflags - React-jsinspectortracing - React-timing - - React-RCTActionSheet (0.78.0-rc.1): - - React-Core/RCTActionSheetHeaders (= 0.78.0-rc.1) - - React-RCTAnimation (0.78.0-rc.1): + - React-RCTActionSheet (0.78.0-rc.2): + - React-Core/RCTActionSheetHeaders (= 0.78.0-rc.2) + - React-RCTAnimation (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1349,7 +1349,7 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTAppDelegate (0.78.0-rc.1): + - React-RCTAppDelegate (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety @@ -1373,7 +1373,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.78.0-rc.1): + - React-RCTBlob (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1387,7 +1387,7 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.78.0-rc.1): + - React-RCTFabric (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1410,7 +1410,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTFBReactNativeSpec (0.78.0-rc.1): + - React-RCTFBReactNativeSpec (0.78.0-rc.2): - hermes-engine - RCT-Folly - RCTRequired @@ -1420,7 +1420,7 @@ PODS: - React-jsiexecutor - React-NativeModulesApple - ReactCommon - - React-RCTImage (0.78.0-rc.1): + - React-RCTImage (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1429,14 +1429,14 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.78.0-rc.1): - - React-Core/RCTLinkingHeaders (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) + - React-RCTLinking (0.78.0-rc.2): + - React-Core/RCTLinkingHeaders (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.78.0-rc.1) - - React-RCTNetwork (0.78.0-rc.1): + - ReactCommon/turbomodule/core (= 0.78.0-rc.2) + - React-RCTNetwork (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1444,14 +1444,14 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTPushNotification (0.78.0-rc.1): + - React-RCTPushNotification (0.78.0-rc.2): - RCTTypeSafety - React-Core/RCTPushNotificationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTSettings (0.78.0-rc.1): + - React-RCTSettings (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1459,31 +1459,31 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTTest (0.78.0-rc.1): + - React-RCTTest (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - - React-Core (= 0.78.0-rc.1) - - React-CoreModules (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) - - ReactCommon/turbomodule/core (= 0.78.0-rc.1) - - React-RCTText (0.78.0-rc.1): - - React-Core/RCTTextHeaders (= 0.78.0-rc.1) + - React-Core (= 0.78.0-rc.2) + - React-CoreModules (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) + - ReactCommon/turbomodule/core (= 0.78.0-rc.2) + - React-RCTText (0.78.0-rc.2): + - React-Core/RCTTextHeaders (= 0.78.0-rc.2) - Yoga - - React-RCTVibration (0.78.0-rc.1): + - React-RCTVibration (0.78.0-rc.2): - RCT-Folly (= 2024.11.18.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-rendererconsistency (0.78.0-rc.1) - - React-rendererdebug (0.78.0-rc.1): + - React-rendererconsistency (0.78.0-rc.2) + - React-rendererdebug (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - React-debug - - React-rncore (0.78.0-rc.1) - - React-RuntimeApple (0.78.0-rc.1): + - React-rncore (0.78.0-rc.2) + - React-RuntimeApple (0.78.0-rc.2): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-callinvoker @@ -1504,7 +1504,7 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.78.0-rc.1): + - React-RuntimeCore (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1519,9 +1519,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.78.0-rc.1): - - React-jsi (= 0.78.0-rc.1) - - React-RuntimeHermes (0.78.0-rc.1): + - React-runtimeexecutor (0.78.0-rc.2): + - React-jsi (= 0.78.0-rc.2) + - React-RuntimeHermes (0.78.0-rc.2): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-featureflags @@ -1531,7 +1531,7 @@ PODS: - React-jsitracing - React-RuntimeCore - React-utils - - React-runtimescheduler (0.78.0-rc.1): + - React-runtimescheduler (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -1546,16 +1546,16 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.78.0-rc.1) - - React-utils (0.78.0-rc.1): + - React-timing (0.78.0-rc.2) + - React-utils (0.78.0-rc.2): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - React-debug - - React-jsi (= 0.78.0-rc.1) - - ReactAppDependencyProvider (0.78.0-rc.1): + - React-jsi (= 0.78.0-rc.2) + - ReactAppDependencyProvider (0.78.0-rc.2): - ReactCodegen - - ReactCodegen (0.78.0-rc.1): + - ReactCodegen (0.78.0-rc.2): - DoubleConversion - glog - hermes-engine @@ -1576,9 +1576,9 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.78.0-rc.1): - - ReactCommon/turbomodule (= 0.78.0-rc.1) - - ReactCommon-Samples (0.78.0-rc.1): + - ReactCommon (0.78.0-rc.2): + - ReactCommon/turbomodule (= 0.78.0-rc.2) + - ReactCommon-Samples (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1590,48 +1590,48 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule (0.78.0-rc.1): + - ReactCommon/turbomodule (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.0-rc.1) - - React-cxxreact (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) - - React-logger (= 0.78.0-rc.1) - - React-perflogger (= 0.78.0-rc.1) - - ReactCommon/turbomodule/bridging (= 0.78.0-rc.1) - - ReactCommon/turbomodule/core (= 0.78.0-rc.1) - - ReactCommon/turbomodule/bridging (0.78.0-rc.1): + - React-callinvoker (= 0.78.0-rc.2) + - React-cxxreact (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) + - React-logger (= 0.78.0-rc.2) + - React-perflogger (= 0.78.0-rc.2) + - ReactCommon/turbomodule/bridging (= 0.78.0-rc.2) + - ReactCommon/turbomodule/core (= 0.78.0-rc.2) + - ReactCommon/turbomodule/bridging (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.0-rc.1) - - React-cxxreact (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) - - React-logger (= 0.78.0-rc.1) - - React-perflogger (= 0.78.0-rc.1) - - ReactCommon/turbomodule/core (0.78.0-rc.1): + - React-callinvoker (= 0.78.0-rc.2) + - React-cxxreact (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) + - React-logger (= 0.78.0-rc.2) + - React-perflogger (= 0.78.0-rc.2) + - ReactCommon/turbomodule/core (0.78.0-rc.2): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.0-rc.1) - - React-cxxreact (= 0.78.0-rc.1) - - React-debug (= 0.78.0-rc.1) - - React-featureflags (= 0.78.0-rc.1) - - React-jsi (= 0.78.0-rc.1) - - React-logger (= 0.78.0-rc.1) - - React-perflogger (= 0.78.0-rc.1) - - React-utils (= 0.78.0-rc.1) - - ScreenshotManager (0.78.0-rc.1): + - React-callinvoker (= 0.78.0-rc.2) + - React-cxxreact (= 0.78.0-rc.2) + - React-debug (= 0.78.0-rc.2) + - React-featureflags (= 0.78.0-rc.2) + - React-jsi (= 0.78.0-rc.2) + - React-logger (= 0.78.0-rc.2) + - React-perflogger (= 0.78.0-rc.2) + - React-utils (= 0.78.0-rc.2) + - ScreenshotManager (0.78.0-rc.2): - DoubleConversion - glog - hermes-engine @@ -1891,78 +1891,78 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 - FBLazyVector: ca1027b5fd51467e762a783d3dcd362fce5a6547 + FBLazyVector: 9017b973ef2275baa867493ad206a9293b30057b fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 - hermes-engine: 4f30ac09d90c9ea90f9e912f574c9f8110f0f32a - MyNativeView: 579fbc5b050b7e20c5ef62f6eb1dc1896db6c582 - NativeCxxModuleExample: c974a1842b9abe9f5ca18dfbdb4583dd7312203e + hermes-engine: 0a986134ae267355f11106ff43fcbd5195768032 + MyNativeView: e797e3b0386857aff8db2c9029bd0eabea1f54f0 + NativeCxxModuleExample: 136a24bbf07c2c143e7c199ca1650ae608baf79d OCMock: 589f2c84dacb1f5aaf6e4cec1f292551fe748e74 - OSSLibraryExample: 31a75de6272cafe760ba4f3b6e8a582c8d3c1bf7 + OSSLibraryExample: d6f9363635920a08492b75f67eff3cb5f782d232 RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 - RCTDeprecation: d26f07b97b34d9e9c93d09b95c3f7f2380f797b4 - RCTRequired: 00b12066335e477c039c631fdd7a6f2b768e573b - RCTTypeSafety: 51115e55fba96189d1d7dc435bfb56adbf7cc393 - React: a2329b41c7889da4848b05f186c00993f6c21180 - React-callinvoker: 6b8f4eee747a0f7e94a93a96c9a70a5abe64d678 - React-Core: a3568149feee0488020cf58eddaa9b3713686121 - React-CoreModules: 2762a77dfb728d64fa1b8de37e32b014fe203eb2 - React-cxxreact: 8b21f790ca1d992cd2c47494f20a60f5228fb120 - React-debug: 3598ecaaddcaf176b9ba706f6ebb729014bde1f5 - React-defaultsnativemodule: c63420c2e6597a1a7d8630190c68ee11c294e284 - React-domnativemodule: 41832975e89859c154e7cdfecb127d10d1f0e109 - React-Fabric: b5b0ac7d8e77b4599a560f63e9f7336b4fe41bae - React-FabricComponents: 89d6a42300a33316f388b9436095e448104595eb - React-FabricImage: 00790a9fb6fdc38f003c4e6be5eab9287ce44c8b - React-featureflags: cd67232d473b287337b6f28c40d8b7ef6c7d2ab4 - React-featureflagsnativemodule: dda07acf88c3124606fed904940721376219c49d - React-graphics: dfdc123688da49608ffd7947f906787f2220b979 - React-hermes: 7f8a11fded0388dbfe72fdbbac3cab240cf661e0 - React-idlecallbacksnativemodule: 62b10e54550763e56836826c82a5166941b177bf - React-ImageManager: 6c30d61bcae05a1dd0833ecc59e3dbb3d964dbdd - React-jserrorhandler: 1b911b1df322e3c3c88ffbe3cd91a65cd2355e32 - React-jsi: 30ecca0aca80da9f253bfcf8fdeb06ed82f1fbd2 - React-jsiexecutor: dbb1ca80012a48ab4697a66512d202b2e55c1871 - React-jsinspector: 9253f30933a78e135f4b510a4fabc1ea3a8f59ab - React-jsinspectortracing: 07c872d22af2838772607494b467d2def2e80363 - React-jsitracing: 90877d4bb4a897cf6e0075eead332650e50a820a - React-logger: 8d96a93e2071ea8769e125ad1f2b919e09fc653e - React-Mapbuffer: 0052ee03ceb290b74a531e48529a7f90b1b7e49f - React-microtasksnativemodule: 7348e24320f3b8af4f230ee6d8b895161ea1ee81 - React-NativeModulesApple: 54d2c2ee150632222746bb11ac8cc46e60946691 - React-perflogger: 596f6443f9536ca01a24398d231abfd2122418d9 - React-performancetimeline: 14615e28d3ebe9c9c7fddb73c85af0e6e23d1083 - React-RCTActionSheet: 45e28202a7986b70434d2375fc02ee68b1f87082 - React-RCTAnimation: 7e7f94815c0886f110aa3f107155009cc6eb2895 - React-RCTAppDelegate: 6c9e993b386844593b020178d2302e7fdabbab30 - React-RCTBlob: 4050ee867ae16d92e7764ba86c4dbf13c17d4b42 - React-RCTFabric: 453e88d905c6a9c185627262ed0a2ab3ae0b3144 - React-RCTFBReactNativeSpec: d8595cecbef8ee1eccba968905313a4e5398353c - React-RCTImage: b843589d5e34041110656e2bdbaacc097f3cdd7e - React-RCTLinking: aba38f49076140d9fec95ec281f94b38629e0dec - React-RCTNetwork: d9515648fab0128c4c01327774c855f294d6ee5d - React-RCTPushNotification: e938260640cd733989ab552c2efe262e2a7f4a17 - React-RCTSettings: 4cde0079a2cfe6552d65d75bf3080ac40018dacc - React-RCTTest: fadae7ee56fae17f679e8a26f389aed00e1fdaaf - React-RCTText: 0aa8cfdb28486bedd839cbe46e405ec77e85410f - React-RCTVibration: 0b1117ad7ec1b7a2b3b526f9e6f7f958ce65efe5 - React-rendererconsistency: 3aa947ecc01022afc3d530821aca461284494878 - React-rendererdebug: bdada0b4b5c1bd64bb595dec0d6dc651d4e5a039 - React-rncore: 96c83d7dade700003320265380b7c4741af60ca6 - React-RuntimeApple: 510e9496603998489e7485e4775f5fbecec0d3e9 - React-RuntimeCore: 76909a8e030528132bc064583d91fddf9214cfd9 - React-runtimeexecutor: f8f51e274459fecb12ee60727b4f5067484ad053 - React-RuntimeHermes: d46795aa1cf5b86c33f5e0e885fcac2754db90b6 - React-runtimescheduler: 15edb80188be32faadd92106d2ddee2c6e810fe2 - React-timing: 16de18b703b05422a277c84e66bc1b1dbb3d1d20 - React-utils: 029acb2f254deb800a5a279f92a2c3fee80f7267 - ReactAppDependencyProvider: d8c8d73e775f7e367e65b629d0dedcb830e490d5 - ReactCodegen: d6893f46b61542453a3a5cefea434922ae4bff9f - ReactCommon: c99ace9bc7fd37ab0860e05b84758770a5193861 - ReactCommon-Samples: efd28144639ba2372a36a346e6f7a47920887b2b - ScreenshotManager: 0ccb24ae0229c095708d8637953acce967fcdfdb + RCTDeprecation: 7b05789584c8d5258c15959de353d57fb276d809 + RCTRequired: 124c0811c1839b0c4adb360fe56ccb956144645f + RCTTypeSafety: c5ab16586d92c86eaf9eeef8362bb4976dacf635 + React: 46eeb98e3db5bccb8dd94b769835121dd3fe8785 + React-callinvoker: 63721586b5925a59b033a2701ddb1e3f3b87c8c2 + React-Core: 8df8a9311c8f051d37505022bf6fe3b12db01a59 + React-CoreModules: ec8c706418bc96a22c6a9332e0eef0f8bf3f149a + React-cxxreact: 7fa4be83a16cee34e9a5d0051d2382477eb130fc + React-debug: faa0cbb4fefb2eec74cee4755bc6539049fb33f5 + React-defaultsnativemodule: e75de953416a14edf75ea4e49f7148850064fbb8 + React-domnativemodule: 0e082cd2b47651d7314453e655243d180d2e04e5 + React-Fabric: f16ba4fb019d2cda78198066d8d18a2b97b64620 + React-FabricComponents: 0da790f24b3ee337d4d78f09a1edae0308112c35 + React-FabricImage: c51d09e3ce3bdb0efae362af0b184a70d0869ffa + React-featureflags: 210dcf8b4f7d78231c6b340de7ba15f7bf1e5045 + React-featureflagsnativemodule: 9782b5e135ee15df261663f5a871dd755cc65c09 + React-graphics: 8da90b62edd621dba8a6e6446cd21bb9708ab8a0 + React-hermes: 8418ac8972c611cf31b59c03aef9a036ba95db41 + React-idlecallbacksnativemodule: 20d949bf48657311e443b48a2a79979eac95ff06 + React-ImageManager: 141574b505068cf3b625abcf69272744231b1815 + React-jserrorhandler: 47ac5ac1375d7382fa98b4fb3eac732b4773082f + React-jsi: 47dcef0ad993d80ae5bf6f5fcfa0d0365f388c3a + React-jsiexecutor: d91462c403e75c4bc9bdfcde345fd9ddd0a5d082 + React-jsinspector: 34b706396fe7adf765a65e8aec788c46e13769ad + React-jsinspectortracing: f450d7323dde15b84b430df4c3bf2e9fbb47a34d + React-jsitracing: 8bd1187953c43e330860b9b5d263aeb71995e8eb + React-logger: f63562881c5f622941788ca6a5b95011b524e367 + React-Mapbuffer: 7c277ffe8cac3b71cf2f45162d03f33a9433dcc5 + React-microtasksnativemodule: be42d7d2b53170c9a144cb13190e4ebd0040a5ac + React-NativeModulesApple: 7ba4e954dac75d627d4be5c305a98dcb8e15619b + React-perflogger: bebc1158be81872eefd9589607fc2e05f73d060d + React-performancetimeline: 52a74ede38a371eb1c1cb9e11b0857b06776eb31 + React-RCTActionSheet: 54c2b8f6dd782644dd60c12bdca8dac7ff04e205 + React-RCTAnimation: a9618ac0744902c754a12e1195139f0a827b2b82 + React-RCTAppDelegate: 8c5fbfada3c113197cf4e25501146331b5a09c03 + React-RCTBlob: 1b3864df20273725cf56aa53751b54960a3ce432 + React-RCTFabric: 38d8f700da2e6aa5548ff56e2e8e71dca3ce0e78 + React-RCTFBReactNativeSpec: 259934459cba3fcb8e5bf455d67dd3a243cd3334 + React-RCTImage: 605b96126decbd10c6528eab3bd175cdf3251f43 + React-RCTLinking: ac8b197cc076d67d979ca475f966e77fee6c8775 + React-RCTNetwork: 37cbdbd3228267e8301499d4502adda864de42ea + React-RCTPushNotification: fce98d3af676cb29330c7a92c7d1dc8bd0567fe1 + React-RCTSettings: 20e40823338f3c1c90b5315033bf41c9b1dae3f7 + React-RCTTest: ed8221730a4ba3cf33098afb886b555c7f95d5c4 + React-RCTText: 615cd64bc900c7bdebcd392099bd3988bccf2187 + React-RCTVibration: c4541a15842cf010b5acbf78ca13998a40628af4 + React-rendererconsistency: ba099f736d72cdf95718a7a43f0361e3f1a16b89 + React-rendererdebug: 3a2eba23c28fb815ca924baebf26281cff4ca960 + React-rncore: a1636452ab5c0e62f213cb180669ee1ed1bcbc92 + React-RuntimeApple: 83f5fa46f08a908bb71ffb786ed963257f22e385 + React-RuntimeCore: 757c35f1b8f141b78ea1702a5d7315c400246616 + React-runtimeexecutor: 0ee2204052863ae023cf119ebf5f865a0c3f6094 + React-RuntimeHermes: f5a9dbfae4dc6c183c1dbe8b65dfe7bc8d1cc18c + React-runtimescheduler: ac9da9b2e070cea8f1e27987cf3dde618651cbc3 + React-timing: 1c798fbdb464b3d16e812b5ad02fa0a505153d9b + React-utils: 5304213c024c01e38506912538cca8e5b86d50f5 + ReactAppDependencyProvider: 92e04002e3e6bf05337463adb0e533b5904651d5 + ReactCodegen: 49027aea46d7e79f3fb3af0923fd68a5c5e8f258 + ReactCommon: 5a44ad1b87d8c583cddf44947e012b4f7761f3b5 + ReactCommon-Samples: b5b5dd04bbc0e39fb7ee7b45f5d1b76e1ed4e101 + ScreenshotManager: f4ad7c194c67caa6620974a8b4446eeb0f6688c0 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: d7af68bbe88ef55fd73754fe6942746eff12919c + Yoga: e157016079d4bd81fcbf8b6a109dd767ba00a811 PODFILE CHECKSUM: 8591f96a513620a2a83a0b9a125ad3fa32ea1369 From 1bd9d36b707124e85514a6fc3817695611e3223e Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Tue, 28 Jan 2025 07:20:32 -0800 Subject: [PATCH 15/60] fix(react-native): pass the protocol from bundle URL to HMR client on Android (#48998) Summary: This is another attempt at fixing the Android HMR client for HTTPS proxied Metro instances. The previous one unintentionally [caused the following error](https://github.com/facebook/react-native/pull/48970#issuecomment-2617047184): ``` java.lang.AssertionError: Method overloading is unsupported: com.facebook.react.devsupport.HMRClient#setup ``` This PR removes the overloading, and only adds the `scheme` property as a parameter to the existing `.setup` method. Aligning with the exact behavior we have on iOS. The alternative fix, which should NOT be backward breaking (if this is) - is to move this "infer the protocol from the bundle URL" to the JS side of the HMR client. Where we don't just always default to `http`, but instead default to `https IF port === 443, otherwise http`. It's a bit more hacky, but shouldn't cause any other issues. _**Ideally**_, we have the same working behavior on both Android and iOS without workarounds.
Alternative workaround See [this change](https://github.com/facebook/react-native/compare/main...byCedric:react-native:patch-2). image
See full explanation on https://github.com/facebook/react-native/issues/48970 > We've noticed that the HMR on Android doesn't seem to be connecting when using a HTTPS-proxied Metro instance, where the proxy is hosted through Cloudflare. This is only an issue on Android - not iOS - and likely caused by the HMR Client not being set up properly on Android. > >- On Android, we run `.setup('android', , , , )` in the [**react/devsupport/DevSupportManagerBase.java**](https://github.com/facebook/react-native/blob/53d94c3abe3fcd2168b512652bc0169956bffa39/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java#L689-L691) file. >- On iOS, we run `[self.callableJSModules invokeModule:@"HMRClient" method:@"setup" withArgs:@[ RCTPlatformName, path, host, RCTNullIfNil(port), @(isHotLoadingEnabled), scheme ]];` in the [**React/CoreModules /RCTDevSettings.mm**](https://github.com/facebook/react-native/blob/53d94c3abe3fcd2168b512652bc0169956bffa39/packages/react-native/React/CoreModules/RCTDevSettings.mm#L488-L491) file. > >Notice how Android does not pass in the scheme/protocol of the bundle URL, while iOS actually does? Unfortunately, because the default protocol (`http`) mismatches on Android when using HTTPS proxies, we actually try to connect the HMR client over `http` instead of `https` - while still using port 443 - which is rejected by Cloudflare's infrastructure even before we can redirect or mitigate this issue. And the rejection is valid, as we basically try to connect on `http://:443` (the source URL is `https`, so the port is infered as `443`). > >This change adds scheme propagation to Android, exactly like we do on iOS for the HMR Client. ## Changelog: [ANDROID] [FIXED] Pass the bundle URL protocol when setting up HMR client on Android [IOS] [FIXED] - app crash caused by the `[RCTFileRequestHanlder invalidate]` method Pull Request resolved: https://github.com/facebook/react-native/pull/48350 Test Plan: I am not able to reproduce this issue locally either, so the changes in this PR are totally from my inference, I am not sure if it really makes sense, so please help take a deeper look, thanks. Reviewed By: javache Differential Revision: D69751695 Pulled By: cipolleschi fbshipit-source-id: aa4654a30f5dfac99b72ed1bda0dae1e0dc881c9 --- .../Network/RCTDataRequestHandler.mm | 20 ++++++++++++++++--- .../Network/RCTFileRequestHandler.mm | 20 ++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/react-native/Libraries/Network/RCTDataRequestHandler.mm b/packages/react-native/Libraries/Network/RCTDataRequestHandler.mm index f95d0c078e0d..2aff977cf65a 100644 --- a/packages/react-native/Libraries/Network/RCTDataRequestHandler.mm +++ b/packages/react-native/Libraries/Network/RCTDataRequestHandler.mm @@ -8,6 +8,8 @@ #import #import +#import + #import "RCTNetworkPlugins.h" @interface RCTDataRequestHandler () @@ -15,14 +17,22 @@ @interface RCTDataRequestHandler () @implementation RCTDataRequestHandler { NSOperationQueue *_queue; + std::mutex _operationHandlerMutexLock; } RCT_EXPORT_MODULE() - (void)invalidate { - [_queue cancelAllOperations]; - _queue = nil; + std::lock_guard lock(_operationHandlerMutexLock); + if (_queue) { + for (NSOperation *operation in _queue.operations) { + if (!operation.isCancelled && !operation.isFinished) { + [operation cancel]; + } + } + _queue = nil; + } } - (BOOL)canHandleRequest:(NSURLRequest *)request @@ -32,6 +42,7 @@ - (BOOL)canHandleRequest:(NSURLRequest *)request - (NSOperation *)sendRequest:(NSURLRequest *)request withDelegate:(id)delegate { + std::lock_guard lock(_operationHandlerMutexLock); // Lazy setup if (!_queue) { _queue = [NSOperationQueue new]; @@ -69,7 +80,10 @@ - (NSOperation *)sendRequest:(NSURLRequest *)request withDelegate:(id lock(_operationHandlerMutexLock); + if (!op.isCancelled && !op.isFinished) { + [op cancel]; + } } - (std::shared_ptr)getTurboModule: diff --git a/packages/react-native/Libraries/Network/RCTFileRequestHandler.mm b/packages/react-native/Libraries/Network/RCTFileRequestHandler.mm index 19d025c51e19..4ca36256c681 100644 --- a/packages/react-native/Libraries/Network/RCTFileRequestHandler.mm +++ b/packages/react-native/Libraries/Network/RCTFileRequestHandler.mm @@ -7,6 +7,8 @@ #import +#import + #import #import @@ -19,14 +21,22 @@ @interface RCTFileRequestHandler () @implementation RCTFileRequestHandler { NSOperationQueue *_fileQueue; + std::mutex _operationHandlerMutexLock; } RCT_EXPORT_MODULE() - (void)invalidate { - [_fileQueue cancelAllOperations]; - _fileQueue = nil; + std::lock_guard lock(_operationHandlerMutexLock); + if (_fileQueue) { + for (NSOperation *operation in _fileQueue.operations) { + if (!operation.isCancelled && !operation.isFinished) { + [operation cancel]; + } + } + _fileQueue = nil; + } } - (BOOL)canHandleRequest:(NSURLRequest *)request @@ -36,6 +46,7 @@ - (BOOL)canHandleRequest:(NSURLRequest *)request - (NSOperation *)sendRequest:(NSURLRequest *)request withDelegate:(id)delegate { + std::lock_guard lock(_operationHandlerMutexLock); // Lazy setup if (!_fileQueue) { _fileQueue = [NSOperationQueue new]; @@ -83,7 +94,10 @@ - (NSOperation *)sendRequest:(NSURLRequest *)request withDelegate:(id lock(_operationHandlerMutexLock); + if (!op.isCancelled && !op.isFinished) { + [op cancel]; + } } - (std::shared_ptr)getTurboModule: From eb8c1c3e95c92b98a9c78832271562011831c4e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Tue, 18 Mar 2025 05:59:50 -0700 Subject: [PATCH 55/60] Correctly batch reportMount calls (#50090) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50090 Changelog: [internal] I refactored `FabricUIManager` in D54547194 / https://github.com/facebook/react-native/pull/43337 and accidentally removed setting this flag to avoid scheduling redundant tasks in the UI thread to report mount. This fixes it. Reviewed By: javache Differential Revision: D71387374 fbshipit-source-id: cad8a3ead2434738325560902cbab817e5d5dde7 --- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 2 ++ 1 file changed, 2 insertions(+) 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 6d4c7155803a..a7389a8b48fc 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 @@ -1256,6 +1256,8 @@ public void didMountItems(@Nullable List mountItems) { } if (!mMountNotificationScheduled && !mMountedSurfaceIds.isEmpty()) { + mMountNotificationScheduled = true; + // Notify mount when the effects are visible and prevent mount hooks to // delay paint. UiThreadUtil.getUiThreadHandler() From aa75e94831df7ec94ee4cbc4df0de453c486022e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Tue, 18 Mar 2025 05:59:50 -0700 Subject: [PATCH 56/60] Avoid errors when dispatching mount operations within mount hooks (#50091) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50091 Changelog: [internal] If a library uses mount hooks to perform mount operations, it's possible to get concurrent modifications of the list of pending surface IDs to report. This fixes that potential error by making a copy of the list before dispatching the mount notifications. Fixes https://github.com/facebook/react-native/issues/49783. Reviewed By: javache Differential Revision: D71387739 fbshipit-source-id: 96c723ef2d6bcc659c4452434b7a4d5af26117ef --- .../react/fabric/FabricUIManager.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 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 a7389a8b48fc..2e8cab110877 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 @@ -173,7 +173,7 @@ public class FabricUIManager private final CopyOnWriteArrayList mListeners = new CopyOnWriteArrayList<>(); private boolean mMountNotificationScheduled = false; - private final List mMountedSurfaceIds = new ArrayList<>(); + private List mSurfaceIdsWithPendingMountNotification = new ArrayList<>(); @ThreadConfined(UI) @NonNull @@ -1250,12 +1250,13 @@ public void didMountItems(@Nullable List mountItems) { // Collect surface IDs for all the mount items for (MountItem mountItem : mountItems) { - if (mountItem != null && !mMountedSurfaceIds.contains(mountItem.getSurfaceId())) { - mMountedSurfaceIds.add(mountItem.getSurfaceId()); + if (mountItem != null + && !mSurfaceIdsWithPendingMountNotification.contains(mountItem.getSurfaceId())) { + mSurfaceIdsWithPendingMountNotification.add(mountItem.getSurfaceId()); } } - if (!mMountNotificationScheduled && !mMountedSurfaceIds.isEmpty()) { + if (!mMountNotificationScheduled && !mSurfaceIdsWithPendingMountNotification.isEmpty()) { mMountNotificationScheduled = true; // Notify mount when the effects are visible and prevent mount hooks to @@ -1267,17 +1268,19 @@ public void didMountItems(@Nullable List mountItems) { public void run() { mMountNotificationScheduled = false; + // Create a copy in case mount hooks trigger more mutations + final List surfaceIdsToReportMount = + mSurfaceIdsWithPendingMountNotification; + mSurfaceIdsWithPendingMountNotification = new ArrayList<>(); + final @Nullable FabricUIManagerBinding binding = mBinding; if (binding == null || mDestroyed) { - mMountedSurfaceIds.clear(); return; } - for (int surfaceId : mMountedSurfaceIds) { + for (int surfaceId : surfaceIdsToReportMount) { binding.reportMount(surfaceId); } - - mMountedSurfaceIds.clear(); } }); } From ae1841ac9645c10d66aeef784579b94fa0169e03 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Fri, 21 Mar 2025 10:08:12 -0700 Subject: [PATCH 57/60] Convert to JSException only NSException from sync methods (#50193) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50193 This fix makes sure that we convert to JSException only NSException thrwn by sync methods. Currently, nothing in the stack will be capable of understanding that js error if it is triggered by an exception raised by an asyc method. See https://github.com/reactwg/react-native-new-architecture/discussions/276 for further details We need to cherry pick this in 0.78 and 0.79 ## Changelog: [iOS][Fixed] - Make sure the TM infra does not crash on NSException when triggered by async method Reviewed By: fabriziocucci Differential Revision: D71619229 fbshipit-source-id: b87aef5dd2720a2641c8da0904da651866370dc6 --- .../ios/ReactCommon/RCTTurboModule.mm | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm index 167368828e39..ac9bbe117611 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm @@ -57,7 +57,7 @@ static int32_t getUniqueId() static jsi::String convertNSStringToJSIString(jsi::Runtime &runtime, NSString *value) { - return jsi::String::createFromUtf8(runtime, [value UTF8String] ?: ""); + return jsi::String::createFromUtf8(runtime, [value UTF8String] ? [value UTF8String] : ""); } static jsi::Object convertNSDictionaryToJSIObject(jsi::Runtime &runtime, NSDictionary *value) @@ -203,7 +203,11 @@ id convertJSIValueToObjCObject(jsi::Runtime &runtime, const jsi::Value &value, s /** * Creates JSError with current JS runtime and NSException stack trace. */ -static jsi::JSError convertNSExceptionToJSError(jsi::Runtime &runtime, NSException *exception) +static jsi::JSError convertNSExceptionToJSError( + jsi::Runtime &runtime, + NSException *exception, + const std::string &moduleName, + const std::string &methodName) { std::string reason = [exception.reason UTF8String]; @@ -214,7 +218,8 @@ id convertJSIValueToObjCObject(jsi::Runtime &runtime, const jsi::Value &value, s cause.setProperty( runtime, "stackReturnAddresses", convertNSArrayToJSIArray(runtime, exception.callStackReturnAddresses)); - jsi::Value error = createJSRuntimeError(runtime, "Exception in HostFunction: " + reason); + std::string message = moduleName + "." + methodName + " raised an exception: " + reason; + jsi::Value error = createJSRuntimeError(runtime, message); error.asObject(runtime).setProperty(runtime, "cause", std::move(cause)); return {runtime, std::move(error)}; } @@ -346,28 +351,34 @@ id convertJSIValueToObjCObject(jsi::Runtime &runtime, const jsi::Value &value, s } if (isSync) { - TurboModulePerfLogger::syncMethodCallExecutionStart(moduleName, methodNameStr.c_str()); + TurboModulePerfLogger::syncMethodCallExecutionStart(moduleName, methodName); } else { - TurboModulePerfLogger::asyncMethodCallExecutionStart(moduleName, methodNameStr.c_str(), asyncCallCounter); + TurboModulePerfLogger::asyncMethodCallExecutionStart(moduleName, methodName, asyncCallCounter); } @try { [inv invokeWithTarget:strongModule]; } @catch (NSException *exception) { - throw convertNSExceptionToJSError(runtime, exception); + if (isSync) { + // We can only convert NSException to JSError in sync method calls. + // See https://github.com/reactwg/react-native-new-architecture/discussions/276#discussioncomment-12567155 + throw convertNSExceptionToJSError(runtime, exception, std::string{moduleName}, methodNameStr); + } else { + @throw exception; + } } @finally { [retainedObjectsForInvocation removeAllObjects]; } if (!isSync) { - TurboModulePerfLogger::asyncMethodCallExecutionEnd(moduleName, methodNameStr.c_str(), asyncCallCounter); + TurboModulePerfLogger::asyncMethodCallExecutionEnd(moduleName, methodName, asyncCallCounter); return; } void *rawResult; [inv getReturnValue:&rawResult]; result = (__bridge id)rawResult; - TurboModulePerfLogger::syncMethodCallExecutionEnd(moduleName, methodNameStr.c_str()); + TurboModulePerfLogger::syncMethodCallExecutionEnd(moduleName, methodName); }; if (isSync) { @@ -409,23 +420,23 @@ TraceSection s( } if (shouldVoidMethodsExecuteSync_) { - TurboModulePerfLogger::syncMethodCallExecutionStart(moduleName, methodNameStr.c_str()); + TurboModulePerfLogger::syncMethodCallExecutionStart(moduleName, methodName); } else { - TurboModulePerfLogger::asyncMethodCallExecutionStart(moduleName, methodNameStr.c_str(), asyncCallCounter); + TurboModulePerfLogger::asyncMethodCallExecutionStart(moduleName, methodName, asyncCallCounter); } @try { [inv invokeWithTarget:strongModule]; } @catch (NSException *exception) { - throw convertNSExceptionToJSError(runtime, exception); + throw convertNSExceptionToJSError(runtime, exception, std::string{moduleName}, methodNameStr); } @finally { [retainedObjectsForInvocation removeAllObjects]; } if (shouldVoidMethodsExecuteSync_) { - TurboModulePerfLogger::syncMethodCallExecutionEnd(moduleName, methodNameStr.c_str()); + TurboModulePerfLogger::syncMethodCallExecutionEnd(moduleName, methodName); } else { - TurboModulePerfLogger::asyncMethodCallExecutionEnd(moduleName, methodNameStr.c_str(), asyncCallCounter); + TurboModulePerfLogger::asyncMethodCallExecutionEnd(moduleName, methodName, asyncCallCounter); } return; From f3d1ad12048575a76d46fb226423dce3b9c70516 Mon Sep 17 00:00:00 2001 From: React Native Bot Date: Tue, 1 Apr 2025 12:57:44 +0000 Subject: [PATCH 58/60] Release 0.78.2 #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 | 6 +++--- packages/core-cli-utils/package.json | 2 +- packages/debugger-frontend/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/helloworld/package.json | 12 ++++++------ packages/metro-config/package.json | 6 +++--- 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-bots/package.json | 2 +- .../package.json | 4 ++-- packages/react-native-codegen/package.json | 2 +- packages/react-native-fantom/package.json | 2 +- packages/react-native-info/package.json | 2 +- .../react-native-popup-menu-android/package.json | 4 ++-- packages/react-native-test-library/package.json | 6 +++--- .../Libraries/Core/ReactNativeVersion.js | 2 +- packages/react-native/React/Base/RCTVersion.m | 2 +- .../react-native/ReactAndroid/gradle.properties | 2 +- .../modules/systeminfo/ReactNativeVersion.java | 2 +- .../ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- packages/react-native/package.json | 16 ++++++++-------- packages/rn-tester/package.json | 6 +++--- packages/typescript-config/package.json | 2 +- packages/virtualized-lists/package.json | 2 +- 33 files changed, 62 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 00f065caac17..7db61c111711 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "@babel/preset-flow": "^7.24.7", "@definitelytyped/dtslint": "^0.0.127", "@jest/create-cache-key-function": "^29.6.3", - "@react-native/metro-babel-transformer": "0.78.1", - "@react-native/metro-config": "0.78.1", + "@react-native/metro-babel-transformer": "0.78.2", + "@react-native/metro-config": "0.78.2", "@tsconfig/node18": "1.0.1", "@types/react": "^19.0.0", "@typescript-eslint/parser": "^7.1.1", diff --git a/packages/assets/package.json b/packages/assets/package.json index 19e3365cb2b5..5e5135b0660f 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.78.1", + "version": "0.78.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 4c850a6b1fb1..9d77de73f305 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.78.1", + "version": "0.78.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.78.1" + "@react-native/codegen": "0.78.2" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 6f06156e29ba..fc797310131e 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.78.1", + "version": "0.78.2", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,8 +22,8 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "0.78.1", - "@react-native/metro-babel-transformer": "0.78.1", + "@react-native/dev-middleware": "0.78.2", + "@react-native/metro-babel-transformer": "0.78.2", "chalk": "^4.0.0", "debug": "^2.2.0", "invariant": "^2.2.4", diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 8d4983e110f7..1ecbb0a32b8f 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.78.1", + "version": "0.78.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 346fa9ea1c25..3609e1eb6d57 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.78.1", + "version": "0.78.2", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index eea904e3980b..22926156f091 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.78.1", + "version": "0.78.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.78.1", + "@react-native/debugger-frontend": "0.78.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 dc03eda35382..90d997c329be 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.78.1", + "version": "0.78.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.78.1", + "@react-native/eslint-plugin": "0.78.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 36d7e12a232f..05fc56ef7a5f 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.78.1", + "version": "0.78.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 d57b5a283d56..f5a2254cb7d4 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.78.1", + "version": "0.78.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.78.1", + "@react-native/codegen": "0.78.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 86dc0831d3d5..2aa91e7b18ba 100644 --- a/packages/gradle-plugin/package.json +++ b/packages/gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.78.1", + "version": "0.78.2", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { diff --git a/packages/helloworld/package.json b/packages/helloworld/package.json index 380f13dacee7..d4c4b62ef86a 100644 --- a/packages/helloworld/package.json +++ b/packages/helloworld/package.json @@ -1,6 +1,6 @@ { "name": "helloworld", - "version": "0.78.1", + "version": "0.78.2", "private": true, "scripts": { "bootstrap": "node ./cli.js bootstrap", @@ -13,16 +13,16 @@ }, "dependencies": { "react": "19.0.0", - "react-native": "0.78.1" + "react-native": "0.78.2" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native/babel-preset": "0.78.1", - "@react-native/core-cli-utils": "0.78.1", - "@react-native/eslint-config": "0.78.1", - "@react-native/metro-config": "0.78.1", + "@react-native/babel-preset": "0.78.2", + "@react-native/core-cli-utils": "0.78.2", + "@react-native/eslint-config": "0.78.2", + "@react-native/metro-config": "0.78.2", "chalk": "^4.1.2", "commander": "^12.0.0", "eslint": "^8.19.0", diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 7127467dc230..662b3b7a0583 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.78.1", + "version": "0.78.2", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -26,8 +26,8 @@ "dist" ], "dependencies": { - "@react-native/js-polyfills": "0.78.1", - "@react-native/metro-babel-transformer": "0.78.1", + "@react-native/js-polyfills": "0.78.2", + "@react-native/metro-babel-transformer": "0.78.2", "metro-config": "^0.81.3", "metro-runtime": "^0.81.3" } diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index c84af413cdc2..2d645d54b779 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.78.1", + "version": "0.78.2", "description": "Color normalization for React Native.", "license": "MIT", "repository": { diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 6365acb98204..2ad16684227b 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.78.1", + "version": "0.78.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 17e9f7ca7f84..abdb23cb0423 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.78.1", + "version": "0.78.2", "description": "Babel preset for React Native applications", "main": "src/index.js", "repository": { @@ -55,7 +55,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.78.1", + "@react-native/babel-plugin-codegen": "0.78.2", "babel-plugin-syntax-hermes-parser": "0.25.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 cf4566603ae9..821aa7e8af41 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.78.1", + "version": "0.78.2", "description": "Babel transformer for React Native applications.", "main": "src/index.js", "repository": { @@ -16,7 +16,7 @@ "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.1", + "@react-native/babel-preset": "0.78.2", "hermes-parser": "0.25.1", "nullthrows": "^1.1.1" }, diff --git a/packages/react-native-bots/package.json b/packages/react-native-bots/package.json index a119bc1bb66a..ea1f789f77eb 100644 --- a/packages/react-native-bots/package.json +++ b/packages/react-native-bots/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/bots", "description": "React Native Bots", - "version": "0.78.1", + "version": "0.78.2", "private": true, "license": "MIT", "repository": { diff --git a/packages/react-native-codegen-typescript-test/package.json b/packages/react-native-codegen-typescript-test/package.json index 804ec0fe8987..94beb5ef08f8 100644 --- a/packages/react-native-codegen-typescript-test/package.json +++ b/packages/react-native-codegen-typescript-test/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen-typescript-test", - "version": "0.78.1", + "version": "0.78.2", "private": true, "description": "TypeScript related unit test for @react-native/codegen", "license": "MIT", @@ -19,7 +19,7 @@ "prepare": "yarn run build" }, "dependencies": { - "@react-native/codegen": "0.78.1" + "@react-native/codegen": "0.78.2" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index 400d9d9ec5e8..0b2bb85f0f3c 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.78.1", + "version": "0.78.2", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-fantom/package.json b/packages/react-native-fantom/package.json index e464a7e25fa3..63fae569b2c0 100644 --- a/packages/react-native-fantom/package.json +++ b/packages/react-native-fantom/package.json @@ -1,7 +1,7 @@ { "name": "@react-native/fantom", "private": true, - "version": "0.78.1", + "version": "0.78.2", "main": "src/index.js", "description": "Internal integration testing and benchmarking tool for React Native", "peerDependencies": { diff --git a/packages/react-native-info/package.json b/packages/react-native-info/package.json index de0ff7bef0aa..8837293894ab 100644 --- a/packages/react-native-info/package.json +++ b/packages/react-native-info/package.json @@ -1,6 +1,6 @@ { "name": "react-native-info", - "version": "0.78.1", + "version": "0.78.2", "main": "build/index.js", "license": "MIT", "private": true, diff --git a/packages/react-native-popup-menu-android/package.json b/packages/react-native-popup-menu-android/package.json index 908f87dfffe5..f6183d3d2f7f 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.78.1", + "version": "0.78.2", "description": "PopupMenu for the Android platform", "main": "index.js", "files": [ @@ -17,7 +17,7 @@ ], "license": "MIT", "devDependencies": { - "@react-native/codegen": "0.78.1" + "@react-native/codegen": "0.78.2" }, "peerDependencies": { "@types/react": "^19.0.0", diff --git a/packages/react-native-test-library/package.json b/packages/react-native-test-library/package.json index e9cc263b58cf..fd6cb2e1ffab 100644 --- a/packages/react-native-test-library/package.json +++ b/packages/react-native-test-library/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/oss-library-example", - "version": "0.78.1", + "version": "0.78.2", "private": true, "description": "Package that includes native module exapmle, native component example, targets both the old and the new architecture. It should serve as an example of a real-world OSS library.", "license": "MIT", @@ -26,8 +26,8 @@ ], "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.1", - "react-native": "0.78.1" + "@react-native/babel-preset": "0.78.2", + "react-native": "0.78.2" }, "peerDependencies": { "react": "*", diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 8cf9b244ab8a..e47992fc8d2e 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -16,7 +16,7 @@ const version: $ReadOnly<{ }> = { major: 0, minor: 78, - 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 954adeeedd3c..917c106e42e9 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: @(78), - RCTVersionPatch: @(1), + RCTVersionPatch: @(2), RCTVersionPrerelease: [NSNull null], }; }); diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 12dcb2710511..a38d501b6839 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.78.1 +VERSION_NAME=0.78.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.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java index bd705db8d445..2c82f1d3cc44 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java @@ -17,6 +17,6 @@ public class ReactNativeVersion { public static final Map VERSION = MapBuilder.of( "major", 0, "minor", 78, - "patch", 1, + "patch", 2, "prerelease", null); } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index e83551df7e19..a061a541ae37 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -17,7 +17,7 @@ namespace facebook::react { constexpr struct { int32_t Major = 0; int32_t Minor = 78; - 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 226ccb55b68b..8521fff1cbba 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.78.1", + "version": "0.78.2", "description": "A framework for building native apps using React", "license": "MIT", "repository": { @@ -108,13 +108,13 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.78.1", - "@react-native/codegen": "0.78.1", - "@react-native/community-cli-plugin": "0.78.1", - "@react-native/gradle-plugin": "0.78.1", - "@react-native/js-polyfills": "0.78.1", - "@react-native/normalize-colors": "0.78.1", - "@react-native/virtualized-lists": "0.78.1", + "@react-native/assets-registry": "0.78.2", + "@react-native/codegen": "0.78.2", + "@react-native/community-cli-plugin": "0.78.2", + "@react-native/gradle-plugin": "0.78.2", + "@react-native/js-polyfills": "0.78.2", + "@react-native/normalize-colors": "0.78.2", + "@react-native/virtualized-lists": "0.78.2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index c343ee64d18c..ebb9ae27781e 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/tester", - "version": "0.78.1", + "version": "0.78.2", "private": true, "description": "React Native tester app.", "license": "MIT", @@ -27,8 +27,8 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { - "@react-native/oss-library-example": "0.78.1", - "@react-native/popup-menu-android": "0.78.1", + "@react-native/oss-library-example": "0.78.2", + "@react-native/popup-menu-android": "0.78.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 c48f4cb45e4c..7765cb66e2b5 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/typescript-config", - "version": "0.78.1", + "version": "0.78.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 0df56f1f659f..8f5273d14d23 100644 --- a/packages/virtualized-lists/package.json +++ b/packages/virtualized-lists/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/virtualized-lists", - "version": "0.78.1", + "version": "0.78.2", "description": "Virtualized lists for React Native.", "license": "MIT", "repository": { From 0d1bb87327c43b789aa11b60416885949d103cd2 Mon Sep 17 00:00:00 2001 From: kushagra-zepto Date: Fri, 20 Jun 2025 18:30:52 +0530 Subject: [PATCH 59/60] Fixed patch --- .../hermes-engine/build.gradle.kts | 3 +- .../react/animated/AdditionAnimatedNode.kt | 6 +- .../react/animated/AnimationDriver.kt | 5 +- .../react/animated/DiffClampAnimatedNode.kt | 20 +- .../react/animated/DivisionAnimatedNode.kt | 12 +- .../react/animated/EventAnimationDriver.kt | 16 +- .../animated/InterpolationAnimatedNode.kt | 29 +- .../react/animated/ModulusAnimatedNode.kt | 5 +- .../animated/MultiplicationAnimatedNode.kt | 3 +- .../react/animated/NativeAnimatedModule.java | 304 +++++++------ .../animated/NativeAnimatedNodesManager.java | 422 +++++++++++------- .../react/animated/PropsAnimatedNode.kt | 24 +- .../react/animated/StyleAnimatedNode.kt | 10 +- .../react/animated/TransformAnimatedNode.kt | 14 +- .../modules/network/NetworkingModule.java | 187 ++++---- 15 files changed, 631 insertions(+), 429 deletions(-) diff --git a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts index d8b0d5f382f5..24702eec38c3 100644 --- a/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts +++ b/packages/react-native/ReactAndroid/hermes-engine/build.gradle.kts @@ -329,7 +329,8 @@ afterEvaluate { tasks.withType().configureEach { options.compilerArgs.add("-Xlint:deprecation,unchecked") - options.compilerArgs.add("-Werror") + // PATCH: COMMENTED OUT TO AVOID BUILD ERROR + // options.compilerArgs.add("-Werror") } /* Publishing Configuration */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AdditionAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AdditionAnimatedNode.kt index fd93cee90ffb..d78251cecb83 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AdditionAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AdditionAnimatedNode.kt @@ -41,8 +41,10 @@ internal class AdditionAnimatedNode( if (animatedNode is ValueAnimatedNode) { acc + animatedNode.getValue() } else { - throw JSApplicationCausedNativeException( - "Illegal node ID set as an input for Animated.Add node") + acc + 0.0 + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationCausedNativeException( + // "Illegal node ID set as an input for Animated.Add node") } }) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AnimationDriver.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AnimationDriver.kt index e55fa2435d47..df931bbe1712 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AnimationDriver.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/AnimationDriver.kt @@ -34,7 +34,8 @@ internal abstract class AnimationDriver { * start animating with the new properties (different destination or spring settings) */ open fun resetConfig(config: ReadableMap) { - throw JSApplicationCausedNativeException( - "Animation config for ${javaClass.simpleName} cannot be reset") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationCausedNativeException( + // "Animation config for ${javaClass.simpleName} cannot be reset") } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DiffClampAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DiffClampAnimatedNode.kt index fbe312e48593..d8c6ef7bd0f5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DiffClampAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DiffClampAnimatedNode.kt @@ -29,18 +29,22 @@ internal class DiffClampAnimatedNode( } override fun update() { - val value = inputNodeValue - val diff = value - lastValue - lastValue = value - nodeValue = min(max(nodeValue + diff, minValue), maxValue) + if (inputNodeValue != null) { + val value = inputNodeValue!! + val diff = value - lastValue + lastValue = value + nodeValue = min(max(nodeValue + diff, minValue), maxValue) + } } - private val inputNodeValue: Double + private val inputNodeValue: Double? get() { val animatedNode = nativeAnimatedNodesManager.getNodeById(inputNodeTag) if (animatedNode == null || animatedNode !is ValueAnimatedNode) { - throw JSApplicationCausedNativeException( - "Illegal node ID set as an input for Animated.DiffClamp node") + return null + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationCausedNativeException( + // "Illegal node ID set as an input for Animated.DiffClamp node") } return animatedNode.getValue() } @@ -48,4 +52,4 @@ internal class DiffClampAnimatedNode( override fun prettyPrint(): String = "DiffClampAnimatedNode[$tag]: InputNodeTag: $inputNodeTag min: $minValue " + "max: $maxValue lastValue: $lastValue super: ${super.prettyPrint()}" -} +} \ No newline at end of file diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DivisionAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DivisionAnimatedNode.kt index b2625bf0f00e..17a0f397fec8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DivisionAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/DivisionAnimatedNode.kt @@ -38,14 +38,18 @@ internal class DivisionAnimatedNode( if (i == 0) { nodeValue = v } else if (v == 0.0) { - throw JSApplicationCausedNativeException( - "Detected a division by zero in Animated.divide node with Animated ID $tag") + return + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationCausedNativeException( + // "Detected a division by zero in Animated.divide node with Animated ID $tag") } else { nodeValue /= v } } else { - throw JSApplicationCausedNativeException( - "Illegal node ID set as an input for Animated.divide node with Animated ID $tag") + return + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationCausedNativeException( + // "Illegal node ID set as an input for Animated.divide node with Animated ID $tag") } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt index f59b730cf225..f3f9ebe46817 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt @@ -43,12 +43,14 @@ internal class EventAnimationDriver( touches: WritableArray, changedIndices: WritableArray ) { - throw UnsupportedOperationException("receiveTouches is not support by native animated events") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw UnsupportedOperationException("receiveTouches is not support by native animated events") } @Deprecated("Deprecated in Java") override fun receiveTouches(event: TouchEvent) { - throw UnsupportedOperationException("receiveTouches is not support by native animated events") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw UnsupportedOperationException("receiveTouches is not support by native animated events") } override fun receiveEvent( @@ -60,7 +62,11 @@ internal class EventAnimationDriver( params: WritableMap?, @EventCategoryDef category: Int ) { - requireNotNull(params) { "Native animated events must have event data." } + // requireNotNull(params) { "Native animated events must have event data." } + + if(params == null) { + return; + } // Get the new value for the node by looking into the event map using the provided event path. var currMap: ReadableMap? = params @@ -76,7 +82,7 @@ internal class EventAnimationDriver( currArray = currMap.getArray(key) currMap = null } else { - throw UnexpectedNativeTypeException("Unexpected type $keyType for key '$key'") + // throw UnexpectedNativeTypeException("Unexpected type $keyType for key '$key'") } } else { val index = eventPath[i].toInt() @@ -88,7 +94,7 @@ internal class EventAnimationDriver( currArray = currArray?.getArray(index) currMap = null } else { - throw UnexpectedNativeTypeException("Unexpected type $keyType for index '$index'") + // throw UnexpectedNativeTypeException("Unexpected type $keyType for index '$index'") } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt index e53a4529670e..449e9449b8cd 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt @@ -51,13 +51,22 @@ public class InterpolationAnimatedNode(config: ReadableMap) : ValueAnimatedNode( } override fun onAttachedToNode(parent: AnimatedNode) { - check(this.parent == null) { "Parent already attached" } - require(parent is ValueAnimatedNode) { "Parent is of an invalid type" } + // check(this.parent == null) { "Parent already attached" } + // require(parent is ValueAnimatedNode) { "Parent is of an invalid type" } + if(this.parent != null) { + return; + } + if(parent !is ValueAnimatedNode ) { + return; + } this.parent = parent } override fun onDetachedFromNode(parent: AnimatedNode) { - require(parent === this.parent) { "Invalid parent node provided" } + // require(parent === this.parent) { "Invalid parent node provided" } + if (parent != this.parent) { + return + } this.parent = null } @@ -169,9 +178,10 @@ public class InterpolationAnimatedNode(config: ReadableMap) : ValueAnimatedNode( EXTRAPOLATE_TYPE_IDENTITY -> return result EXTRAPOLATE_TYPE_CLAMP -> result = inputMin EXTRAPOLATE_TYPE_EXTEND -> {} - else -> - throw JSApplicationIllegalArgumentException( - "Invalid extrapolation type " + extrapolateLeft + "for left extrapolation") + else -> return result + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationIllegalArgumentException( + // "Invalid extrapolation type " + extrapolateLeft + "for left extrapolation") } } if (result > inputMax) { @@ -179,9 +189,10 @@ public class InterpolationAnimatedNode(config: ReadableMap) : ValueAnimatedNode( EXTRAPOLATE_TYPE_IDENTITY -> return result EXTRAPOLATE_TYPE_CLAMP -> result = inputMax EXTRAPOLATE_TYPE_EXTEND -> {} - else -> - throw JSApplicationIllegalArgumentException( - "Invalid extrapolation type " + extrapolateRight + "for right extrapolation") + else -> return result + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationIllegalArgumentException( + // "Invalid extrapolation type " + extrapolateRight + "for right extrapolation") } } if (outputMin == outputMax) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.kt index b09d0f5276f1..39eb364b7bf6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.kt @@ -24,8 +24,9 @@ internal class ModulusAnimatedNode( val animatedNodeValue = animatedNode.getValue() nodeValue = (animatedNodeValue % modulus + modulus) % modulus } else { - throw JSApplicationCausedNativeException( - "Illegal node ID set as an input for Animated.modulus node") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationCausedNativeException( + // "Illegal node ID set as an input for Animated.modulus node") } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/MultiplicationAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/MultiplicationAnimatedNode.kt index fa1f7d4a8e18..51e16f92ab5d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/MultiplicationAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/MultiplicationAnimatedNode.kt @@ -38,8 +38,7 @@ internal class MultiplicationAnimatedNode( if (animatedNode != null && animatedNode is ValueAnimatedNode) { animatedNode.getValue() } else { - throw JSApplicationCausedNativeException( - "Illegal node ID set as an input for Animated.multiply node") + return } nodeValue *= multiplier } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java index 0f5043d19063..4399fd500868 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java @@ -44,47 +44,78 @@ import java.util.concurrent.atomic.AtomicReference; /** - * Module that exposes interface for creating and managing animated nodes on the "native" side. + * Module that exposes interface for creating and managing animated nodes on the + * "native" side. * - *

Animated.js library is based on a concept of a graph where nodes are values or transform - * operations (such as interpolation, addition, etc) and connection are used to describe how change + *

+ * Animated.js library is based on a concept of a graph where nodes are values + * or transform + * operations (such as interpolation, addition, etc) and connection are used to + * describe how change * of the value in one node can affect other nodes. * - *

Few examples of the nodes that can be created on the JS side: + *

+ * Few examples of the nodes that can be created on the JS side: * *

    - *
  • Animated.Value is a simplest type of node with a numeric value which can be driven by an - * animation engine (spring, decay, etc) or by calling setValue on it directly from JS - *
  • Animated.add is a type of node that may have two or more input nodes. It outputs the sum of - * all the input node values - *
  • interpolate - is actually a method you can call on any node and it creates a new node that - * takes the parent node as an input and outputs its interpolated value (e.g. if you have - * value that can animate from 0 to 1 you can create interpolated node and set output range to - * be 0 to 100 and when the input node changes the output of interpolated node will multiply - * the values by 100) + *
  • Animated.Value is a simplest type of node with a numeric value which can + * be driven by an + * animation engine (spring, decay, etc) or by calling setValue on it directly + * from JS + *
  • Animated.add is a type of node that may have two or more input nodes. It + * outputs the sum of + * all the input node values + *
  • interpolate - is actually a method you can call on any node and it + * creates a new node that + * takes the parent node as an input and outputs its interpolated value (e.g. if + * you have + * value that can animate from 0 to 1 you can create interpolated node and set + * output range to + * be 0 to 100 and when the input node changes the output of interpolated node + * will multiply + * the values by 100) *
* - *

You can mix and chain nodes however you like and this way create nodes graph with connections + *

+ * You can mix and chain nodes however you like and this way create nodes graph + * with connections * between them. * - *

To map animated node values to view properties there is a special type of a node: - * AnimatedProps. It is created by AnimatedImplementation whenever you render Animated.View and - * stores a mapping from the view properties to the corresponding animated values (so it's actually + *

+ * To map animated node values to view properties there is a special type of a + * node: + * AnimatedProps. It is created by AnimatedImplementation whenever you render + * Animated.View and + * stores a mapping from the view properties to the corresponding animated + * values (so it's actually * also a node with connections to the value nodes). * - *

Last "special" elements of the graph are "animation drivers". Those are objects (represented - * as a graph nodes too) that based on some criteria updates attached values every frame (we have - * few types of those, e.g., spring, timing, decay). Animation objects can be "started" and - * "stopped". Those are like "pulse generators" for the rest of the nodes graph. Those pulses then - * propagate along the graph to the children nodes up to the special node type: AnimatedProps which + *

+ * Last "special" elements of the graph are "animation drivers". Those are + * objects (represented + * as a graph nodes too) that based on some criteria updates attached values + * every frame (we have + * few types of those, e.g., spring, timing, decay). Animation objects can be + * "started" and + * "stopped". Those are like "pulse generators" for the rest of the nodes graph. + * Those pulses then + * propagate along the graph to the children nodes up to the special node type: + * AnimatedProps which * then can be used to calculate property update map for a view. * - *

This class acts as a proxy between the "native" API that can be called from JS and the main - * class that coordinates all the action: {@link NativeAnimatedNodesManager}. Since all the methods - * from {@link NativeAnimatedNodesManager} need to be called from the UI thread, we we create a - * queue of animated graph operations that is then enqueued to be executed in the UI Thread at the - * end of the batch of JS->native calls (similarly to how it's handled in {@link UIManagerModule}). - * This isolates us from the problems that may be caused by concurrent updates of animated graph + *

+ * This class acts as a proxy between the "native" API that can be called from + * JS and the main + * class that coordinates all the action: {@link NativeAnimatedNodesManager}. + * Since all the methods + * from {@link NativeAnimatedNodesManager} need to be called from the UI thread, + * we we create a + * queue of animated graph operations that is then enqueued to be executed in + * the UI Thread at the + * end of the batch of JS->native calls (similarly to how it's handled in + * {@link UIManagerModule}). + * This isolates us from the problems that may be caused by concurrent updates + * of animated graph * while UI thread is "executing" the animation loop. */ @ReactModule(name = NativeAnimatedModuleSpec.NAME) @@ -153,7 +184,8 @@ public long getBatchNumber() { private class ConcurrentOperationQueue { private final Queue mQueue = new ConcurrentLinkedQueue<>(); - @Nullable private UIThreadOperation mPeekedOperation = null; + @Nullable + private UIThreadOperation mPeekedOperation = null; @AnyThread boolean isEmpty() { @@ -184,7 +216,8 @@ void executeBatch(long maxBatchNumber, NativeAnimatedNodesManager nodesManager) List operations = new ArrayList<>(); while (true) { - // Due to a race condition, we manually "carry-over" a polled item from previous batch + // Due to a race condition, we manually "carry-over" a polled item from previous + // batch // instead of peeking the queue itself for consistency. // TODO(T112522554): Clean up the queue access if (mPeekedOperation != null) { @@ -202,7 +235,8 @@ void executeBatch(long maxBatchNumber, NativeAnimatedNodesManager nodesManager) } if (polledOperation.getBatchNumber() > maxBatchNumber) { - // Because the operation is already retrieved from the queue, there's no way of placing it + // Because the operation is already retrieved from the queue, there's no way of + // placing it // back as the head element, so we remember it manually here mPeekedOperation = polledOperation; break; @@ -214,11 +248,14 @@ void executeBatch(long maxBatchNumber, NativeAnimatedNodesManager nodesManager) } } - @NonNull private final GuardedFrameCallback mAnimatedFrameCallback; + @NonNull + private final GuardedFrameCallback mAnimatedFrameCallback; private final ReactChoreographer mReactChoreographer; - @NonNull private final ConcurrentOperationQueue mOperations = new ConcurrentOperationQueue(); - @NonNull private final ConcurrentOperationQueue mPreOperations = new ConcurrentOperationQueue(); + @NonNull + private final ConcurrentOperationQueue mOperations = new ConcurrentOperationQueue(); + @NonNull + private final ConcurrentOperationQueue mPreOperations = new ConcurrentOperationQueue(); private final AtomicReference mNodesManager = new AtomicReference<>(); @@ -237,38 +274,43 @@ public NativeAnimatedModule(ReactApplicationContext reactContext) { super(reactContext); mReactChoreographer = ReactChoreographer.getInstance(); - mAnimatedFrameCallback = - new GuardedFrameCallback(reactContext) { - @Override - protected void doFrameGuarded(final long frameTimeNanos) { - try { - mEnqueuedAnimationOnFrame = false; - NativeAnimatedNodesManager nodesManager = getNodesManager(); - if (nodesManager != null && nodesManager.hasActiveAnimations()) { - nodesManager.runUpdates(frameTimeNanos); - } - // This is very unlikely to ever be hit. - if (nodesManager == null || mReactChoreographer == null) { - return; - } + mAnimatedFrameCallback = new GuardedFrameCallback(reactContext) { + @Override + protected void doFrameGuarded(final long frameTimeNanos) { + try { + mEnqueuedAnimationOnFrame = false; + NativeAnimatedNodesManager nodesManager = getNodesManager(); + if (nodesManager != null && nodesManager.hasActiveAnimations()) { + nodesManager.runUpdates(frameTimeNanos); + } + // This is very unlikely to ever be hit. + if (nodesManager == null || mReactChoreographer == null) { + return; + } - if (!ReactNativeFeatureFlags.lazyAnimationCallbacks() - || nodesManager.hasActiveAnimations()) { - enqueueFrameCallback(); - } - } catch (Exception ex) { - throw new RuntimeException(ex); - } + if (!ReactNativeFeatureFlags.lazyAnimationCallbacks() + || nodesManager.hasActiveAnimations()) { + enqueueFrameCallback(); } - }; + } catch (Exception ex) { + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new RuntimeException(ex); + } + } + }; } /** - * This method is used to notify the JS side that the user has stopped scrolling. With natively - * driven animation, we might have to force a resync between the Shadow Tree and the Native Tree. - * This is because with natively driven animation, the Shadow Tree is bypassed and it can have - * stale information on the layout of the native views. This method takes care of verifying if - * there are some views listening to the native driven animation and it triggers the resynch. + * This method is used to notify the JS side that the user has stopped + * scrolling. With natively + * driven animation, we might have to force a resync between the Shadow Tree and + * the Native Tree. + * This is because with natively driven animation, the Shadow Tree is bypassed + * and it can have + * stale information on the layout of the native views. This method takes care + * of verifying if + * there are some views listening to the native driven animation and it triggers + * the resynch. * * @param viewTag The tag of the scroll view that has stopped scrolling */ @@ -356,8 +398,10 @@ public void didDispatchMountItems(UIManager uiManager) { // TODO T71377544: delete this when the JS method is confirmed safe if (!mBatchingControlledByJS) { // The problem we're trying to solve here: we could be in the middle of queueing - // a batch of related animation operations when Fabric flushes a batch of MountItems. - // It's visually bad if we execute half of the animation ops and then wait another frame + // a batch of related animation operations when Fabric flushes a batch of + // MountItems. + // It's visually bad if we execute half of the animation ops and then wait + // another frame // (or more) to execute the rest. // See mFrameNumber. If the dispatchedFrameNumber drifts too far - that // is, if no MountItems are scheduled for a while, which can happen if a tree @@ -388,21 +432,19 @@ public void willDispatchViewUpdates(final UIManager uiManager) { final long frameNo = mCurrentBatchNumber++; - UIBlock preOperationsUIBlock = - new UIBlock() { - @Override - public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { - mPreOperations.executeBatch(frameNo, getNodesManager()); - } - }; + UIBlock preOperationsUIBlock = new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + mPreOperations.executeBatch(frameNo, getNodesManager()); + } + }; - UIBlock operationsUIBlock = - new UIBlock() { - @Override - public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { - mOperations.executeBatch(frameNo, getNodesManager()); - } - }; + UIBlock operationsUIBlock = new UIBlock() { + @Override + public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { + mOperations.executeBatch(frameNo, getNodesManager()); + } + }; assert (uiManager instanceof UIManagerModule); UIManagerModule uiManagerModule = (UIManagerModule) uiManager; @@ -417,12 +459,14 @@ public void onHostPause() { @Override public void onHostDestroy() { - // Is it possible for onHostDestroy to be called without a corresponding onHostPause? + // Is it possible for onHostDestroy to be called without a corresponding + // onHostPause? clearFrameCallback(); } /** - * Returns a {@link NativeAnimatedNodesManager}, either the existing instance or a new one. Will + * Returns a {@link NativeAnimatedNodesManager}, either the existing instance or + * a new one. Will * return null if and only if the {@link ReactApplicationContext} is also null. * * @return {@link NativeAnimatedNodesManager} @@ -462,8 +506,10 @@ public void setNodesManager(NativeAnimatedNodesManager nodesManager) { } /** - * Given a viewTag, detect if we're running in Fabric or non-Fabric and attach an event listener - * to the correct UIManager, if necessary. This is expected to only be called from the native + * Given a viewTag, detect if we're running in Fabric or non-Fabric and attach + * an event listener + * to the correct UIManager, if necessary. This is expected to only be called + * from the native * module thread, and not concurrently. * * @param viewTag @@ -487,7 +533,8 @@ private void initializeLifecycleEventListenersForViewTag(final int viewTag) { + " NativeAnimatedNodesManager")); } - // Subscribe to UIManager (Fabric or non-Fabric) lifecycle events if we haven't yet + // Subscribe to UIManager (Fabric or non-Fabric) lifecycle events if we haven't + // yet if (mUIManagerType == UIManagerType.FABRIC ? mInitializedForFabric : mInitializedForNonFabric) { return; } @@ -508,14 +555,17 @@ private void initializeLifecycleEventListenersForViewTag(final int viewTag) { } /** - * Given a viewTag and the knowledge that a "disconnect" or "stop"-type imperative command is - * being executed, decrement the number of inflight animations and possibly switch UIManager + * Given a viewTag and the knowledge that a "disconnect" or "stop"-type + * imperative command is + * being executed, decrement the number of inflight animations and possibly + * switch UIManager * modes. * * @param viewTag */ private void decrementInFlightAnimationsForViewTag(final int viewTag) { - @UIManagerType int animationManagerType = ViewUtil.getUIManagerType(viewTag); + @UIManagerType + int animationManagerType = ViewUtil.getUIManagerType(viewTag); if (animationManagerType == UIManagerType.FABRIC) { mNumFabricAnimations--; } else { @@ -608,20 +658,18 @@ public void startListeningToAnimatedNodeValue(final double tagDouble) { FLog.d(NAME, "queue startListeningToAnimatedNodeValue: " + tag); } - final AnimatedNodeValueListener listener = - new AnimatedNodeValueListener() { - public void onValueUpdate(double value) { - WritableMap onAnimatedValueData = Arguments.createMap(); - onAnimatedValueData.putInt("tag", tag); - onAnimatedValueData.putDouble("value", value); - - ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); - if (reactApplicationContext != null) { - reactApplicationContext.emitDeviceEvent("onAnimatedValueUpdate", onAnimatedValueData); - } - } - }; + final AnimatedNodeValueListener listener = new AnimatedNodeValueListener() { + public void onValueUpdate(double value) { + WritableMap onAnimatedValueData = Arguments.createMap(); + onAnimatedValueData.putInt("tag", tag); + onAnimatedValueData.putDouble("value", value); + + ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); + if (reactApplicationContext != null) { + reactApplicationContext.emitDeviceEvent("onAnimatedValueUpdate", onAnimatedValueData); + } + } + }; addOperation( new UIThreadOperation() { @@ -1035,15 +1083,22 @@ public void invalidate() { } /** - * This is a currently-experimental method that allows JS to queue and immediately execute many - * instructions at once. Since we make 1 JNI/JSI call instead of N, this should significantly + * This is a currently-experimental method that allows JS to queue and + * immediately execute many + * instructions at once. Since we make 1 JNI/JSI call instead of N, this should + * significantly * improve performance. * - *

The arguments operate as a byte buffer. All integer command IDs and any args are packed into + *

+ * The arguments operate as a byte buffer. All integer command IDs and any args + * are packed into * opsAndArgs. * - *

For the getValue callback: since this is batched, we accumulate a list of all requested - * values, in order, and call the callback once at the end (if present) with the list of requested + *

+ * For the getValue callback: since this is batched, we accumulate a list of all + * requested + * values, in order, and call the callback once at the end (if present) with the + * list of requested * values. */ @Override @@ -1055,10 +1110,12 @@ public void queueAndExecuteBatchedOperations(final ReadableArray opsAndArgs) { } // This block of code is unfortunate and should be refactored - we just want to - // extract the ViewTags in the ReadableArray to mark animations on views as being enabled. - // We only do this for initializing animations on views - disabling animations on views + // extract the ViewTags in the ReadableArray to mark animations on views as + // being enabled. + // We only do this for initializing animations on views - disabling animations + // on views // happens later, when the disconnect/stop operations are actually executed. - for (int i = 0; i < opBufferSize; ) { + for (int i = 0; i < opBufferSize;) { BatchExecutionOpCodes command = BatchExecutionOpCodes.fromId(opsAndArgs.getInt(i++)); switch (command) { case OP_CODE_GET_VALUE: @@ -1109,11 +1166,10 @@ public void queueAndExecuteBatchedOperations(final ReadableArray opsAndArgs) { new UIThreadOperation() { @Override public void execute(NativeAnimatedNodesManager animatedNodesManager) { - ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); + ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); int viewTag = -1; - for (int i = 0; i < opBufferSize; ) { + for (int i = 0; i < opBufferSize;) { BatchExecutionOpCodes command = BatchExecutionOpCodes.fromId(opsAndArgs.getInt(i++)); switch (command) { @@ -1130,21 +1186,19 @@ public void execute(NativeAnimatedNodesManager animatedNodesManager) { break; case OP_START_LISTENING_TO_ANIMATED_NODE_VALUE: final int tag = opsAndArgs.getInt(i++); - final AnimatedNodeValueListener listener = - new AnimatedNodeValueListener() { - public void onValueUpdate(double value) { - WritableMap onAnimatedValueData = Arguments.createMap(); - onAnimatedValueData.putInt("tag", tag); - onAnimatedValueData.putDouble("value", value); - - ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); - if (reactApplicationContext != null) { - reactApplicationContext.emitDeviceEvent( - "onAnimatedValueUpdate", onAnimatedValueData); - } - } - }; + final AnimatedNodeValueListener listener = new AnimatedNodeValueListener() { + public void onValueUpdate(double value) { + WritableMap onAnimatedValueData = Arguments.createMap(); + onAnimatedValueData.putInt("tag", tag); + onAnimatedValueData.putDouble("value", value); + + ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); + if (reactApplicationContext != null) { + reactApplicationContext.emitDeviceEvent( + "onAnimatedValueUpdate", onAnimatedValueData); + } + } + }; animatedNodesManager.startListeningToAnimatedNodeValue(tag, listener); break; case OP_STOP_LISTENING_TO_ANIMATED_NODE_VALUE: diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java index b3f9c642f465..b0f45ab01d4e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java @@ -39,17 +39,26 @@ import java.util.Set; /** - * This is the main class that coordinates how native animated JS implementation drives UI changes. + * This is the main class that coordinates how native animated JS implementation + * drives UI changes. * - *

It implements a management interface for animated nodes graph as well as implements a graph + *

+ * It implements a management interface for animated nodes graph as well as + * implements a graph * traversal algorithm that is run for each animation frame. * - *

For each animation frame we visit animated nodes that might've been updated as well as their - * children that may use parent's values to update themselves. At the end of the traversal algorithm - * we expect to reach a special type of the node: PropsAnimatedNode that is then responsible for - * calculating property map which can be sent to native view hierarchy to update the view. + *

+ * For each animation frame we visit animated nodes that might've been updated + * as well as their + * children that may use parent's values to update themselves. At the end of the + * traversal algorithm + * we expect to reach a special type of the node: PropsAnimatedNode that is then + * responsible for + * calculating property map which can be sent to native view hierarchy to update + * the view. * - *

IMPORTANT: This class should be accessed only from the UI Thread + *

+ * IMPORTANT: This class should be accessed only from the UI Thread */ public class NativeAnimatedNodesManager implements EventDispatcherListener { @@ -63,7 +72,8 @@ public class NativeAnimatedNodesManager implements EventDispatcherListener { private final List mEventDrivers = new ArrayList<>(); private final ReactApplicationContext mReactApplicationContext; private int mAnimatedGraphBFSColor = 0; - // Used to avoid allocating a new array on every frame in `runUpdates` and `onEventDispatch`. + // Used to avoid allocating a new array on every frame in `runUpdates` and + // `onEventDispatch`. private final List mRunUpdateNodeList = new LinkedList<>(); private boolean mEventListenerInitializedForFabric = false; @@ -76,8 +86,10 @@ public NativeAnimatedNodesManager(ReactApplicationContext reactApplicationContex } /** - * Initialize event listeners for Fabric UIManager or non-Fabric UIManager, exactly once. Once - * Fabric is the only UIManager, this logic can be simplified. This is expected to only be called + * Initialize event listeners for Fabric UIManager or non-Fabric UIManager, + * exactly once. Once + * Fabric is the only UIManager, this logic can be simplified. This is expected + * to only be called * from the native module thread. * * @param uiManagerType @@ -113,8 +125,9 @@ public boolean hasActiveAnimations() { @UiThread public void createAnimatedNode(int tag, ReadableMap config) { if (mAnimatedNodes.get(tag) != null) { - throw new JSApplicationIllegalArgumentException( - "createAnimatedNode: Animated node [" + tag + "] already exists"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "createAnimatedNode: Animated node [" + tag + "] already exists"); } String type = config.getString("type"); final AnimatedNode node; @@ -147,7 +160,10 @@ public void createAnimatedNode(int tag, ReadableMap config) { } else if ("object".equals(type)) { node = new ObjectAnimatedNode(config, this); } else { - throw new JSApplicationIllegalArgumentException("Unsupported node type: " + type); + return; + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException("Unsupported node type: " + + // type); } node.tag = tag; mAnimatedNodes.put(tag, node); @@ -158,8 +174,9 @@ public void createAnimatedNode(int tag, ReadableMap config) { public void updateAnimatedNodeConfig(int tag, ReadableMap config) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null) { - throw new JSApplicationIllegalArgumentException( - "updateAnimatedNode: Animated node [" + tag + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "updateAnimatedNode: Animated node [" + tag + "] does not exist"); } if (node instanceof AnimatedNodeWithUpdateableConfig) { @@ -179,10 +196,11 @@ public void dropAnimatedNode(int tag) { public void startListeningToAnimatedNodeValue(int tag, AnimatedNodeValueListener listener) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null || !(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "startListeningToAnimatedNodeValue: Animated node [" - + tag - + "] does not exist, or is not a 'value' node"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "startListeningToAnimatedNodeValue: Animated node [" + // + tag + // + "] does not exist, or is not a 'value' node"); } ((ValueAnimatedNode) node).setValueListener(listener); } @@ -191,10 +209,11 @@ public void startListeningToAnimatedNodeValue(int tag, AnimatedNodeValueListener public void stopListeningToAnimatedNodeValue(int tag) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null || !(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "startListeningToAnimatedNodeValue: Animated node [" - + tag - + "] does not exist, or is not a 'value' node"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "startListeningToAnimatedNodeValue: Animated node [" + // + tag + // + "] does not exist, or is not a 'value' node"); } ((ValueAnimatedNode) node).setValueListener(null); } @@ -203,10 +222,11 @@ public void stopListeningToAnimatedNodeValue(int tag) { public void setAnimatedNodeValue(int tag, double value) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null || !(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "setAnimatedNodeValue: Animated node [" - + tag - + "] does not exist, or is not a 'value' node"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "setAnimatedNodeValue: Animated node [" + // + tag + // + "] does not exist, or is not a 'value' node"); } stopAnimationsForNode(node); ((ValueAnimatedNode) node).nodeValue = value; @@ -217,10 +237,11 @@ public void setAnimatedNodeValue(int tag, double value) { public void setAnimatedNodeOffset(int tag, double offset) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null || !(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "setAnimatedNodeOffset: Animated node [" - + tag - + "] does not exist, or is not a 'value' node"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "setAnimatedNodeOffset: Animated node [" + // + tag + // + "] does not exist, or is not a 'value' node"); } ((ValueAnimatedNode) node).offset = offset; mUpdatedNodes.put(tag, node); @@ -230,10 +251,11 @@ public void setAnimatedNodeOffset(int tag, double offset) { public void flattenAnimatedNodeOffset(int tag) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null || !(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "flattenAnimatedNodeOffset: Animated node [" - + tag - + "] does not exist, or is not a 'value' node"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "flattenAnimatedNodeOffset: Animated node [" + // + tag + // + "] does not exist, or is not a 'value' node"); } ((ValueAnimatedNode) node).flattenOffset(); } @@ -242,10 +264,11 @@ public void flattenAnimatedNodeOffset(int tag) { public void extractAnimatedNodeOffset(int tag) { AnimatedNode node = mAnimatedNodes.get(tag); if (node == null || !(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "extractAnimatedNodeOffset: Animated node [" - + tag - + "] does not exist, or is not a 'value' node"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "extractAnimatedNodeOffset: Animated node [" + // + tag + // + "] does not exist, or is not a 'value' node"); } ((ValueAnimatedNode) node).extractOffset(); } @@ -255,20 +278,24 @@ public void startAnimatingNode( int animationId, int animatedNodeTag, ReadableMap animationConfig, Callback endCallback) { AnimatedNode node = mAnimatedNodes.get(animatedNodeTag); if (node == null) { - throw new JSApplicationIllegalArgumentException( - "startAnimatingNode: Animated node [" + animatedNodeTag + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "startAnimatingNode: Animated node [" + animatedNodeTag + "] does not + // exist"); } if (!(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "startAnimatingNode: Animated node [" - + animatedNodeTag - + "] should be of type " - + ValueAnimatedNode.class.getName()); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "startAnimatingNode: Animated node [" + // + animatedNodeTag + // + "] should be of type " + // + ValueAnimatedNode.class.getName()); } final AnimationDriver existingDriver = mActiveAnimations.get(animationId); if (existingDriver != null) { - // animation with the given ID is already running, we need to update its configuration instead + // animation with the given ID is already running, we need to update its + // configuration instead // of spawning a new one existingDriver.resetConfig(animationConfig); return; @@ -283,8 +310,11 @@ public void startAnimatingNode( } else if ("decay".equals(type)) { animation = new DecayAnimation(animationConfig); } else { - throw new JSApplicationIllegalArgumentException( - "startAnimatingNode: Unsupported animation type [" + animatedNodeTag + "]: " + type); + return; + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "startAnimatingNode: Unsupported animation type [" + animatedNodeTag + "]: " + // + type); } animation.id = animationId; animation.endCallback = endCallback; @@ -294,9 +324,12 @@ public void startAnimatingNode( @UiThread private void stopAnimationsForNode(AnimatedNode animatedNode) { - // in most of the cases there should never be more than a few active animations running at the - // same time. Therefore it does not make much sense to create an animationId -> animation - // object map that would require additional memory just to support the use-case of stopping + // in most of the cases there should never be more than a few active animations + // running at the + // same time. Therefore it does not make much sense to create an animationId -> + // animation + // object map that would require additional memory just to support the use-case + // of stopping // an animation WritableArray events = null; for (int i = 0; i < mActiveAnimations.size(); i++) { @@ -309,8 +342,10 @@ private void stopAnimationsForNode(AnimatedNode animatedNode) { endCallbackResponse.putDouble("value", animation.animatedValue.nodeValue); animation.endCallback.invoke(endCallbackResponse); } else if (mReactApplicationContext != null) { - // If no callback is passed in, this /may/ be an animation set up by the single-op - // instruction from JS, meaning that no jsi::functions are passed into native and + // If no callback is passed in, this /may/ be an animation set up by the + // single-op + // instruction from JS, meaning that no jsi::functions are passed into native + // and // we communicate via RCTDeviceEventEmitter instead of callbacks. WritableMap params = Arguments.createMap(); params.putInt("animationId", animation.id); @@ -332,9 +367,12 @@ private void stopAnimationsForNode(AnimatedNode animatedNode) { @UiThread public void stopAnimation(int animationId) { - // in most of the cases there should never be more than a few active animations running at the - // same time. Therefore it does not make much sense to create an animationId -> animation - // object map that would require additional memory just to support the use-case of stopping + // in most of the cases there should never be more than a few active animations + // running at the + // same time. Therefore it does not make much sense to create an animationId -> + // animation + // object map that would require additional memory just to support the use-case + // of stopping // an animation WritableArray events = null; for (int i = 0; i < mActiveAnimations.size(); i++) { @@ -347,8 +385,10 @@ public void stopAnimation(int animationId) { endCallbackResponse.putDouble("value", animation.animatedValue.nodeValue); animation.endCallback.invoke(endCallbackResponse); } else if (mReactApplicationContext != null) { - // If no callback is passed in, this /may/ be an animation set up by the single-op - // instruction from JS, meaning that no jsi::functions are passed into native and + // If no callback is passed in, this /may/ be an animation set up by the + // single-op + // instruction from JS, meaning that no jsi::functions are passed into native + // and // we communicate via RCTDeviceEventEmitter instead of callbacks. WritableMap params = Arguments.createMap(); params.putInt("animationId", animation.id); @@ -366,9 +406,12 @@ public void stopAnimation(int animationId) { if (events != null) { mReactApplicationContext.emitDeviceEvent("onNativeAnimatedModuleAnimationFinished", events); } - // Do not throw an error in the case animation could not be found. We only keep "active" - // animations in the registry and there is a chance that Animated.js will enqueue a - // stopAnimation call after the animation has ended or the call will reach native thread only + // Do not throw an error in the case animation could not be found. We only keep + // "active" + // animations in the registry and there is a chance that Animated.js will + // enqueue a + // stopAnimation call after the animation has ended or the call will reach + // native thread only // when the animation is already over. } @@ -376,17 +419,19 @@ public void stopAnimation(int animationId) { public void connectAnimatedNodes(int parentNodeTag, int childNodeTag) { AnimatedNode parentNode = mAnimatedNodes.get(parentNodeTag); if (parentNode == null) { - throw new JSApplicationIllegalArgumentException( - "connectAnimatedNodes: Animated node with tag (parent) [" - + parentNodeTag - + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "connectAnimatedNodes: Animated node with tag (parent) [" + // + parentNodeTag + // + "] does not exist"); } AnimatedNode childNode = mAnimatedNodes.get(childNodeTag); if (childNode == null) { - throw new JSApplicationIllegalArgumentException( - "connectAnimatedNodes: Animated node with tag (child) [" - + childNodeTag - + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "connectAnimatedNodes: Animated node with tag (child) [" + // + childNodeTag + // + "] does not exist"); } parentNode.addChild(childNode); mUpdatedNodes.put(childNodeTag, childNode); @@ -395,17 +440,19 @@ public void connectAnimatedNodes(int parentNodeTag, int childNodeTag) { public void disconnectAnimatedNodes(int parentNodeTag, int childNodeTag) { AnimatedNode parentNode = mAnimatedNodes.get(parentNodeTag); if (parentNode == null) { - throw new JSApplicationIllegalArgumentException( - "disconnectAnimatedNodes: Animated node with tag (parent) [" - + parentNodeTag - + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "disconnectAnimatedNodes: Animated node with tag (parent) [" + // + parentNodeTag + // + "] does not exist"); } AnimatedNode childNode = mAnimatedNodes.get(childNodeTag); if (childNode == null) { - throw new JSApplicationIllegalArgumentException( - "disconnectAnimatedNodes: Animated node with tag (child) [" - + childNodeTag - + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "disconnectAnimatedNodes: Animated node with tag (child) [" + // + childNodeTag + // + "] does not exist"); } parentNode.removeChild(childNode); mUpdatedNodes.put(childNodeTag, childNode); @@ -415,28 +462,30 @@ public void disconnectAnimatedNodes(int parentNodeTag, int childNodeTag) { public void connectAnimatedNodeToView(int animatedNodeTag, int viewTag) { AnimatedNode node = mAnimatedNodes.get(animatedNodeTag); if (node == null) { - throw new JSApplicationIllegalArgumentException( - "connectAnimatedNodeToView: Animated node with tag [" - + animatedNodeTag - + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "connectAnimatedNodeToView: Animated node with tag [" + // + animatedNodeTag + // + "] does not exist"); } if (!(node instanceof PropsAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "connectAnimatedNodeToView: Animated node connected to view [" - + viewTag - + "] should be of type " - + PropsAnimatedNode.class.getName()); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "connectAnimatedNodeToView: Animated node connected to view [" + // + viewTag + // + "] should be of type " + // + PropsAnimatedNode.class.getName()); } if (mReactApplicationContext == null) { - throw new IllegalStateException( - "connectAnimatedNodeToView: Animated node could not be connected, no" - + " ReactApplicationContext: " - + viewTag); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new IllegalStateException( + // "connectAnimatedNodeToView: Animated node could not be connected, no" + // + " ReactApplicationContext: " + // + viewTag); } @Nullable - UIManager uiManager = - UIManagerHelper.getUIManagerForReactTag(mReactApplicationContext, viewTag); + UIManager uiManager = UIManagerHelper.getUIManagerForReactTag(mReactApplicationContext, viewTag); if (uiManager == null) { ReactSoftExceptionLogger.logSoftException( TAG, @@ -456,17 +505,19 @@ public void connectAnimatedNodeToView(int animatedNodeTag, int viewTag) { public void disconnectAnimatedNodeFromView(int animatedNodeTag, int viewTag) { AnimatedNode node = mAnimatedNodes.get(animatedNodeTag); if (node == null) { - throw new JSApplicationIllegalArgumentException( - "disconnectAnimatedNodeFromView: Animated node with tag [" - + animatedNodeTag - + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "disconnectAnimatedNodeFromView: Animated node with tag [" + // + animatedNodeTag + // + "] does not exist"); } if (!(node instanceof PropsAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "disconnectAnimatedNodeFromView: Animated node connected to view [" - + viewTag - + "] should be of type " - + PropsAnimatedNode.class.getName()); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "disconnectAnimatedNodeFromView: Animated node connected to view [" + // + viewTag + // + "] should be of type " + // + PropsAnimatedNode.class.getName()); } PropsAnimatedNode propsAnimatedNode = (PropsAnimatedNode) node; propsAnimatedNode.disconnectFromView(viewTag); @@ -485,10 +536,12 @@ public void getValue(int tag, Callback callback) { return; } - // If there's no callback, that means that JS is using the single-operation mode, and not + // If there's no callback, that means that JS is using the single-operation + // mode, and not // passing any callbacks into Java. // See NativeAnimatedHelper.js for details. - // Instead, we use RCTDeviceEventEmitter to pass data back to JS and emulate callbacks. + // Instead, we use RCTDeviceEventEmitter to pass data back to JS and emulate + // callbacks. if (mReactApplicationContext == null) { return; } @@ -509,9 +562,10 @@ public void restoreDefaultValues(int animatedNodeTag) { return; } if (!(node instanceof PropsAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "Animated node connected to view [?] should be of type " - + PropsAnimatedNode.class.getName()); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "Animated node connected to view [?] should be of type " + // + PropsAnimatedNode.class.getName()); } PropsAnimatedNode propsAnimatedNode = (PropsAnimatedNode) node; propsAnimatedNode.restoreDefaultValues(); @@ -523,17 +577,20 @@ public void addAnimatedEventToView( int nodeTag = eventMapping.getInt("animatedValueTag"); AnimatedNode node = mAnimatedNodes.get(nodeTag); if (node == null) { - throw new JSApplicationIllegalArgumentException( - "addAnimatedEventToView: Animated node with tag [" + nodeTag + "] does not exist"); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "addAnimatedEventToView: Animated node with tag [" + nodeTag + "] does not + // exist"); } if (!(node instanceof ValueAnimatedNode)) { - throw new JSApplicationIllegalArgumentException( - "addAnimatedEventToView: Animated node on view [" - + viewTag - + "] connected to event handler (" - + eventHandlerName - + ") should be of type " - + ValueAnimatedNode.class.getName()); + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw new JSApplicationIllegalArgumentException( + // "addAnimatedEventToView: Animated node on view [" + // + viewTag + // + "] connected to event handler (" + // + eventHandlerName + // + ") should be of type " + // + ValueAnimatedNode.class.getName()); } ReadableArray path = eventMapping.getArray("nativeEventPath"); @@ -544,12 +601,12 @@ public void addAnimatedEventToView( String eventName = normalizeEventName(eventHandlerName); - EventAnimationDriver eventDriver = - new EventAnimationDriver(eventName, viewTag, pathList, (ValueAnimatedNode) node); + EventAnimationDriver eventDriver = new EventAnimationDriver(eventName, viewTag, pathList, (ValueAnimatedNode) node); mEventDrivers.add(eventDriver); if (eventName.equals("topScroll")) { - // Handle the custom topScrollEnded event sent by the ScrollViews when the user stops dragging + // Handle the custom topScrollEnded event sent by the ScrollViews when the user + // stops dragging addAnimatedEventToView(viewTag, "topScrollEnded", eventMapping); } } @@ -571,14 +628,16 @@ public void removeAnimatedEventFromView( } if (eventName.equals("topScroll")) { - // Handle the custom topScrollEnded event sent by the ScrollViews when the user stops dragging + // Handle the custom topScrollEnded event sent by the ScrollViews when the user + // stops dragging removeAnimatedEventFromView(viewTag, "topScrollEnded", animatedValueTag); } } @Override public void onEventDispatch(final Event event) { - // Events can be dispatched from any thread so we have to make sure handleEvent is run from the + // Events can be dispatched from any thread so we have to make sure handleEvent + // is run from the // UI thread. if (UiThreadUtil.isOnUiThread()) { handleEvent(event); @@ -617,15 +676,23 @@ private void handleEvent(Event event) { } /** - * Animation loop performs two BFSes over the graph of animated nodes. We use incremented {@code - * mAnimatedGraphBFSColor} to mark nodes as visited in each of the BFSes which saves additional + * Animation loop performs two BFSes over the graph of animated nodes. We use + * incremented {@code + * mAnimatedGraphBFSColor} to mark nodes as visited in each of the BFSes which + * saves additional * loops for clearing "visited" states. * - *

First BFS starts with nodes that are in {@code mUpdatedNodes} (that is, their value have - * been modified from JS in the last batch of JS operations) or directly attached to an active - * animation (hence linked to objects from {@code mActiveAnimations}). In that step we calculate - * an attribute {@code activeIncomingNodes}. The second BFS runs in topological order over the - * sub-graph of *active* nodes. This is done by adding node to the BFS queue only if all its + *

+ * First BFS starts with nodes that are in {@code mUpdatedNodes} (that is, their + * value have + * been modified from JS in the last batch of JS operations) or directly + * attached to an active + * animation (hence linked to objects from {@code mActiveAnimations}). In that + * step we calculate + * an attribute {@code activeIncomingNodes}. The second BFS runs in topological + * order over the + * sub-graph of *active* nodes. This is done by adding node to the BFS queue + * only if all its * "predecessors" have already been visited. */ @UiThread @@ -654,7 +721,8 @@ public void runUpdates(long frameTimeNanos) { updateNodes(mRunUpdateNodeList); mRunUpdateNodeList.clear(); - // Cleanup finished animations. Iterate over the array of animations and override ones that has + // Cleanup finished animations. Iterate over the array of animations and + // override ones that has // finished, then resize `mActiveAnimations`. if (hasFinishedAnimations) { WritableArray events = null; @@ -667,8 +735,10 @@ public void runUpdates(long frameTimeNanos) { endCallbackResponse.putDouble("value", animation.animatedValue.nodeValue); animation.endCallback.invoke(endCallbackResponse); } else if (mReactApplicationContext != null) { - // If no callback is passed in, this /may/ be an animation set up by the single-op - // instruction from JS, meaning that no jsi::functions are passed into native and + // If no callback is passed in, this /may/ be an animation set up by the + // single-op + // instruction from JS, meaning that no jsi::functions are passed into native + // and // we communicate via RCTDeviceEventEmitter instead of callbacks. WritableMap params = Arguments.createMap(); params.putInt("animationId", animation.id); @@ -716,13 +786,16 @@ private void updateNodes(List nodes) { int updatedNodesCount = 0; // STEP 1. - // BFS over graph of nodes. Update `mIncomingNodes` attribute for each node during that BFS. - // Store number of visited nodes in `activeNodesCount`. We "execute" active animations as a part + // BFS over graph of nodes. Update `mIncomingNodes` attribute for each node + // during that BFS. + // Store number of visited nodes in `activeNodesCount`. We "execute" active + // animations as a part // of this step. mAnimatedGraphBFSColor++; /* use new color */ if (mAnimatedGraphBFSColor == AnimatedNode.INITIAL_BFS_COLOR) { - // value "0" is used as an initial color for a new node, using it in BFS may cause some nodes + // value "0" is used as an initial color for a new node, using it in BFS may + // cause some nodes // to be skipped. mAnimatedGraphBFSColor++; } @@ -752,11 +825,16 @@ private void updateNodes(List nodes) { } // STEP 2 - // BFS over the graph of active nodes in topological order -> visit node only when all its - // "predecessors" in the graph have already been visited. It is important to visit nodes in that - // order as they may often use values of their predecessors in order to calculate "next state" - // of their own. We start by determining the starting set of nodes by looking for nodes with - // `activeIncomingNodes = 0` (those can only be the ones that we start BFS in the previous + // BFS over the graph of active nodes in topological order -> visit node only + // when all its + // "predecessors" in the graph have already been visited. It is important to + // visit nodes in that + // order as they may often use values of their predecessors in order to + // calculate "next state" + // of their own. We start by determining the starting set of nodes by looking + // for nodes with + // `activeIncomingNodes = 0` (those can only be the ones that we start BFS in + // the previous // step). We store number of visited nodes in this step in `updatedNodesCount` mAnimatedGraphBFSColor++; @@ -765,7 +843,8 @@ private void updateNodes(List nodes) { mAnimatedGraphBFSColor++; } - // find nodes with zero "incoming nodes", those can be either nodes from `mUpdatedNodes` or + // find nodes with zero "incoming nodes", those can be either nodes from + // `mUpdatedNodes` or // ones connected to active animations for (AnimatedNode node : nodes) { if (node.activeIncomingNodes == 0 && node.BFSColor != mAnimatedGraphBFSColor) { @@ -786,12 +865,16 @@ private void updateNodes(List nodes) { ((PropsAnimatedNode) nextNode).updateView(); } } catch (JSApplicationCausedNativeException e) { - // An exception is thrown if the view hasn't been created yet. This can happen because - // views are created in batches. If this particular view didn't make it into a batch yet, - // the view won't exist and an exception will be thrown when attempting to start an + // An exception is thrown if the view hasn't been created yet. This can happen + // because + // views are created in batches. If this particular view didn't make it into a + // batch yet, + // the view won't exist and an exception will be thrown when attempting to start + // an // animation on it. // - // Eat the exception rather than crashing. The impact is that we may drop one or more + // Eat the exception rather than crashing. The impact is that we may drop one or + // more // frames of the animation. FLog.e(TAG, "Native animation workaround, frame lost as result of race condition", e); } @@ -814,12 +897,17 @@ private void updateNodes(List nodes) { } } - // Verify that we've visited *all* active nodes. Throw otherwise as this could mean there is a - // cycle in animated node graph, or that the graph is only partially set up. We also take - // advantage of the fact that all active nodes are visited in the step above so that all the + // Verify that we've visited *all* active nodes. Throw otherwise as this could + // mean there is a + // cycle in animated node graph, or that the graph is only partially set up. We + // also take + // advantage of the fact that all active nodes are visited in the step above so + // that all the // nodes properties `activeIncomingNodes` are set to zero. - // In Fabric there can be race conditions between the JS thread setting up or tearing down - // animated nodes, and Fabric executing them on the UI thread, leading to temporary inconsistent + // In Fabric there can be race conditions between the JS thread setting up or + // tearing down + // animated nodes, and Fabric executing them on the UI thread, leading to + // temporary inconsistent // states. if (activeNodesCount != updatedNodesCount) { if (mWarnedAboutGraphTraversal) { @@ -827,7 +915,8 @@ private void updateNodes(List nodes) { } mWarnedAboutGraphTraversal = true; - // Before crashing or logging soft exception, log details about current graph setup + // Before crashing or logging soft exception, log details about current graph + // setup FLog.e(TAG, "Detected animation cycle or disconnected graph. "); for (AnimatedNode node : nodes) { FLog.e(TAG, node.prettyPrintWithChildren()); @@ -835,29 +924,32 @@ private void updateNodes(List nodes) { // If we're running only in non-Fabric, we still throw an exception. // In Fabric, it seems that animations enter an inconsistent state fairly often. - // We detect if the inconsistency is due to a cycle (a fatal error for which we must crash) - // or disconnected regions, indicating a partially-set-up animation graph, which is not + // We detect if the inconsistency is due to a cycle (a fatal error for which we + // must crash) + // or disconnected regions, indicating a partially-set-up animation graph, which + // is not // fatal and can stay a warning. - String reason = - cyclesDetected > 0 ? "cycles (" + cyclesDetected + ")" : "disconnected regions"; - IllegalStateException ex = - new IllegalStateException( - "Looks like animated nodes graph has " - + reason - + ", there are " - + activeNodesCount - + " but toposort visited only " - + updatedNodesCount); + String reason = cyclesDetected > 0 ? "cycles (" + cyclesDetected + ")" : "disconnected regions"; + IllegalStateException ex = new IllegalStateException( + "Looks like animated nodes graph has " + + reason + + ", there are " + + activeNodesCount + + " but toposort visited only " + + updatedNodesCount); if (mEventListenerInitializedForFabric && cyclesDetected == 0) { - // TODO T71377544: investigate these SoftExceptions and see if we can remove entirely + // TODO T71377544: investigate these SoftExceptions and see if we can remove + // entirely // or fix the root cause ReactSoftExceptionLogger.logSoftException(TAG, new ReactNoCrashSoftException(ex)); } else if (mEventListenerInitializedForFabric) { - // TODO T71377544: investigate these SoftExceptions and see if we can remove entirely + // TODO T71377544: investigate these SoftExceptions and see if we can remove + // entirely // or fix the root cause ReactSoftExceptionLogger.logSoftException(TAG, new ReactNoCrashSoftException(ex)); } else { - throw ex; + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw ex; } } else { mWarnedAboutGraphTraversal = false; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt index 9c66900aaf50..cb365d0d8d40 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt @@ -42,8 +42,9 @@ internal class PropsAnimatedNode( public fun connectToView(viewTag: Int, uiManager: UIManager?) { if (connectedViewTag != -1) { - throw JSApplicationIllegalArgumentException( - "Animated node $tag is already attached to a view: $connectedViewTag") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw JSApplicationIllegalArgumentException( + // "Animated node $tag is already attached to a view: $connectedViewTag") } connectedViewTag = viewTag connectedViewUIManager = uiManager @@ -51,10 +52,11 @@ internal class PropsAnimatedNode( public fun disconnectFromView(viewTag: Int) { if (connectedViewTag != viewTag && connectedViewTag != -1) { - throw JSApplicationIllegalArgumentException( - "Attempting to disconnect view that has " + - "not been connected with the given animated node: $viewTag " + - "but is connected to view $connectedViewTag") + // PATCH: COMMENTED OUT EXCEPTION THROWINGs + // throw JSApplicationIllegalArgumentException( + // "Attempting to disconnect view that has " + + // "not been connected with the given animated node: $viewTag " + + // "but is connected to view $connectedViewTag") } connectedViewTag = -1 } @@ -85,7 +87,10 @@ internal class PropsAnimatedNode( } for ((key, value) in propNodeMapping) { val node = nativeAnimatedNodesManager.getNodeById(value) - requireNotNull(node) { "Mapped property node does not exist" } + // requireNotNull(node) { "Mapped property node does not exist" } + if (node == null) { + return + } if (node is StyleAnimatedNode) { node.collectViewUpdates(propMap) } else if (node is ValueAnimatedNode) { @@ -102,8 +107,9 @@ internal class PropsAnimatedNode( } else if (node is ObjectAnimatedNode) { node.collectViewUpdates(key, propMap) } else { - throw IllegalArgumentException( - "Unsupported type of node used in property node ${node.javaClass}") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw IllegalArgumentException( + // "Unsupported type of node used in property node ${node.javaClass}") } } connectedViewUIManager?.synchronouslyUpdateViewOnUIThread(connectedViewTag, propMap) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/StyleAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/StyleAnimatedNode.kt index bc76ca3a99ed..4765aeb0592a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/StyleAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/StyleAnimatedNode.kt @@ -34,7 +34,10 @@ internal class StyleAnimatedNode( public fun collectViewUpdates(propsMap: JavaOnlyMap) { for ((key, value) in propMapping) { val node = nativeAnimatedNodesManager.getNodeById(value) - requireNotNull(node) { "Mapped style node does not exist" } + // requireNotNull(node) { "Mapped style node does not exist" } + if (node == null) { + return + } if (node is TransformAnimatedNode) { node.collectViewUpdates(propsMap) } else if (node is ValueAnimatedNode) { @@ -51,8 +54,9 @@ internal class StyleAnimatedNode( } else if (node is ObjectAnimatedNode) { node.collectViewUpdates(key, propsMap) } else { - throw IllegalArgumentException( - "Unsupported type of node used in property node ${node.javaClass}") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw IllegalArgumentException( + // "Unsupported type of node used in property node ${node.javaClass}") } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/TransformAnimatedNode.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/TransformAnimatedNode.kt index 2f76add6b5b3..22683cb9f73b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/TransformAnimatedNode.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/TransformAnimatedNode.kt @@ -53,14 +53,18 @@ internal class TransformAnimatedNode( val nodeTag = transformConfig.nodeTag val node = nativeAnimatedNodesManager.getNodeById(nodeTag) if (node == null) { - throw IllegalArgumentException("Mapped style node does not exist") + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw IllegalArgumentException("Mapped style node does not exist") + return } else if (node is ValueAnimatedNode) { node.getValue() } else { - throw IllegalArgumentException( - "Unsupported type of node used as a transform child " + - "node " + - node.javaClass) + return + // PATCH: COMMENTED OUT EXCEPTION THROWING + // throw IllegalArgumentException( + // "Unsupported type of node used as a transform child " + + // "node " + + // node.javaClass) } } else { (transformConfig as StaticTransformConfig).value diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java index 5b24caff523e..e0b9e0a247e6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java @@ -52,7 +52,8 @@ public final class NetworkingModule extends NativeNetworkingAndroidSpec { /** - * Allows to implement a custom fetching process for specific URIs. It is the handler's job to + * Allows to implement a custom fetching process for specific URIs. It is the + * handler's job to * fetch the URI and return the JS body payload. */ public interface UriHandler { @@ -63,7 +64,10 @@ public interface UriHandler { WritableMap fetch(Uri uri) throws IOException; } - /** Allows adding custom handling to build the {@link RequestBody} from the JS body payload. */ + /** + * Allows adding custom handling to build the {@link RequestBody} from the JS + * body payload. + */ public interface RequestBodyHandler { /** Returns if the handler should be used for a JS body payload. */ boolean supports(ReadableMap map); @@ -72,7 +76,10 @@ public interface RequestBodyHandler { RequestBody toRequestBody(ReadableMap map, String contentType); } - /** Allows adding custom handling to build the JS body payload from the {@link ResponseBody}. */ + /** + * Allows adding custom handling to build the JS body payload from the + * {@link ResponseBody}. + */ public interface ResponseHandler { /** Returns if the handler should be used for a response type. */ boolean supports(String responseType); @@ -92,8 +99,7 @@ public interface ResponseHandler { private static final int CHUNK_TIMEOUT_NS = 100 * 1000000; // 100ms private static final int MAX_CHUNK_SIZE_BETWEEN_FLUSHES = 8 * 1024; // 8K - private static @Nullable com.facebook.react.modules.network.CustomClientBuilder - customClientBuilder = null; + private static @Nullable com.facebook.react.modules.network.CustomClientBuilder customClientBuilder = null; private final OkHttpClient mClient; private final ForwardingCookieHandler mCookieHandler = new ForwardingCookieHandler(); @@ -131,10 +137,11 @@ public NetworkingModule( } /** - * @param context the ReactContext of the application - * @param defaultUserAgent the User-Agent header that will be set for all requests where the - * caller does not provide one explicitly - * @param client the {@link OkHttpClient} to be used for networking + * @param context the ReactContext of the application + * @param defaultUserAgent the User-Agent header that will be set for all + * requests where the + * caller does not provide one explicitly + * @param client the {@link OkHttpClient} to be used for networking */ /* package */ NetworkingModule( ReactApplicationContext context, @Nullable String defaultUserAgent, OkHttpClient client) { @@ -145,26 +152,29 @@ public NetworkingModule( * @param context the ReactContext of the application */ public NetworkingModule(final ReactApplicationContext context) { - this(context, null, OkHttpClientProvider.createClient(context), null); + this(context, null, OkHttpClientProvider.getOkHttpClient(), null); } /** - * @param context the ReactContext of the application - * @param networkInterceptorCreators list of {@link NetworkInterceptorCreator}'s whose create() - * methods would be called to attach the interceptors to the client. + * @param context the ReactContext of the application + * @param networkInterceptorCreators list of {@link NetworkInterceptorCreator}'s + * whose create() + * methods would be called to attach the + * interceptors to the client. */ public NetworkingModule( ReactApplicationContext context, List networkInterceptorCreators) { - this(context, null, OkHttpClientProvider.createClient(context), networkInterceptorCreators); + this(context, null, OkHttpClientProvider.getOkHttpClient(), networkInterceptorCreators); } /** - * @param context the ReactContext of the application - * @param defaultUserAgent the User-Agent header that will be set for all requests where the - * caller does not provide one explicitly + * @param context the ReactContext of the application + * @param defaultUserAgent the User-Agent header that will be set for all + * requests where the + * caller does not provide one explicitly */ public NetworkingModule(ReactApplicationContext context, String defaultUserAgent) { - this(context, defaultUserAgent, OkHttpClientProvider.createClient(context), null); + this(context, defaultUserAgent, OkHttpClientProvider.getOkHttpClient(), null); } public static void setCustomClientBuilder( @@ -174,11 +184,12 @@ public static void setCustomClientBuilder( /** * @deprecated To be removed in a future release. See - * https://github.com/facebook/react-native/pull/37798#pullrequestreview-1518338914 + * https://github.com/facebook/react-native/pull/37798#pullrequestreview-1518338914 */ @Deprecated public interface CustomClientBuilder - extends com.facebook.react.modules.network.CustomClientBuilder {} + extends com.facebook.react.modules.network.CustomClientBuilder { + } private static void applyCustomBuilder(OkHttpClient.Builder builder) { if (customClientBuilder != null) { @@ -277,8 +288,7 @@ public void sendRequestInternal( final boolean useIncrementalUpdates, int timeout, boolean withCredentials) { - final ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); + final ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); try { Uri uri = Uri.parse(url); @@ -316,43 +326,46 @@ public void sendRequestInternal( clientBuilder.cookieJar(CookieJar.NO_COOKIES); } - // If JS is listening for progress updates, install a ProgressResponseBody that intercepts the + // If JS is listening for progress updates, install a ProgressResponseBody that + // intercepts the // response and counts bytes received. if (useIncrementalUpdates) { clientBuilder.addNetworkInterceptor( chain -> { Response originalResponse = chain.proceed(chain.request()); - ProgressResponseBody responseBody = - new ProgressResponseBody( - originalResponse.body(), - new ProgressListener() { - long last = System.nanoTime(); - - @Override - public void onProgress(long bytesWritten, long contentLength, boolean done) { - long now = System.nanoTime(); - if (!done && !shouldDispatch(now, last)) { - return; - } - if (responseType.equals("text")) { - // For 'text' responses we continuously send response data with progress - // info to - // JS below, so no need to do anything here. - return; - } - ResponseUtil.onDataReceivedProgress( - reactApplicationContext, requestId, bytesWritten, contentLength); - last = now; - } - }); + ProgressResponseBody responseBody = new ProgressResponseBody( + originalResponse.body(), + new ProgressListener() { + long last = System.nanoTime(); + + @Override + public void onProgress(long bytesWritten, long contentLength, boolean done) { + long now = System.nanoTime(); + if (!done && !shouldDispatch(now, last)) { + return; + } + if (responseType.equals("text")) { + // For 'text' responses we continuously send response data with progress + // info to + // JS below, so no need to do anything here. + return; + } + ResponseUtil.onDataReceivedProgress( + reactApplicationContext, requestId, bytesWritten, contentLength); + last = now; + } + }); return originalResponse.newBuilder().body(responseBody).build(); }); } - // If the current timeout does not equal the passed in timeout, we need to clone the existing - // client and set the timeout explicitly on the clone. This is cheap as everything else is + // If the current timeout does not equal the passed in timeout, we need to clone + // the existing + // client and set the timeout explicitly on the clone. This is cheap as + // everything else is // shared under the hood. - // See https://github.com/square/okhttp/wiki/Recipes#per-call-configuration for more information + // See https://github.com/square/okhttp/wiki/Recipes#per-call-configuration for + // more information if (timeout != mClient.callTimeoutMillis()) { clientBuilder.callTimeout(timeout, TimeUnit.MILLISECONDS); } @@ -406,12 +419,12 @@ public void onProgress(long bytesWritten, long contentLength, boolean done) { } } else { // Use getBytes() to convert the body into a byte[], preventing okhttp from - // appending the character set to the Content-Type header when otherwise unspecified + // appending the character set to the Content-Type header when otherwise + // unspecified // https://github.com/facebook/react-native/issues/8237 - Charset charset = - contentMediaType == null - ? StandardCharsets.UTF_8 - : contentMediaType.charset(StandardCharsets.UTF_8); + Charset charset = contentMediaType == null + ? StandardCharsets.UTF_8 + : contentMediaType.charset(StandardCharsets.UTF_8); requestBody = RequestBody.create(contentMediaType, body.getBytes(charset)); } } else if (data.hasKey(REQUEST_BODY_KEY_BASE64)) { @@ -436,8 +449,7 @@ public void onProgress(long bytesWritten, long contentLength, boolean done) { return; } String uri = data.getString(REQUEST_BODY_KEY_URI); - InputStream fileInputStream = - RequestBodyUtil.getFileInputStream(getReactApplicationContext(), uri); + InputStream fileInputStream = RequestBodyUtil.getFileInputStream(getReactApplicationContext(), uri); if (fileInputStream == null) { ResponseUtil.onRequestError( reactApplicationContext, requestId, "Could not retrieve file for uri " + uri, null); @@ -449,8 +461,7 @@ public void onProgress(long bytesWritten, long contentLength, boolean done) { contentType = "multipart/form-data"; } ReadableArray parts = data.getArray(REQUEST_BODY_KEY_FORMDATA); - MultipartBody.Builder multipartBuilder = - constructMultipartBody(parts, contentType, requestId); + MultipartBody.Builder multipartBuilder = constructMultipartBody(parts, contentType, requestId); if (multipartBuilder == null) { return; } @@ -473,10 +484,9 @@ public void onFailure(Call call, IOException e) { return; } removeRequest(requestId); - String errorMessage = - e.getMessage() != null - ? e.getMessage() - : "Error while executing request: " + e.getClass().getSimpleName(); + String errorMessage = e.getMessage() != null + ? e.getMessage() + : "Error while executing request: " + e.getClass().getSimpleName(); ResponseUtil.onRequestError(reactApplicationContext, requestId, errorMessage, e); } @@ -500,11 +510,14 @@ public void onResponse(Call call, Response response) throws IOException { // internally. // The issue is that it won't handle decoding if the user provides a // Accept-Encoding - // header. This is also undesirable considering that iOS does handle the decoding + // header. This is also undesirable considering that iOS does handle the + // decoding // even - // when the header is provided. To make sure this works in all cases, handle gzip + // when the header is provided. To make sure this works in all cases, handle + // gzip // body - // here also. This works fine since OKHttp will remove the Content-Encoding header + // here also. This works fine since OKHttp will remove the Content-Encoding + // header // if // it used transparent gzip. // See @@ -514,11 +527,10 @@ public void onResponse(Call call, Response response) throws IOException { && responseBody != null) { GzipSource gzipSource = new GzipSource(responseBody.source()); String contentType = response.header("Content-Type"); - responseBody = - ResponseBody.create( - contentType != null ? MediaType.parse(contentType) : null, - -1L, - Okio.buffer(gzipSource)); + responseBody = ResponseBody.create( + contentType != null ? MediaType.parse(contentType) : null, + -1L, + Okio.buffer(gzipSource)); } // Check if a handler is registered @@ -575,8 +587,7 @@ private RequestBody wrapRequestBodyWithProgressEmitter( if (requestBody == null) { return null; } - final ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); + final ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); return RequestBodyUtil.createProgressRequest( requestBody, new ProgressListener() { @@ -605,18 +616,16 @@ private void readWithProgress(int requestId, ResponseBody responseBody) throws I // Ignore } - Charset charset = - responseBody.contentType() == null - ? StandardCharsets.UTF_8 - : responseBody.contentType().charset(StandardCharsets.UTF_8); + Charset charset = responseBody.contentType() == null + ? StandardCharsets.UTF_8 + : responseBody.contentType().charset(StandardCharsets.UTF_8); ProgressiveStringDecoder streamDecoder = new ProgressiveStringDecoder(charset); InputStream inputStream = responseBody.byteStream(); try { byte[] buffer = new byte[MAX_CHUNK_SIZE_BETWEEN_FLUSHES]; int read; - final ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); + final ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); while ((read = inputStream.read(buffer)) != -1) { ResponseUtil.onIncrementalDataReceived( reactApplicationContext, @@ -681,18 +690,19 @@ public void clearCookies(com.facebook.react.bridge.Callback callback) { } @Override - public void addListener(String eventName) {} + public void addListener(String eventName) { + } @Override - public void removeListeners(double count) {} + public void removeListeners(double count) { + } private @Nullable MultipartBody.Builder constructMultipartBody( ReadableArray body, String contentType, int requestId) { MultipartBody.Builder multipartBuilder = new MultipartBody.Builder(); multipartBuilder.setType(MediaType.parse(contentType)); - final ReactApplicationContext reactApplicationContext = - getReactApplicationContextIfActiveOrWarn(); + final ReactApplicationContext reactApplicationContext = getReactApplicationContextIfActiveOrWarn(); for (int i = 0, size = body.size(); i < size; i++) { ReadableMap bodyPart = body.getMap(i); @@ -712,7 +722,8 @@ public void removeListeners(double count) {} String partContentTypeStr = headers.get(CONTENT_TYPE_HEADER_NAME); if (partContentTypeStr != null) { partContentType = MediaType.parse(partContentTypeStr); - // Remove the content-type header because MultipartBuilder gets it explicitly as an + // Remove the content-type header because MultipartBuilder gets it explicitly as + // an // argument and doesn't expect it in the headers array. headers = headers.newBuilder().removeAll(CONTENT_TYPE_HEADER_NAME).build(); } @@ -730,8 +741,8 @@ public void removeListeners(double count) {} return null; } String fileContentUriStr = bodyPart.getString(REQUEST_BODY_KEY_URI); - InputStream fileInputStream = - RequestBodyUtil.getFileInputStream(getReactApplicationContext(), fileContentUriStr); + InputStream fileInputStream = RequestBodyUtil.getFileInputStream(getReactApplicationContext(), + fileContentUriStr); if (fileInputStream == null) { ResponseUtil.onRequestError( reactApplicationContext, @@ -750,7 +761,8 @@ public void removeListeners(double count) {} } /** - * Extracts the headers from the Array. If the format is invalid, this method will return null. + * Extracts the headers from the Array. If the format is invalid, this method + * will return null. */ private @Nullable Headers extractHeaders( @Nullable ReadableArray headersArray, @Nullable ReadableMap requestData) { @@ -774,7 +786,8 @@ public void removeListeners(double count) {} headersBuilder.add(USER_AGENT_HEADER_NAME, mDefaultUserAgent); } - // Sanitize content encoding header, supported only when request specify payload as string + // Sanitize content encoding header, supported only when request specify payload + // as string boolean isGzipSupported = requestData != null && requestData.hasKey(REQUEST_BODY_KEY_STRING); if (!isGzipSupported) { headersBuilder.removeAll(CONTENT_ENCODING_HEADER_NAME); From 878204f7a9ed7a5d082e8c684373559e25ee439d Mon Sep 17 00:00:00 2001 From: Amit Mundra Date: Tue, 22 Jul 2025 14:47:49 +0530 Subject: [PATCH 60/60] changes for fixing patch for animation crash --- .../com/facebook/react/animated/NativeAnimatedNodesManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java index b0f45ab01d4e..8bd71508bb00 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java @@ -445,6 +445,7 @@ public void disconnectAnimatedNodes(int parentNodeTag, int childNodeTag) { // "disconnectAnimatedNodes: Animated node with tag (parent) [" // + parentNodeTag // + "] does not exist"); + return; } AnimatedNode childNode = mAnimatedNodes.get(childNodeTag); if (childNode == null) { @@ -453,6 +454,7 @@ public void disconnectAnimatedNodes(int parentNodeTag, int childNodeTag) { // "disconnectAnimatedNodes: Animated node with tag (child) [" // + childNodeTag // + "] does not exist"); + return; } parentNode.removeChild(childNode); mUpdatedNodes.put(childNodeTag, childNode);