[0.81][iOS] Cache prebuilt iOS binaries in ~/Library/Caches/ReactNative#56842
Closed
cipolleschi wants to merge 3078 commits into
Closed
[0.81][iOS] Cache prebuilt iOS binaries in ~/Library/Caches/ReactNative#56842cipolleschi wants to merge 3078 commits into
cipolleschi wants to merge 3078 commits into
Conversation
…ow (#36297) (#56483) Summary: Pull Request resolved: #56483 ## Summary PR #36285 deleted the Paper (legacy) renderer, including the shim file `scripts/rollup/shims/react-native/ReactNative.js`. However, the `runtime_commit_artifacts` workflow still tries to `rm` this file after moving build artifacts into `compiled-rn/`. Since the file no longer exists in the build output, `rm` (without `-f`) fails and kills the entire step. This has caused **every run of the Commit Artifacts workflow to fail since #36285 landed on April 16**, blocking both `builds/facebook-www` and `builds/facebook-fbsource` branches from receiving new build artifacts. This in turn blocks DiffTrain from syncing React changes into Meta's internal monorepo. DiffTrain build for [bf45a68dd35ed08860b6a70fed641dfe6d7d290d](react/react@bf45a68) Reviewed By: zeyap Differential Revision: D101329586 fbshipit-source-id: d38877d5cc964c46257cb73678f80d0a7c729d90
…ce node (#56479) Summary: Pull Request resolved: #56479 ## Changelog: [General] [Fixed] - support multiple old pseudo elements for same name but different source node We will need to track multiple old pseudo elements for same name but different source node when doing a series of shared transitions: 1. go from component A to component B (A stays hidden with Activity but not unmounted) 2. go back to A (B unmounted) 3. hide A and show B again A will lose its old pseudo element node, because at #1, B's old pseudo element node overrides A's (since they have the same vt name), and at #2, B's old node gets cleaned up. At #3, since createViewTransitionInstance won't be called for A again (react reconciler assumes the instance is only created once until a component is unmounted), there's no valid old node for A anymore. Reviewed By: sammy-SC Differential Revision: D101237889 fbshipit-source-id: 4f670877e3786f0aa89409c1fd5b9784515bd2c2
Summary: Pull Request resolved: #56474 On Android, pressing the hardware back button while LogBox notification toasts or the full inspector overlay are visible has no effect on the JS side. The only way to dismiss notifications is the on-screen X button, and the only way to close the inspector is via Minimize/Dismiss. This adds `BackHandler` listeners to both JS containers: **Notification toasts**: A new `LogBoxNotificationBackHandler` component mounts alongside the toasts and registers a `hardwareBackPress` listener that calls `clearWarnings()` + `clearErrors()`, equivalent to pressing X on every visible toast. The component returns null and auto-cleans the listener on unmount. **Inspector overlay**: `LogBoxInspectorContainer` registers a `hardwareBackPress` listener in `componentDidMount` that calls `_handleMinimize()` (`setSelectedLog(-1)`), closing the overlay non-destructively — same as pressing the Minimize button. Changelog: [Android][Added] - Allow LogBox notification toasts and inspector overlay to be dismissed via Android back button Reviewed By: alanleedev Differential Revision: D101178179 fbshipit-source-id: c2100d2cc494c326d8a91caa906faabb3d23381c
Summary: Pull Request resolved: #56478 Changelog: [General] [Fixed] - Respect enum values for TurboModule c++ codegen Defining an enum like this: ```js export enum CustomPropertyEditor { BitMask = 0, Entity = 1, Slider = 2, AudioEvent = 3, CollisionLayer = 4, MaterialComponentDeprecatedProperty = 5, MeshMaterialList = 6, Submesh = 7, // CoreUiLayout (8) removed — rendered identically to ClassOrList MaterialMapJson = 9, AnimationTable = 10, SkeletonAsset = 11, NavMeshAreaType = 12, VFXAsset = 13, Table = 14, VariableTable = 15, AudioBus = 16, LodSettings = 17, WorldSearch = 18, EntityMaterialList = 19, NpcId = 20, LightingModelVersion = 21, PlatformSelector = 22, ComponentReference = 23, } ``` (notice number 8 ), will cause the generated enum to actually look like: ``` enum class NativeEditableObjectModuleCustomPropertyEditor { BitMask, Entity, Slider, AudioEvent, CollisionLayer, MaterialComponentDeprecatedProperty, MeshMaterialList, Submesh, MaterialMapJson, AnimationTable, ... }; ``` in other words, the values don't match up after the core ui value. This is quite dangerous and I'm surprised no one has ever noticed that This diff fixes things such that if an integer value is explicitly assigned, the value is preserved in the generated enum. Reviewed By: christophpurrer Differential Revision: D101229471 fbshipit-source-id: 366ea2d16ac74e112f1b68c5ad3d0877dedb918c
…gWarn (#56494) Summary: Pull Request resolved: #56494 Changelog: [Internal] ## Problem `RCTSyncImageManager` (used exclusively in test environments) calls `RCTLogError` when a network image fails to load within 20 seconds. On iOS, `RCTLogError` triggers a **native redbox** — a full-screen red overlay that: 1. **Covers the entire app UI**, making all elements invisible to E2E test assertions 2. **Cannot be dismissed on iOS** — `NativeExceptionsManager.dismissRedbox()` is a no-op (empty method in `RCTExceptionsManager.mm`) 3. **Cannot be suppressed by JavaScript-side mechanisms** — `LogBox.ignoreAllLogs()` and `suppress_warning` mobile config only affect JS-level LogBox, not native `RCTLogError` redboxes 4. **Instantly fails any E2E test** at the next `toBeVisible()` / `toHaveText()` assertion because the redbox overlay blocks all UI elements This causes **~2-5% infrastructure flakiness** across all iOS E2E tests that render components with network images (e.g., recommendation cards, ad previews, profile images), due to transient image load timeouts in the CI test sandbox. ### Error Flow ``` Image URL request in test sandbox → Network timeout (sandbox cant fetch from lookaside.facebook.com) → RCTSyncImageManager.mm dispatch_group_wait expires (20s) → RCTLogError(@"Image timed out in test environment for url: %@") → RCTLog.mm: level >= RCTLOG_REDBOX_LEVEL → Native RedBox overlay shown (full-screen, undismissable on iOS) → All toBeVisible() assertions fail → Test marked as FAILED ``` Differential Revision: D101052445 fbshipit-source-id: f615ac48ca210c5b070798f95ab2675ab9449e70
Summary: Pull Request resolved: #56472 Fix clang-diagnostic-unused-parameter warnings by commenting out the unused 'context' parameter in two fromRawValue functions. This maintains API compatibility while resolving the lint warnings. Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D101108449 fbshipit-source-id: 34da8573326c1ebc11dad01104f8857a21c0adc5
Summary: Pull Request resolved: #56495 UIManagerBinding::dispatchEvent checks for an existing timeStamp property before injecting one, but only checks the camelCase variant. Native events that use lowercase timestamp (e.g. pointer events) would have a duplicate timeStamp injected with the current time, which then takes precedence in the SyntheticEvent timestamp resolution chain (event.timeStamp || event.timestamp). This adds a check for both timeStamp and timestamp before auto-injecting, preserving the original native event timestamp when present in either casing. Root cause: #55878 only checked for timeStamp (camelCase). Changelog: [General][Fixed] - Fix event timestamp injection overriding native timestamps with lowercase property name Reviewed By: mdvacca Differential Revision: D101522871 fbshipit-source-id: 74d91a3958ac73927251189f07f954303d45688e
…#56497) Summary: Pull Request resolved: #56497 Reorder the fields to match the struct declaration order: text, selectionRange, contentSize, contentOffset, contentInset, eventCount, layoutMeasurement, zoomScale. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D101560071 fbshipit-source-id: 462db623b62ed2cf01481c9406a8c750ff1268bc
Summary: Pull Request resolved: #56501 Add an early NPM token validation step to the create-release workflow. This runs `npm whoami` right after checkout to fail fast if the token is expired or invalid, avoiding wasted CI time on a release that would fail at the publish step. The step gracefully skips when no token is present (e.g. fork PRs). ## Changelog: [Internal] - Reviewed By: christophpurrer Differential Revision: D101377190 fbshipit-source-id: 53243a24649f86d274b2ea31793333fd815e69cb
Summary: Pull Request resolved: #56502 Adds an NPM token validation step to the `build_npm_package` job of the React Native nightly workflow. Mirrors the same check we recently added to `create-release.yml` and the Hermes `rn-build-hermes.yml` workflows so we fail fast (with a clear message) instead of failing partway through the publish step when the token is expired or missing. ## Changelog: [Internal] - Reviewed By: fabriziocucci Differential Revision: D101594276 fbshipit-source-id: bb0fbddf5eba921f4184117dc29c7cc9e911a00e
Summary: Pull Request resolved: #56503 Changelog: [Internal] Changes the signals pointing out C++ api snapshot not being updated to be blocking. Commits the new baseline snapshots Reviewed By: cipolleschi, cortinico Differential Revision: D101617655 fbshipit-source-id: 8836cb55292ab2e3fa0b696d289f9bd0daf46dec
Summary: Pull Request resolved: #56485 ## Changelog: [Internal] [Fixed] - Clear AnimatedPropsRegistry on surface stop When `useSharedAnimatedBackend` is enabled, the `AnimatedPropsRegistry` accumulates `SurfaceContext` entries (containing `shared_ptr<ShadowNodeFamily>` and `PropsSnapshot` data) for each surface that has animated views. These entries are never cleaned up when a surface is destroyed via `UIManager::stopSurface()`, because that method only calls the legacy `stopSurfaceForAnimationDelegate()` — the shared backend's registry is untouched. We also see increased `RetryableMountingLayerException` errors in production which stack trace shows there are mount items committing to surface that no longer exists. This change: 1. Adds `animationBackend_->clearRegistry(surfaceId)` to `UIManager::stopSurface()` 2. Changes `AnimatedPropsRegistry::clear()` to fully erase the `surfaceContexts_` map entry instead of just clearing its contents Reviewed By: christophpurrer Differential Revision: D101354994 fbshipit-source-id: c7668f728050a0d3f5c09ad5ca51e48450c1b87e
Summary: Pull Request resolved: #56511 ## Changelog: [Internal] [Fixed] - Fix react-native-cxx-stable-api-snapshot-validation test Reviewed By: jeffrey-beauchamp Differential Revision: D101646907 fbshipit-source-id: 6fda6032ee3a9b1c418ea19c7fffd5aabe614fb2
Summary: Pull Request resolved: #56488 Fixed clang-diagnostic-unused-parameter warnings in IMountingManager.h by commenting out parameter names while preserving types. This maintains API compatibility for virtual methods while eliminating lint warnings. Changelog: [Internal] Reviewed By: javache Differential Revision: D101110289 fbshipit-source-id: ee9bf593b648c6db8e0764613b29e47036fd7df8
Summary: Pull Request resolved: #56506 React Native's `PerformanceObserver` previously defaulted `durationThreshold` to 0 for `event` entries, while the W3C Event Timing spec (https://www.w3.org/TR/event-timing/#sec-modifications-perf-timeline) mandates a default of 104ms. The previous default flooded observers with short events (clicks, pointer up/down) that are not interesting for responsiveness measurement. This change brings React Native in line with the spec by making 104ms the default. The default is applied at the JSI bridge boundary in `NativePerformance.cpp` (the JS API boundary on the C++ side) when JS does not provide an explicit `durationThreshold`. The C++ public observer API (`PerformanceObserverObserveSingleOptions::durationThreshold`) and the global event buffer (`eventBuffer_.durationThreshold`) keep their `HighResDuration::zero()` default — applying 104ms to the global buffer would drop sub-104ms events at the source, breaking observers that explicitly request `durationThreshold: 0`. Changes in `react-native`: - `NativePerformance.cpp`: apply 104ms default at the JSI bridge boundary. - `PerformanceApiExample.js` (rn-tester): pass `durationThreshold: 0` to preserve previous behavior. - `EventTimingAPI-itest.js`: migrate 4 existing call sites to `{type: 'event', durationThreshold: 0}` and add a new test verifying the 104ms default. Sites using `{entryTypes: ['event']}` were converted to `{type: 'event', durationThreshold: 0}` since the spec (and existing JS validation in `PerformanceObserver.js`) disallows `durationThreshold` together with `entryTypes`. Changelog: [General][Fixed] - PerformanceObserver: `observe({type: 'event'})` now correctly defaults `durationThreshold` to 104ms per the W3C Event Timing spec instead of reporting all events. Reviewed By: hoxyq Differential Revision: D101629586 fbshipit-source-id: 897914e8582a3d16db9e9388606be5d0aebd19ab
Summary: Pull Request resolved: #56514 Changelog: [Internal] Reviewed By: rubennorte Differential Revision: D101652820 fbshipit-source-id: f7608fbf92a8fd2928434e74ad03bfc01b318d20
…r-modern (#56496) Summary: Pull Request resolved: #56496 Add a guard in the `Tracing.end` CDP handler to check `sessionState_.hasPendingTraceRecording` before calling `stopTracing()`. This prevents a null-pointer crash (SIGSEGV) in `HostTargetTraceRecording::stop()` when `Tracing.end` is sent after `Tracing.start` was rejected (e.g. due to multiple registered host targets in the global inspector singleton). The guard matches the existing pattern in `TracingAgent::~TracingAgent()` (line 29). When tracing was never started, it now returns an `InvalidRequest` error instead of crashing. Changelog: [Internal] Reviewed By: huntie Differential Revision: D101557975 fbshipit-source-id: 3ab754b9421b3bee3e3bde99ce012007d5a10368
Summary: Pull Request resolved: #56493 Fixed clang-diagnostic-unused-parameter warnings in EventQueueProcessorTest.cpp by removing unused parameter names from lambda functions. Changes: - Line 51: Removed parameter name 'runtime' from dummyEventPipeConclusion lambda - Line 52: Removed parameter name 'stateUpdate' from dummyStatePipe lambda This is a standard C++ practice for handling unused parameters - keeping the type for API compatibility while removing the name to silence the warning. Changelog: [Internal] Reviewed By: zeyap Differential Revision: D101110552 fbshipit-source-id: 3391080dcaa4c865177e164869b9732952cde906
Summary: Pull Request resolved: #56516 Fixed clang-diagnostic-unused-parameter warnings in TimerManager.cpp by commenting out the unused 'runtime' parameter names in two functions: - deleteTimer() at line 135 - deleteRecurringTimer() at line 152-153 Both functions accept a jsi::Runtime& parameter for API compatibility but don't use it internally. The fix maintains the function signatures while suppressing the warnings by commenting out the parameter names. Changelog: [Internal] Reviewed By: zeyap Differential Revision: D101108602 fbshipit-source-id: 95554385c6d36e724fdc1de4a3b20e1e1014a39c
Summary: Pull Request resolved: #56489 C++ enums cannot have float values - they must be int or long. This removes the invalid FloatEnum example (with values 0.0, 0.1, 0.2) from the react-native-codegen test fixtures and the corresponding enumFloat parameter reference. All affected test snapshots have been regenerated. Changelog: [Internal] Reviewed By: shwanton Differential Revision: D101433764 fbshipit-source-id: eff21d3fa9c48ab11dfb8ef861ac0b8122ff5602
Summary: Pull Request resolved: #56518 The fix adds null-coalescing fallbacks (`?: ""`) for UTF8String calls that return `const char * _Nullable` but are passed to `std::string` constructors or C++ functions expecting `const char * _Nonnull`. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D101668743 fbshipit-source-id: 80920f25317b0c258387f4b2701b35afe20e3896
Summary: Add Changelog for 0.85.2 ## Changelog: [Internal] - Add Changelog for 0.85.2 Pull Request resolved: #56515 Test Plan: N/A Reviewed By: christophpurrer Differential Revision: D101668302 Pulled By: cipolleschi fbshipit-source-id: 1c3e4c6e7751fe35ab8c2af31181ad53d43dc8fe
…uffer length encoding (#56525) Summary: Pull Request resolved: #56525 The MapBuffer wire format encodes lengths and offsets as `int32_t` (`MapBuffer::getString` / `getMapBuffer` read them as `*reinterpret_cast<const int32_t*>(...)`). But in `putString` and `putMapBuffer`: ```cpp auto strSize = value.size(); // size_t — 8 bytes on 64-bit memcpy(dynamicData_.data() + offset, &strSize, INT_SIZE); // copies first 4 of 8 bytes ``` `auto` deduces `size_t` from `.size()`, and `memcpy(&size_t_var, ..., 4)` writes only the **first 4 bytes** of an 8-byte object: - **little-endian:** writes the low 4 bytes — silent truncation if size > UINT32_MAX - **big-endian:** writes the high 4 bytes — encodes **zero** for normal sizes, producing a corrupt buffer the reader then trusts `putMapBufferList` already had the correct pattern: `auto offset = static_cast<int32_t>(dynamicData_.size())`. This diff applies that same explicit `static_cast<int32_t>` to `putString` (`strSize`, `offset`) and `putMapBuffer` (`mapBufferSize`, `offset`) so the value being `memcpy`'d is exactly `INT_SIZE` bytes wide. Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D100376322 fbshipit-source-id: ad0d505555e057240bf376795e867c52125590d8
Summary: Pull Request resolved: #56422 Changelog: [GENERAL][FIXED] Fixed Yoga node ownership when `display: contents` is used in absolutely positioned subtrees Fixes an edge case where nodes with `display: contents` weren't cloned properly inside absolutely positioned subtrees. Adds a test case covering this scenario. X-link: react/yoga#1924 Reviewed By: NickGerleman Differential Revision: D100581579 Pulled By: j-piasecki fbshipit-source-id: e05e9a4076bd11a71be438ef910a262044659a9b
Summary: Pull Request resolved: #56513 Changelog: [internal] Fantom previously did not propagate errors thrown inside `runTask` callbacks (or microtasks queued by them) to Jest, so failing assertions inside tasks were silently swallowed and only logged via `console.error`. Tests had to work around this with manual `try`/`catch` blocks and a couple of `it.skip`s with TODOs. This installs a Fantom-specific global error handler (via `ErrorUtils.setGlobalHandler`) that captures the first error reported during the current work loop into `pendingError`. After `flushMessageQueue()` returns, `runWorkLoop()` re-throws the captured error so it becomes observable as a Jest failure. Only the first error in a work loop is re-thrown (subsequent ones are typically follow-on noise), and `pendingError` is cleared at the start of each work loop so errors captured during module setup do not spuriously fail later loops. The post-loop `runLogBoxCheck()` continues to take precedence, since LogBox diagnostics are more actionable. With this in place: - The 'should throw when running a task inside another task' test can use `expect(...).toThrow(...)` directly instead of manual try/catch. - The two previously-skipped tests for re-throwing errors from tasks and microtasks are now enabled. NOTE: this will cause some tests to start failing, but they're legit failures Reviewed By: javache Differential Revision: D101647822 fbshipit-source-id: b9cba056d46cc94a4f6dad5e3665266df62a0211
Summary: `use-hermes-nightly` unconditionally overwrites the `hermes-compiler` with whatever the `latest-v1` tag currently points to. On release branches, where `hermes-compiler` is pinned to a specific version, it replaces the pin. This doesn't cause an issue until the `latest-v1` tag moves off the pinned version. Looks to have been introduced by #53837. bypass-github-export-checks ## Changelog: [INTERNAL] [FIXED] - Preserve pinned `hermes-compiler` version when running `use-hermes-nightly` on release branches. Pull Request resolved: #56505 Test Plan: With `hermes-compiler` manually set to a real version, the script returns early without modifying `package.json` or `hermes-engine/version.properties`. Reviewed By: cortinico Differential Revision: D101633376 Pulled By: cipolleschi fbshipit-source-id: 666baa1a7838272b18e326b8597394d66b81343c
…56512) Summary: Pull Request resolved: #56512 Changelog: [internal] `UIManagerBinding::dispatchEvent` injects a `timeStamp` property into the event payload when one is not already present. A previous change extended this check to also skip injection when a lowercase `timestamp` property was present, so that native events using the lowercase form would have their timestamp preserved. That was done to fix a failing Fantom test but what was wrong was the test itself. This removes the test and reverts that previous fix. Reviewed By: javache Differential Revision: D101649991 fbshipit-source-id: 933c906403f2e4144575b89e11f96feb8775f455
…56451) Summary: With Fabric as the only supported renderer, `ViewUtil.getUIManagerType()` always returns `UIManagerType.FABRIC`. This diff inlines that constant throughout and removes all Paper-only code paths: - `ReactRootView.setIsFabric()` → no-op, `getUIManagerType()` → returns FABRIC - `ReactInstanceManager.attachRootViewToInstance` → Fabric-only (removes `addRootView`/`runApplication` path) - `ReactInstanceManager.detachRootViewFromInstance` → removes `AppRegistry.unmountApplicationComponentAtRootTag` path - `NativeAnimatedModule` → removes Fabric/non-Fabric animation counting, `willDispatchViewUpdates` is no-op - `PropsAnimatedNode.restoreDefaultValues()` → no-op (was only relevant for Paper ShadowNode sync) - `BackgroundStyleApplicator` → removes Fabric guards on outline/boxShadow/filter/blendMode setters - `BaseViewManager` → removes Fabric guards on filter/mixBlendMode - `TransformHelper` → removes `allowPercentageResolution` parameter (always true) - `TouchTargetHelper` → removes Fabric guard on overflow inset check - `ComponentsReactNativeSupportProcessor` → removes legacy Litho view creation path - `ReactHorizontalScrollContainerLegacyView` → deleted, `ReactHorizontalScrollContainerViewManager` simplified - `ReactTextView` → removes Paper-specific text update logic - `ViewUtil.getUIManagerType()` → deprecated, hardcoded to return FABRIC Pull Request resolved: #56451 Changelog: [Internal] Reviewed By: christophpurrer, NickGerleman Differential Revision: D91222827 fbshipit-source-id: 26172ad8111e927ff4787e566b19de9490659209
Summary: Pull Request resolved: #56510 Implements the `Emulation.setEmulatedMedia` CDP method in `jsinspector-modern`, scoped to `prefers-color-scheme` emulation. This allows CDP clients to toggle the app color scheme for debugging and visual verification. **Implementation notes** Adds a new `EmulationAgent` CDP domain agent that validates the `features` param, rejects unsupported media features/types, and delegates to `HostTargetDelegate::onSetEmulatedMedia`. Platform delegates: - **Android**: Calls `AppCompatDelegate.setDefaultNightMode()` on the UI thread via JNI through `ReactHostImpl`. - **iOS**: Sets `overrideUserInterfaceStyle` on the key `UIWindow`. Both platforms trigger their existing `Appearance` change event propagation to JS automatically. Changelog: [General][Added] - **React Native DevTools**: Add support for light/dark mode emulation via `Emulation.setEmulatedMedia` Reviewed By: hoxyq Differential Revision: D101624433 fbshipit-source-id: e795bf22327142bae0a7275ee92f7f778736541f
Summary: Pull Request resolved: #56532 After landing the error re-throw contract earlier in this stack, running `FANTOM_FORCE_CI_MODE=1 yarn fantom` left 5 failing suites / ~16 failing tests. This commit fixes 4 of the 5 clusters and skips the 5th with a TODO, so the full suite is now green. **Cluster B — tests asserting no error propagation** `ResponderEventTarget-itest.js` and `EventTargetDispatching-itest.js` had tests that intentionally `throw new Error(...)` inside React event handlers, then asserted post-throw side effects. Under the new error-propagation contract, the throwing dispatch is re-thrown synchronously after the work loop, so the dispatch call itself now throws. - `ResponderEventTarget-itest.js`: wrap each throwing `Fantom.dispatchNativeEvent(...)` in `expect(() => ...).toThrow('<message>')` (the canonical idiom from `Fantom-itest.js`). The 'release' test has *two* throwing `onTouchEnd` dispatches (the second one re-fires the throwing release handler), so both are wrapped. - `EventTargetDispatching-itest.js`: the EventTarget-based code path (`enableNativeEventTargetEventDispatching: true`) intentionally catches per-listener errors inside `EventTarget.js` and reports them via `console.error` rather than re-throwing — so the dispatch does NOT throw there. Branch the assertion on the flag value: `expect(...).toThrow(...)` for the legacy path, retained `mockConsoleError` scaffolding for the EventTarget path. **Cluster C — `requestIdleCallback` "max time 50ms" timing flake** `requestIdleCallback-itest.js` busy-waited for 20 ms then asserted `finalTimeRemaining <= 30`. Under load, `activeSleep(20)` overshoots by a fraction of a millisecond, so the assertion fails with values like 30.2. Replace the absolute threshold with a relative one against `initialTimeRemaining` (≥ 18 ms consumed), which captures the spirit of the test ("most of the budget was used") with realistic tolerance. **Cluster D — `View-benchmark` JS stack overflow on 1500-deep tree** `View-benchmark-itest.js` rendered chains of `[100, 1000, 1500]` nested `<View>`s. The 1500-deep case overflows the JS stack at `commitMutationEffectsOnFiber` (~4668 frames) for both `useLISAlgorithmInDifferentiator` flag values — the flag is unrelated. Drop the 1500 case; 1000 nested Views is still a meaningful stress signal for benchmark mode. **Cluster E — `UIConsistency › first access to the tree`** `scrollViewNode.scrollTop` returns `0` instead of `100` for *both* `enableFabricCommitBranching` flag values. This is a regression introduced by #56513 (Fabric commit branching). Likely root cause: `LazyShadowTreeRevisionConsistencyManager::updateCurrentRevision` prefers `currentReactRevision_` unconditionally even when `currentRevision_` carries a newer revision number. Skip the test with a TODO comment referencing the PR, following the existing `MountingIntermediateCommits-itest.js` pattern. The renderer team should investigate and re-enable. Changelog: [Internal] Reviewed By: andrewdacenko Differential Revision: D101795667 fbshipit-source-id: 595da24cbe9047a7037a05b7b4d4e450e0784183
Summary: Pull Request resolved: #56822 Changelog: [Internal] Reviewed By: thegreatercurve Differential Revision: D104870951 fbshipit-source-id: 3b4bc9664ec1088eb944e68bf958e5e2b7b2d74c
…sabling block-scoping transform for SH (#56825) Summary: Pull Request resolved: #56825 Disable `babel/plugin-transform-block-scoping` when `customTransformOptions.unstable_preserveBlockScoping` is truthy. This allows us to experiment with native let/const block scoping support in Static Hermes. Changelog: [Internal] Reviewed By: vzaidman Differential Revision: D93013927 fbshipit-source-id: 6e2c1274426943fcf1ce5a8c09d677e1d0afb35f
…56801) Summary: Pull Request resolved: #56801 In preparation for enabling `enableSyncVoidMethods` (D104331837), which makes TurboModule void methods execute synchronously on the JS thread instead of being dispatched asynchronously. Currently, this module overrides `methodQueue` to return `dispatch_get_main_queue()` so its void methods execute on the main thread. When `enableSyncVoidMethods` is enabled, the `methodQueue` override is ignored for void methods — they execute directly on the JS thread. This causes crashes for any UI operations that must run on the main thread. **Fix:** Remove the `methodQueue` override. The `alertWithArgs` method already dispatches UI work onto the main thread via `RCTExecuteOnMainQueue`, so it is already safe. Changelog: [Internal] Reviewed By: javache Differential Revision: D104771644 fbshipit-source-id: 4f1eae55c64e56990efc20c4b32af1d722520037
Summary: ## Why Kotlin 2.2 changes the ABI for interface methods with default implementations. In Kotlin 2.1, these were emitted as 'public abstract' in the bytecode. In Kotlin 2.2, they are emitted as 'public' (non-abstract) with DefaultImpls. This causes React Native's binary compatibility validator to detect API changes. No impact on actual functionality: https://kotlinlang.org/docs/whatsnew22.html#changes-to-default-method-generation-for-interface-functions The new methods that appear in bytecode are expected, since they weren't overridden in the class. Updated ReactAndroid.api dump file by running: buck2 run //xplat/js/scripts/rn-api:generate-rn-api-metadata Affected interfaces: - ReactMarker.FabricMarkerListener - AppearanceModule.OverrideColorScheme - RCTEventEmitter - RCTModernEventEmitter - ReactNativeHost (new methods: getBundleFilePath, setBundleFilePath) - DialogRootViewGroup (new method: onChildStartedNativeGesture) ## Changelog [Internal] [Changed] - Pull Request resolved: #56833 Reviewed By: cortinico Differential Revision: D105216824 fbshipit-source-id: df5dede0b3d72b9fd1d6d89f377fa07f744a1c61
Summary: Pins the default `GITHUB_TOKEN` to `contents: read` on 2 workflows in `.github/workflows/` that don't call a GitHub API beyond the initial checkout. The following files were left implicit because they reference `GITHUB_TOKEN` / use a write-scope action / trigger on `pull_request_target`. Those scopes are best declared by maintainers: `cache-reaper.yml`, `check-for-reproducer.yml`, `retry-workflow.yml`, `validate-dotslash-artifacts.yml`. ## Why CVE-2025-30066 (March 2025 `tj-actions/changed-files` supply-chain compromise) exfiltrated `GITHUB_TOKEN` from workflow logs. Pinning per workflow caps runtime authority irrespective of the repo or org default, gives drift protection if the default ever widens, and is credited per-file by the OpenSSF Scorecard `Token-Permissions` check. YAML validated locally with `yaml.safe_load` on each touched file. ## Changelog [Internal] [Changed] - Pull Request resolved: #56834 Reviewed By: cipolleschi Differential Revision: D105294446 Pulled By: cortinico fbshipit-source-id: c90e885345f7b49d6c3ccfd73fdbd7ce8eebe4a1
Summary: Pull Request resolved: #56826 This class was fully stubbed out as part of the Legacy Architecture removal. All public methods had empty bodies or returned null/0, meaning any OSS library still referencing it was already silently broken at runtime. - `UIImplementation` — all methods empty stubs Also removes the dead `getUIImplementation()` method from `UIManagerModule`, and cleans up stale Javadoc references in `JSTouchDispatcher`, `ReactViewGroup`, and `ReactInterceptingViewGroup`. `UIBlock`, `NativeViewHierarchyManager`, `UIViewOperationQueue`, and the `addUIBlock`/`prependUIBlock` methods on `UIManagerModule` are retained and will be deprecated in a follow-up diff. Changelog: [Android][Removed] - Remove legacy architecture stub `UIImplementation`. This class was already non-functional (all methods were empty stubs). Reviewed By: christophpurrer Differential Revision: D104991922 fbshipit-source-id: 8a4bb015453f2bf441deec9ac914b08642faab44
Summary: X-link: react/yoga#1939 Pull Request resolved: #56780 Migrate YogaNodeJNIBase.java to YogaNodeJNIBase.kt, the last hand-written Java source file in the Yoga core library. This required converting all function overrides to Kotlin property overrides where the abstract YogaNode class declares them as val/var properties. Also changed nativePointer visibility in YogaConfigJNIBase from protected to internal to maintain same-module access that Java protected provided via package access. Changelog: [Internal] - Reviewed By: alanleedev Differential Revision: D104666335 fbshipit-source-id: c60285453e8a6ec834924be461da3c669d9a7be4
cd6aaa7 to
2092992
Compare
Comment on lines
+138
to
+142
| needs: [generate_changelog, set_hermes_version] | ||
| uses: ./.github/workflows/create-draft-release.yml | ||
| secrets: inherit | ||
| with: | ||
| hermesVersion: ${{ needs.set_hermes_version.outputs.HERMES_VERSION }} |
Comment on lines
+29
to
+51
| runs-on: ubuntu-latest | ||
| if: github.repository == 'facebook/react-native' | ||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v6 | ||
| with: | ||
| fetch-depth: 0 | ||
| fetch-tags: true | ||
| - name: Setup node.js | ||
| uses: ./.github/actions/setup-node | ||
| - name: Install dependencies | ||
| uses: ./.github/actions/yarn-install | ||
| - name: Configure Git | ||
| shell: bash | ||
| run: | | ||
| git config --local user.email "bot@reactnative.dev" | ||
| git config --local user.name "React Native Bot" | ||
| - name: Validate DotSlash artifacts | ||
| uses: actions/github-script@v8 | ||
| with: | ||
| script: | | ||
| const {validateDotSlashArtifacts} = require('./scripts/releases/validate-dotslash-artifacts.js'); | ||
| await validateDotSlashArtifacts(); |
Summary: Deprecate `UIBlock`, `NativeViewHierarchyManager`, and the `addUIBlock`/`prependUIBlock` methods on `UIManagerModule`. These are legacy Paper architecture APIs that are already non-functional stubs. Libraries should migrate to `UIManagerListener` or View Commands. The Fabric replacement for `UIBlock` already exists at `com.facebook.react.fabric.interop.UIBlock` and uses `UIBlockViewResolver` instead of `NativeViewHierarchyManager`. Changelog: [Android][Deprecated] - Deprecate `UIBlock` interface and `UIManagerModule.addUIBlock`/`prependUIBlock` methods. Use `UIManagerListener` or View Commands instead. Reviewed By: javache Differential Revision: D104995161 fbshipit-source-id: 447067129765761a587a8fc5a1b57710b29a1132
Summary: Pull Request resolved: #56843 ## Changelog: [Internal] [Changed] - [viewtransition] Reduce old pseudo element shadownode cloning Reviewed By: christophpurrer Differential Revision: D105214320 fbshipit-source-id: 8a4ad1c8ba6a26a0c9931108049fa3975f534322
Summary: Fixes #55090 In Fabric, `prepareForRecycle` resets contentInset to zero when a `ScrollView` is recycled. But the subsequent frame reset dance (required for `contentInsetAdjustmentBehavior` see 27fe6f1) triggers `centerContentIfNeeded` with the previous component's stale content size, silently overwriting the reset. As a result, a `ScrollView` with `centerContent={true}` that is unmounted and replaced by another `ScrollView` leaves behind a stale contentInset that the new component inherits causing displaced content if the new `ScrollView` does not have `centerContent={true}`. Two fixes: 1. `RCTScrollViewComponentView` In updateProps, when `centerContent` transitions from true to false, explicitly reset `contentInset` to the prop value. `centerContentIfNeeded` will not self-correct once `centerContent` is disabled on the new component, so the reset must be forced. The existing `contentInset` prop check is also guarded with !centerContent to prevent it from overriding the inset calculated by centerContentIfNeeded when centering is active. 2. `RCTEnhancedScrollView` Override `setCenterContent:` and `setContentSize:` to trigger `centerContentIfNeeded`. This ensures centering is re-applied with the correct new content size when the new component's content arrives via `updateState:`, and that toggling `centerContent` takes effect immediately. ## Changelog: [IOS] [FIXED] - Fix recycled ScrollView inheriting stale contentInset from centerContent on Fabric Pull Request resolved: #56832 Test Plan: Using the RNTester-app, replace `CenterContentList` with the following inside `ScrollViewExample.js`: <details><summary>CenterContentList reproducer</summary> Doing two different ScrollViews to force an unmount of the one with centerContent so the other inherits its insets ```jsx function CenterContentList(): React.Node { const [centerContent, setCenterContent] = useState(true); if (centerContent) { return ( <ScrollView nestedScrollEnabled style={styles.scrollView} centerContent={true}> <Text>This should be in center.</Text> <Button label="Toggle centerContent" onPress={() => setCenterContent(!centerContent)} /> </ScrollView> ); } else { return ( <ScrollView nestedScrollEnabled style={styles.scrollView} centerContent={false}> <Text>This should not be in center.</Text> <Button label="Toggle centerContent" onPress={() => setCenterContent(!centerContent)} /> </ScrollView> ); } } ``` </details> ### Before the fix Note that for both `ScrollView`s the content is centered, even though one has `centerContent={false}`. https://github.com/user-attachments/assets/7d5916a2-dbe3-4955-ad7b-1e6596d90104 ### After the fix One is properly centered, while the other has its content at the top. https://github.com/user-attachments/assets/ae8a41eb-0084-40e7-98fd-88433956ea40 Reviewed By: cipolleschi Differential Revision: D105294296 Pulled By: javache fbshipit-source-id: 4dfd2ecddb2c381e204da3a9278e74829ea702b5
Summary: Bump to Kotlin 2.2.0 to align with internal builds ## Changelog: [Android] [Changed] - Bump Kotlin to 2.2.0 Pull Request resolved: #56838 Test Plan: CI Differential Revision: D105298435 Pulled By: cortinico fbshipit-source-id: eae5f9f19a66d15f4451ea369ad032e8acef0aff
Summary: Pull Request resolved: #56840 Fix Kotlin compiler warnings about overridden method parameter names not matching their supertypes. Rename `websocket` to `webSocket` in `WebSocketModule.onClosing` to match `WebSocketListener`, and rename `done` to `isLastChunk` in `MultipartStreamReaderTest` callbacks to match `CallCountTrackingChunkCallback`. Changelog: [Internal] Differential Revision: D105299024 fbshipit-source-id: fcf3718fbbfd342f598a05ddbe170a11480cce89
Summary: Kotlin 2.2.0 deprecated API versions 1.8 and 1.9, which causes a build failure when combined with -Werror. Bump apiVersion to KOTLIN_2_0 in all four gradle-plugin build files. ## Changelog: [ANDROID] [CHANGED] - Bumped min Kotlin version to 2.0+ Pull Request resolved: #56849 Test Plan: CI Differential Revision: D105322296 Pulled By: cortinico fbshipit-source-id: 729f4475e6f026032d3d0a34f4322eeb29e6a5a8
#56851) Summary: Pull Request resolved: #56851 The `ReactNativeNewArchitectureFeatureFlags.enableFabricRenderer()` flag is being deleted; it always returns true on the canary release stage. Inline `true` and simplify the surrounding `&&` expressions: - Two `if (enableFabricRenderer() && useFabricInterop())` checks become `if (useFabricInterop())`. - Remove the now-unused import. Behavior is unchanged. Changelog: [Internal] Reviewed By: javache Differential Revision: D105229106 fbshipit-source-id: 186628e0db946c1af242a30f8468601bcedc5685
Summary: Pull Request resolved: #56852 The `ReactNativeNewArchitectureFeatureFlags.enableFabricRenderer()` flag is being deleted; it always returns true on the canary release stage. Production: - `checkReactFeatureFlagsConditions` now returns `useFabricInterop()` only. - Remove the now-unused `enableFabricRenderer` import. Test: - `overrideFeatureFlags` test helper drops the `enableFabricRenderer` parameter. - Existing test cases continue to exercise both true/false branches of `useFabricInterop`. Behavior is unchanged. Changelog: [Internal] Reviewed By: javache Differential Revision: D105229610 fbshipit-source-id: 23366d976231ee973ba0f0ad6921f6c6b0bfb613
Summary: Pull Request resolved: #56853 The W3C event-dispatch pipeline (gated on `enableNativeEventTargetEventDispatching`) walks the parent chain of the dispatched target on every event: once in `EventTarget.getEventPath` for the capture/bubble path, plus up to two additional walks in the responder system for touch/scroll/selection events. Each `parentNode` read is a JSI hop into C++ that re-walks the family chain in the current shadow-tree revision, so on event-heavy screens (e.g., a list firing many `onLayout` events during mount) the per-event walk cost adds up. This change adds a per-instance parent cache that all event-dispatch consumers share. RN host trees are append-only and the shadow tree is stable during dispatch, so once a node is reachable from the dispatch path its parent is permanently stable from that pipeline's point of view. The cache stores the resolved parent in a symbol-keyed slot on the first lookup; subsequent lookups (within the same dispatch and across future dispatches on the same tree) collapse to a property load. - Add `getEventTargetParent(target)` in `EventTargetInternals` (plus the cache slot and a sentinel for cached nulls). - Route `EventTarget.getEventPath` through the new utility. - Route the `parentElement` walks in `ReactNativeResponder` (`getLowestCommonAncestor`, `negotiateResponder` path build, and the `skipSelf` step) through the same utility, with an `instanceof ReadOnlyElement` filter so the responder's element-only invariant is preserved. - Leave the `parentNode` getter on `ReadOnlyNode` untouched — user-visible reads still take the canonical JSI path and detached-node reads continue to return `null`. - Add two stable-tree scenarios to `EventDispatching-benchmark-itest.js` (`beforeAll` mounts once, the benchmarked function dispatches per iteration) so the cache win is measurable and any regression in the rebuild-per-iter scenarios is also visible. ## Benchmark results Ran `yarn fantom EventDispatching-benchmark --benchmarks` from `xplat/js/react-native-github/`, comparing the cache disabled (utility short-circuited to the canonical getter) against the cache enabled. Numbers below are p50 latency; both runs use Hermes-bytecode optimized mode (the default for `*-benchmark-itest.js`). New stable-tree scenarios with the new pipeline (`enableNativeEventTargetEventDispatching` ON): | Scenario (depth 50, stable tree) | Cache OFF | Cache ON | Improvement | | ------------------------------------------------ | --------- | -------- | ------------------- | | dispatch event, bubbling, handlers on ancestors | 0.271 ms | 0.165 ms | 39% faster (1.64×) | | dispatch event, no handlers on ancestors | 0.265 ms | 0.161 ms | 39% faster (1.65×) | Pre-existing rebuild-per-iter scenarios with the new pipeline (no measurable change — cache is empty on each iteration): | Scenario (flag ON) | Cache OFF | Cache ON | Δ | | ------------------------------------- | --------- | -------- | - | | flat (1 handler) | 0.042 ms | 0.042 ms | — | | nested 10 deep (bubbling) | 0.105 ms | 0.106 ms | — | | nested 50 deep (bubbling) | 0.378 ms | 0.381 ms | — | | nested 10 deep (no handlers) | 0.103 ms | 0.104 ms | — | | stopPropagation, nested 10 deep | 0.089 ms | 0.091 ms | — | | render + dispatch, flat | 0.082 ms | 0.083 ms | — | Legacy pipeline (`enableNativeEventTargetEventDispatching` OFF) was unchanged across both runs, confirming the cache change does not leak outside the new pipeline. Changelog: [Internal] Reviewed By: andrewdacenko Differential Revision: D105337953 fbshipit-source-id: cd157aaa34049906de00566a901a87f0e447b644
Summary: Pull Request resolved: #56850 The `fixFindShadowNodeByTagRaceCondition` feature flag has been fully rolled out on both iOS and Android. This change removes the flag and makes the fixed behavior the permanent default. The fix (#55751) replaced a use-after-free race condition in `findShadowNodeByTag_DEPRECATED` where a raw pointer was captured via `tryCommit()` and could dangle after a concurrent surface stop. The fixed code path uses `getCurrentRevision()` which returns a `shared_ptr` that keeps the root alive for the entire traversal. Changelog: [Internal] Reviewed By: sammy-SC Differential Revision: D105322626 fbshipit-source-id: 018a6a3646bbca9e8f7854848a8a3ea5f2dbf1d0
Summary: Following #53254 Removes the deprecated `getWindowDisplayMetrics` / `setWindowDisplayMetrics` / `getDisplayMetricsWritableMap` APIs from `DisplayMetricsHolder`. These were marked `TODO(0.87)` for removal once the non-breaking window closed. ## Changelog: [ANDROID] [REMOVED] - Remove `DisplayMetricsHolder.getWindowDisplayMetrics`, `setWindowDisplayMetrics`, and `getDisplayMetricsWritableMap` Pull Request resolved: #56635 Test Plan: - `./gradlew :packages:react-native:ReactAndroid:test` passes (removed `DisplayMetricsHolderTest` window-metrics cases and the `PixelUtilTest` references) - checked prefetching logs with VR - `./arvr/apps/LivingRoom/build_and_run.sh` - `CometPrefetchers com.oculus.tv D Found entrypoints to prefetch for: LivingRoomHomeSurface.entrypoint. Custom variables: react_native_pixel_ratio = 1.25` - `./arvr/apps/Store/build_and_run.sh` - `CometPrefetchers com.oculus.store D Found entrypoints to prefetch for: StoreHome.entrypoint. Custom variables: react_native_pixel_ratio = 1.25` Reviewed By: javache Differential Revision: D103695359 Pulled By: alanleedev fbshipit-source-id: fdcf2f74b56323e9a7474c6aea09d3dcbaa4fd7f
Summary: Adds a shared cache layer at `~/Library/Caches/ReactNative/` for prebuilt iOS tarballs (Hermes, ReactNativeDependencies, ReactNativeCore). - On first download, tarballs are saved to both the local Pods artifacts dir **and** the shared cache. - On subsequent `pod install` runs, if the local Pods cache is empty but the shared cache has the tarball for that version, it is copied locally instead of re-downloaded from Maven. - Adds descriptive log messages for each scenario: local Pods hit, shared cache hit, and cache miss (download). This avoids redundant downloads when: - The Pods directory is deleted between installs - Multiple projects use the same React Native version - CI environments have a persistent home directory ## Changelog: [IOS] [CHANGED] - Cache prebuilt iOS binaries (Hermes, ReactNativeDependencies, ReactNativeCore) in ~/Library/Caches/ReactNative to avoid redundant downloads across pod installs Test Plan: ### Cold start ==> Downloading ``` [ReactNativeDependencies] Setting up ReactNativeDependencies... [ReactNativeDependencies] Building from source: false [ReactNativeDependencies] Using release tarball [ReactNativeDependencies] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz [ReactNativeDependencies] Cache miss: downloading reactnative-dependencies-0.81.6-debug.tar.gz from https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:- 0 0 0 0 0 0 0 0 --:--:-- --:- 35 18.3M 35 6580k 0 0 6386k 0 0:00:02 0:0 73 18.3M 73 13.5M 0 0 6827k 0 0:00:02 0:0100 18.3M 100 18.3M 0 0 6915k 0 0:00:02 0:00:02 --:--:-- 6914k [ReactNativeDependencies] Saved reactnative-dependencies-0.81.6-debug.tar.gz to shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeDependencies] Cache miss: downloading reactnative-dependencies-0.81.6-release.tar.gz from https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-release.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:- 0 0 0 0 0 0 0 0 --:--:-- --:- 67 9.9M 67 6948k 0 0 6332k 0 0:00:01 0:0100 9.9M 100 9.9M 0 0 6607k 0 0:00:01 0:00:01 --:--:-- 6603k [ReactNativeDependencies] Saved reactnative-dependencies-0.81.6-release.tar.gz to shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeDependencies] Source: {http: "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz"} [ReactNativeCore] Setting up ReactNativeCore... [ReactNativeCore] Building from source: false [ReactNativeCore] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz [ReactNativeCore] Cache miss: downloading reactnative-core-0.81.6-debug.tar.gz from https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:- 1 78.5M 1 1557k 0 0 5035k 0 0:00:15 --:- 10 78.5M 10 8537k 0 0 6536k 0 0:00:12 0:0 19 78.5M 19 15.4M 0 0 6866k 0 0:00:11 0:0 28 78.5M 28 22.5M 0 0 6990k 0 0:00:11 0:0 37 78.5M 37 29.7M 0 0 7062k 0 0:00:11 0:0 46 78.5M 46 36.4M 0 0 7037k 0 0:00:11 0:0 55 78.5M 55 43.5M 0 0 7065k 0 0:00:11 0:0 64 78.5M 64 50.5M 0 0 7077k 0 0:00:11 0:0100 78.5M 100 78.5M 0 0 6852k 0 0:00:11 0:00:11 --:--:-- 6482k [ReactNativeCore] Saved reactnative-core-0.81.6-debug.tar.gz to shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeCore] Cache miss: downloading reactnative-core-0.81.6-release.tar.gz from https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-release.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 26.3M 100 26.3M 0 0 5683k 0 0:00:04 0:00:04 --:--:-- 5793k [ReactNativeCore] Saved reactnative-core-0.81.6-release.tar.gz to shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeCore] Source: {http: "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz"} Configuring the target with the New Architecture [ReactNativeCore] Using React Native Core and React Native Dependencies prebuilt versions. [Codegen] Analyzing /Users/cipolleschi/Tests/My0_81App/package.json ``` ### Warn shared cache, Empty Pods dir ==> Copy ``` [ReactNativeDependencies] Setting up ReactNativeDependencies... [ReactNativeDependencies] Building from source: false [ReactNativeDependencies] Using release tarball [ReactNativeDependencies] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz [ReactNativeDependencies] Cache hit: copying reactnative-dependencies-0.81.6-debug.tar.gz from shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeDependencies] Cache hit: copying reactnative-dependencies-0.81.6-release.tar.gz from shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeDependencies] Source: {http: "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz"} [ReactNativeCore] Setting up ReactNativeCore... [ReactNativeCore] Building from source: false [ReactNativeCore] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz [ReactNativeCore] Cache hit: copying reactnative-core-0.81.6-debug.tar.gz from shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeCore] Cache hit: copying reactnative-core-0.81.6-release.tar.gz from shared cache (/Users/cipolleschi/Library/Caches/ReactNative) [ReactNativeCore] Source: {http: "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz"} Configuring the target with the New Architecture [ReactNativeCore] Using React Native Core and React Native Dependencies prebuilt versions. [Codegen] Analyzing /Users/cipolleschi/Tests/My0_81App/package.json ... [ReactNativeDependencies] Using release tarball [ReactNativeDependencies] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz [ReactNativeDependencies] Tarball reactnative-dependencies-0.81.6-debug.tar.gz already exists in Pods. Skipping download. [ReactNativeDependencies] Tarball reactnative-dependencies-0.81.6-release.tar.gz already exists in Pods. Skipping download. ``` ### Warm Cache, Pods folder populated ==> Nothing happens ``` [ReactNativeDependencies] Setting up ReactNativeDependencies... [ReactNativeDependencies] Building from source: false [ReactNativeDependencies] Using release tarball [ReactNativeDependencies] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz [ReactNativeDependencies] Tarball reactnative-dependencies-0.81.6-debug.tar.gz already exists in Pods. Skipping download. [ReactNativeDependencies] Tarball reactnative-dependencies-0.81.6-release.tar.gz already exists in Pods. Skipping download. [ReactNativeDependencies] Source: {http: "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz"} [ReactNativeCore] Setting up ReactNativeCore... [ReactNativeCore] Building from source: false [ReactNativeCore] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz [ReactNativeCore] Tarball reactnative-core-0.81.6-debug.tar.gz already exists in Pods. Skipping download. [ReactNativeCore] Tarball reactnative-core-0.81.6-release.tar.gz already exists in Pods. Skipping download. [ReactNativeCore] Source: {http: "https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-core-debug.tar.gz"} Configuring the target with the New Architecture [ReactNativeCore] Using React Native Core and React Native Dependencies prebuilt versions. [Codegen] Analyzing /Users/cipolleschi/Tests/My0_81App/package.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] Searching for codegen-enabled libraries in react-native.config.js [Codegen] Found react-native-safe-area-context [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 safeareacontext - ios [Codegen] Generated artifacts: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios [Codegen] Generating RCTThirdPartyComponentsProvider.h [Codegen] Generated artifact: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/RCTThirdPartyComponentsProvider.h [Codegen] Generating RCTThirdPartyComponentsProvider.mm [Codegen] Generated artifact: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/RCTThirdPartyComponentsProvider.mm [Codegen] Generating RCTModulesProvider.h [Codegen] Generated artifact: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/RCTModuleProviders.h [Codegen] Generating RCTModuleProviders.mm [Codegen] Generated artifact: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/RCTModuleProviders.mm [Codegen] Generating RCTAppDependencyProvider [Codegen] Generated artifact: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/RCTAppDependencyProvider.h [Codegen] Generated artifact: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/RCTAppDependencyProvider.mm [Codegen] Generated podspec: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/ReactAppDependencyProvider.podspec [Codegen] Generated podspec: /Users/cipolleschi/Tests/My0_81App/ios/build/generated/ios/ReactCodegen.podspec [Codegen] Done. [ReactNativeDependencies] Using release tarball [ReactNativeDependencies] Using tarball from URL: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.81.6/react-native-artifacts-0.81.6-reactnative-dependencies-debug.tar.gz [ReactNativeDependencies] Tarball reactnative-dependencies-0.81.6-debug.tar.gz already exists in Pods. Skipping download. [ReactNativeDependencies] Tarball reactnative-dependencies-0.81.6-release.tar.gz already exists in Pods. Skipping download. Analyzing dependencies ``` Reviewed By: cortinico Differential Revision: D105315202 Pulled By: cipolleschi
3aabd20 to
dec524b
Compare
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.
Adds a shared cache layer at
~/Library/Caches/ReactNative/for prebuilt iOS tarballs(Hermes, ReactNativeDependencies, ReactNativeCore).
Pods artifacts dir and the shared cache.
pod installruns, if the local Podscache is empty but the shared cache has the tarball for
that version, it is copied locally instead of
re-downloaded from Maven.
Pods hit, shared cache hit, and cache miss (download).
This avoids redundant downloads when:
Changelog:
[IOS] [CHANGED] - Cache prebuilt iOS binaries (Hermes,
ReactNativeDependencies, ReactNativeCore) in
~/Library/Caches/ReactNative to avoid redundant downloads
across pod installs
Test Plan:
Cold start ==> Downloading
Warn shared cache, Empty Pods dir ==> Copy
Warm Cache, Pods folder populated ==> Nothing happens