feat: merge 0.84-merge into main#3030
Draft
Saadnajmi wants to merge 458 commits into
Draft
Conversation
…4663) Summary: Pull Request resolved: react#54663 This file is from the legacy architecture and no longer needed as it's party of legacy DevX stack. Can safely be removed and cleaned up then. Changelog: [Internal] [Changed] - Reviewed By: cipolleschi Differential Revision: D87798709 fbshipit-source-id: 4332df01e04cad1d481cebd2f785e988e9ca96f9
Summary: Pull Request resolved: react#54683 This class is no longer needed and can be removed. This is a breaking change, but the class was long deprecated so we should be fine removing it. Changelog: [Android] [Removed] - Remove unnecessary and unused BridgeDevSupportManager Reviewed By: javache Differential Revision: D87859861 fbshipit-source-id: f77d7121ace072b2c37408b0d81d84309692e05a
Summary: Pull Request resolved: react#54664 changelog: [internal] This flag is not used anywhere, every app falls to default. Let's remove it. Reviewed By: javache Differential Revision: D87767422 fbshipit-source-id: a5a932d2e8cd5a9f55e62cda7d77beeaecdba00e
Summary: Pull Request resolved: react#54689 This change applies categories to the changelog. ## Changelog: [Internal] - ## Facebook: I used AI to do so, and it did a pretty good job. Prompt: > if you look at the CHANGELOG.md for versions like v0.82.0, v0.81.0, v0.80.0, we have been annotating all the commits with an initial tag, which represent the area affected by the commit. > I want you to go through all the commits of v0.83.0-rc.3, v0.83.0-rc.2, v0.83.0-rc.1, and v0.83.0-rc.0 and annothate each commit with the corresponding area. > Try to reuse areas from previous releases if you can find matches. If it is unclear which area is affected, you can find the link to the commit at the end of the entry. Try to navigate there and read the commit summary to understand which area is affecting. This is [the trajectory](https://www.internalfb.com/intern/devai/devmate/investigator?paste=P2056034816) One **limitation** of DevMate is that it can't go and see what the commit is actually about. Probably cursor can do that. Reviewed By: cortinico Differential Revision: D87870198 fbshipit-source-id: ee61f4cf6a86d44935c393c720d38d7087895d3b
Summary: Pull Request resolved: react#54688 This commit sorts the changelog entries by the tags we added in the previous change ## Changelog: [Internal] - ## Facebook: AI sorted these and it did a good job again. ### Prompt: >The next step for this work is to sort each section of the CHANGELOG.md alphabetically, by using the tag we just added. So, for example, Commits with the Animated: tag should come before commits with the DevTools: tag. > You only have to reorder the commits withing each section, do not apply any other change in the commit. > Focus only on the 0.83 versions: 0.83.0-rc.3, 0.83.0-rc.2, 0.83.0-rc.1, 0.83.0-rc.0, Trajectory: https://www.internalfb.com/intern/devai/devmate/investigator?paste=P2056053048 Reviewed By: cortinico Differential Revision: D87871867 fbshipit-source-id: e2c30e8bda5d61751d9d41c614941dacc7be89c3
Summary: Pull Request resolved: react#54640 # Summary: Trying to add heif/heic files to the ReactVRPlayground but they are not included to metro. Codegen via ``` js1 build buckfiles arc build ``` Insired by D58261501 Changelog: [General][Added] - Bundle support for heic and heif files ___ overriding_review_checks_triggers_an_audit_and_retroactive_review Oncall Short Name: vr_metacam Reviewed By: lenaic, robhogan, javache Differential Revision: D86807752 fbshipit-source-id: 0fd2271f46dc8bc5d568360c50dcd2db067923f6
Summary: Pull Request resolved: react#54693 SurfaceMountingManager stays around even after the surface is stopped - we need to clean these up. Changelog: [Internal] Reviewed By: zeyap Differential Revision: D87875316 fbshipit-source-id: f47a8d34bc9b9f43071c9c113bac1a85a5171748
Summary: Fixed an `ENOENT` exception when a dependency does not export `package.json`, and your repo is set up as a monorepo using pnpm. > [!NOTE] > > This does not fix the actual search algorithm. We shouldn't be using `require.main.paths` here because it does not point to the correct starting point, the project root. > > This change only fixes the case where we cannot find `package.json` at all. ## Changelog: [GENERAL] [FIXED] - Fixed an `ENOENT` exception when a dependency does not export `package.json`, and your repo is set up as a monorepo using pnpm Pull Request resolved: react#54665 Test Plan: **Before:** ``` % node node_modules/react-native/scripts/generate-codegen-artifacts.js -p . -o ios -t ios [Codegen] Analyzing package.json [Codegen] Could not find generated autolinking output at: /~/packages/app/example/ios/build/generated/autolinking/autolinking.json [Codegen] Searching for codegen-enabled libraries in the app. [Codegen] The "codegenConfig" field is not defined in package.json. Assuming there is nothing to generate at the app level. [Codegen] Could not find generated autolinking output at: /~/packages/app/example/ios/build/generated/autolinking/autolinking.json [Codegen] Searching for codegen-enabled libraries in the project dependencies. [Codegen] Found react-native-webapis/web-storage [Codegen] Found react-native [Codegen] Found react-native-safe-area-context Trying to find `package.json` for `webdriverio` in [ '/~/node_modules/.store/react-native-virtual-a5dea7d647/package/scripts/node_modules', '/~/node_modules/.store/react-native-virtual-a5dea7d647/package/node_modules', '/~/node_modules/.store/react-native-virtual-a5dea7d647/node_modules', '/~/node_modules/.store/node_modules', '/~/node_modules', '/node_modules' ] [Codegen] Error: ENOENT: no such file or directory, open '' [Codegen] Done. ``` **After:** ``` % node node_modules/react-native/scripts/generate-codegen-artifacts.js -p . -o ios -t ios [Codegen] Analyzing package.json [Codegen] Could not find generated autolinking output at: /~/packages/app/example/ios/build/generated/autolinking/autolinking.json [Codegen] Searching for codegen-enabled libraries in the app. [Codegen] The "codegenConfig" field is not defined in package.json. Assuming there is nothing to generate at the app level. [Codegen] Could not find generated autolinking output at: /~/packages/app/example/ios/build/generated/autolinking/autolinking.json [Codegen] Searching for codegen-enabled libraries in the project dependencies. [Codegen] Found react-native-webapis/web-storage [Codegen] Found react-native [Codegen] Found react-native-safe-area-context Trying to find package.json for webdriverio in [ '/~/node_modules/.store/react-native-virtual-a5dea7d647/package/scripts/node_modules', '/~/node_modules/.store/react-native-virtual-a5dea7d647/package/node_modules', '/~/node_modules/.store/react-native-virtual-a5dea7d647/node_modules', '/~/node_modules/.store/node_modules', '/~/node_modules', '/node_modules' ] [Codegen] Searching for codegen-enabled libraries in react-native.config.js [Codegen] Processing RNWWebStorageSpec [Codegen] Searching for podspec in the project dependencies. [Codegen] Supported Apple platforms: ios, macos, visionos for RNWWebStorageSpec [Codegen] Processing FBReactNativeSpec [Codegen] Searching for podspec in the project dependencies. [Codegen] Processing safeareacontext [Codegen] Searching for podspec in the project dependencies. [Codegen] Supported Apple platforms: ios, macos, tvos, visionos for safeareacontext [Codegen] Generating Native Code for RNWWebStorageSpec - ios [Codegen] Generated artifacts: ios/build/generated/ios/ReactCodegen [Codegen] [Codegen - FBReactNativeSpec] Skipping iOS code generation for FBReactNativeSpec as it has been generated already. [Codegen] Generating Native Code for safeareacontext - ios [Codegen] Generated artifacts: ios/build/generated/ios/ReactCodegen [Codegen] Generating RCTThirdPartyComponentsProvider.h [Codegen] Generated artifact: ios/build/generated/ios/ReactCodegen/RCTThirdPartyComponentsProvider.h [Codegen] Generating RCTThirdPartyComponentsProvider.mm [Codegen] Generated artifact: ios/build/generated/ios/ReactCodegen/RCTThirdPartyComponentsProvider.mm [Codegen] Generating RCTModulesProvider.h [Codegen] Generated artifact: ios/build/generated/ios/ReactCodegen/RCTModuleProviders.h [Codegen] Generating RCTModuleProviders.mm [Codegen] Generated artifact: ios/build/generated/ios/ReactCodegen/RCTModuleProviders.mm [Codegen] Generating RCTAppDependencyProvider [Codegen] Generated artifact: ios/build/generated/ios/ReactAppDependencyProvider/RCTAppDependencyProvider.h [Codegen] Generated artifact: ios/build/generated/ios/ReactAppDependencyProvider/RCTAppDependencyProvider.mm [Codegen] Generated podspec: ios/build/generated/ios/ReactAppDependencyProvider/ReactAppDependencyProvider.podspec [Codegen] Generated podspec: ios/build/generated/ios/ReactCodegen/ReactCodegen.podspec [Codegen] Generating Package.swift [Codegen] Generated artifact: ios/build/generated/ios/Package.swift [Codegen] Done. ``` Reviewed By: cipolleschi Differential Revision: D87872496 Pulled By: cortinico fbshipit-source-id: b9da0e1808248cb806a2a8a0ee575566ce027067
Summary: Pull Request resolved: react#54670 This is a port back to main of [this commit](react@eb78fba) which landed in 0.83 to make sure that the network panel is enabled for Android and for iOS builds from source. ## Changelog: [Internal] - Reviewed By: cortinico Differential Revision: D87864636 fbshipit-source-id: 7176407ec3af1407bf4bde9e9552dea7443ad92e
…utput path (react#54609) Summary: The argument for the output path to this CLI has always been optional, but the types didn't reflect this, which caused a few regressions in recent changes (e.g. react#53503) There's several code paths where the `baseOutputPath` can be altered or derived in different ways, which wasn't respected in logic before the main codegen output block or in `generateReactCodegenPodspec`. When applied, this PR alters the `baseOutputPath` logic to use a default by `computeBaseOutputPath` extracted from `computeOutputPath` and have an added `process.env.RCT_SCRIPT_OUTPUT_DIR` override, which was previously only applied to `readReactNativeConfig` This should restore: - `react-native codegen` being run without an `--outputPath` argument - codegen running with a `package.json:codegenConfig.outputDir` override Resolves react#54473 ## Changelog: [GENERAL] [FIXED] - Ensure codegen CLI supports unspecified `--outputPath` argument and respects `codegenConfig.outputDir` configurations Pull Request resolved: react#54609 Test Plan: - Manually run `react-native codegen` in `rn-tester` Reviewed By: cipolleschi Differential Revision: D87456501 Pulled By: cortinico fbshipit-source-id: 997e99af1f99227eb70955478643b28b1a90df61
Summary: Fixed `hermes-compiler` not being resolved correctly when your repo is set up as a monorepo using pnpm. ## Changelog: [GENERAL] [FIXED] - Fixed `hermes-compiler` not being resolved correctly when your repo is set up as a monorepo using pnpm. Pull Request resolved: react#54667 Test Plan: n/a Reviewed By: cortinico Differential Revision: D87873273 Pulled By: cipolleschi fbshipit-source-id: 4d60a00ae579bc4a671d6536de4dd02bdefef6c8
Summary: Pull Request resolved: react#54690 Changelog: [iOS][Fixed] - Fixed crash from dismiss button in DevLoadingView D86420230 added a dismiss button feature to RCTDevLoadingView. However, when adding layout constraints on line 198, it incorrectly checked the `dismissButton` parameter instead of the `self->_dismissButton` instance variable. This caused NSLayoutConstraint crashes when the parameter was nil/false but the instance variable existed from a previous call, or vice versa. This changes line 198 to check `self->_dismissButton` (the instance variable) instead of `dismissButton` (the function parameter) to properly verify if the button exists before adding constraints to it. Reviewed By: vzaidman, javache Differential Revision: D87871856 fbshipit-source-id: c8fe033bce383c2589041c9cd3fad65f37553d3c
…#54633) Summary: Pull Request resolved: react#54633 # Changelog: [Internal] This introduces a proper lifecycle for a module on Anroid that will emit frames information as part of the trace recording. Previously we would initialize it on a packager connection, which could be problematic, since there is no guarantee that InspectorTarget exists at this time. With the current approach, the lifetime of this object is: - Bound to lifetime of InspectorTarget, it will never outlive it - The actual frames listener lifetime will be bound to tracing state. We no longer will be going through `jni` to check if `PerformanceTracer` is enabled. I've renamed it to `FrameTimingsObserver`and moved to inspector package, since this should be considered as part of the inspector stack. Similarly to `LoadNetworkResource` listeners. I am keeping the `jni` layer with PerformanceTracer for now, but this is about to be removed in the diffs above. The frames information should be propagated through Host, this would allow us to record Frames even if there is no React Native instance, for example, during reloads. Reviewed By: sbuggay Differential Revision: D87345177 fbshipit-source-id: e92ffb29e1761ac8a425a1fbfe27d3edca85ddd4
Summary: Pull Request resolved: react#54677 # Changelog: [Internal] Currently, `HostTraceRecordingState` is used everywhere and it is the final data struct that contains the tracing profile. At the same time, the original idea for it was to be a global state for Tracing Agents, where they could: 1. Read the tracing configuration, like tracing mode, enabled categories, etc. 2. Stash corresponding target profiles on reloads. For example, if `RuntimeTarget` was reloaded during tracing, `RuntimeTracingAgent` would stop JavaScript sampling profiler, and then stash this profile on a state. This change should clarify the data structures and when they are used. Reviewed By: sbuggay Differential Revision: D87830455 fbshipit-source-id: 15c48baede85a2d85744d9c3c3b7a419c1f1d299
Summary: Pull Request resolved: react#54679 # Changelog: [Internal] Adding a data structure that could be configured to preserve entries that are inside of a specified time window. At the same time, this data structure could be used as a simple buffer, if no arguments were specified during constructing. This follows the approach that was added to `PerformanceTracer`, but it doesn't use pointers to avoid dealing with updates during copies or moves. Reviewed By: sbuggay Differential Revision: D87776299 fbshipit-source-id: d20bf6dd08af7971aaf34ffc11ec5993b8edaf4b
Summary: Pull Request resolved: react#54673 # Changelog: [Internal] `HostTargetTraceRecording` will receive the tracing window size as a parameter and will propagate it to `TraceRecordingState`. This will make sure that all Tracing Agents actually aware of the window size. For example, once we add Frames to Host layer, it should use the same window size, as `PerformanceTracer`, which is initialized in `InstanceTracingAgent`. Reviewed By: sbuggay Differential Revision: D87782664 fbshipit-source-id: 58203065d68ac898adc785317ec2cb792efd13dc
Summary: Pull Request resolved: react#54674 # Changelog: [Internal] This diff introduces a definition for `FrameTimingSequence`, which will represent the different phases of a frame that will be reported as part of the trace. These sequences will be stored on a `HostTargetTraceRecording`. It is `Host`'s responsibility to propagate these entities to `HostTarget`, there will be a corresponding method for this. Reviewed By: sbuggay Differential Revision: D87373811 fbshipit-source-id: bd894f8c39a6d4ee0bef1303e4f801b27fabc901
Summary: Pull Request resolved: react#54672 # Changelog: [Internal] Introduces an endpoint on `HostTarget` for capturing frame timings. This exposes a public API to Host, which could be called during active tracing session. `Host` could be notified through tracing delegate in `HostTargetDelegate` about tracing state, this has been implemented below as part of this diff stack. Reviewed By: sbuggay Differential Revision: D87373807 fbshipit-source-id: 3ffc5f2b803164e4316ff6c3824672c842187ddd
Summary: Pull Request resolved: react#54675 # Changelog: [Internal] Extracing the spec for frames events to a new class `TraceEventGenerator`. This is a preparation for moving frames events to Host. Reviewed By: sbuggay Differential Revision: D87373809 fbshipit-source-id: 56538a8fae7d41a7117cd8445b15630ac7f50672
…ile (react#54681) Summary: Pull Request resolved: react#54681 # Changelog: [Internal] Now when Frame Timings are part of the whole `HostTargetTracingProfile`, we need to define how these will be serialized into chunks of `Tracing.dataCollected` messages. Reviewed By: sbuggay Differential Revision: D87373810 fbshipit-source-id: dd4e9ce6c691e92710d9c3c66f7d134f3fba1ddd
Summary: Pull Request resolved: react#54671 # Changelog: [Internal] Replaces the calls to `PerformanceTracer` through `jni` with the calls through inpsector's `HostTarget`. Reviewed By: sbuggay Differential Revision: D87373808 fbshipit-source-id: f86a679a09b1586a426e69914de2c9f658289039
Summary: Pull Request resolved: react#54678 # Changelog: [Internal] This is not a breaking change, since it removes something that wasn't yet rolled out to OSS - it is unused. Reviewed By: sbuggay Differential Revision: D87378393 fbshipit-source-id: 3d560276d029cdab942e76fe34111d63e453a26c
Summary: Pull Request resolved: react#54680 # Changelog: [Internal] Reviewed By: sbuggay Differential Revision: D87549337 fbshipit-source-id: de885f1c74b1bd1e9acd4248618c4e081813f3dc
Summary: Pull Request resolved: react#54676 # Changelog: [Internal] Reviewed By: sbuggay Differential Revision: D87549336 fbshipit-source-id: b94645ba0ed12979ed7129c767c38587420c6cc0
Summary: In react#54139 I have removed checking shared preferences for `debug_http_host`. The diff reverts this removal because it is used for changing the bundle source before the app starts. ## Changelog: [ANDROID][FIXED] - revert removal of checking shared preferences for `debug_http_host`. Pull Request resolved: react#54687 Test Plan: I have run the `rn-tester` app and swapped a default prefs file on Android emulator located in: `/data/data/com.facebook.react.uiapp/shared_prefs/com.facebook.react.uiapp_preferences.xml` with one that had updated port in `debug_http_host` setting to `8082`: ```xml <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="fps_debug" value="true" /> <string name="debug_http_host">10.0.2.2:8082</string> <boolean name="inspector_debug" value="true" /> </map> ``` Then, I have run the app and checked if the bundle is loaded from the Metro instance invoked using `yarn start --port 8082`. Reviewed By: cortinico Differential Revision: D87869540 Pulled By: coado fbshipit-source-id: 9a76990b097ad7ff24cbbc5202ca935053de23e5
Summary: Previously the symbolication support when using the precompiled React.XCFramework copied the symbol bundles to the wrong folder in the framework, causing Xcode to not find the symbols. This commit fixes this by copying symbols to the correct slice folders instead of in the root of the framework folder. Note: Running `pod cache clean --all` and `rm -rf Pods` in the iOS folder followed by a clean rebuild in Xcode might be a good thing to ensure you're using the correct binaries when compiling. ## Changelog: [IOS] [FIXED] - Fixed copying symbol bundles into correct slice folder Pull Request resolved: react#54641 Test Plan: ``` npx react-native-community/cli init Next --version next --skip-install cd Next yarn cd ios bundle install RCT_USE_RN_DEP=1 RCT_USE_PREBUILT_RNCORE=1 RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS=1 bundle exec pod install ``` Run Xcode and observe that you are not able to step into React Native source code. After this fix, you should be able to step into the source code of React Native. Reviewed By: cortinico Differential Revision: D87919202 Pulled By: cipolleschi fbshipit-source-id: 029bca3e182c170562e358beb50592d5b91d8e8b
Summary: Pull Request resolved: react#54696 Changelog: [iOS][Fixed] - Fixed dismiss button not appearing consistently in dev loading view D87465522 introduced lazy initialization to reuse views across multiple `showMessage` calls for better performance. However, this exposed two bugs: 1. **Missing button bug**: Button creation was inside the `if (self->_container == nullptr)` block, which now only executes once. If the first call had `dismissButton=NO`, subsequent calls with `dismissButton=YES` would skip button creation since the container already existed. 2. **Button text wrapping bug**: The button didn't have compression resistance priority set, so Auto Layout could compress it to fit the layout, causing the text to wrap. This fixes both issues by: - Moving button creation/removal logic outside the container initialization so it runs on every call and dynamically adds or removes the button based on the current `dismissButton` parameter - Setting compression resistance and content hugging priorities on the button to prevent it from being compressed, forcing the message label to wrap instead - Resetting all UI elements in `hide()` to ensure clean state between loading sessions The performance optimization from D87465522 is preserved - views are still reused during rapid Metro progress updates. Reviewed By: javache Differential Revision: D87870932 fbshipit-source-id: 052d4a0685ee288e3b4bf974b203e4f29c652436
Summary: Pull Request resolved: react#54691 Improve error message for incorrect TurboModule invocations to avoid HostFunction: <unknown error> Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D87868433 fbshipit-source-id: f351a6e7ea59c56fcb0991eb799c4217382fdb4e
…code (react#54684) Summary: Pull Request resolved: react#54684 This diff removes the `RCTTurboModuleSyncVoidMethodsEnabled` feature flag and all related code that allowed TurboModule void methods to execute synchronously. Changelog: [Internal] Reviewed By: philIip Differential Revision: D87865883 fbshipit-source-id: fa64e8105e8329a0b20bb1718dbc01b17464cd06
Summary: Pull Request resolved: react#54697 This is just a follow-up from the previous NPE fix. I'm adding a couple of tests for the affected method. Changelog: [Internal] [Changed] - Reviewed By: javache Differential Revision: D87920989 fbshipit-source-id: fba47365bbb8c94240d3daf11cf4226bfaf701d3
Merge upstream fork point 2166ab7 while preserving the macOS fork behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make the physical key code optional because the macOS emitter does not provide it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refresh the generated public type surface from the resolved 0.84 sources. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add the minimal AppKit aliases and platform guards required by new 0.84 UIKit and SwiftUI code paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid the moving nightly ABI and regenerate Yarn and CocoaPods locks for the fork-compatible source build. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reuse the shared trait-to-role mapping and keep self-reference proxies leaf-only for VoiceOver. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use one raw payload with KeyDownEvent and KeyUpEvent wrappers across platforms, retain compatible deprecated aliases, and add legacy key normalization coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Apply the border-radius workaround inside upstream style processing so the local overrides object remains defined. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Honor react-native-macos Yarn constraints while retaining the local DotSlash build and test workspace. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reuse the established macOS and visionOS guard around accessory-view recycle state. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep alert windows on the active UIWindowScene and compile the screen fallback only for supported platforms. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid shell interpolation, harden regex parsing, and fully escape generated markdown while preserving existing behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Tighten merged type annotations and preserve macOS compatibility behavior without changing runtime semantics. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the remaining polynomial regex with a linear delimiter parser while preserving frame semantics. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove the obsolete moving-nightly Hermes preinstall and refresh the lockfile against the rebased 0.84 package graph. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep Metro package extensions on the 0.84 line, restore merge-base-aware Hermes fallback, and preserve shell-safe XCFramework probing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep CocoaPods on merge-base-compatible source-built Hermes and regenerate the RNTester pod lock after rebasing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep UIKit-only presentation helpers off macOS and prevent codegen from traversing pnpm dependency symlinks or generated trees. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Exclude the generic C++ View platform when building the macOS SPM target so host event declarations and implementations remain coherent. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merge up to the merge base of
0.84-stable(the first commit on the upstream0.84-stablebranch,2166ab782a6), prepping this branch for the 0.84 release. For the cross-platform 0.84 changes (Hermes V1, precompiled iOS binaries, removal of legacy iOS architecture components, Node.js 22, etc.), see the RN 0.84 release notes.The branch is rebased onto Microsoft
mainatef09dd72. The recreated mechanical merge is86e07385with exact parentsef09dd72(Microsoft main) and2166ab78(the Facebook 0.84 fork point); the0.84-stabletip is not merged.New for react-native-macos since 0.83:
Build & distribution
react-native-test-librarypackageFabric, accessibility & input on macOS
HostInstancefocus and blur command signaturesRCTViewAccessibilityElementto upstream's setter-based accessibility ordering while keeping the macOS proxy leaf-only and synchronizedKeyDownEvent/KeyUpEventmodel while preserving emitted macOS fieldsHermes
The history is intentionally layered into a mechanical merge commit followed by focused, reversible macOS ports so the merge can be recreated or rebased cleanly.
Conflict resolution appendix
The original fork-point merge produced 153 conflicted paths / 281 conflict hunks. Its final adjudication was 11 upstream/stale-local, 28 preserve-macOS, 242 combine, 0 unresolved. Rebasing onto current Microsoft
mainproduced 55 unique index-conflict paths: 53 were already in the original inventory and two were new base-integration paths (.flowconfigandpackages/rn-tester/Podfile). The combined unique inventory below therefore contains 155 paths. Package manifests, lockfiles, and generated project metadata were reconciled mechanically; the table below focuses on behavior and architecture that warrant reviewer attention.Reviewer guide
RCTReactNativeFactory/RCTHost; legacy-architecture compile-out and header moves reshape AppDelegate setup.focus/blurtoHostInstancecommand arguments across JS and native code.ViewNativeComponent.jstakes the upstream signature; native commands remain available on macOS and duplicate UIKit-only methods are platform-guarded. The JS spec and native implementation were kept atomic.KeyboardEventPayloadplusKeyDownEvent/KeyUpEventsynthetic wrappers.code; capture handlers and legacy handled-key props remain supported.code, real macOS modifier fields, canonical wrappers across View/Pressability/TextInput, deprecated compatibility aliases, regenerated API types, and focused normalization tests. Seeff3eb390.bf975098; the Fabric accessory reset is excluded on both macOS and visionOS in021f7cd8.accessibilityElementsownership to a setter onRCTViewComponentView.NSAccessibilityElementproxy when an accessibility order refers to the view itself; using the NSView as its own child creates a VoiceOver traversal cycle.RCTViewAccessibilityElementas a leaf proxy instantiated by the upstream setter path.b1bd0184keeps traits synchronized, reuses the shared role mapping, and prevents duplicate child subtrees.e2251e82.RCTUIImage/RCTPlatformImageabstraction, animated image view, local/bundle loaders, and AppKit-compatible blur/loading behavior are still used.e2251e82; the visionOS alert fallback was corrected without changing iOS/macOS behavior in68888b7f.RCTPlatform*/RCTUIKit abstractions.view/platform/macosremains owned byreactFabric; nonexistenttextinput/platform/macosandtextlayoutmanager/platform/macospaths were not invented. SwiftPM/CocoaPods ownership andMacOSSwitchShadowNode.mmexclusions remain aligned.e2251e82, rather than obscuring them inside the mechanical merge.RuntimevsIRuntimeJSI ABI mismatch.1000.0.0withhermes-compiler: 0.0.0. Seea8959b6c.fb-dotslashis the production dependency; Electron 39.8.1 is dev-only and excluded from the published package. Shell-interpolated prebuild/release commands were converted to argument-safe process/filesystem APIs in38e24834andb49508e9.NetworkOverlay.js.react-native-test-libraryand RNTester testsreact-native-test-libraryremains an active macOS package, including its native component fixtures and macOS example; selected UIManager/event/view tests still cover fork behavior.react-native-test-librarypackage, including the three explicit modify/delete conflicts; retain still-relevant RNTester tests and scheme wiring, while accepting upstream deletion where no macOS requirement exists.Complete conflicted-path inventory
Build, manifests, Hermes, and generated metadata (45)
.github/actions/setup-xcode/action.yml.gitignore.flowconfigREADME.mdpackage.jsonpackages/assets/package.jsonpackages/babel-plugin-codegen/package.jsonpackages/community-cli-plugin/package.jsonpackages/core-cli-utils/package.jsonpackages/debugger-frontend/package.jsonpackages/debugger-shell/package.jsonpackages/dev-middleware/package.jsonpackages/eslint-config-react-native/package.jsonpackages/eslint-plugin-react-native/package.jsonpackages/eslint-plugin-specs/package.jsonpackages/gradle-plugin/package.jsonpackages/metro-config/package.jsonpackages/new-app-screen/package.jsonpackages/normalize-color/package.jsonpackages/polyfills/package.jsonpackages/react-native-babel-preset/package.jsonpackages/react-native-babel-transformer/package.jsonpackages/react-native-codegen/package.jsonpackages/react-native-compatibility-check/package.jsonpackages/react-native-popup-menu-android/package.jsonpackages/react-native/Package.swiftpackages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.hpackages/react-native/package.jsonpackages/react-native/scripts/ios-prebuild/hermes.jspackages/react-native/scripts/ios-prebuild/xcframework.jspackages/react-native/sdks/hermes-engine/hermes-engine.podspecpackages/react-native/sdks/hermes-engine/hermes-utils.rbpackages/react-native/sdks/hermes-engine/utils/build-ios-framework.shpackages/rn-tester/Podfilepackages/rn-tester/Podfile.lockpackages/rn-tester/RNTesterPods.xcodeproj/project.pbxprojpackages/rn-tester/RNTesterPods.xcodeproj/xcshareddata/xcschemes/RNTesterUnitTests.xcschemepackages/rn-tester/package.jsonpackages/typescript-config/package.jsonpackages/virtualized-lists/package.jsonprivate/helloworld/Gemfileprivate/helloworld/Gemfile.lockprivate/helloworld/package.jsonprivate/react-native-codegen-typescript-test/package.jsonyarn.lockJavaScript behavior and public types (14)
packages/react-native/Libraries/Components/Pressable/Pressable.jspackages/react-native/Libraries/Components/TextInput/TextInput.flow.jspackages/react-native/Libraries/Components/TextInput/TextInput.jspackages/react-native/Libraries/Components/TextInput/TextInputState.jspackages/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.jspackages/react-native/Libraries/Components/View/View.jspackages/react-native/Libraries/Components/View/ViewNativeComponent.jspackages/react-native/Libraries/Pressability/Pressability.jspackages/react-native/Libraries/Text/Text.jspackages/react-native/Libraries/Types/CoreEventTypes.jspackages/react-native/Libraries/Utilities/__tests__/Platform-test.jspackages/react-native/src/private/devsupport/devmenu/elementinspector/NetworkOverlay.jspackages/rn-tester/js/examples/Cursor/CursorExample.jspackages/rn-tester/js/examples/PlatformColor/PlatformColorExample.jsApp setup, bridge, and wrappers (16)
packages/react-native/Libraries/AppDelegate/RCTAppDelegate.hpackages/react-native/Libraries/AppDelegate/RCTAppSetupUtils.hpackages/react-native/Libraries/AppDelegate/RCTAppSetupUtils.mmpackages/react-native/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mmpackages/react-native/Libraries/AppDelegate/RCTReactNativeFactory.hpackages/react-native/Libraries/AppDelegate/RCTRootViewFactory.hpackages/react-native/Libraries/AppDelegate/RCTRootViewFactory.mmpackages/react-native/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.hpackages/react-native/Libraries/Wrapper/RCTWrapper.hpackages/react-native/Libraries/Wrapper/RCTWrapperView.hpackages/react-native/Libraries/Wrapper/RCTWrapperViewControllerHostingView.hpackages/react-native/React/Base/RCTBridgeProxy.mmpackages/react-native/React/Base/RCTBundleManager.hpackages/react-native/React/Base/RCTRootView.hpackages/react-native/React/Base/RCTUtils.hpackages/react-native/React/Base/RCTUtils.mmImage, linking, and native animation (10)
packages/react-native/Libraries/Image/Image.ios.jspackages/react-native/Libraries/Image/RCTBundleAssetImageLoader.mmpackages/react-native/Libraries/Image/RCTImageBlurUtils.mmpackages/react-native/Libraries/Image/RCTImageLoader.mmpackages/react-native/Libraries/Image/RCTImageViewManager.mmpackages/react-native/Libraries/Image/RCTLocalAssetImageLoader.mmpackages/react-native/Libraries/Image/RCTUIImageViewAnimated.mmpackages/react-native/Libraries/LinkingIOS/RCTLinkingManager.mmpackages/react-native/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.mmpackages/react-native/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.mmCore modules and developer support (13)
packages/react-native/React/CoreModules/CoreModulesPlugins.mmpackages/react-native/React/CoreModules/RCTAccessibilityManager.mmpackages/react-native/React/CoreModules/RCTActionSheetManager.mmpackages/react-native/React/CoreModules/RCTDevLoadingView.mmpackages/react-native/React/CoreModules/RCTDevMenu.hpackages/react-native/React/CoreModules/RCTDevMenu.mmpackages/react-native/React/CoreModules/RCTDeviceInfo.mmpackages/react-native/React/CoreModules/RCTFPSGraph.mmpackages/react-native/React/CoreModules/RCTLogBoxView.hpackages/react-native/React/CoreModules/RCTLogBoxView.mmpackages/react-native/React/CoreModules/RCTPerfMonitor.mmpackages/react-native/React/DevSupport/RCTDevLoadingViewProtocol.hpackages/react-native/React/DevSupport/RCTInspectorDevServerHelper.mmFabric component views and input (12)
packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewAccessibilityElement.hpackages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewAccessibilityElement.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mmpackages/react-native/React/Fabric/Mounting/RCTComponentViewDescriptor.hpackages/react-native/React/Fabric/RCTSurfacePointerHandler.mmpackages/react-native/React/Fabric/RCTSurfaceTouchHandler.mmpackages/react-native/React/Fabric/Utils/RCTBoxShadow.mmLegacy views, text, and UIManager (24)
packages/react-native/Libraries/Text/Text/RCTTextView.hpackages/react-native/Libraries/Text/Text/RCTTextView.mmpackages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.hpackages/react-native/Libraries/Text/TextInput/RCTInputAccessoryView.hpackages/react-native/Libraries/Text/TextInput/RCTInputAccessoryViewContent.hpackages/react-native/Libraries/Text/VirtualText/RCTVirtualTextView.hpackages/react-native/React/Modules/RCTUIManager.hpackages/react-native/React/Modules/RCTUIManager.mmpackages/react-native/React/Views/RCTActivityIndicatorView.mpackages/react-native/React/Views/RCTModalHostView.hpackages/react-native/React/Views/RCTModalHostView.mpackages/react-native/React/Views/RCTModalHostViewController.hpackages/react-native/React/Views/RCTModalHostViewController.mpackages/react-native/React/Views/RCTModalHostViewManager.hpackages/react-native/React/Views/RCTModalHostViewManager.mpackages/react-native/React/Views/RCTSwitch.hpackages/react-native/React/Views/RefreshControl/RCTRefreshControl.hpackages/react-native/React/Views/RefreshControl/RCTRefreshControl.mpackages/react-native/React/Views/RefreshControl/RCTRefreshControlManager.mpackages/react-native/React/Views/SafeAreaView/RCTSafeAreaView.mpackages/react-native/React/Views/SafeAreaView/RCTSafeAreaViewManager.mpackages/react-native/React/Views/ScrollView/RCTScrollView.hpackages/react-native/React/Views/ScrollView/RCTScrollView.mpackages/react-native/React/Views/ScrollView/RCTScrollViewManager.hRenderer C++ and platform graphics (10)
packages/react-native/ReactCommon/react/renderer/attributedstring/TextAttributes.cpppackages/react-native/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.hpackages/react-native/ReactCommon/react/renderer/components/view/propsConversions.hpackages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.hpackages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.mmpackages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.hpackages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.mmpackages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.hpackages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mmpackages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mmTests and RNTester native fixtures (11)
packages/react-native-test-library/ios/RCTSampleNativeComponentComponentView.mmpackages/react-native-test-library/ios/RCTSampleNativeComponentViewManager.mmpackages/react-native-test-library/package.jsonpackages/rn-tester/NativeComponentExample/ios/RNTMyLegacyNativeViewManager.mmpackages/rn-tester/NativeComponentExample/ios/RNTMyNativeViewManager.mmpackages/rn-tester/RNTester/AppDelegate.mmpackages/rn-tester/RNTesterIntegrationTests/RCTUIManagerScenarioTests.mpackages/rn-tester/RNTesterIntegrationTests/RNTesterIntegrationTests.mpackages/rn-tester/RNTesterUnitTests/RCTEventDispatcherTests.mpackages/rn-tester/RNTesterUnitTests/RCTUIManagerTests.mpackages/rn-tester/RNTesterUnitTests/RCTViewTests.mThe inventory sections sum to 155 paths.
Commands used
Roughly, the merge and subsequent Microsoft-main rebase used:
The rebase tried to replay the React Native-side ancestry instead of retaining the required fork-point parent, so the audited resolved merge tree was reconstructed with exact parents
ef09dd72and2166ab78, then the focused macOS follow-ups were replayed as separate commits. Conflict inventories and old-to-new commit mappings were regenerated after that reconstruction.Validation and publication were approximately:
The force-with-lease was limited to retargeting the existing fork branch from the stale fork
mainto Microsoftmain; later updates were normal fast-forward pushes.Test Plan
4bacb12a: JavaScript, Yarn constraints, website, npm dry-run, RNTester iOS/macOS/visionOS static and dynamic builds, all Hermes slices, all five prebuild destinations, XCFramework composition, and CodeQL2777fb70only removes the deferred in-repo merge skill; the exact draft is archived outside the branch until the complete 0.84-0.87 stack is prepared1000.0.0from the React Native merge-base lineageyarn install --immutableyarn constraintsbundle exec pod installswift package dump-package --package-path packages/react-nativeef09dd72and2166ab78;0.84-stabletip excludedThe two dynamic-framework Test All canaries previously failed before runner assignment with zero executed steps; they did not contain a code/build failure from this branch.