Commit Graph
35551 Commits
Author SHA1 Message Date
Andrew Knapp 313d7d79d4 Fix 49958: Close a view leak due to lossy onAnimationEnd callback (#49959)
Summary:
Android's onAnimationEnd callback is lossy and ocasionally just does not fire.  However the LayoutAnimationController maintains a sparse array of animations (with Strong View refs) that is only cleaned when the onAnimationEnd callback is invoked.  This results in a leak of Android View objects over time.

To avoid this, the Strong View refs are migrated to WeakReference's and the associated sparse array is cleaned of any invalid layout animations in response to the reset() call.

This closes two leaks:
1. Unbound growth in LayoutAnimationController::mLayoutHandlers
2. Pinning View objects into memory as the sole remaining GC root

## Changelog:

1. Made OpacityAnimation and PositionAndSizeAnimation classes hold weak refs to views only
2. Added a method to LayoutHandlingAnimation to surface if their view ref is gone
3. Added cleanup for Animation with bad view refs

Pick one each for the category and type tags:

[ANDROID] [Fixed]- Fixes memory leak

Pull Request resolved: https://github.com/facebook/react-native/pull/49959

Test Plan: * Primarily code inspection and regression given the intermittent nature of Android's failure to execute the callback.

Reviewed By: alanleedev

Differential Revision: D71037262

Pulled By: javache

fbshipit-source-id: 1fa4eaa2ca839f347a55cb37e2648db972748586
2025-03-13 04:17:17 -07:00
Vitali Zaidman e2eed3984e update the npm package "debug" flow types to v4.4.x (#49980)
Summary:
X-link: https://github.com/facebook/metro/pull/1462

Pull Request resolved: https://github.com/facebook/react-native/pull/49980

Changelog:
[General][Internal] update the npm package "debug" flow types to v4.4.x

Reviewed By: robhogan

Differential Revision: D70976838

fbshipit-source-id: 7ca7daf5e7677721b0464c66dd482a40cea3ae61
2025-03-13 04:10:38 -07:00
Tim Yung 1bb7446993 RN: Set react.runtime=automatic in Flow Config (#50001)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/50001

Updates `react-native/.flowconfig` with the following option:

```
react.runtime=automatic
```

This adjusts Flow to model the current behavior of React and JSX, relaxing the requirement that JSX elements have `React` within scope.

Changelog:
[General][Changed] - Changed Flow for the React Native monorepo, so that `React` no longer has to be in scope when using JSX.

Reviewed By: javache

Differential Revision: D71096283

fbshipit-source-id: 65762ac39206c682b7be5d3f512b2b83f7eb1b49
2025-03-13 04:09:43 -07:00
Nick Gerleman 5e7c0d2096 Add Jest E2E Tests for S462299 (#50000)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/50000

This adds some tests that verify that controlled textinput, via text prop, or children creating attributedstring, does not jumble text, so long as JS side does not mutate underlying text content.

The rewriting/max length example does still run into problems here.

Changelog: [Internal]

Reviewed By: joevilches

Differential Revision: D71076703

fbshipit-source-id: 85995e8cc087533b1115f158ba5dad67ed008289
2025-03-12 19:45:29 -07:00
Luna Wei da3b98bbcd Call RCTScreenSize early (#49999)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49999

Changelog: [Internal]

Early initialize call to RCTScreenSize which is used by Modal and will read screen size off the UI Thread to avoid main thread deadlocks

Reviewed By: sammy-SC

Differential Revision: D70999156

fbshipit-source-id: 47fb8666c3330ee67cbcb430060f0cec37ec3c7c
2025-03-12 18:26:48 -07:00
Jorge Cabiedes Acosta 7583897b9f Add nullptr checks for findNextFocusableView
Summary:
We were missing some null checks that could cause a crash.

There seems to be some cases where either the parent or the currently focused View are present on Android's hierarchy but not present on the Shadow Tree, in this cases we can just return a nullptr to fall back to default focusing behavior on Android.

Changelog: [Internal]

Reviewed By: joevilches

Differential Revision: D71050870

fbshipit-source-id: a4b4e533c4e9a59c53190feb4b23db4b436b8ae9
2025-03-12 18:14:52 -07:00
Nicola Corti e69f829a3f Beautify Changelog for 0.79 (#49987)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49987

I went through the whole changelog for 0.79 and applied categories to all the entries + did some significant cleanup (remove some entries that were actually internals, grouped and sorted various items)..

Changelog:
[Internal] [Changed] -

Reviewed By: cipolleschi

Differential Revision: D71003373

fbshipit-source-id: 5a95e619f1cf2ffc84263b92104efee16fd74e53
2025-03-12 15:45:34 -07:00
Arushi Kesarwani d8b0e050c4 Making RN Codegen generate ComponentDescriptors.cpp (#49939)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49939

Making RNCodegen.js generate the ComponentDesciptors.cpp and https://github.com/facebook/react-native/pull/42962 adds all entries, just missed this one.

Changelog:
[Android] [Fixed] - Fix RNCodegen.js for generating ComponentDescriptors.cpp

Reviewed By: shwanton

Differential Revision: D70925850

fbshipit-source-id: 2e2eae64f5371b0bc5a452d4bd0c9269e9253bb1
2025-03-12 15:44:46 -07:00
Ramanpreet Nara 76436d35c7 package.json: Introduce annotations as a way to declare modules/components (#49941)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49941

This diff introduces annotations into the ios codegen config!

## Before
In the new architecture, people can declare module/component codegen config in [package.json](https://reactnative.dev/docs/the-new-architecture/using-codegen#configuring-codegen)

This config contains the following maps:
- modulesConformingToProtocol
- modulesProvider
- componentProvider

```
"codegenConfig": {
    "name": "HelloWorldSampleModule",
    "type": "all",
    "jsSrcsDir": "specs",
    "android": {
      "javaPackageName": "com.helloworld"
    },
    "ios": {
      "modulesConformingToProtocol": {
        "RCTImageURLLoader": [
          "RCTHelloWorldImageURLLoader"
        ],
        "RCTURLRequestHandler": [
          "RCTHelloWorldURLRequestHandler"
        ],
        "RCTImageDataDecoder": [
          "RCTHelloWorldImageDataDecoder"
        ]
      },
      "modulesProvider": {
        "HelloWorldImageURLLoader": "RCTHelloWorldImageURLLoader",
        "HelloWorldURLRequestHandler": "RCTHelloWorldURLRequestHandler",
        "HelloWorldImageDataDecoder": "RCTHelloWorldImageDataDecoder"
      },
      "componentProvider": {
        "FooComponent": "RCTFooComponentClass"
      }
    }

```

## After
This information is a little bit easier to understand if we group it by module/component (into **annotations**):

(that's what this diff does!)

```
"codegenConfig": {
    "name": "HelloWorldSampleModule",
    "type": "all",
    "jsSrcsDir": "specs",
    "android": {
      "javaPackageName": "com.helloworld"
    },
    "ios": {
      "modules": {
        "HelloWorldImageURLLoader": {
          "conformsToProtocols": ["RCTImageURLLoader"],
          "className": "RCTHelloWorldImageURLLoader"
        },
        "HelloWorldURLRequestHandler": {
          "conformsToProtocols": ["RCTURLRequestHandler"],
          "className": "RCTHelloWorldURLRequestHandler"
        },
        "HelloWorldImageDataDecoder": {
          "conformsToProtocols": ["RCTImageDataDecoder"],
          "className": "RCTHelloWorldImageDataDecoder"
        }
      },
      "components": {
        "FooComponent": {
          "className": "RCTFooComponent"
        }
      },
    }

```

## Migration
The old way is still supported (for now). We will deprecate it soon, and eventually remove it from react native!

Changelog: [iOS][Added] - Codegen: Introduce module/component annotations inside package.json

Reviewed By: mdvacca

Differential Revision: D70822061

fbshipit-source-id: 87ec5664a551c54b9300ba92987f237a601ccfbf
2025-03-12 14:55:13 -07:00
Ramanpreet Nara 9ea07cfb02 generate-artifacts-executor: decompose into smaller files (#49905)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49905

This diff breaks down generate-artifacts-executor into smaller files.

Changelog: [Internal]

Reviewed By: alanleedev

Differential Revision: D70795042

fbshipit-source-id: 1235f4ecf5f87c320719b622e546780823920fd3
2025-03-12 14:55:13 -07:00
Ramanpreet Nara 8afdbebf9d Add snapshot tests for generate-artifacts-executor (#49940)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49940

This will just make sure that we don't unintentionally break this script.

Changelog: [Internal]

Reviewed By: alanleedev

Differential Revision: D70919549

fbshipit-source-id: 6d9f2acca46486f1c920afed69609c70f53e6b18
2025-03-12 14:55:13 -07:00
Vitali Zaidman b899a0013b track maximum cdp proxy messages from device queue size (#49945)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49945

Changelog:
[General][Internal] track maximum cdp messages from device queue size

Reviewed By: robhogan

Differential Revision: D70404011

fbshipit-source-id: 0191301b27f25ab91b2e9549dd14fd9e40bd825e
2025-03-12 13:43:43 -07:00
Samuel Susla 2aeccf2b90 fix crash in view culling when unflattening ScrollView's contents (#49992)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49992

changelog: [internal]

View culling does not play along with view flattening/unflattening. This diff adds a test case for it + fix. Previously, view culling would crash.

There are still untested branches of view flattening/unflattening where I am trying to come up with test cases.

Reviewed By: rubennorte

Differential Revision: D71047032

fbshipit-source-id: 9f52473743755e49e4bfda0783803cb79591ca27
2025-03-12 13:28:00 -07:00
Vitali Zaidman 9783e65122 extract event loop perf tracking to its own file (#49985)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49985

Changelog:
[General][Internal] extract event loop perf tracking to its own file

Reviewed By: robhogan

Differential Revision: D70970397

fbshipit-source-id: 2b944bf07f32b0bdb68187c77ce19fb4738a8dc5
2025-03-12 12:52:18 -07:00
Eric Rozell 05e720adfb Add feature flag for universal calls to start|finishOperationBatch (#49908)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49908

There are various batching mechanisms across react-native platforms. The NativeAnimated startOperationBatch and finishOperationBatch methods are a useful way to signal that complete animation graphs are established for atomic flushes to the UI thread.

Setting up this feature flag for use across non-Android React Native platforms.

## Changelog

[Internal]

Reviewed By: javache

Differential Revision: D70827938

fbshipit-source-id: 4c4a74e9a11f75090152637d6195092f5af866a0
2025-03-12 11:55:15 -07:00
Kirill Novikov 91d034533e Allow the .pnpm folder to be discovered during code generation (#49983)
Summary:
This PR (https://github.com/facebook/react-native/pull/48182) introduced skipping hidden folders during Codegen generation.

However, when using pnpm, all files are stored in the `.pnpm` folder (see explanation here: https://pnpm.io/symlinked-node-modules-structure).

As a result, some libraries that support the new architecture but lack the `ios.codegenConfig.componentProvider` field - like [FlashList](https://github.com/Shopify/flash-list/blob/main/package.json) - will be skipped during Codegen generation.

This PR explicitly includes `.pnpm` to prevent this issue.

## Changelog:

[iOS][Fixed] - Check .pnpm folder when looking for third-party components.

Pull Request resolved: https://github.com/facebook/react-native/pull/49983

Test Plan:
Tested on:

RN 0.78.0
PNPM: 10
Flashlist: 1.7.3

Reviewed By: cipolleschi

Differential Revision: D71047936

Pulled By: cortinico

fbshipit-source-id: fa9caab23dea8c92ef5f23c997812d348eb19e08
2025-03-12 11:55:00 -07:00
Rubén Norte 0f2a53d04b Fix crashes in MutationObserver caused by commit hooks in main thread (#49981)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49981

Changelog: [internal]

(because MutationObserver isn't a public API yet)

## Context

`MutationObserver` is a [JavaScript API](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) used to report mutations in the DOM tree. The mutations available on Web are: changing children, changing attributes and changing text. In React Native, only changing children is supported.

Mutation detection needs to happen synchronously when mutations happen (in ShadowTree commits) and the notification is dispatched as a microtask in JS, which means we can only report mutations happening in JavaScript.

There's an assumption that only React (in JS) can change the structure of the tree in Fabric, so we implemented `MutationObserver` considering this assummption.

Unfortunately, while the assumption is correct (we can only mutate children from React) the implementation didn't take into account that commit hooks were triggered from multiple threads, even if the structure doesn't change (e.g.: with Fabric state updates). In this case, we do the checks but we never dispatch the notifications. This can cause crashes (see T217617393) if we try to check for mutations from the main thread while we add new observers in the JS thread (because that logic wasn't thread safe).

This fixes that crash by, in MutationObserver, not only preventing notifications from commits not coming from React, but also preventing the determination altogether.

In order to do this, this modifies the signature of the commit hooks to also pass the commit options, and adds a new field in the commit options with the source of the commit (for now, just "React" or "Unknown").

In `MutationObserver`, before accessing the data structures of the observer, we check if the commit is coming from React, and return early otherwise.

Reviewed By: javache

Differential Revision: D71036705

fbshipit-source-id: 985c8f903375cbf876dce5174e04563f74d7621a
2025-03-12 11:17:46 -07:00
Alex Hunt 24957ac248 Bump CLI to 17 (RNTester) (#49973)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49973

We still depend on the Community CLI directly, supporting local development in  `packages/rn-tester`. Bump to latest — contains a number of build improvements, and will align us closer to prod/next.

Changelog: [Internal]

Reviewed By: cortinico, cipolleschi

Differential Revision: D71033085

fbshipit-source-id: ddbf7df5a35951b77c36d111cfd12ad64c3b73f7
2025-03-12 11:07:20 -07:00
Joe Vilches 11c8c5394e Clean up usage of rn_stable_api_modules_ios_universe.enable_image_manager_queue (#49956)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49956

This is no longer being used internally so I think we can just remove this for less complexity

Changelog: [Internal]

Reviewed By: philIip

Differential Revision: D70983663

fbshipit-source-id: 61ca5212cb45dd1c8b96aee62964ad62b410d6f1
2025-03-12 11:01:20 -07:00
Nicola Corti a0528d834c RNGP - Better compatibility with Kotlin 2.1.x (#49977)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49977

See: https://github.com/facebook/react-native/issues/48274
This makes our integration with Kotlin 2.1.x easier.

Changelog:
[Android] [Changed] - Better compatibility with Kotlin 2.1.x

Reviewed By: cipolleschi

Differential Revision: D71034044

fbshipit-source-id: 9a26ed28ae4770a5c05a4113f4d86c1b97063db3
2025-03-12 10:10:46 -07:00
Peter Abbondanzo 5f12d01ff5 Fix app lagging while attempting a connection to Metro (#49949)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49949

Changelog: [Internal]

Reviewed By: vzaidman

Differential Revision: D70965365

fbshipit-source-id: 91f9debe7783d855493281f96aef2f3f8cdb5053
2025-03-12 10:00:47 -07:00
Jakub Piasecki c7aa3f3fe7 Export codegen functions and types from the main package (#49854)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49854

Changelog: [GENERAL][ADDED] - Codegen utility functions and types are now exported from the root package

Up to this point, third-party libraries needed to use deep imports to access codegen utilities and types This diff exports them from the main entry point, as we want to move away from supporting deep imports in OSS as a part of JS Stable API project.

Reviewed By: huntie

Differential Revision: D70628408

fbshipit-source-id: 5a6e1cb870465ede0fbc9eb8912d255aa90aa2a8
2025-03-12 09:20:55 -07:00
Sam Zhou 2cdd79f4fc Pre-suppress errors ahead of next release
Reviewed By: gkz

Differential Revision: D71039278

fbshipit-source-id: 5d42ee1707335bfb579fa49beeb597d98eba70c5
2025-03-12 09:10:02 -07:00
Mateo Guzmán 43fe9f3d88 Migrate ActivityEventListener & BaseActivityEventListener to Kotlin (#49910)
Summary:
Migrate com.facebook.react.bridge ActivityEventListener & BaseActivityEventListener to Kotlin.

## Changelog:

[INTERNAL] - Migrate com.facebook.react.bridge ActivityEventListener & BaseActivityEventListener to Kotlin

Pull Request resolved: https://github.com/facebook/react-native/pull/49910

Test Plan:
```bash
yarn test-android
yarn android
```

Reviewed By: alanleedev

Differential Revision: D70871037

Pulled By: Abbondanzo

fbshipit-source-id: ebb784db5ea58598f483f9775629666716de39f0
2025-03-12 08:12:29 -07:00
Mateo Guzmán 6c5a9e8257 Migrate BaseLayoutAnimation to Kotlin (#49962)
Summary:
Migrate com.facebook.react.uimanager.layoutanimation.BaseLayoutAnimation to Kotlin.

## Changelog:

[INTERNAL] - Migrate com.facebook.react.uimanager.layoutanimation.BaseLayoutAnimation to Kotlin

Pull Request resolved: https://github.com/facebook/react-native/pull/49962

Test Plan:
```bash
yarn test-android
yarn android
```

Reviewed By: cortinico

Differential Revision: D71031224

Pulled By: javache

fbshipit-source-id: c74d72b85dcc37a48a2ebb795a29ff317511d5ed
2025-03-12 07:56:06 -07:00
Vitali Zaidman 2d7356193f report high ping and event loop delay even when debug is not enabled (#49976)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49976

Changelog:
[General][Internal]

Reviewed By: robhogan

Differential Revision: D70962431

fbshipit-source-id: 74c0fcc67e1785f213629db235fbf18bcd5a5f95
2025-03-12 06:49:54 -07:00
Rubén Norte 6356a85b98 Do not log errors when the native module is missing if TurboModules are not used (#49974)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49974

Changelog: [internal]

The feature flag system currently logs an error when trying to access common feature flags (flags accessible from everywhere but defined in native) from JS if the native module isn't available.

This forces a pattern in code to check if the module is available before accessing certain feature flags, to avoid showing that error to users in the legacy architecture.

This removes the need for that pattern by adding the check in the feature flag infra itself. If TM infra isn't available, we return default values and don't log the error.

Reviewed By: rozele

Differential Revision: D70975412

fbshipit-source-id: 5544bd96aaaf046ef90ca69bc549bef4e54eb98b
2025-03-12 05:37:22 -07:00
Jakub Piasecki 39f051aeb6 Add a test case ensuring touch events are dispatched to views overflowing ScrollView content container (#49967)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49967

Changelog: [Internal]

Reviewed By: cipolleschi

Differential Revision: D71030561

fbshipit-source-id: 4d73a0c4d3dc22b83c47091ba8de1d5261ab9ed5
2025-03-12 05:18:43 -07:00
Alex Hunt e70961e05c Bump packages for next release (#49972)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49972

Follows the recent `0.79-stable` branch cut.

Changelog: [Internal] - Bump all packages to `0.80.0-main`

Reviewed By: cortinico

Differential Revision: D70976555

fbshipit-source-id: e81e4c45c6a510e114d02853c5bb90a715b7df8b
2025-03-12 05:11:16 -07:00
Jakub Piasecki 6ecd9a43f1 Fix touch events not being dispatched to ScrollView's children when they overflow content container (#49855)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49855

Changelog: [IOS][FIXED] - Fixed touch events not being dispatched to ScrollView's children when they overflow the content container

Closes https://github.com/facebook/react-native/issues/47740.

Changes the ScrollView's container view to be `RCTViewComponentView` instead of `UIView` and sets custom layout metrics to it in a way that it will propagate touch events to all children, even if they overflow its bounds.

Reviewed By: sammy-SC

Differential Revision: D70619894

fbshipit-source-id: 348a1a369489d5208d6037c8d76b223c4ab2d5f7
2025-03-12 03:50:07 -07:00
Joe Vilches 0ade23d34f accessibleElements impl on iOS (#49582)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49582

TSIA, this is a fairly straightforward implementation since iOS likes the shape the data is already in. Note I form a stacking context since I need the native view that has `accessibilityElements` to actually be an ancestor of everything under it

Note I am not exposing anything yet on the JS side, since we need to do Android also

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D69625269

fbshipit-source-id: 836f1bb631646408a5726f126be61c0ff6afe1d0
2025-03-11 20:20:16 -07:00
Nick Gerleman 99f962627f Fix New Arch handling of inline views when text truncated (#49960)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49960

Fixes  https://github.com/facebook/react-native/issues/49106

RN legacy arch, and web, will clip inline content which appears after elipsized text. This is the correct behavior, compared to new arch, which will put it in a random place depending on the platform.

`line-clamp`: https://jsfiddle.net/7xgdke1b/
`text-overflow`: https://jsfiddle.net/7xgdke1b/2/

Fabric renderer does not, funnily enough, having an `isClipped` field on `TextMeasurement::Attachment` that is never used.

This change propagates state for whether an attachment is beyond elipsized area to this measurement, then when we see it, we set empty layout results with `DisplayType::None` so that we don't create native views. We don't layout child views either, but this seems to work out okay, even when removing and re-adding `numberOfLines`.

Changelog:
[General][Fixed] - Fix New Arch handling of inline views when text truncated

Reviewed By: mdvacca

Differential Revision: D70922174

fbshipit-source-id: 8c1f4aadbf53ff64ce55b44d6c7953d9b2e40bc5
2025-03-11 18:03:56 -07:00
Jorge Cabiedes Acosta c068c599c6 Fix keyboard navigation for FlatList with removeClippedSubviews enabled (#49543)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49543

When using `ReactScrollView` or `ReactHorizontalScrollView` Views with `removeClippedSubviews` keyboard navigation didn't work.

This is because keyboard navigation relies on Android's View hierarchy to find the next focusable element. With `removeClippedSubviews` the next View might've been removed from the hierarchy.

With this change we delegate the job of figuring out the next focusable element to the Shadow Tree, which will always contain layout information of the next element of the ScrollView.

Changelog: [Android][Fixed] - Fix keyboard navigation on lists with `removeClippedSubviews` enabled

Reviewed By: joevilches

Differential Revision: D69618406

fbshipit-source-id: 1df7f90066dfc685e74a89b29222937777714b87
2025-03-11 17:08:51 -07:00
Jorge Cabiedes Acosta 81405b450c Prevent the currently focused View from getting clipped (#49961)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49961

As preparation for fixing focus on FlatList we need to prevent the currently focused view from getting clipped. This is because in Android, if the currently focused view gets clipped before transferring focus we crash.

Changelog: [Android][Changed] - Prevent currently focused child from getting clipped when `removeClippedSubviews` is enabled

Reviewed By: NickGerleman

Differential Revision: D70994348

fbshipit-source-id: 8c68eeebd7df8e7d8f788e50a3bbe46b0335ace3
2025-03-11 17:08:51 -07:00
Pieter De Baets ade41c851b Make missing parent view state in updateLayout a soft error (#49951)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49951

We previously fixed Differentiator generating an incorrect parentTag (https://github.com/facebook/react-native/pull/48055), but this can lead to crashes in Android UI due to reordering that happens in the Android mounting layer. While we have an experiment to disable this reordering (https://github.com/facebook/react-native/pull/46702) this currently has a negative performance impact which needs to be addressed.

As a mitigation, we can make the lookup of parentTag's ViewManager state nullable. We only require this to support `needsCustomLayoutForChildren`, which is not commonly used, and seems acceptable to drop in this scenario.

Changelog: [Android][Changed] Do not crash when parent view state can't be found

Reviewed By: NickGerleman

Differential Revision: D70966621

fbshipit-source-id: 33d0b6a90860788a4c9a8c6cea36c2c72c1392e1
2025-03-11 14:11:15 -07:00
Nick Lefever 1482dd9e99 Add assert for recycled views with parent (#49937)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49937

Adding an assert for recycled views still attached to their parent, which would lead to an exception when the view would be added to a new parent.

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D70922503

fbshipit-source-id: 7d4daf427306203d603c31999ab138b3aee08e83
2025-03-11 12:42:46 -07:00
Pieter De Baets 54e8bd44bd Suppress deprecation error in ProgressResponseBody (#49954)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49954

We have a different version of OkHttp internally and in OSS so we need to suppress these for now.

Changelog: [Internal]

Reviewed By: Abbondanzo

Differential Revision: D70975145

fbshipit-source-id: cd2a3ab5cdc52f25c78cb608e917fa3ca378e4f1
2025-03-11 12:31:28 -07:00
Samuel Susla cf39e6164c delete feature flag excludeYogaFromRawProps (#49817)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49817

changelog: [internal]

Remove feature flag excludeYogaFromRawProps. It did not yield any performance wins and the code to support the feature is spread across multiple classes. Removal simplifies complexity.

Reviewed By: javache

Differential Revision: D70389071

fbshipit-source-id: 21751f56aec8de501ff1e1efafda035069d8ef48
2025-03-11 09:10:22 -07:00
Mateo Guzmán ff84ae9188 Migrate OpacityAnimation to Kotlin (#49822)
Summary:
Migrate com.facebook.react.uimanager.layoutanimation.OpacityAnimation to Kotlin.

I moved out `OpacityAnimationListener` as well in this PR to separate concerns and align more with the codebase.

## Changelog:

[INTERNAL] - Migrate com.facebook.react.uimanager.layoutanimation.OpacityAnimation to Kotlin

Pull Request resolved: https://github.com/facebook/react-native/pull/49822

Test Plan:
```bash
yarn test-android
yarn android
```

Reviewed By: javache

Differential Revision: D70588884

Pulled By: alanleedev

fbshipit-source-id: 1b70f5e5facd5f47b828090e7c63a218229000cb
2025-03-11 08:40:10 -07:00
Mateo Guzmán bf7a0e5798 Migrate ProgressResponseBody to Kotlin (#49752)
Summary:
Migrate com.facebook.react.modules.network.ProgressResponseBody to Kotlin.

## Changelog:

[INTERNAL] - Migrate com.facebook.react.modules.network.ProgressResponseBody to Kotlin

Pull Request resolved: https://github.com/facebook/react-native/pull/49752

Test Plan:
```bash
yarn test-android
yarn android
```

Reviewed By: javache

Differential Revision: D70592532

Pulled By: alanleedev

fbshipit-source-id: 2680951a3b5290314d0632eb55b69c9bcf44b96a
2025-03-11 08:28:25 -07:00
Dawid Bartczak c6a075bcc7 Fix missing type for login-password alert prompt (#49757)
Summary:
When using the `login-password` prompt type, there is a TypeScript type mismatch issue. The `callbackOrButtons` parameter returns an object with `{login: string, password: string}` structure, but this type variation is not properly included in the **AlertType** type definition. This causes TypeScript to show type errors when using callback functions that expect credentials in the format `(credentials: {login: string, password: string}) => void`.

## Changelog:
- [General] [Fixed] Add missing type variation `{login: string, password: string}` to **AlertType** type definition to properly support `login-password` prompt callbacks

Pull Request resolved: https://github.com/facebook/react-native/pull/49757

Test Plan: This change is purely type-related and doesn't affect runtime behavior.

Reviewed By: NickGerleman

Differential Revision: D70797036

Pulled By: alanleedev

fbshipit-source-id: 8e27a39f0c8f49083730c683b41b69173715bd68
2025-03-11 08:10:11 -07:00
zhongwuzw 8d7aca30e7 Fixes TextInput crashes when any text is entered while running as iOS app on apple silicon mac (#49320)
Summary:
Fixes https://github.com/facebook/react-native/issues/48544. We can make `RCTWeakEventEmitterWrapper` to subclass `NSDictionary` that Textinput supports encode it.

System allowed classes are:
```
Allowed classes are:
 {(
    "'NSMorphology' (0x20088b6d8) [/System/Library/Frameworks/Foundation.framework]",
    "'NSString' (0x2003f4738) [/System/Library/Frameworks/Foundation.framework]",
    "'NSInflectionRule' (0x20088d348) [/System/Library/Frameworks/Foundation.framework]",
    "'UIColor' (0x2006c0520) [/System/iOSSupport/System/Library/PrivateFrameworks/UIKitCore.framework]",
    "'NSTextAttachment' (0x20042af98) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSShadow' (0x20042ae30) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSTextEncapsulation' (0x200897e50) [/System/Library/Frameworks/CoreText.framework]",
    "'NSTextAlternatives' (0x20042af70) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSFont' (0x20042a9f8) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSAttributedString' (0x2003f3838) [/System/Library/Frameworks/Foundation.framework]",
    "'NSData' (0x2003ed528) [/System/Library/Frameworks/CoreFoundation.framework]",
    "'NSURL' (0x2003ed938) [/System/Library/Frameworks/CoreFoundation.framework]",
    "'NSAdaptiveImageGlyph' (0x2008ae538) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSNumber' (0x2003f4238) [/System/Library/Frameworks/Foundation.framework]",
    "'NSParagraphStyle' (0x20042ad40) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSDictionary' (0x2003ed5a0) [/System/Library/Frameworks/CoreFoundation.framework]",
    "'UIFont' (0x20042c668) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSColor' (0x200412350) [/System/Library/Frameworks/AppKit.framework]",
    "'NSGlyphInfo' (0x20042aa98) [/System/Library/PrivateFrameworks/UIFoundation.framework]",
    "'NSArray' (0x2003ed460) [/System/Library/Frameworks/CoreFoundation.framework]",
    "'NSPresentationIntent' (0x20088da28) [/System/Library/Frameworks/Foundation.framework]"
)}
```

## Changelog:

[IOS] [FIXED] -  Fixes TextInput crashes when any text is entered while running as iOS app on apple silicon mac

Pull Request resolved: https://github.com/facebook/react-native/pull/49320

Test Plan:
Run RNTester on apple silicon mac, and entered some text in textinput, no crash occured. Also, verified that the caret was not jumping around, thus preserving the original fix.

https://github.com/user-attachments/assets/6304f6e7-c663-4351-ace8-ab1842ee545f

Reviewed By: javache

Differential Revision: D69981500

Pulled By: cipolleschi

fbshipit-source-id: 2af9b280e42f621446efda9b101af50525e8fef7
2025-03-11 06:06:55 -07:00
Vojtech Novak 0cc1ac18cf fix(ios): enable use of multiple RCTAppDependencyProvider instances (#49889)
Summary:
instantiating multiple `RCTAppDependencyProvider` instances creates problems with their internal state, because the internal fields such as [`_thirdPartyFabricComponents` are populated once](https://github.com/facebook/react-native/blob/f5feb73022f9340583ebcf576eaedd3ca5677e1a/packages/react-native/scripts/codegen/templates/RCTAppDependencyProviderMM.template#L60) for the entire app (see [`dispatch_once`](https://developer.apple.com/documentation/dispatch/1447169-dispatch_once)).

That means when you create 2 instances, and call `thirdPartyFabricComponents` on them, the first instance will respond with a dictionary and the second with `nil`. This is unexpected.

## Changelog:

[IOS] [FIXED] - enable use of multiple `RCTAppDependencyProvider` instances

Pull Request resolved: https://github.com/facebook/react-native/pull/49889

Test Plan:
`rnTester` - the templates are used by codegen. Running `pod install`, the files were generated correctly from the `.template` files.

I was able to verify that accessing `thirdPartyFabricComponents` on multiple instances of `RCTAppDependencyProvider` returns valid result.

<details>
<summary>screenshot</summary>

<img width="789" alt="Screenshot 2025-03-07 at 15 11 22" src="https://github.com/user-attachments/assets/9270ba90-ae7f-491a-a53a-f7e1f4606438" />

</details>

Reviewed By: javache

Differential Revision: D70892779

Pulled By: cipolleschi

fbshipit-source-id: 27c7c8fd9982b6427daec02e0de59b08ad20bfad
2025-03-11 05:57:40 -07:00
Nicola Corti 40203e21a6 Add Changelog for 0.79.0-rc.1 (#49946)
Summary:
Just the changelog for 79 RC1

## Changelog:

[Internal] [Changed] -

Pull Request resolved: https://github.com/facebook/react-native/pull/49946

Test Plan: NA

Reviewed By: cipolleschi

Differential Revision: D70962117

Pulled By: cortinico

fbshipit-source-id: 7423c4562695f16398d39169e7b2072b6ce0b164
2025-03-11 05:56:56 -07:00
Riccardo Cipolleschi 3b3d502ccf Automate setting the RCTNewArchEnabled flag (#49927)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49927

This change automates updating App's Info.plist with the new `RCTNewArchEnabled` boolean entry. The value depends on how the pod install is set up. In this way, we maintain the previous UX to enable/disable the New Arch.

## Context
The RCT_NEW_ARCH_ENABLE flag is a compile time flag we used for almost two years to configure the iOS apps and to determine whether the app should build with the New Arch or not.

However, given that we are looking into prebuilding React Native, we have to get rid of all the compilation flags, because they would require us to prebuild a combinatorial number of artifacts for react native. For example:

- New Arch / Hermes
- Old Arch / Hermes
- New Arch / JSC
- Old Arch / JSC
- ...

## Backward compatibility
We are going to keep adding the RCT_NEW_ARCH_ENABLED flag in all the dependencies, through the cocoapods inrastructure, so libraries, which are not prebuilt, will be build for the right architecture by the app itself.

## Changelog:
[iOS][Added] -

Reviewed By: cortinico

Differential Revision: D70888212

fbshipit-source-id: 541a818e02ccb96c822de29b0714646d1e69a5a9
2025-03-11 05:05:49 -07:00
Riccardo Cipolleschi 6dd721b258 Deprecate RCT_NEW_ARCH_ENABLED (#49924)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49924

This change deprecates the RCT_NEW_ARCH_ENABLEd flag to toggle the New Architecture.

The new approach bring iOS closer to Android: to diasable the New Architecture, user needs to modify the App's Info.plist and add a `RCTNewArchEnabled` boolean entry and set it to `NO`.

The absence of the entry implies that the New Arch is enabled. (Defaults to enabled)

This also deprecates the `RCTSetNewArchEnabled` function because it makes no sense now

## Context
The RCT_NEW_ARCH_ENABLE flag is a compile time flag we used for almost two years to configure the iOS apps and to determine whether the app should build with the New Arch or not.

However, given that we are looking into prebuilding React Native, we have to get rid of all the compilation flags, because they would require us to prebuild a combinatorial number of artifacts for react native. For example:

- New Arch / Hermes
- Old Arch / Hermes
- New Arch / JSC
- Old Arch / JSC
- ...

## Backward compatibility
We are going to keep adding the RCT_NEW_ARCH_ENABLED flag in all the dependencies, through the cocoapods inrastructure, so libraries, which are not prebuilt, will be build for the right architecture by the app itself.

## Changelog:
[iOS][Deprecated] - deprecate the `RCT_NEW_ARCH_ENABLED` and the `RCTSetNewArchEnabled`

Reviewed By: cortinico

Differential Revision: D70885454

fbshipit-source-id: 4b8404ead4900d9787049ebd0b8b3c29b272f913
2025-03-11 05:05:49 -07:00
Vitali Zaidman 70c3ffe984 Use builtin libdefs from flow-typed (#49929)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49929

X-link: https://github.com/facebook/metro/pull/1459

In the next version of Flow, we will stop bundling many of the builtin libdefs, and they have been moved to flow-typed. This diff checks in them to prepare for the deployment of the next version of Flow.

Changelog: [Internal]

Reviewed By: SamChou19815

Differential Revision: D70896122

fbshipit-source-id: aa6bd0b1e653b983a345b0e202c8dad5058a0001
2025-03-11 04:46:33 -07:00
Vitali Zaidman a27ec64a00 report an event tracking the event loop perf in metro dev middleware (#49674)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49674

Changelog:
[General][Internal] - report an event tracking the event loop perf in metro dev middleware

Reviewed By: hoxyq

Differential Revision: D69988265

fbshipit-source-id: 89cb427215b0034d545305cccfcee542af8c0367
2025-03-11 04:41:50 -07:00
Riccardo Cipolleschi 10bbdb8679 Fix verifyReleaseOnNPM by dropping the v in the version (#49944)
Summary:
GHA passes the version to the script with a `v` prefix. However, when we receive the version from NPM, the `v` prefix is not here.
We can fix the script by dropping the `v` when it is passed to the function.

bypass-github-export-checks

## Changelog:
[Internal] - Fix verifyPackageOnNPM

Pull Request resolved: https://github.com/facebook/react-native/pull/49944

Test Plan: GHA

Reviewed By: cortinico, fabriziocucci

Differential Revision: D70960414

Pulled By: cipolleschi

fbshipit-source-id: 4234103ebe49cf715aea4a1473a8a60978f07a9f
2025-03-11 04:05:11 -07:00
David Vacca d24e5acb26 Ensure LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled is called only once per class loading in kotlin (#49936)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49936

Ensure LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled is called only once per class loading in kotlin

changelog: [internal] internal

Reviewed By: alanleedev

Differential Revision: D70922132

fbshipit-source-id: ce4d68dc2ab0f61266e4bb5cddfc175c364f568a
2025-03-10 23:46:25 -07:00