From f379b1e583ffeac54619e196bbc2dd368ff7b62b Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Wed, 23 Dec 2020 21:46:56 -0800 Subject: [PATCH 1/2] Fabric: Shipping `updateStateWithAutorepeat` as the only way to update a state Summary: This replaces the internal core implementation of `setState` with the new `updateStateWithAutorepeat` which is now the only option. In short, `updateStateWithAutorepeat` works as `setState` with the following features: * The state update might be performed several times until it succeeds. * The callback is being called on every retry with actual previous data provided (can be different on every call). * In case of a static value is provided (simple case, not lambda, the only case on Android for now), the same *new*/provided value will be used for all state updates. In this case, the state update cannot fail. * If a callback is provided, the update operation can be canceled via returning `nullptr` from the callback. This diff removes all mentions of the previous state update approach from the core; some other leftovers will be removed separatly. Changelog: [Internal] Fabric-specific internal change. Reviewed By: sammy-SC Differential Revision: D25695600 fbshipit-source-id: 14b3d4bad7ee69e024a9b0b9fc018f7d58bf060c --- .../RCTSafeAreaViewComponentView.mm | 4 +- .../ScrollView/RCTScrollViewComponentView.mm | 2 +- .../react/fabric/StateWrapperImpl.java | 30 +--------- .../react/fabric/jni/StateWrapperImpl.cpp | 29 +-------- .../uimanager/FabricViewStateManager.java | 7 +-- .../react/uimanager/StateWrapper.java | 6 +- .../react/renderer/core/ConcreteState.h | 59 ++++--------------- ReactCommon/react/renderer/core/State.h | 4 +- ReactCommon/react/renderer/core/StateUpdate.h | 2 - .../react/renderer/scheduler/Scheduler.cpp | 6 -- .../react/renderer/uimanager/UIManager.cpp | 40 +------------ .../react/renderer/uimanager/UIManager.h | 6 -- 12 files changed, 25 insertions(+), 170 deletions(-) diff --git a/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm index 1180a898cb03c4..fa362f134a4b6f 100644 --- a/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm @@ -61,7 +61,7 @@ - (void)_updateStateIfNecessary auto newPadding = RCTEdgeInsetsFromUIEdgeInsets(insets); auto threshold = 1.0 / RCTScreenScale() + 0.01; // Size of a pixel plus some small threshold. - _state->updateStateWithAutorepeat( + _state->updateState( [=](SafeAreaViewShadowNode::ConcreteState::Data const &oldData) -> SafeAreaViewShadowNode::ConcreteState::SharedData { auto oldPadding = oldData.padding; @@ -74,7 +74,7 @@ - (void)_updateStateIfNecessary auto newData = oldData; newData.padding = newPadding; - return std::make_shared(newData); + return std::make_shared(newData); }); } diff --git a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm index 889452e5d16b9c..8ff8770a97a405 100644 --- a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -311,7 +311,7 @@ - (void)_updateStateWithContentOffset _state->updateState([contentOffset](ScrollViewShadowNode::ConcreteState::Data const &data) { auto newData = data; newData.contentOffset = contentOffset; - return newData; + return std::make_shared(newData); }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.java index 6a461623e99aca..2d96776f882ea0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.java @@ -8,13 +8,11 @@ package com.facebook.react.fabric; import android.annotation.SuppressLint; -import androidx.annotation.AnyThread; import androidx.annotation.NonNull; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.NativeMap; import com.facebook.react.bridge.ReadableNativeMap; -import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.StateWrapper; @@ -30,9 +28,6 @@ public class StateWrapperImpl implements StateWrapper { @DoNotStrip private final HybridData mHybridData; - private Runnable mFailureCallback = null; - private int mUpdateStateId = 0; - private static native HybridData initHybrid(); private StateWrapperImpl() { @@ -44,29 +39,8 @@ private StateWrapperImpl() { public native void updateStateImpl(@NonNull NativeMap map); - public native void updateStateWithFailureCallbackImpl( - @NonNull NativeMap map, Object self, int updateStateId); - @Override - public void updateState(@NonNull WritableMap map, Runnable failureCallback) { - mUpdateStateId++; - mFailureCallback = failureCallback; - updateStateWithFailureCallbackImpl((NativeMap) map, this, mUpdateStateId); - } - - @DoNotStrip - @AnyThread - public void updateStateFailed(int callbackRefId) { - // If the callback ref ID doesn't match the ID of the most-recent updateState call, - // then it's an outdated failure callback and we ignore it. - if (callbackRefId != mUpdateStateId) { - return; - } - - final Runnable failureCallback = mFailureCallback; - mFailureCallback = null; - if (failureCallback != null) { - UiThreadUtil.runOnUiThread(failureCallback); - } + public void updateState(@NonNull WritableMap map) { + updateStateImpl((NativeMap) map); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp index afbe9c7155232e..9a5b929e9af10f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp @@ -33,31 +33,7 @@ void StateWrapperImpl::updateStateImpl(NativeMap *map) { // Get folly::dynamic from map auto dynamicMap = map->consume(); // Set state - state_->updateState(dynamicMap, nullptr); -} - -void StateWrapperImpl::updateStateWithFailureCallbackImpl( - NativeMap *map, - jni::alias_ref self, - int callbackRefId) { - // Get folly::dynamic from map - auto dynamicMap = map->consume(); - // Turn the alias into a global_ref - // Note: this whole thing feels really janky, making StateWrapperImpl.java - // pass "this" into a function it's calling on "this". But after struggling - // for a while I couldn't figure out how to get a reference to the Java side - // of "this" in C++ in a way that's reasonably safe, and it maybe is even - // discouraged. Anyway, it might be weird, but this seems to work and be safe. - jni::global_ref globalSelf = make_global(self); - // Set state - state_->updateState( - dynamicMap, [globalSelf = std::move(globalSelf), callbackRefId]() { - static auto method = - jni::findClassStatic( - StateWrapperImpl::StateWrapperImplJavaDescriptor) - ->getMethod("updateStateFailed"); - method(globalSelf, callbackRefId); - }); + state_->updateState(dynamicMap); } void StateWrapperImpl::registerNatives() { @@ -65,9 +41,6 @@ void StateWrapperImpl::registerNatives() { makeNativeMethod("initHybrid", StateWrapperImpl::initHybrid), makeNativeMethod("getState", StateWrapperImpl::getState), makeNativeMethod("updateStateImpl", StateWrapperImpl::updateStateImpl), - makeNativeMethod( - "updateStateWithFailureCallbackImpl", - StateWrapperImpl::updateStateWithFailureCallbackImpl), }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java index f6bdd767801e88..f0b7cfb8ff6682 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java @@ -79,10 +79,9 @@ public void run() { if (stateUpdate == null) { return; } - stateWrapper.updateState( - stateUpdate, - // Failure callback - this is run if the updateState call fails - failureRunnable); + + // TODO: State update cannot fail; remove `failureRunnable` and custom retrying logic. + stateWrapper.updateState(stateUpdate); } public void setState(final StateUpdateCallback stateUpdateCallback) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/StateWrapper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/StateWrapper.java index 51bbc14349a446..c21d2414d0b3a6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/StateWrapper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/StateWrapper.java @@ -22,8 +22,8 @@ public interface StateWrapper { ReadableNativeMap getState(); /** - * Pass a map of values back to the C++ layer. /Last/ runnable passed into updateState is called - * if an updateState call fails. + * Pass a map of values back to the C++ layer. The operation is performed synchronously and cannot + * fail. */ - void updateState(WritableMap map, Runnable failureCallback); + void updateState(WritableMap map); } diff --git a/ReactCommon/react/renderer/core/ConcreteState.h b/ReactCommon/react/renderer/core/ConcreteState.h index 33fa5dac788398..9ee3b21ec518c6 100644 --- a/ReactCommon/react/renderer/core/ConcreteState.h +++ b/ReactCommon/react/renderer/core/ConcreteState.h @@ -60,55 +60,23 @@ class ConcreteState : public State { */ void updateState( Data &&newData, - std::function failureCallback = nullptr, EventPriority priority = EventPriority::AsynchronousUnbatched) const { updateState( - [data = std::move(newData)](Data const &oldData) mutable -> Data && { - return std::move(data); + [data = std::move(newData)](Data const &oldData) mutable -> SharedData { + return std::make_shared(std::move(data)); }, - failureCallback, priority); } /* * Initiate a state update process with a given function (that transforms an - * old data value to a new one) and priority. The update function can be - * called from any thread any moment later. The function can be called only - * once or not called at all (in the case where the node was already unmounted - * and updating makes no sense). The state update operation might fail in case - * of conflict. + * old data value to a new one) and priority. The callback function can be + * called from any thread any moment later. + * In case of a conflict, the `callback` might be called several times until + * it succeeded. To cancel the state update operation, the callback needs to + * return `nullptr`. */ void updateState( - std::function callback, - std::function failureCallback = nullptr, - EventPriority priority = EventPriority::AsynchronousBatched) const { - auto family = family_.lock(); - - if (!family) { - // No more nodes of this family exist anymore, - // updating state is impossible. - return; - } - - auto stateUpdate = StateUpdate{ - family, - [=](StateData::Shared const &oldData) -> StateData::Shared { - assert(oldData); - return std::make_shared( - callback(*std::static_pointer_cast(oldData))); - }, - failureCallback, - false}; - - family->dispatchRawState(std::move(stateUpdate), priority); - } - - /* - * An experimental version of `updateState` function that re-commit the state - * update over and over again until it succeeded. To cancel the state update - * operation, the state update lambda needs to return `nullptr`. - */ - void updateStateWithAutorepeat( std::function callback, EventPriority priority = EventPriority::AsynchronousBatched) const { auto family = family_.lock(); @@ -120,14 +88,10 @@ class ConcreteState : public State { } auto stateUpdate = StateUpdate{ - family, - [=](StateData::Shared const &oldData) -> StateData::Shared { + family, [=](StateData::Shared const &oldData) -> StateData::Shared { assert(oldData); return callback(*std::static_pointer_cast(oldData)); - }, - nullptr, - true, - }; + }}; family->dispatchRawState(std::move(stateUpdate), priority); } @@ -137,9 +101,8 @@ class ConcreteState : public State { return getData().getDynamic(); } - void updateState(folly::dynamic data, std::function failureCallback) - const override { - updateState(std::move(Data(getData(), data)), failureCallback); + void updateState(folly::dynamic data) const override { + updateState(std::move(Data(getData(), data))); } #endif }; diff --git a/ReactCommon/react/renderer/core/State.h b/ReactCommon/react/renderer/core/State.h index ae636f37e421cd..c0472fec057bf5 100644 --- a/ReactCommon/react/renderer/core/State.h +++ b/ReactCommon/react/renderer/core/State.h @@ -65,9 +65,7 @@ class State { #ifdef ANDROID virtual folly::dynamic getDynamic() const = 0; - virtual void updateState( - folly::dynamic data, - std::function failureCallback) const = 0; + virtual void updateState(folly::dynamic data) const = 0; #endif protected: diff --git a/ReactCommon/react/renderer/core/StateUpdate.h b/ReactCommon/react/renderer/core/StateUpdate.h index 7931f5e080066f..890e56d141092b 100644 --- a/ReactCommon/react/renderer/core/StateUpdate.h +++ b/ReactCommon/react/renderer/core/StateUpdate.h @@ -25,8 +25,6 @@ class StateUpdate { SharedShadowNodeFamily family; Callback callback; - FailureCallback failureCallback; - bool autorepeat; }; } // namespace react diff --git a/ReactCommon/react/renderer/scheduler/Scheduler.cpp b/ReactCommon/react/renderer/scheduler/Scheduler.cpp index 9fe70284e2f309..313b4e201ec656 100644 --- a/ReactCommon/react/renderer/scheduler/Scheduler.cpp +++ b/ReactCommon/react/renderer/scheduler/Scheduler.cpp @@ -109,15 +109,9 @@ Scheduler::Scheduler( #ifdef ANDROID removeOutstandingSurfacesOnDestruction_ = reactNativeConfig_->getBool( "react_fabric:remove_outstanding_surfaces_on_destruction_android"); - uiManager_->experimentEnableStateUpdateWithAutorepeat = - reactNativeConfig_->getBool( - "react_fabric:enable_state_update_with_autorepeat_android"); #else removeOutstandingSurfacesOnDestruction_ = reactNativeConfig_->getBool( "react_fabric:remove_outstanding_surfaces_on_destruction_ios"); - uiManager_->experimentEnableStateUpdateWithAutorepeat = - reactNativeConfig_->getBool( - "react_fabric:enable_state_update_with_autorepeat_ios"); #endif } diff --git a/ReactCommon/react/renderer/uimanager/UIManager.cpp b/ReactCommon/react/renderer/uimanager/UIManager.cpp index 3da07b811a7cca..de353321bf278f 100644 --- a/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -191,8 +191,7 @@ LayoutMetrics UIManager::getRelativeLayoutMetrics( shadowNode.getFamily(), *layoutableAncestorShadowNode, policy); } -void UIManager::updateStateWithAutorepeat( - StateUpdate const &stateUpdate) const { +void UIManager::updateState(StateUpdate const &stateUpdate) const { auto &callback = stateUpdate.callback; auto &family = stateUpdate.family; auto &componentDescriptor = family->getComponentDescriptor(); @@ -230,43 +229,6 @@ void UIManager::updateStateWithAutorepeat( }); } -void UIManager::updateState(StateUpdate const &stateUpdate) const { - if (stateUpdate.autorepeat || experimentEnableStateUpdateWithAutorepeat) { - updateStateWithAutorepeat(stateUpdate); - return; - } - - auto &callback = stateUpdate.callback; - auto &family = stateUpdate.family; - auto &componentDescriptor = family->getComponentDescriptor(); - - shadowTreeRegistry_.visit( - family->getSurfaceId(), [&](ShadowTree const &shadowTree) { - auto status = shadowTree.tryCommit([&](RootShadowNode const - &oldRootShadowNode) { - return std::static_pointer_cast( - oldRootShadowNode.cloneTree( - *family, [&](ShadowNode const &oldShadowNode) { - auto newData = - callback(oldShadowNode.getState()->getDataPointer()); - auto newState = - componentDescriptor.createState(*family, newData); - - return oldShadowNode.clone({ - /* .props = */ ShadowNodeFragment::propsPlaceholder(), - /* .children = */ - ShadowNodeFragment::childrenPlaceholder(), - /* .state = */ newState, - }); - })); - }); - if (status != ShadowTree::CommitStatus::Succeeded && - stateUpdate.failureCallback) { - stateUpdate.failureCallback(); - } - }); -} - void UIManager::dispatchCommand( const ShadowNode::Shared &shadowNode, std::string const &commandName, diff --git a/ReactCommon/react/renderer/uimanager/UIManager.h b/ReactCommon/react/renderer/uimanager/UIManager.h index 62f3e6ba5dbdf8..c2c76cc03b54af 100644 --- a/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/ReactCommon/react/renderer/uimanager/UIManager.h @@ -83,11 +83,6 @@ class UIManager final : public ShadowTreeDelegate { ShadowTree const &shadowTree, MountingCoordinator::Shared const &mountingCoordinator) const override; - /* - * Temporary flags. - */ - bool experimentEnableStateUpdateWithAutorepeat{false}; - RootShadowNode::Unshared shadowTreeWillCommit( ShadowTree const &shadowTree, RootShadowNode::Shared const &oldRootShadowNode, @@ -143,7 +138,6 @@ class UIManager final : public ShadowTreeDelegate { * and performs a commit. */ void updateState(StateUpdate const &stateUpdate) const; - void updateStateWithAutorepeat(StateUpdate const &stateUpdate) const; void dispatchCommand( const ShadowNode::Shared &shadowNode, From f45cb60e560d21be134aa808bd105e0394ba1fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ramos?= Date: Wed, 23 Dec 2020 22:22:59 -0800 Subject: [PATCH 2/2] Use Fabric builds in iOS tests (#30639) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/30639 # Changelog: [Internal] Enable Fabric builds in iOS tests on Circle CI and Sandcastle. Reviewed By: fkgozali Differential Revision: D25700257 fbshipit-source-id: a250dbc9904efec9ded130912a993638f0992373 --- .circleci/config.yml | 2 +- packages/rn-tester/Podfile.lock | 315 +++++++++++++++++++++++++++++++- 2 files changed, 314 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9d1ada2052cb22..a9ed245dc5c5e7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -428,7 +428,7 @@ jobs: steps: - run: name: Generate RNTesterPods Workspace - command: cd packages/rn-tester && bundle exec pod install --verbose + command: cd packages/rn-tester && USE_FABRIC=1 bundle exec pod install --verbose # ------------------------- # Runs iOS unit tests diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 61a95d29b96d37..f3ddbec6b86801 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -70,6 +70,10 @@ PODS: - boost-for-react-native - DoubleConversion - glog + - RCT-Folly/Fabric (2020.01.13.00): + - boost-for-react-native + - DoubleConversion + - glog - RCTRequired (1000.0.0) - RCTTypeSafety (1000.0.0): - FBLazyVector (= 1000.0.0) @@ -244,6 +248,289 @@ PODS: - React-jsinspector (= 1000.0.0) - React-perflogger (= 1000.0.0) - React-runtimeexecutor (= 1000.0.0) + - React-Fabric (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-Fabric/animations (= 1000.0.0) + - React-Fabric/attributedstring (= 1000.0.0) + - React-Fabric/better (= 1000.0.0) + - React-Fabric/componentregistry (= 1000.0.0) + - React-Fabric/components (= 1000.0.0) + - React-Fabric/config (= 1000.0.0) + - React-Fabric/core (= 1000.0.0) + - React-Fabric/debug (= 1000.0.0) + - React-Fabric/imagemanager (= 1000.0.0) + - React-Fabric/mounting (= 1000.0.0) + - React-Fabric/scheduler (= 1000.0.0) + - React-Fabric/templateprocessor (= 1000.0.0) + - React-Fabric/textlayoutmanager (= 1000.0.0) + - React-Fabric/uimanager (= 1000.0.0) + - React-Fabric/utils (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/animations (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/attributedstring (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/better (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/componentregistry (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-Fabric/components/activityindicator (= 1000.0.0) + - React-Fabric/components/image (= 1000.0.0) + - React-Fabric/components/inputaccessory (= 1000.0.0) + - React-Fabric/components/legacyviewmanagerinterop (= 1000.0.0) + - React-Fabric/components/modal (= 1000.0.0) + - React-Fabric/components/picker (= 1000.0.0) + - React-Fabric/components/rncore (= 1000.0.0) + - React-Fabric/components/root (= 1000.0.0) + - React-Fabric/components/safeareaview (= 1000.0.0) + - React-Fabric/components/scrollview (= 1000.0.0) + - React-Fabric/components/slider (= 1000.0.0) + - React-Fabric/components/text (= 1000.0.0) + - React-Fabric/components/textinput (= 1000.0.0) + - React-Fabric/components/unimplementedview (= 1000.0.0) + - React-Fabric/components/view (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/activityindicator (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/image (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/inputaccessory (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/legacyviewmanagerinterop (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/modal (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/picker (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/rncore (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/root (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/safeareaview (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/scrollview (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/slider (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/text (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/textinput (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/unimplementedview (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/components/view (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - Yoga + - React-Fabric/config (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/core (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/debug (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/imagemanager (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - React-RCTImage (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/mounting (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/scheduler (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/templateprocessor (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/textlayoutmanager (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-Fabric/uimanager + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/uimanager (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/utils (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) + - React-graphics (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) - React-jsi (1000.0.0): - boost-for-react-native (= 1.63.0) - DoubleConversion @@ -255,6 +542,11 @@ PODS: - DoubleConversion - glog - RCT-Folly (= 2020.01.13.00) + - React-jsi/Fabric (1000.0.0): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - glog + - RCT-Folly (= 2020.01.13.00) - React-jsiexecutor (1000.0.0): - DoubleConversion - glog @@ -281,6 +573,11 @@ PODS: - React-jsi (= 1000.0.0) - React-RCTNetwork (= 1000.0.0) - ReactCommon/turbomodule/core (= 1000.0.0) + - React-RCTFabric (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - React-Core (= 1000.0.0) + - React-Fabric (= 1000.0.0) + - React-RCTImage (= 1000.0.0) - React-RCTImage (1000.0.0): - FBReactNativeSpec (= 1000.0.0) - RCT-Folly (= 2020.01.13.00) @@ -378,6 +675,7 @@ DEPENDENCIES: - FlipperKit/SKIOSNetworkPlugin (~> 0.54.0) - glog (from `../../third-party-podspecs/glog.podspec`) - RCT-Folly (from `../../third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../../third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../../Libraries/RCTRequired`) - RCTTypeSafety (from `../../Libraries/TypeSafety`) - React (from `../../`) @@ -387,13 +685,17 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../../`) - React-CoreModules (from `../../React/CoreModules`) - React-cxxreact (from `../../ReactCommon/cxxreact`) + - React-Fabric (from `../../ReactCommon`) + - React-graphics (from `../../ReactCommon/react/renderer/graphics`) - React-jsi (from `../../ReactCommon/jsi`) + - React-jsi/Fabric (from `../../ReactCommon/jsi`) - React-jsiexecutor (from `../../ReactCommon/jsiexecutor`) - React-jsinspector (from `../../ReactCommon/jsinspector`) - React-perflogger (from `../../ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../../Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../../Libraries/NativeAnimation`) - React-RCTBlob (from `../../Libraries/Blob`) + - React-RCTFabric (from `../../React`) - React-RCTImage (from `../../Libraries/Image`) - React-RCTLinking (from `../../Libraries/LinkingIOS`) - React-RCTNetwork (from `../../Libraries/Network`) @@ -447,6 +749,10 @@ EXTERNAL SOURCES: :path: "../../React/CoreModules" React-cxxreact: :path: "../../ReactCommon/cxxreact" + React-Fabric: + :path: "../../ReactCommon" + React-graphics: + :path: "../../ReactCommon/react/renderer/graphics" React-jsi: :path: "../../ReactCommon/jsi" React-jsiexecutor: @@ -461,6 +767,8 @@ EXTERNAL SOURCES: :path: "../../Libraries/NativeAnimation" React-RCTBlob: :path: "../../Libraries/Blob" + React-RCTFabric: + :path: "../../React" React-RCTImage: :path: "../../Libraries/Image" React-RCTLinking: @@ -490,7 +798,7 @@ SPEC CHECKSUMS: CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f DoubleConversion: cde416483dac037923206447da6e1454df403714 FBLazyVector: fe973c09b2299b5e8154186ecf1f6554b4f70987 - FBReactNativeSpec: 8e8b4f540947580f2a9ef54a443453c562d439cd + FBReactNativeSpec: 259a715466e53b411664fdfbe166dbde93ece5b6 Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365 Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41 Flipper-Folly: e4493b013c02d9347d5e0cb4d128680239f6c78a @@ -500,7 +808,7 @@ SPEC CHECKSUMS: FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 OpenSSL-Universal: ff34003318d5e1163e9529b08470708e389ffcdd - RCT-Folly: b39288cedafe50da43317ec7d91bcc8cc0abbf33 + RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c RCTRequired: d3d4ce60e1e2282864d7560340690a3c8c646de1 RCTTypeSafety: 4da4f9f218727257c50fd3bf2683a06cdb4fede3 React: 87b3271d925336a94620915db5845c67c5dbbd77 @@ -508,6 +816,8 @@ SPEC CHECKSUMS: React-Core: 2b2a8ac8bfb65779965456570a871f4cf5e5e03a React-CoreModules: 87f011fa87190ffe979e443ce578ec93ec6ff4d4 React-cxxreact: de6de17eac6bbaa4f9fad46b66e7f0c4aaaf863d + React-Fabric: 911e4b13fbffce46820f18c3a3b7a2a966e9e425 + React-graphics: 996d77a11e944cb0b3a5c67aefda1de5cb848e28 React-jsi: 790da16b69a61adc36829eed43c44187c1488d10 React-jsiexecutor: 17a3e26806bc19d8be7b6c83792bffc46df796be React-jsinspector: 01db8cd098c7ab72bd09abdda522a08c9acd3af9 @@ -515,6 +825,7 @@ SPEC CHECKSUMS: React-RCTActionSheet: e6562ea4df7099af4023d1bd0e9716e43b45a5c9 React-RCTAnimation: fc2f655a64f0791879ab03843cca90c53737d1cb React-RCTBlob: 5f82467e5d3bef65d05cdd900df6e12b0849744a + React-RCTFabric: 7a25f04616e0bcdcda4279a93b42e80ee69b46be React-RCTImage: f3a98834281555ce1bbbe1af0306aaf40ac70fc7 React-RCTLinking: 801d05ad5e6d1636e977f4dfeab21f87358a02a5 React-RCTNetwork: b5e2f27a098ca52d98426328640314a499da6d00