Skip to content

Commit a314de4

Browse files
coadofacebook-github-bot
authored andcommitted
Fix Fabric umbrella search paths (react#58622)
Summary: Source-built CocoaPods frameworks do not automatically expose the directories behind stable <React/...> umbrella includes. React-FabricComponents exports modal and text headers that consume umbrellas owned by React-Fabric, React-debug, React-rendererdebug, and React-utils. Those headers are also compiled by consuming application targets, which do not inherit React-FabricComponents pod target settings. Add the owning source directories to React-FabricComponents and propagate the four framework header roots to aggregate targets when RNCore is built from source. Keep prebuilt RNCore unchanged so its <React/...> headers continue to resolve from the prebuilt React.framework. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D120992289
1 parent baee2f3 commit a314de4

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

packages/react-native/ReactCommon/React-FabricComponents.podspec

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ if ENV['USE_FRAMEWORKS']
3333
"\"$(PODS_TARGET_SRCROOT)/react/renderer/components/text/platform/cxx\"",
3434
"\"$(PODS_TARGET_SRCROOT)/react/renderer/components/view/platform/cxx\"",
3535
]
36+
37+
if ReactNativeCoreUtils.build_rncore_from_source()
38+
# Stable umbrellas consumed by exported component headers.
39+
header_search_path = header_search_path + [
40+
"\"$(PODS_TARGET_SRCROOT)/react/debug\"",
41+
"\"$(PODS_TARGET_SRCROOT)/react/renderer/components/view\"",
42+
"\"$(PODS_TARGET_SRCROOT)/react/renderer/core\"",
43+
"\"$(PODS_TARGET_SRCROOT)/react/renderer/debug\"",
44+
"\"$(PODS_TARGET_SRCROOT)/react/utils\"",
45+
]
46+
end
3647
end
3748

3849
Pod::Spec.new do |s|

packages/react-native/scripts/cocoapods/__tests__/utils-test.rb

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
require "test/unit"
77
require_relative "../utils.rb"
8+
require_relative "../rncore.rb"
89
require_relative "./test_utils/PodMock.rb"
910
require_relative "./test_utils/InstallerMock.rb"
1011
require_relative "./test_utils/EnvironmentMock.rb"
@@ -33,6 +34,7 @@ def teardown
3334
Environment.reset()
3435
Xcodeproj::Plist.reset()
3536
XcodebuildMock.reset()
37+
ReactNativeCoreUtils.class_variable_set(:@@build_from_source, true)
3638
ENV['RCT_NEW_ARCH_ENABLED'] = '0'
3739
ENV['USE_FRAMEWORKS'] = nil
3840
ENV['RCT_REMOVE_LEGACY_MODULE_INTEROP'] = nil
@@ -741,7 +743,7 @@ def test_updateSearchPaths_whenUseFrameworks_addsSearchPaths
741743
# Assert
742744
user_project_mock.build_configurations.each do |config|
743745
received_search_path = config.build_settings["HEADER_SEARCH_PATHS"]
744-
expected_search_path = "$(inherited) ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers ${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 ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios ${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-renderercss/React_renderercss.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-cxxstableapi/React_cxxstableapi.framework/Headers"
746+
expected_search_path = "$(inherited) ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers ${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-Fabric/React_Fabric.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 ${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.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-featureflags/React_featureflags.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-renderercss/React_renderercss.framework/Headers ${PODS_CONFIGURATION_BUILD_DIR}/React-cxxstableapi/React_cxxstableapi.framework/Headers"
745747
assert_equal(expected_search_path, received_search_path)
746748
end
747749

@@ -921,6 +923,25 @@ def test_creatHeaderSearchPathForFrameworks_whenMultiplePlatformsAndExtraPath_cr
921923
], result)
922924
end
923925

926+
def test_createHeaderSearchPathsForStableUmbrellas_whenBuildingFromSource_addsOwningFrameworks
927+
result = ReactNativePodsUtils.create_header_search_paths_for_stable_umbrellas("PODS_CONFIGURATION_BUILD_DIR")
928+
929+
assert_equal([
930+
"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers",
931+
"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers",
932+
"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers",
933+
"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers",
934+
], result)
935+
end
936+
937+
def test_createHeaderSearchPathsForStableUmbrellas_whenUsingPrebuiltCore_addsNothing
938+
ReactNativeCoreUtils.class_variable_set(:@@build_from_source, false)
939+
940+
result = ReactNativePodsUtils.create_header_search_paths_for_stable_umbrellas("PODS_CONFIGURATION_BUILD_DIR")
941+
942+
assert_equal([], result)
943+
end
944+
924945
# ================================= #
925946
# TEST - Add RN_BUILDING definition #
926947
# ================================= #

packages/react-native/scripts/cocoapods/utils.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,19 @@ def self.create_header_search_path_for_frameworks(base_folder, pod_name, framewo
355355
return search_paths
356356
end
357357

358+
def self.create_header_search_paths_for_stable_umbrellas(base_folder)
359+
return [] unless ReactNativeCoreUtils.build_rncore_from_source()
360+
361+
[
362+
["React-Fabric", "React_Fabric"],
363+
["React-debug", "React_debug"],
364+
["React-rendererdebug", "React_rendererdebug"],
365+
["React-utils", "React_utils"],
366+
].flat_map { |pod_name, framework_name|
367+
self.create_header_search_path_for_frameworks(base_folder, pod_name, framework_name, [])
368+
}
369+
end
370+
358371
# Add a new dependency to an existing spec, configuring also the headers search paths
359372
def self.add_dependency(spec, dependency_name, base_folder_for_frameworks, framework_name, additional_paths: [], version: nil, subspec_dependency: nil)
360373
# Update Search Path
@@ -397,6 +410,7 @@ def self.update_search_paths(installer)
397410
"react/renderer/components/scrollview/platform/cxx",
398411
"react/renderer/components/scrollview/platform/ios",
399412
], false))
413+
.concat(ReactNativePodsUtils.create_header_search_paths_for_stable_umbrellas("PODS_CONFIGURATION_BUILD_DIR"))
400414
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-FabricComponents", "React_FabricComponents", [
401415
"react/renderer/textlayoutmanager/platform/ios",
402416
"react/renderer/components/text/platform/cxx",

0 commit comments

Comments
 (0)