From a0bb79d84f69df2feced9baaa310d4cf0241ed04 Mon Sep 17 00:00:00 2001 From: Eric Rozell Date: Mon, 31 Jul 2023 11:38:36 -0700 Subject: [PATCH] Create BaseViewProps for platforms to derive (#38549) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/38549 Out of tree platforms may need different implementations of ViewProps. In fact, Android does already with props like `needsOffscreenAlphaCompositing` and `focusable`. This diff is not opinionated on whether these props should actually be shared on all platforms. Props like `focusable` may be a good candidate for generalizing to all platforms. However, there will always be a need for one platform to experiment with a new prop while it's not available yet on another, especially when considering out of tree platforms. This diff moves the existing ViewProps class to BaseViewProps, aliases ViewProps as BaseViewProps for iOS for now, and moves Android-specific view props to it's own header and implementation. ## Changelog: [General] [Added] - Support additional View props in out of tree platform Fabric implementations Reviewed By: christophpurrer Differential Revision: D47492635 fbshipit-source-id: 5739174a2b1d28ba84f4398ccc1cc0b846ebea79 --- .../AppDelegate/React-RCTAppDelegate.podspec | 1 + .../React/React-RCTFabric.podspec | 1 + .../react-native/ReactAndroid/build.gradle | 5 +- .../ReactCommon/React-Fabric.podspec | 3 +- .../ReactCommon/React-FabricImage.podspec | 1 + .../view/{ViewProps.cpp => BaseViewProps.cpp} | 108 ++------------- .../view/{ViewProps.h => BaseViewProps.h} | 33 +---- .../renderer/components/view/CMakeLists.txt | 11 +- .../view}/AccessibilityPropsMapBuffer.cpp | 5 +- .../view}/AccessibilityPropsMapBuffer.h | 3 - .../renderer/components/view/NativeDrawable.h | 105 +++++++++++++++ .../renderer/components/view/ViewProps.cpp | 125 ++++++++++++++++++ .../renderer/components/view/ViewProps.h | 64 +++++++++ .../components/view}/ViewPropsMapBuffer.cpp | 7 +- .../components/view}/ViewPropsMapBuffer.h | 2 - .../view}/YogaStylablePropsMapBuffer.cpp | 7 +- .../view}/YogaStylablePropsMapBuffer.h | 0 .../renderer/components/view/ViewProps.h | 15 +++ .../renderer/components/view/primitives.h | 43 ------ .../components/view/propsConversions.h | 52 -------- .../cocoapods/__tests__/codegen_utils-test.rb | 2 +- .../__tests__/new_architecture-test.rb | 4 +- .../scripts/cocoapods/__tests__/utils-test.rb | 4 +- .../scripts/cocoapods/codegen_utils.rb | 1 + .../scripts/cocoapods/new_architecture.rb | 1 + .../react-native/scripts/cocoapods/utils.rb | 2 + 26 files changed, 356 insertions(+), 249 deletions(-) rename packages/react-native/ReactCommon/react/renderer/components/view/{ViewProps.cpp => BaseViewProps.cpp} (80%) rename packages/react-native/ReactCommon/react/renderer/components/view/{ViewProps.h => BaseViewProps.h} (73%) rename packages/react-native/ReactCommon/react/renderer/components/view/{ => platform/android/react/renderer/components/view}/AccessibilityPropsMapBuffer.cpp (98%) rename packages/react-native/ReactCommon/react/renderer/components/view/{ => platform/android/react/renderer/components/view}/AccessibilityPropsMapBuffer.h (98%) create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/NativeDrawable.h create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.cpp create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.h rename packages/react-native/ReactCommon/react/renderer/components/view/{ => platform/android/react/renderer/components/view}/ViewPropsMapBuffer.cpp (98%) rename packages/react-native/ReactCommon/react/renderer/components/view/{ => platform/android/react/renderer/components/view}/ViewPropsMapBuffer.h (98%) rename packages/react-native/ReactCommon/react/renderer/components/view/{ => platform/android/react/renderer/components/view}/YogaStylablePropsMapBuffer.cpp (97%) rename packages/react-native/ReactCommon/react/renderer/components/view/{ => platform/android/react/renderer/components/view}/YogaStylablePropsMapBuffer.h (100%) create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/platform/cxx/react/renderer/components/view/ViewProps.h diff --git a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec index 56b01504655..3342af0fe6a 100644 --- a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec +++ b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec @@ -44,6 +44,7 @@ header_search_paths = [ "$(PODS_ROOT)/Headers/Public/hermes-engine" ] : []).concat(use_frameworks ? [ "$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers/", + "$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx/", "$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers/", "$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", "$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core", diff --git a/packages/react-native/React/React-RCTFabric.podspec b/packages/react-native/React/React-RCTFabric.podspec index af3ed97086b..a38a040197c 100644 --- a/packages/react-native/React/React-RCTFabric.podspec +++ b/packages/react-native/React/React-RCTFabric.podspec @@ -38,6 +38,7 @@ if ENV['USE_FRAMEWORKS'] header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/textlayoutmanager/platform/ios\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/textinput/iostextinput\"" + header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig/React_nativeconfig.framework/Headers\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\"" diff --git a/packages/react-native/ReactAndroid/build.gradle b/packages/react-native/ReactAndroid/build.gradle index 08313ab7dee..cf466939059 100644 --- a/packages/react-native/ReactAndroid/build.gradle +++ b/packages/react-native/ReactAndroid/build.gradle @@ -118,7 +118,10 @@ final def preparePrefab = tasks.register("preparePrefab", PreparePrefabHeadersTa ), new PrefabPreprocessingEntry( "rrc_view", - new Pair("../ReactCommon/react/renderer/components/view/", "react/renderer/components/view/") + [ + new Pair("../ReactCommon/react/renderer/components/view/", "react/renderer/components/view/"), + new Pair("../ReactCommon/react/renderer/components/view/platform/android/", ""), + ] ), new PrefabPreprocessingEntry( "rrc_legacyviewmanagerinterop", diff --git a/packages/react-native/ReactCommon/React-Fabric.podspec b/packages/react-native/ReactCommon/React-Fabric.podspec index bf0ad1d2f39..de5b3234a4e 100644 --- a/packages/react-native/ReactCommon/React-Fabric.podspec +++ b/packages/react-native/ReactCommon/React-Fabric.podspec @@ -105,6 +105,7 @@ Pod::Spec.new do |s| "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers/\"", "\"$(PODS_TARGET_SRCROOT)/react/renderer/textlayoutmanager/platform/ios\"", "\"$(PODS_TARGET_SRCROOT)/react/renderer/components/textinput/iostextinput\"", + "\"$(PODS_TARGET_SRCROOT)/react/renderer/components/view/platform/cxx\"", ] end @@ -224,7 +225,7 @@ Pod::Spec.new do |s| sss.dependency "Yoga" sss.compiler_flags = folly_compiler_flags sss.source_files = "react/renderer/components/view/**/*.{m,mm,cpp,h}" - sss.exclude_files = "react/renderer/components/view/tests" + sss.exclude_files = "react/renderer/components/view/tests", "react/renderer/components/view/platform/android" sss.header_dir = "react/renderer/components/view" sss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/Headers/Private/Yoga\"" } end diff --git a/packages/react-native/ReactCommon/React-FabricImage.podspec b/packages/react-native/ReactCommon/React-FabricImage.podspec index 385ecdf322a..853fea35aac 100644 --- a/packages/react-native/ReactCommon/React-FabricImage.podspec +++ b/packages/react-native/ReactCommon/React-FabricImage.podspec @@ -36,6 +36,7 @@ if ENV['USE_FRAMEWORKS'] "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers\"", "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\"", "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\"", + "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\"", "\"$(PODS_TARGET_SRCROOT)/react/renderer/textlayoutmanager/platform/ios\"", "\"$(PODS_TARGET_SRCROOT)/react/renderer/components/textinput/iostextinput\"", "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\"", diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp similarity index 80% rename from packages/react-native/ReactCommon/react/renderer/components/view/ViewProps.cpp rename to packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp index 900080e6646..2f0f22023b2 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.cpp @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -#include "ViewProps.h" +#include "BaseViewProps.h" #include @@ -18,9 +18,9 @@ namespace facebook::react { -ViewProps::ViewProps( +BaseViewProps::BaseViewProps( const PropsParserContext &context, - ViewProps const &sourceProps, + BaseViewProps const &sourceProps, RawProps const &rawProps, bool shouldSetRawProps) : YogaStylableProps(context, sourceProps, rawProps, shouldSetRawProps), @@ -190,74 +190,7 @@ ViewProps::ViewProps( rawProps, "removeClippedSubviews", sourceProps.removeClippedSubviews, - false)) -#ifdef ANDROID - , - elevation( - CoreFeatures::enablePropIteratorSetter ? sourceProps.elevation - : convertRawProp( - context, - rawProps, - "elevation", - sourceProps.elevation, - {})), - nativeBackground( - CoreFeatures::enablePropIteratorSetter - ? sourceProps.nativeBackground - : convertRawProp( - context, - rawProps, - "nativeBackgroundAndroid", - sourceProps.nativeBackground, - {})), - nativeForeground( - CoreFeatures::enablePropIteratorSetter - ? sourceProps.nativeForeground - : convertRawProp( - context, - rawProps, - "nativeForegroundAndroid", - sourceProps.nativeForeground, - {})), - focusable( - CoreFeatures::enablePropIteratorSetter ? sourceProps.focusable - : convertRawProp( - context, - rawProps, - "focusable", - sourceProps.focusable, - {})), - hasTVPreferredFocus( - CoreFeatures::enablePropIteratorSetter - ? sourceProps.hasTVPreferredFocus - : convertRawProp( - context, - rawProps, - "hasTVPreferredFocus", - sourceProps.hasTVPreferredFocus, - {})), - needsOffscreenAlphaCompositing( - CoreFeatures::enablePropIteratorSetter - ? sourceProps.needsOffscreenAlphaCompositing - : convertRawProp( - context, - rawProps, - "needsOffscreenAlphaCompositing", - sourceProps.needsOffscreenAlphaCompositing, - {})), - renderToHardwareTextureAndroid( - CoreFeatures::enablePropIteratorSetter - ? sourceProps.renderToHardwareTextureAndroid - : convertRawProp( - context, - rawProps, - "renderToHardwareTextureAndroid", - sourceProps.renderToHardwareTextureAndroid, - {})) - -#endif -{ -} + false)) {} #define VIEW_EVENT_CASE(eventType) \ case CONSTEXPR_RAW_PROPS_KEY_HASH("on" #eventType): { \ @@ -271,7 +204,7 @@ ViewProps::ViewProps( return; \ } -void ViewProps::setProp( +void BaseViewProps::setProp( const PropsParserContext &context, RawPropsPropNameHash hash, const char *propName, @@ -282,7 +215,7 @@ void ViewProps::setProp( YogaStylableProps::setProp(context, hash, propName, value); AccessibilityProps::setProp(context, hash, propName, value); - static auto defaults = ViewProps{}; + static auto defaults = BaseViewProps{}; switch (hash) { RAW_SET_PROP_SWITCH_CASE_BASIC(opacity); @@ -326,15 +259,6 @@ void ViewProps::setProp( VIEW_EVENT_CASE(TouchMove); VIEW_EVENT_CASE(TouchEnd); VIEW_EVENT_CASE(TouchCancel); -#ifdef ANDROID - RAW_SET_PROP_SWITCH_CASE_BASIC(elevation); - RAW_SET_PROP_SWITCH_CASE(nativeBackground, "nativeBackgroundAndroid"); - RAW_SET_PROP_SWITCH_CASE(nativeForeground, "nativeForegroundAndroid"); - RAW_SET_PROP_SWITCH_CASE_BASIC(focusable); - RAW_SET_PROP_SWITCH_CASE_BASIC(hasTVPreferredFocus); - RAW_SET_PROP_SWITCH_CASE_BASIC(needsOffscreenAlphaCompositing); - RAW_SET_PROP_SWITCH_CASE_BASIC(renderToHardwareTextureAndroid); -#endif // BorderRadii SET_CASCADED_RECTANGLE_CORNERS(borderRadii, "border", "Radius", value); SET_CASCADED_RECTANGLE_EDGES(borderColors, "border", "Color", value); @@ -380,7 +304,7 @@ static BorderRadii ensureNoOverlap(BorderRadii const &radii, Size const &size) { }; } -BorderMetrics ViewProps::resolveBorderMetrics( +BorderMetrics BaseViewProps::resolveBorderMetrics( LayoutMetrics const &layoutMetrics) const { auto isRTL = bool{layoutMetrics.layoutDirection == LayoutDirection::RightToLeft}; @@ -412,33 +336,27 @@ BorderMetrics ViewProps::resolveBorderMetrics( }; } -bool ViewProps::getClipsContentToBounds() const { +bool BaseViewProps::getClipsContentToBounds() const { return yogaStyle.overflow() != YGOverflowVisible; } -#ifdef ANDROID -bool ViewProps::getProbablyMoreHorizontalThanVertical_DEPRECATED() const { - return yogaStyle.flexDirection() == YGFlexDirectionRow; -} -#endif - #pragma mark - DebugStringConvertible #if RN_DEBUG_STRING_CONVERTIBLE -SharedDebugStringConvertibleList ViewProps::getDebugProps() const { - const auto &defaultViewProps = ViewProps(); +SharedDebugStringConvertibleList BaseViewProps::getDebugProps() const { + const auto &defaultBaseViewProps = BaseViewProps(); return AccessibilityProps::getDebugProps() + YogaStylableProps::getDebugProps() + SharedDebugStringConvertibleList{ debugStringConvertibleItem( - "opacity", opacity, defaultViewProps.opacity), + "opacity", opacity, defaultBaseViewProps.opacity), debugStringConvertibleItem( "backgroundColor", backgroundColor, - defaultViewProps.backgroundColor), + defaultBaseViewProps.backgroundColor), debugStringConvertibleItem( - "zIndex", zIndex, defaultViewProps.zIndex.value_or(0)), + "zIndex", zIndex, defaultBaseViewProps.zIndex.value_or(0)), }; } #endif diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h similarity index 73% rename from packages/react-native/ReactCommon/react/renderer/components/view/ViewProps.h rename to packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h index 8b6a8445fe8..706620f7b5a 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BaseViewProps.h @@ -20,16 +20,12 @@ namespace facebook::react { -class ViewProps; - -using SharedViewProps = std::shared_ptr; - -class ViewProps : public YogaStylableProps, public AccessibilityProps { +class BaseViewProps : public YogaStylableProps, public AccessibilityProps { public: - ViewProps() = default; - ViewProps( + BaseViewProps() = default; + BaseViewProps( const PropsParserContext &context, - ViewProps const &sourceProps, + BaseViewProps const &sourceProps, RawProps const &rawProps, bool shouldSetRawProps = true); @@ -39,11 +35,6 @@ class ViewProps : public YogaStylableProps, public AccessibilityProps { const char *propName, RawValue const &value); -#ifdef ANDROID - void propsDiffMapBuffer(Props const *oldProps, MapBufferBuilder &builder) - const override; -#endif - #pragma mark - Props // Color @@ -81,27 +72,11 @@ class ViewProps : public YogaStylableProps, public AccessibilityProps { Float elevation{}; /* Android-only */ -#ifdef ANDROID - - std::optional nativeBackground{}; - std::optional nativeForeground{}; - - bool focusable{false}; - bool hasTVPreferredFocus{false}; - bool needsOffscreenAlphaCompositing{false}; - bool renderToHardwareTextureAndroid{false}; - -#endif - #pragma mark - Convenience Methods BorderMetrics resolveBorderMetrics(LayoutMetrics const &layoutMetrics) const; bool getClipsContentToBounds() const; -#ifdef ANDROID - bool getProbablyMoreHorizontalThanVertical_DEPRECATED() const; -#endif - #pragma mark - DebugStringConvertible #if RN_DEBUG_STRING_CONVERTIBLE diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/CMakeLists.txt b/packages/react-native/ReactCommon/react/renderer/components/view/CMakeLists.txt index fb32b0b1873..10755bf772c 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/renderer/components/view/CMakeLists.txt @@ -15,10 +15,17 @@ add_compile_options( -Wno-gnu-zero-variadic-macro-arguments -DLOG_TAG=\"Fabric\") -file(GLOB rrc_view_SRC CONFIGURE_DEPENDS *.cpp) +file(GLOB rrc_view_SRC CONFIGURE_DEPENDS + *.cpp + platform/android/react/renderer/components/view/*.cpp) + add_library(rrc_view SHARED ${rrc_view_SRC}) -target_include_directories(rrc_view PUBLIC ${REACT_COMMON_DIR}) +target_include_directories(rrc_view + PUBLIC + ${REACT_COMMON_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/platform/android/ +) target_link_libraries(rrc_view folly_runtime diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp similarity index 98% rename from packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp rename to packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp index a9fa5e60e2c..5dc010c78d3 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp @@ -6,12 +6,10 @@ */ #include "AccessibilityPropsMapBuffer.h" -#include "AccessibilityProps.h" +#include namespace facebook::react { -#ifdef ANDROID - static MapBuffer convertAccessibilityActions( std::vector const &actions) { MapBufferBuilder builder(actions.size()); @@ -163,6 +161,5 @@ void AccessibilityProps::propsDiffMapBuffer( builder.putInt(AP_ROLE, static_cast(newProps.role)); } } -#endif } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/AccessibilityPropsMapBuffer.h similarity index 98% rename from packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.h rename to packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/AccessibilityPropsMapBuffer.h index 51d96ee40a0..46631bd4aed 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/AccessibilityPropsMapBuffer.h @@ -7,8 +7,6 @@ #pragma once -#ifdef ANDROID - #include #include @@ -35,4 +33,3 @@ constexpr MapBuffer::Key ACCESSIBILITY_ACTION_NAME = 0; constexpr MapBuffer::Key ACCESSIBILITY_ACTION_LABEL = 1; } // namespace facebook::react -#endif diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/NativeDrawable.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/NativeDrawable.h new file mode 100644 index 00000000000..89ec3f31ee3 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/NativeDrawable.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include + +namespace facebook::react { + +struct NativeDrawable { + enum class Kind : uint8_t { + Ripple, + ThemeAttr, + }; + + struct Ripple { + std::optional color{}; + std::optional rippleRadius{}; + bool borderless{false}; + + bool operator==(const Ripple &rhs) const { + return std::tie(this->color, this->borderless, this->rippleRadius) == + std::tie(rhs.color, rhs.borderless, rhs.rippleRadius); + } + }; + + std::string themeAttr; + Ripple ripple; + Kind kind; + + bool operator==(const NativeDrawable &rhs) const { + if (this->kind != rhs.kind) { + return false; + } + + switch (this->kind) { + case Kind::ThemeAttr: + return this->themeAttr == rhs.themeAttr; + case Kind::Ripple: + return this->ripple == rhs.ripple; + } + } + + bool operator!=(const NativeDrawable &rhs) const { + return !(*this == rhs); + } + + ~NativeDrawable() = default; +}; + +static inline void fromRawValue( + const PropsParserContext & /*context*/, + RawValue const &rawValue, + NativeDrawable &result) { + auto map = (butter::map)rawValue; + + auto typeIterator = map.find("type"); + react_native_expect( + typeIterator != map.end() && typeIterator->second.hasType()); + std::string type = (std::string)typeIterator->second; + + if (type == "ThemeAttrAndroid") { + auto attrIterator = map.find("attribute"); + react_native_expect( + attrIterator != map.end() && + attrIterator->second.hasType()); + + result = NativeDrawable{ + (std::string)attrIterator->second, + {}, + NativeDrawable::Kind::ThemeAttr, + }; + } else if (type == "RippleAndroid") { + auto color = map.find("color"); + auto borderless = map.find("borderless"); + auto rippleRadius = map.find("rippleRadius"); + + result = NativeDrawable{ + std::string{}, + NativeDrawable::Ripple{ + color != map.end() && color->second.hasType() + ? (int32_t)color->second + : std::optional{}, + rippleRadius != map.end() && rippleRadius->second.hasType() + ? (Float)rippleRadius->second + : std::optional{}, + borderless != map.end() && borderless->second.hasType() + ? (bool)borderless->second + : false, + }, + NativeDrawable::Kind::Ripple, + }; + } else { + LOG(ERROR) << "Unknown native drawable type: " << type; + react_native_expect(false); + } +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.cpp new file mode 100644 index 00000000000..20f2d5feea3 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "ViewProps.h" + +#include + +#include +#include +#include +#include +#include + +namespace facebook::react { + +ViewProps::ViewProps( + const PropsParserContext &context, + ViewProps const &sourceProps, + RawProps const &rawProps, + bool shouldSetRawProps) + : BaseViewProps(context, sourceProps, rawProps, shouldSetRawProps), + nativeBackground( + CoreFeatures::enablePropIteratorSetter + ? sourceProps.nativeBackground + : convertRawProp( + context, + rawProps, + "nativeBackgroundAndroid", + sourceProps.nativeBackground, + {})), + nativeForeground( + CoreFeatures::enablePropIteratorSetter + ? sourceProps.nativeForeground + : convertRawProp( + context, + rawProps, + "nativeForegroundAndroid", + sourceProps.nativeForeground, + {})), + focusable( + CoreFeatures::enablePropIteratorSetter ? sourceProps.focusable + : convertRawProp( + context, + rawProps, + "focusable", + sourceProps.focusable, + {})), + hasTVPreferredFocus( + CoreFeatures::enablePropIteratorSetter + ? sourceProps.hasTVPreferredFocus + : convertRawProp( + context, + rawProps, + "hasTVPreferredFocus", + sourceProps.hasTVPreferredFocus, + {})), + needsOffscreenAlphaCompositing( + CoreFeatures::enablePropIteratorSetter + ? sourceProps.needsOffscreenAlphaCompositing + : convertRawProp( + context, + rawProps, + "needsOffscreenAlphaCompositing", + sourceProps.needsOffscreenAlphaCompositing, + {})), + renderToHardwareTextureAndroid( + CoreFeatures::enablePropIteratorSetter + ? sourceProps.renderToHardwareTextureAndroid + : convertRawProp( + context, + rawProps, + "renderToHardwareTextureAndroid", + sourceProps.renderToHardwareTextureAndroid, + {})) {} + +#define VIEW_EVENT_CASE(eventType) \ + case CONSTEXPR_RAW_PROPS_KEY_HASH("on" #eventType): { \ + const auto offset = ViewEvents::Offset::eventType; \ + ViewEvents defaultViewEvents{}; \ + bool res = defaultViewEvents[offset]; \ + if (value.hasValue()) { \ + fromRawValue(context, value, res); \ + } \ + events[offset] = res; \ + return; \ + } + +void ViewProps::setProp( + const PropsParserContext &context, + RawPropsPropNameHash hash, + const char *propName, + RawValue const &value) { + // All Props structs setProp methods must always, unconditionally, + // call all super::setProp methods, since multiple structs may + // reuse the same values. + BaseViewProps::setProp(context, hash, propName, value); + + static auto defaults = ViewProps{}; + + switch (hash) { + RAW_SET_PROP_SWITCH_CASE_BASIC(elevation); + RAW_SET_PROP_SWITCH_CASE(nativeBackground, "nativeBackgroundAndroid"); + RAW_SET_PROP_SWITCH_CASE(nativeForeground, "nativeForegroundAndroid"); + RAW_SET_PROP_SWITCH_CASE_BASIC(focusable); + RAW_SET_PROP_SWITCH_CASE_BASIC(hasTVPreferredFocus); + RAW_SET_PROP_SWITCH_CASE_BASIC(needsOffscreenAlphaCompositing); + RAW_SET_PROP_SWITCH_CASE_BASIC(renderToHardwareTextureAndroid); + } +} + +bool ViewProps::getProbablyMoreHorizontalThanVertical_DEPRECATED() const { + return yogaStyle.flexDirection() == YGFlexDirectionRow; +} + +#if RN_DEBUG_STRING_CONVERTIBLE +SharedDebugStringConvertibleList ViewProps::getDebugProps() const { + return BaseViewProps::getDebugProps(); +} +#endif + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.h new file mode 100644 index 00000000000..5ebda517aea --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewProps.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace facebook::react { + +class ViewProps; + +using SharedViewProps = std::shared_ptr; + +class ViewProps : public BaseViewProps { + public: + ViewProps() = default; + ViewProps( + const PropsParserContext &context, + ViewProps const &sourceProps, + RawProps const &rawProps, + bool shouldSetRawProps = true); + + void setProp( + const PropsParserContext &context, + RawPropsPropNameHash hash, + const char *propName, + RawValue const &value); + + void propsDiffMapBuffer(Props const *oldProps, MapBufferBuilder &builder) + const override; + +#pragma mark - Props + + std::optional nativeBackground{}; + std::optional nativeForeground{}; + + bool focusable{false}; + bool hasTVPreferredFocus{false}; + bool needsOffscreenAlphaCompositing{false}; + bool renderToHardwareTextureAndroid{false}; + +#pragma mark - Convenience Methods + + bool getProbablyMoreHorizontalThanVertical_DEPRECATED() const; + +#if RN_DEBUG_STRING_CONVERTIBLE + SharedDebugStringConvertibleList getDebugProps() const override; +#endif +}; + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewPropsMapBuffer.cpp similarity index 98% rename from packages/react-native/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.cpp rename to packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewPropsMapBuffer.cpp index 3967bee5461..0d48e8dae46 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewPropsMapBuffer.cpp @@ -5,13 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -#ifdef ANDROID - #include "ViewPropsMapBuffer.h" #include "ViewProps.h" -#include "viewPropConversions.h" - +#include #include #include @@ -192,5 +189,3 @@ void ViewProps::propsDiffMapBuffer( } } // namespace facebook::react - -#endif diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewPropsMapBuffer.h similarity index 98% rename from packages/react-native/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.h rename to packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewPropsMapBuffer.h index 7574b0c14cb..147d240df7f 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/ViewPropsMapBuffer.h @@ -11,7 +11,6 @@ namespace facebook::react { -#ifdef ANDROID constexpr MapBuffer::Key VP_BACKFACE_VISIBILITY = 9; constexpr MapBuffer::Key VP_BG_COLOR = 10; constexpr MapBuffer::Key VP_BORDER_COLOR = 11; @@ -48,6 +47,5 @@ constexpr MapBuffer::Key VP_BORDER_CURVES = 45; // Yoga values constexpr MapBuffer::Key YG_BORDER_WIDTH = 100; constexpr MapBuffer::Key YG_OVERFLOW = 101; -#endif } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylablePropsMapBuffer.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/YogaStylablePropsMapBuffer.cpp similarity index 97% rename from packages/react-native/ReactCommon/react/renderer/components/view/YogaStylablePropsMapBuffer.cpp rename to packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/YogaStylablePropsMapBuffer.cpp index da0459265f1..a0b50720005 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylablePropsMapBuffer.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/YogaStylablePropsMapBuffer.cpp @@ -5,13 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -#ifdef ANDROID - #include "ViewProps.h" #include "ViewPropsMapBuffer.h" -#include "viewPropConversions.h" - +#include #include namespace facebook::react { @@ -81,5 +78,3 @@ void YogaStylableProps::propsDiffMapBuffer( } } // namespace facebook::react - -#endif diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylablePropsMapBuffer.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/YogaStylablePropsMapBuffer.h similarity index 100% rename from packages/react-native/ReactCommon/react/renderer/components/view/YogaStylablePropsMapBuffer.h rename to packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/YogaStylablePropsMapBuffer.h diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/cxx/react/renderer/components/view/ViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/cxx/react/renderer/components/view/ViewProps.h new file mode 100644 index 00000000000..6e2d465236b --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/cxx/react/renderer/components/view/ViewProps.h @@ -0,0 +1,15 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace facebook::react { +using ViewProps = BaseViewProps; +using SharedViewProps = std::shared_ptr; +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/primitives.h b/packages/react-native/ReactCommon/react/renderer/components/view/primitives.h index ac418daa87f..9e7889a7612 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/primitives.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/primitives.h @@ -278,47 +278,4 @@ struct BorderMetrics { } }; -#ifdef ANDROID - -struct NativeDrawable { - enum class Kind : uint8_t { - Ripple, - ThemeAttr, - }; - - struct Ripple { - std::optional color{}; - std::optional rippleRadius{}; - bool borderless{false}; - - bool operator==(const Ripple &rhs) const { - return std::tie(this->color, this->borderless, this->rippleRadius) == - std::tie(rhs.color, rhs.borderless, rhs.rippleRadius); - } - }; - - std::string themeAttr; - Ripple ripple; - Kind kind; - - bool operator==(const NativeDrawable &rhs) const { - if (this->kind != rhs.kind) - return false; - switch (this->kind) { - case Kind::ThemeAttr: - return this->themeAttr == rhs.themeAttr; - case Kind::Ripple: - return this->ripple == rhs.ripple; - } - } - - bool operator!=(const NativeDrawable &rhs) const { - return !(*this == rhs); - } - - ~NativeDrawable() = default; -}; - -#endif - } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h index 6aabbf23835..46f3801c599 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h @@ -738,56 +738,4 @@ static inline ViewEvents convertRawProp( return result; } -#ifdef ANDROID - -static inline void fromRawValue( - const PropsParserContext &context, - RawValue const &rawValue, - NativeDrawable &result) { - auto map = (butter::map)rawValue; - - auto typeIterator = map.find("type"); - react_native_expect( - typeIterator != map.end() && typeIterator->second.hasType()); - std::string type = (std::string)typeIterator->second; - - if (type == "ThemeAttrAndroid") { - auto attrIterator = map.find("attribute"); - react_native_expect( - attrIterator != map.end() && - attrIterator->second.hasType()); - - result = NativeDrawable{ - (std::string)attrIterator->second, - {}, - NativeDrawable::Kind::ThemeAttr, - }; - } else if (type == "RippleAndroid") { - auto color = map.find("color"); - auto borderless = map.find("borderless"); - auto rippleRadius = map.find("rippleRadius"); - - result = NativeDrawable{ - std::string{}, - NativeDrawable::Ripple{ - color != map.end() && color->second.hasType() - ? (int32_t)color->second - : std::optional{}, - rippleRadius != map.end() && rippleRadius->second.hasType() - ? (Float)rippleRadius->second - : std::optional{}, - borderless != map.end() && borderless->second.hasType() - ? (bool)borderless->second - : false, - }, - NativeDrawable::Kind::Ripple, - }; - } else { - LOG(ERROR) << "Unknown native drawable type: " << type; - react_native_expect(false); - } -} - -#endif - } // namespace facebook::react diff --git a/packages/react-native/scripts/cocoapods/__tests__/codegen_utils-test.rb b/packages/react-native/scripts/cocoapods/__tests__/codegen_utils-test.rb index b105737840a..297230dc5d2 100644 --- a/packages/react-native/scripts/cocoapods/__tests__/codegen_utils-test.rb +++ b/packages/react-native/scripts/cocoapods/__tests__/codegen_utils-test.rb @@ -591,7 +591,7 @@ class CodegenUtilsTests < Test::Unit::TestCase specs = get_podspec_no_fabric_no_script() specs["pod_target_xcconfig"]["FRAMEWORK_SEARCH_PATHS"].concat([]) - specs["pod_target_xcconfig"]["HEADER_SEARCH_PATHS"].concat(" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-FabricImage/React_FabricImage.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon/ReactCommon.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-RCTFabric/RCTFabric.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-utils/React_utils.framework/Headers\"") + specs["pod_target_xcconfig"]["HEADER_SEARCH_PATHS"].concat(" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-FabricImage/React_FabricImage.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon/ReactCommon.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-RCTFabric/RCTFabric.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-utils/React_utils.framework/Headers\"") specs[:dependencies].merge!({ 'React-graphics': [], diff --git a/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb b/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb index 6d10400e51f..f2570238226 100644 --- a/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb +++ b/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb @@ -129,7 +129,7 @@ class NewArchitectureTests < Test::Unit::TestCase # Assert assert_equal(spec.compiler_flags, NewArchitectureHelper.folly_compiler_flags) - assert_equal(spec.pod_target_xcconfig["HEADER_SEARCH_PATHS"], "\"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers\"") + assert_equal(spec.pod_target_xcconfig["HEADER_SEARCH_PATHS"], "\"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers\"") assert_equal(spec.pod_target_xcconfig["CLANG_CXX_LANGUAGE_STANDARD"], "c++17") assert_equal(spec.pod_target_xcconfig["OTHER_CPLUSPLUSFLAGS"], "$(inherited) -DRCT_NEW_ARCH_ENABLED=1 -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1") assert_equal( @@ -170,7 +170,7 @@ class NewArchitectureTests < Test::Unit::TestCase # Assert assert_equal(spec.compiler_flags, "-Wno-nullability-completeness #{NewArchitectureHelper.folly_compiler_flags}") - assert_equal(spec.pod_target_xcconfig["HEADER_SEARCH_PATHS"], "#{other_flags} \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers\"") + assert_equal(spec.pod_target_xcconfig["HEADER_SEARCH_PATHS"], "#{other_flags} \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-rendererdebug/React_rendererdebug.framework/Headers\"") assert_equal(spec.pod_target_xcconfig["CLANG_CXX_LANGUAGE_STANDARD"], "c++17") assert_equal( spec.dependencies, diff --git a/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb b/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb index 1d65edb1f97..690145b6144 100644 --- a/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb +++ b/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb @@ -666,7 +666,7 @@ class UtilsTests < Test::Unit::TestCase # Assert user_project_mock.build_configurations.each do |config| received_search_path = config.build_settings["HEADER_SEARCH_PATHS"] - expected_search_path = "$(inherited) ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios ${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios" + expected_search_path = "$(inherited) ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx ${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios" assert_equal(expected_search_path, received_search_path) end @@ -674,7 +674,7 @@ class UtilsTests < Test::Unit::TestCase if pod_name == "SecondTarget" target_installation_result.native_target.build_configurations.each do |config| received_search_path = config.build_settings["HEADER_SEARCH_PATHS"] - expected_Search_path = "$(inherited) \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/boost\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\"" + expected_Search_path = "$(inherited) \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/boost\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\"" assert_equal(received_search_path, expected_Search_path) end else diff --git a/packages/react-native/scripts/cocoapods/codegen_utils.rb b/packages/react-native/scripts/cocoapods/codegen_utils.rb index 1f983213f38..c3313468fbf 100644 --- a/packages/react-native/scripts/cocoapods/codegen_utils.rb +++ b/packages/react-native/scripts/cocoapods/codegen_utils.rb @@ -93,6 +93,7 @@ class CodegenUtils "\"$(PODS_ROOT)/DoubleConversion\"", "\"$(PODS_TARGET_SRCROOT)\"", "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\"", "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-FabricImage/React_FabricImage.framework/Headers\"", "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers\"", "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\"", diff --git a/packages/react-native/scripts/cocoapods/new_architecture.rb b/packages/react-native/scripts/cocoapods/new_architecture.rb index 8688c291cb5..95658203207 100644 --- a/packages/react-native/scripts/cocoapods/new_architecture.rb +++ b/packages/react-native/scripts/cocoapods/new_architecture.rb @@ -105,6 +105,7 @@ class NewArchitectureHelper header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\"" + header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\"" header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\"" diff --git a/packages/react-native/scripts/cocoapods/utils.rb b/packages/react-native/scripts/cocoapods/utils.rb index 5ca482a1693..2f66018339b 100644 --- a/packages/react-native/scripts/cocoapods/utils.rb +++ b/packages/react-native/scripts/cocoapods/utils.rb @@ -228,6 +228,7 @@ class ReactNativePodsUtils header_search_paths = self.add_search_path_if_not_included(header_search_paths, "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers") header_search_paths = self.add_search_path_if_not_included(header_search_paths, "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core") header_search_paths = self.add_search_path_if_not_included(header_search_paths, "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios") + header_search_paths = self.add_search_path_if_not_included(header_search_paths, "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx") header_search_paths = self.add_search_path_if_not_included(header_search_paths, "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers") header_search_paths = self.add_search_path_if_not_included(header_search_paths, "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios") @@ -384,6 +385,7 @@ class ReactNativePodsUtils ReactNativePodsUtils.update_header_paths_if_depends_on(target_installation_result, "React-RCTFabric", [ "\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\"", "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\"", + "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\"", "\"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\"", "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Graphics/React_graphics.framework/Headers\"", "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\"",