Commit Graph

38536 Commits

Author SHA1 Message Date
Riccardo Cipolleschi 18916f391a Fix Open Debugger dev menu item missing from iOS Bridgeless
Summary:
After a [recent change](https://github.com/facebook/react-native/commit/90296be1d4fab09a52e02dd09f34f819136d0a07) we break part of the integration with the debug menu, which is was using the presence/absence of the bridge to decide whether we were in bridge or bridgeless.

For backward compatibility reasosn, the bridge ivar is now populated with the bridgeProxy, so just checking whether is nil or not is not enough to verify whether we are in bridge or in bridgeless mode anymore.

## Changelog:
[iOS][Fixed] - Make sure that the Open Debugger appears in bridgeless mode

Reviewed By: fkgozali

Differential Revision: D56067897

fbshipit-source-id: e2501ed730ff35bc755c24ef400130c551032e28
2024-04-12 11:37:41 -07:00
zhongwuzw 776f90024f Change bridgeless check in dev menu (#43976)
Summary:
We would set the value of  _bridge ivar to bridgeProxy for turbo module in bridgeless mode in https://github.com/facebook/react-native/issues/43757 , so we need to change the way of bridgeless/bridge check.

## Changelog:

[IOS] [FIXED] - Change bridgeless check in dev menu

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

Test Plan: Dev menu shows bridgeless/bridge mode correctly.

Reviewed By: christophpurrer

Differential Revision: D56056640

Pulled By: cipolleschi

fbshipit-source-id: 1358c3027c1d5f12c70dd4486cc1d5975c7a185a
2024-04-12 09:56:16 -07:00
Ruslan Shestopalyuk 214a1e0722 Kotlinify DevSupportManager interface (#44056)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44056

## Changelog:
[Internal] -

Was looking into how devsupport is exactly implemented on different platforms (in the context of doing it for a new platform) and figured I may just well convert this to Koltin in the process (helped to understand inner working details as well).

Reviewed By: christophpurrer

Differential Revision: D56058560

fbshipit-source-id: 1e2ffcec480c5fa3fd8b6494c29a0db6f94aec78
2024-04-12 09:40:31 -07:00
Ruslan Shestopalyuk b15d438498 Convert interfaces inside devsupport/interfaces to Kotlin (#44055)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44055

## Changelog:
[Internal] -

Was looking into how devsupport is exactly implemented on different platforms (in the context of doing it for a new platform) and figured I may just well convert this to Koltin in the process (helped to understand inner working details as well).

Reviewed By: christophpurrer

Differential Revision: D56052137

fbshipit-source-id: 25280a57f46bec95dc1437ea6eb2eef08332797f
2024-04-12 09:40:31 -07:00
Andrew Datsenko a666718879 Make OverrideColorScheme fun interface (#44059)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44059

Changelog: [Internal]

Reviewed By: christophpurrer

Differential Revision: D56062919

fbshipit-source-id: 3181608ae6be5250831ce2d2f22ab2a424409168
2024-04-12 09:26:30 -07:00
Ruslan Shestopalyuk 72a78d674c Fix unsafe downcasting in ShadowTree::emitLayoutEvents (#44058)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44058

## Changelog:
[Internal] -

This was revealed when running an ASAN build on MacOS - we were doing an unsafe downcast from `LayoutableShadowNode->ViewShadowNode` inside `ShadowTree::emitLayoutEvents`.

Which, even though incidentally worked, is generally unsafe, as we may get e.g. `ImageShadowNode` there, which doesn't inherit from `ViewShadowNode`.

That downcast to `ViewShadowNode` wasn't even required, to begin with, as all the needed information can be already extracted from the `LayoutableShadowNode` itself.

Reviewed By: christophpurrer, javache

Differential Revision: D56062334

fbshipit-source-id: 08d5b3f5e0c57dc51b051d23506c7933581fea29
2024-04-12 09:21:15 -07:00
Oskar Kwaśniewski 5aea518d88 feat: allow use of RCTRootViewFactory from Swift (#43590)
Summary:
The goal of this PR is to allow the usage of `RCTRootViewFactory` from Swift. The issue with `RCTTurboModuleManager.h` is that it uses C++ in its header file, which is not allowed in Swift, making this initializer unavailable.

This PR allows users to just pass configuration + adds a nullable annotation to bundleURL.

Example usage:

```swift
import Foundation
import UIKit
import React
import React_RCTAppDelegate

main
class AppDelegate: NSObject, UIApplicationDelegate {
  var window: UIWindow?
  private var rootViewFactory: RCTRootViewFactory?

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
  ) -> Bool {

    // Create config
    let config = RCTRootViewFactoryConfiguration(
      bundleURL: self.bundleURL(),
      newArchEnabled: true,
      turboModuleEnabled: true,
      bridgelessEnabled: false
    )

    // Create rootview factory
    rootViewFactory = RCTRootViewFactory(configuration: config)

    // Create rootview
    let rootView = rootViewFactory?.view(withModuleName: "RN0740RC4")
    let rootViewController = UIViewController()
    rootViewController.view = rootView

    // Create window and assign view controller
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = rootViewController;
    window?.makeKeyAndVisible()

    return true
  }

  func bundleURL() -> URL? {
    RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
  }
}
```

## Changelog:

[IOS] [FIXED] - Allow usage of `RCTRootViewFactory` from Swift

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

Test Plan: CI Green, check usage of initializer without turbo module delegate

Reviewed By: christophpurrer

Differential Revision: D56055938

Pulled By: cipolleschi

fbshipit-source-id: c80d9f7f707c376f590f3dc4c9bb8f88f2e57e6a
2024-04-12 09:20:47 -07:00
Riccardo Cipolleschi 18f0a90358 Properly recycle RCTPullToRefreshViewcomponentView (#44047)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44047

This change properly recycles the RCTPullToRefreshViewComponentView so that it fixes some misbehaviors of the UIRefreshControl in OSS.

This should fix https://github.com/facebook/react-native/issues/37308 and https://github.com/facebook/react-native/issues/36173

## Changelog:
[iOS][Fixed] - Properly recycle the RCTPullToRefreshViewComponentView

Reviewed By: sammy-SC

Differential Revision: D56018924

fbshipit-source-id: 3c71328aa0f6fb2a98a19593f0f06419e04e9cae
2024-04-12 08:08:19 -07:00
Fabrizio Cucci 7131f94895 Revert D55964787: Push ReactContext logic in derived classes
Differential Revision:
D55964787

Original commit changeset: b404efe0c709

Original Phabricator Diff: D55964787

fbshipit-source-id: 0742b9aa870a08fed603cf6f33774d4813f5050c
2024-04-12 06:11:04 -07:00
Dmitry Rykun b7812a8b6c Fix race condition in native module invalidation (#44048)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44048

This is an attempt to fix a couple of similar memory corruption crashes that happen during the deallocation of RCTHost.

**Hypotheis:** there is a race condition between [this](https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm#L1038-L1058) and [this](https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm#L1062) chunks of work.
I.e. let's say we are invalidating 10 modules. Because of the race condition it is possible that we call `dispatch_group_enter`/`dispatch_group_leave` for the first five before we call `dispatch_group_enter` for the sixth one. In that case we would resume at [dispatch_group_wait](https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm#L1079), not waiting for the remaining modules to invalidate. That would lead to `RCTInstance` potentially being invalidated prematurely, deallocating all its ivars including `_turboModuleManager` and `_jsThreadManager`. That in turn would lead to memory access error during the invalidation of remaining modules.

This diff is trying to solve this problem by calling `dispatch_group_enter` for all modules before any other work is performed.

Changelog: [iOS][Fixed] - Fixed race condition in native module invalidation.

Reviewed By: cipolleschi

Differential Revision: D55965290

fbshipit-source-id: 0c2b5957371bf3573155cee687c661603da162de
2024-04-12 03:17:12 -07:00
Moti Zilberman 91d3bc5be6 Update CDPAgent reentrancy test to cover evaluate ordering
Summary:
Changelog: [Internal]

With the Hermes fix in D55250610, we're able to make stronger assertions in `CDPAgentReentrancyRegressionTest`, which is an integration test covering a class of related bugs.

bypass-github-export-checks

Reviewed By: mattbfb

Differential Revision: D55962593

fbshipit-source-id: 09d03effc51d6f1904842f1c7c2f7e4407fefc63
2024-04-12 03:10:16 -07:00
Samuel Susla 2ef59c988d move to unified feature flag system for new state reconciliation algorithm (#44022)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44022

changelog: [internal]

move the new state reconciliation algorithm to the unified feature flag system.

Reviewed By: rubennorte

Differential Revision: D55965530

fbshipit-source-id: 3edde0858a670e86dc2d1cb561f03f584ff21896
2024-04-12 02:47:01 -07:00
Samuel Susla 4d9b11b45d Introduce new State Alignment Mechanism (#44021)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44021

changelog: [internal]

This is an evolution of cloneless state progression, introduced in D49012353.

# Problem

## When React clones the wrong node revision
Whenever React wants to commit a new change, it first needs to clone shadow nodes. React sometimes clones from the wrong revision. This has mostly been fine, Fabric does state reconciliation to pass newest state forward. State reconciliation is needed, as we need to keep native state in the shadow tree.
However, when React clones a node that has never been through layout step, it will clone a node without any layout information and its yoga node is dirtied. Even though there might be a subsequent revision of the node with layout information already calculated. As a result, Yoga needs to traverse bigger parts of the tree, even though layout has been calculated before. It is just cached on a different revision that was used as a source.

There are two main sources (there is more but they don't help to paint the picture) when this can happen. Background Executor and State Progression. Let's start with the simpler one but less severe: Background Executor.

Background Executor moves layout from JavaScript thread. React can start cloning nodes right away, even though they might not have layout information calculated yet. This is a race condition and depending on when the node is cloned, we can see different results. In this case, React eventually clones node from the correct revision with the layout cache. It will be in a correct state in the end. This case is not as bad as far as I can tell but I included it here because it better illustrates what is going on.

State Progression is where things get worse. In this scenario, React will never clone from the correct revision and will never recover from this. Anytime React clones node with a state that needs to be progressed, it will get cloned one more time during commit but React will hold the wrong revision. Depending on where this node is located in the view hierarchy, it may lead to expensive layout calculations.

Example:
Let's use notation A/r1 as node of family A revision 1.

- React calls create node. Node A/r1 is created and React holds reference to this. It will later use it to clone it.
Node A has native state that was updated. New revision A/r2 is created. Now React and RN do not observe the same node anymore (this is sometimes necessary).
- React now clones node A to create A/r3. This revision may have the wrong yoga cache. Now this might sound like one off but let's explore what happens next.
- During commit, Fabric must do state progression to give node A/r3 state from A/r2. This requires cloning and new revision A/r4 is created. React has again a wrong node that does not have Yoga cache and can't recover from this state.

The blast radius of this varies depending on where in the tree the node is.

# Solution - State Alignment Mechanism
The main principle for new state progression is to make sure React references the correct shadow node after commit to avoid layout cache miss on subsequent commit.

Agenda for the diagrams below:
- Black colour: node was not cloned.
- Blue colour: node was cloned by React.
- Orange colour: node was cloned by host platform.
- Blue and Orange colour: node was cloned by both React and host platform.

## Simple cases
### Base case

 {F1483309510}

### React Cloned

 {F1483308354}

### React and host platform clone the same node

 {F1483309324}

## Medium difficulty

### React clones a different branch than host platform

 {F1483349393}

### React deletes a branch that was cloned by host platform
 {F1483349259}

### React changes structure of the tree, node cloned by host platform remains

 {F1483349758}

### React reorders nodes that were cloned by host platform

 {F1483350283}

Reviewed By: rubennorte

Differential Revision: D53405702

fbshipit-source-id: c7d4b0772c144c86d72e39965e9626a2daefa6fd
2024-04-12 02:47:01 -07:00
Samuel Susla 223c0398fd extend StateReconciliationTests (#44020)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44020

changelog: [internal]

This diff only adds more tests for state reconciliation to cover more cases.
Thanks to this, I discovered bugs in my previous implementation of cloneless state progression.

Reviewed By: rubennorte

Differential Revision: D55926491

fbshipit-source-id: 5945ba9bc1d6fed111fbca07e19589cbef50712d
2024-04-12 02:47:01 -07:00
Samuel Susla cc40c59993 Use size_t instead of casting to int32_t (#44019)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44019

changelog: [internal]

use size_t instead of int32_t so that caller of `ShadowNode::replaceChild` does not need to cast.

Reviewed By: rubennorte

Differential Revision: D55923333

fbshipit-source-id: 8f8062708d9aaddedb600aa7dac419a177e2ab24
2024-04-12 02:47:01 -07:00
Samuel Susla 669aa1c3c2 Introduce new trait: ClonedByNativeStateUpdate (#44018)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44018

changelog: [internal]

New trait ClonedByNativeStateUpdate is used to mark the path that was cloned by native state update.

This is a pre-requisite for new state reconciliation algorithm. It will mark part of shadow tree that was affected by native state update.

Reviewed By: rubennorte

Differential Revision: D55922776

fbshipit-source-id: 6d4515460346c341af3ee6117d570b3201328bc9
2024-04-12 02:47:01 -07:00
Samuel Susla 3b49db3bfe add option to set traits when cloning up to the root (#44017)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44017

changelog: [internal]

Add an option to mark all nodes clone indirectly by `ShadowNode::cloneTree`.

This is a pre-requisite for new state reconciliation algorithm. It will be used to mark part of shadow tree that was affected by native state update.

Reviewed By: rubennorte

Differential Revision: D55745323

fbshipit-source-id: 5e2a2e8a572cc5077d907608f83992a43625d58e
2024-04-12 02:47:01 -07:00
Samuel Susla 49f7ec30d6 add option to set traits with ShadowNodeFragment (#44016)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44016

changelog: [internal]

Add option to set traits when node is created or cloned via ShadowNodeFragment.

This is a pre-requisite for new state reconciliation algorithm.

Reviewed By: rubennorte

Differential Revision: D55691094

fbshipit-source-id: 0bdf024c3c9b28304969ddc9b9c63b0f0b924bb0
2024-04-12 02:47:01 -07:00
Max Hoffmann 2b85a236a1 delete deprecated Xcode version check (#43949)
Summary:
IOS builds started failing due to Xcode version checks falsely claiming newer versions are not installed

TODO affecting Xcode version checking reads: Remove this code after April 2024, when Apple will push the lower version of Xcode required to upload apps to the Store.

## Changelog:

remove deprecated Xcode version check

Pick one each for the category and type tags:

[IOS] [REMOVED] - Message

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

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

Test Plan: Should run as before, only the deprecated version check has been removed.

Reviewed By: dmytrorykun

Differential Revision: D56056701

Pulled By: cipolleschi

fbshipit-source-id: 47288e04bd1cfc989cf05994cb47421fd2379af0
2024-04-12 02:46:04 -07:00
Fabrizio Cucci 05ef779c0b Push ReactContext logic in derived classes (#44026)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44026

Changelog: [Android][Removed] Delete ReactContext.initializeWithInstance(). ReactContext now no longer contains legacy react instance methods. Please use BridgeReactInstance instead.

Yet another attempt to land this (last one was D55505416).

Copy-pasting below the amazing summary from RSNara.

## Context
Prior, ReactContext used to implement bridge logic.

For bridgeless mode, we created BridgelessReactContext < ReactContext

## Problem

This could lead to failures: we could call bridge methods in bridgeless mode.

## Changes
Primary change:
- Make all the react instance methods inside ReactContext abstract.

Secondary changes: Implement react instance methods in concrete subclasses:
- **New:** BridgeReactContext: By delegating to CatalystInstance
- **New:** ThemedReactContext: By delegating to inner ReactContext
- **Unchanged:** BridgelessReactContext: By delegating to ReactHost

## Auxiliary changes
This fixes ThemedReactContext in bridgeless mode.

**Problem:** Prior, ThemedReactContext's react instance methods did not work in bridgeless mode: ThemedReactContext wasn't initialized in bridgeless mode, so all those methods had undefined behaviour.

**Solution:** ThemedReactContext now implements all react instance methods, by just forwarding to the initialized ReactContext it decorates (which has an instance).

NOTE: Intentionally not converting `BridgeReactContext` to Kotlin to minimize the risk of these changes.

Reviewed By: RSNara

Differential Revision: D55964787

fbshipit-source-id: b404efe0c7095894fa815165cc8682f78dccfa17
2024-04-12 01:47:52 -07:00
Samuel Susla b4f9aa1479 fix sticky header with tappable element (#44046)
Summary:
X-link: https://github.com/facebook/react-fbsource-import/pull/5

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

changelog: [internal]

`passthroughAnimatedPropExplicitValues` from sticky header were removed in D46703731 with assumption that native animations trigger on complete callback and it can be used as a synchronisation point for Fabric.
On complete callback is triggered for native animations do trigger on complete callback with one exception: when the native animation is driven by scroll view's content offset.
As a result, synchronisation between React and Fabric doesn't happen and Pressability stops working if there is a pressable element in the sticky header.

Reviewed By: rubennorte

Differential Revision: D56005408

fbshipit-source-id: daead3a566e157593aa3f1b3ae3553ec1094b6da
2024-04-12 01:35:07 -07:00
Ruslan Lesiutin aacde17954 Fusebox/RDT: setup global for Fusebox React DevTools dispatcher (#43418)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43418

Changelog: [Internal]

This diff adds a script, which will be later imported from `InitializeCore` to setup a required global for communication between React Native runtime (RDT Backend in it) and Chrome DevTools Frontend (RDT Frontend in it).

See README for the architecture overview and how bidirectional communication is established.

Corresponding PR in Chrome DevTools frontend - https://github.com/facebookexperimental/rn-chrome-devtools-frontend/pull/15

Reviewed By: motiz88

Differential Revision: D54770207

fbshipit-source-id: 0f0f04a338b5c7eab817c843a99b07cca95e57fd
2024-04-12 01:14:22 -07:00
Sam Zhou 78d523d178 Fix type errors that will be exposed in future versions of Flow (#44049)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44049

Changelog: [Internal]

Reviewed By: panagosg7

Differential Revision: D56036891

fbshipit-source-id: e7771d51bd8797c7237a66b499e1e6e082b8912d
2024-04-11 16:28:25 -07:00
D N 401f2fbb14 chore: [TS] Transform TouchableHighlight from class to ForwardRef component (#44038)
Summary:
If you check the source of truth `packages/react-native/Libraries/Components/Touchable/TouchableHighlight.js` I'll find that `TouchableHighlight` is a result of `React.forwardRef(...)` :

https://github.com/facebook/react-native/blob/44d59ea6f9a1705487314e33de52f7056651ba25/packages/react-native/Libraries/Components/Touchable/TouchableHighlight.js#L382-L391

So the TS type isn't correct : (

```tsx
<TouchableHighlight ref={ref => {   }} />
//                     ^^^ ref should be a `View` (but now it's `TouchableHighlight`)
```

 ---

**Breaking  changes**

As `TouchableHighlight` isn't class anymore it can't be used as value & type

```tsx
import {TouchableHighlight} from 'react-native';
const ref = useRef<TouchableHighlight>();
//                ^^^ TS2749: TouchableHighlight refers to a value, but is being used as a type here.
//                            Did you mean typeof TouchableHighlight?
```

**Recommend solution:** use build-in react type `React.ElementRef`

```diff
-const ref = useRef<TouchableHighlight>();
+const ref = useRef<React.ElementRef<typeof TouchableHighlight>>();
```

Also, it possible to use `View` as type:

```diff
-const ref = useRef<TouchableHighlight>();
+const ref = useRef<View>();
```

## Changelog:

[GENERAL] [BREAKING] - [Typescript] Transform TouchableHighlight from JS class to ForwardRef component

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

Test Plan: See: `packages/react-native/types/__typetests__/index.tsx`

Reviewed By: NickGerleman

Differential Revision: D56015309

Pulled By: dmytrorykun

fbshipit-source-id: fee346536787a5921626ed69a4c01da2b599dc2f
2024-04-11 14:21:55 -07:00
D N 3d00549399 chore: [TS] Transform TouchableOpacity from class to ForwardRef component (#44030)
Summary:
If you check the source of truth `packages/react-native/Libraries/Components/Touchable/TouchableOpacity.js` I'll find that `TouchableOpacity` is a result of `React.forwardRef(...)` :

https://github.com/facebook/react-native/blob/f7eaf63881b23216c06ab3c81ea94d0312cd6a7b/packages/react-native/Libraries/Components/Touchable/TouchableOpacity.js#L326-L335

So the TS type isn't correct : (

```tsx
<TouchableOpacity ref={ref => {   }} />
//                     ^^^ ref should be a `View` (but now it's `TouchableOpacity`)
```

 ---

**Breaking  changes**

As `TouchableOpacity` isn't class anymore it can't be used as value & type

```tsx
import {TouchableOpacity} from 'react-native';
const ref = useRef<TouchableOpacity>();
//                ^^^ TS2749: TouchableOpacity refers to a value, but is being used as a type here.
//                            Did you mean typeof TouchableOpacity?
```

**Recommend solution:** use build-in react type `React.ElementRef`

```diff
-const ref = useRef<TouchableOpacity>();
+const ref = useRef<React.ElementRef<typeof TouchableOpacity>>();
```

Also, it possible to use `View` as type:

```diff
-const ref = useRef<TouchableOpacity>();
+const ref = useRef<View>();
```

## Changelog:

[GENERAL] [BREAKING] - [Typescript] Transform `TouchableOpacity` from JS `class` to `ForwardRef` component

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

Test Plan: See: `packages/react-native/types/__typetests__/index.tsx`

Reviewed By: NickGerleman

Differential Revision: D56017133

Pulled By: dmytrorykun

fbshipit-source-id: 58f4c1a14c9b3bd2407ea6c825a90b355acb16bb
2024-04-11 14:15:27 -07:00
Riccardo Cipolleschi 46b6453eb6 Fix the Redefinition of 'NativeXXXSpecJSI' error with Frameworks (#44005)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44005

When using frameworks on iOS, there is a possibility that modules import the Spec.h file twice and this might end up in a Redefinition of some symbols and duplication of symbols which ends up in build errors, as reported here: https://github.com/facebook/react-native/issues/42670.

This change adds some [`#include guards`](https://en.wikipedia.org/wiki/Include_guard) in codegen to avoid the redefinition of those symbols if the header is imported/included multiple times.

Note: I also experimented with `#pragma once`, but it looks like Apple is not happy with that directive. [It seems](https://forums.developer.apple.com/forums/thread/739964) that it started working flakely from Xcode 15.

## Changelog:
[General][Fixed] - Make sure that we can't include Codegen symbols multiple times

Reviewed By: cortinico

Differential Revision: D55925605

fbshipit-source-id: 15ca076aace2ffbd03ab8fa8a68a3d8ce0d1ea65
2024-04-11 11:39:43 -07:00
Sophie L 9433506465 chore(AndroidExecutors): clean up outdated compat function (#43958)
Summary:
this PR cleans up an outdated compatibility function in AndroidExecutors. the function in question was checking whether the code was running on Gingerbread or later - this is no longer needed, as RN requires Marshmallow or later.

## Changelog:

[INTERNAL] [FIXED] - Clean up outdated compatibility function

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

Test Plan: this should work as normal.

Reviewed By: cortinico

Differential Revision: D55877661

Pulled By: dmytrorykun

fbshipit-source-id: 02eac50b0898d683f6abf731bf8e438ae4219a41
2024-04-11 10:41:54 -07:00
Samuel Susla 77efd191a8 use availableSize instead of measure result for measureLines (#43979)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43979

changelog: [internal]

using `availableSize` instead of `measurement` to avoid dependency on calling `textLayoutManager_->measure` before dispatching `onTextLayout` event.
This is important in subsequent optimisation.

Reviewed By: javache

Differential Revision: D55796594

fbshipit-source-id: 06b516e2afaf668c6359ad86b570229824933bae
2024-04-11 10:00:25 -07:00
hurali97 5e9ed14cb1 Changelog: 0.71.18 (#44008)
Summary:
## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

Changelog: [Internal] Generated changelog

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

Reviewed By: christophpurrer

Differential Revision: D56017161

Pulled By: dmytrorykun

fbshipit-source-id: 512c576a055a17b37a1f9fd5e328a1ff5165b398
2024-04-11 08:50:56 -07:00
Blake Friedman affadb6da8 core-cli-utils - Added version information
Summary:
Using version information previously housed in react-native-communtiy/cli

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D55960009

fbshipit-source-id: 38f8b2310942a9337a7b64b51a87ae629d9bbbaf
2024-04-11 07:59:01 -07:00
Fabrizio Cucci e14e6ce2a1 Fix rn-tester label color in drawer example (#44039)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44039

Changelog: [Internal]

Get label color from theme to fix dark mode.

Reviewed By: NickGerleman

Differential Revision: D56011777

fbshipit-source-id: 3ef14d6437c51118f0c0db3950b24f7e71d33fb3
2024-04-11 07:45:10 -07:00
Samuel Susla 840fd30194 delete text measure cache experiment (#43914)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43914

changelog: [internal]

This QE with caching text measurement and NSTextStorage did not deliver the desired results. Let's remove the code to simplify the text measure infra.

Reviewed By: javache

Differential Revision: D55753670

fbshipit-source-id: b194c4ca1eded70b0d00da748716628c264a47b9
2024-04-11 05:47:41 -07:00
Andrew Datsenko 88c7391485 //xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate:appstateAndroid (#43938)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43938

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D55726807

fbshipit-source-id: 7338ee8949c05e192c47c6c06e999600dfad07a9
2024-04-11 05:25:47 -07:00
Blake Friedman b530371b7f react-native-info - clean up licenses + docs
Summary:
Capturing the correct attribution in the licenses as well as adding some documentation.

I think the code will have changed significantly enough across the files that once we change to flow, we can drop the attribution in the files but leave the mention in the README.

Changelog: [Internal]

bypass-github-export-checks

Reviewed By: huntie

Differential Revision: D55752899

fbshipit-source-id: b436d745d5ad439661d2af840b2cc8df4bff0038
2024-04-11 05:16:46 -07:00
Samuel Susla 564f86ef92 add .gitignore for rn-tester build artifacts (#44041)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44041

changelog: [internal]

Building rn-tester left artifacts that would be picked up by mercurial.

```
❯ hg s
? rn-tester.xcodeproj.local/Project Settings.plist
? rn-tester.xcodeproj.local/Project Settings.plist.lock
```

To mitigate this, add  `rn-tester.xcodeproj.local` introduce .gitignore for rn-tester.

Reviewed By: fabriziocucci

Differential Revision: D56006193

fbshipit-source-id: 5701f1adf395e98f84ca59574dbd8747cf7e85db
2024-04-11 04:53:08 -07:00
Mohamed Moussa 08ecdee71c Fix missing setLeftTopRightBottom method (#44033)
Summary:
We were seeing errors due to `setLeftTopRightBottom` being called without a check for the Android version despite that method [being added in Android API level 29](https://developer.android.com/reference/android/view/View#setLeftTopRightBottom(int,%20int,%20int,%20int)). I've replaced it with the older API methods to fix the issue.

This issue originates from https://github.com/facebook/react-native/pull/38526

## Changelog:

[ANDROID] [FIXED] - Resolved error "No virtual method setLeftTopRightBottom"

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

Test Plan: Change is pretty trivial, but we tested it in our production app ([Tarteel](https://www.tarteel.ai/)) for a week and confirmed that the error is resolved.

Reviewed By: cortinico

Differential Revision: D56002098

Pulled By: NickGerleman

fbshipit-source-id: ff97d0be2703006b14c865dd148e40eb10069acb
2024-04-11 04:28:07 -07:00
Nick Gerleman 44d59ea6f9 Make new nodes dirty by default (#44010)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44010

X-link: https://github.com/facebook/yoga/pull/1641

Yoga has quirk where newly constructed nodes are clean, which isn't really correct. Normally never shows in in real code because setting a style or children  will dirty. Fabric doesn't use the public APIs that do this dirtying, so it ends up getting creative instead.

We should fix so that newly constructed nodes are dirty. Copy-constructed Nodes (also only a Fabric thing, will retain original dirty flag.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D55855328

fbshipit-source-id: be49efaf8ac29351f8e5ec509bd9912546944332
2024-04-10 22:15:25 -07:00
Fabrizio Cucci 3098613f6e Fix ReactImagePropertyTest (#44028)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44028

Changelog: [Internal]

While testing something completely unrelated (i.e. D55964787), I've noticed that [test_android](https://github.com/facebook/react-native/actions/runs/8635097933/job/23673157303?pr=44026) actually failed on Github with this error:

> Task :packages:react-native:ReactAndroid:compileDebugUnitTestKotlin
e: file:///__w/react-native/react-native/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/image/ReactImagePropertyTest.kt:62:38 Smart cast to 'CatalystInstance' is impossible, because 'catalystInstanceMock' is a mutable property that could have been changed by this time

Reviewed By: RSNara

Differential Revision: D55982797

fbshipit-source-id: a49e766ae95e22603293326da93007d78250da6a
2024-04-10 15:45:16 -07:00
Biki-das f7eaf63881 - added combining animted values example to the animated api example list (#43435)
Summary:
Added an example to add ```combining``` values with the animated API

## Changelog:

[General] [Added] - Add examples for Combining Animated Values with the Animated API

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

Test Plan:
https://github.com/facebook/react-native/assets/72331432/c4a0c1e2-df9d-4e73-8602-e4550a22b8dc

https://github.com/facebook/react-native/assets/72331432/d2f1196e-68b0-49d4-8d3d-2c53ee30652b

Reviewed By: cortinico

Differential Revision: D55917557

Pulled By: hoxyq

fbshipit-source-id: d4214323f2a8823b1b3fe0c8d90a7518d0953b48
2024-04-10 10:55:17 -07:00
Alan Lee 244eb42b33 add back @Deprecated in ViewUtil (#44011)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44011

Add back `Deprecated` annotation which was removed in D55651762

Changelog:
[Internal] internal

Reviewed By: javache

Differential Revision: D55955345

fbshipit-source-id: bc255983a57fa01e63b17400079cf4215de9a41f
2024-04-10 09:43:04 -07:00
Nicola Corti 80aa714630 Move reactperfloggerjni to INTERFACE library (#43998)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43998

Another library with an empty JNI_OnLoad method.
Moving it to `INTERFACE` so it exposes only the Header it has declared.
This removes the `libreactperfloggerjni.so` from the final APK.

Changelog:
[Internal] [Changed] - Move reactperfloggerjni to INTERFACE library

Reviewed By: javache

Differential Revision: D55919228

fbshipit-source-id: 634f4f6013825b0de8827b3143a012e6c880509d
2024-04-10 09:19:26 -07:00
Nicola Corti 3f2b1d732f Add changelog for v0.74.0-rc.8 (#44024)
Summary:
Add changelog for v0.74.0-rc.8

## Changelog:

[INTERNAL] - Add changelog for v0.74.0-rc.8

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

Test Plan: N/A

Reviewed By: cipolleschi

Differential Revision: D55967400

Pulled By: cortinico

fbshipit-source-id: 0b76a5e3187c8c9c4027fe6a0f04db8864630271
2024-04-10 08:04:01 -07:00
Andrew Datsenko c8d5f0f1aa //xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance:appearanceAndroid (#44006)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44006

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D55725334

fbshipit-source-id: 4d7ad2bb6395674d47fd5e3cd01a8515627f6cd4
2024-04-10 07:45:57 -07:00
Rubén Norte b9a2249fff Implement potential fix for mounting errors during synchronous state updates (#44015)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44015

Changelog: [internal]

## Context

When we introduced synchronous state updates in Fabric, we saw some crashes on coming from the mounting layer on Android.

It seems some of these crashes are caused by nested mount operations. When we're mounting some views, like [scroll views](https://github.com/facebook/react-native/blob/881c0bc8970b9e402df6b4f87e1759b238b24735/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java#L383), we dispatch state updates that end up doing more mutations. When we were doing these state updates asynchronously, all the original mutations were processed before these updates, but now that we do them synchronously, the mutations are interleaved causing errors.

## Changes

This introduces a new flag that will force all the mutations going through `MountItemExecutor` in `FabricUIManager` to be batched instead of executed synchronously. This fixes the issues I saw locally and I'm expecting this will unblock synchronous state updates in production.

Potentially, this might fix other crashes we've been seeing with a low frequency.

Reviewed By: sammy-SC

Differential Revision: D55942125

fbshipit-source-id: b8d9c145ec307de7318dbbed14880bc9a84fdb2a
2024-04-10 07:44:11 -07:00
Andrew Datsenko 54757ca017 //xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper:imagehelperAndroid (#44001)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44001

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D55725532

fbshipit-source-id: 5fa4e774247e79b0e43d04f58dcb150d682de090
2024-04-10 07:41:29 -07:00
Rubén Norte ea566ad70d Remove unnecessary systrace section from UIManagerBinding (#44003)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44003

Changelog: [internal]

This systrace section isn't providing any value, as the durations are always negligible.

Reviewed By: christophpurrer

Differential Revision: D55921320

fbshipit-source-id: 95e1de3359ecc0cde3e913b6f77b567cdd126214
2024-04-10 05:50:30 -07:00
Moti Zilberman 403bbae1f2 Stub support for Tracing start/end methods and events (#44004)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44004

Changelog: [Internal]

Adds the minimal boilerplate needed to support taking an (empty) recording using Chrome DevTools's Performance panel.

Reviewed By: hoxyq

Differential Revision: D55925170

fbshipit-source-id: 8f5048bd545be3ef410b794573ef7b7bc92f73cc
2024-04-10 04:04:12 -07:00
Moti Zilberman 27ef6cdbaf Update debugger-frontend from b0a76fa...864bc72 (#44013)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44013

Changelog: [Internal] - Update `react-native/debugger-frontend` from b0a76fa...864bc72

Resyncs `react-native/debugger-frontend` from GitHub - see `rn-chrome-devtools-frontend` [changelog](https://github.com/facebookexperimental/rn-chrome-devtools-frontend/compare/b0a76fa92f6c34b524bc8aff5b611456f1537ca3...864bc721a3f0f26b94f5730e59739a25e3182ce5).

Reviewed By: hoxyq

Differential Revision: D55957651

fbshipit-source-id: a3a18bd18b729cef6f645eeeb0ab77771d6f1202
2024-04-10 02:29:39 -07:00
Soe Lynn f6b9a42985 Deprecate react_native_image_logging GK (#44009)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44009

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

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

Clean up RCTImageLoadingPerfInstrumentationEnabled as GK is 100%

Changelog:
[iOS][Breaking] Remove unused RCTImageLoadingPerfInstrumentationEnabled

Reviewed By: philIip

Differential Revision: D55769009

fbshipit-source-id: c99a7b7076597e65acc0ba97f5a4846719688401
2024-04-09 17:47:25 -07:00
Ruslan Shestopalyuk 881c0bc897 Unify DevLoadingView code on JS side to be platform-independent (#43992)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43992

# Changelog:
[Internal] -

While looking into implementing native DevLoadingView on non-Android/iOS platform, I realized that the current code inside `LoadingView.android.js`/`LoadingView.ios.js` is functionally identical, and can be transformed into each other with simple code transformations.

This diff:
* Renames `LoadingView` into `DevLoadingView` (as it's arguably more fitting name, given that it also relies on `NativeDevLoadingView` native module implementation)
* Merges the iOS/Android specific JS files into one
* Factors usage of the colors out of the actual logic, to better separate presentation from the business logic

From the perspective of public APIs there should be no changes.

Reviewed By: christophpurrer

Differential Revision: D55914787

fbshipit-source-id: 656311db80e5ee03f60ee7ffcf5f405ca99a9ce5
2024-04-09 13:21:05 -07:00