Skip to content

Commit 5f77554

Browse files
coadofacebook-github-bot
authored andcommitted
Fix framework umbrella search paths (#58622)
Summary: Source-built CocoaPods frameworks do not automatically expose the directories behind stable <React/...> umbrella includes. Exported and generated headers consume umbrellas owned by sibling frameworks, while consuming application and pod targets do not automatically inherit the header roots for those frameworks. Add source-only aggregate paths for the umbrella frameworks used by FabricComponents and React-perflogger, configure the React-timing dependency of React-perflogger with its framework header root, and expose React-bridging to generated module targets. 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 b7c0e49 commit 5f77554

9 files changed

Lines changed: 66 additions & 3 deletions

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/ReactCommon/reactperflogger/React-perflogger.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Pod::Spec.new do |s|
4141
add_rncore_dependency(s)
4242

4343
s.dependency "React-cxxstableapi"
44-
s.dependency "React-timing"
44+
add_dependency(s, "React-timing")
4545

4646
mark_as_react_native_build(s)
4747
end

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ def get_podspec_when_use_frameworks
298298
specs = get_podspec_no_fabric_no_script()
299299

300300
specs["pod_target_xcconfig"]["FRAMEWORK_SEARCH_PATHS"].concat([])
301-
specs["pod_target_xcconfig"]["HEADER_SEARCH_PATHS"].concat(" \"${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\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\"")
301+
specs["pod_target_xcconfig"]["HEADER_SEARCH_PATHS"].concat(" \"${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-bridging/React_bridging.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\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\"")
302302

303303
specs[:dependencies].merge!({
304304
'React-graphics': [],

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def teardown
2323
Pod::UI.reset()
2424
FileMock.reset()
2525
ENV["RCT_NEW_ARCH_ENABLED"] = nil
26+
ENV["USE_FRAMEWORKS"] = nil
2627
NewArchitectureHelper.reset()
2728
end
2829

@@ -180,6 +181,16 @@ def test_installModulesDependencies_whenNewArchEnabledAndNewArchAndNoSearchPaths
180181
)
181182
end
182183

184+
def test_installModulesDependencies_whenUseFrameworks_addsReactBridgingSearchPath
185+
spec = SpecMock.new
186+
ENV["USE_FRAMEWORKS"] = "dynamic"
187+
188+
NewArchitectureHelper.install_modules_dependencies(spec, true, '2024.10.14.00')
189+
190+
header_search_paths = Array(spec.pod_target_xcconfig["HEADER_SEARCH_PATHS"]).join(" ")
191+
assert(header_search_paths.include?("${PODS_CONFIGURATION_BUILD_DIR}/React-bridging/React_bridging.framework/Headers"))
192+
end
193+
183194
def test_installModulesDependencies_whenNewArchDisabledAndSearchPathsAndCompilerFlagsArePresent_itInstallDependenciesAndPreserveOtherSettings
184195
# Arrange
185196
spec = SpecMock.new

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

Lines changed: 23 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-timing/React_timing.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,26 @@ 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-timing/React_timing.framework/Headers",
934+
"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers",
935+
], result)
936+
end
937+
938+
def test_createHeaderSearchPathsForStableUmbrellas_whenUsingPrebuiltCore_addsNothing
939+
ReactNativeCoreUtils.class_variable_set(:@@build_from_source, false)
940+
941+
result = ReactNativePodsUtils.create_header_search_paths_for_stable_umbrellas("PODS_CONFIGURATION_BUILD_DIR")
942+
943+
assert_equal([], result)
944+
end
945+
924946
# ================================= #
925947
# TEST - Add RN_BUILDING definition #
926948
# ================================= #

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def self.install_modules_dependencies(spec, new_arch_enabled, folly_version = He
8585
if ENV['USE_FRAMEWORKS']
8686
ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-graphics", "React_graphics", ["react/renderer/graphics/platform/ios"])
8787
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-Fabric", "React_Fabric", ["react/renderer/components/view/platform/cxx"]))
88+
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-bridging", "React_bridging", []))
8889
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-FabricImage", "React_FabricImage", []))
8990
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-FabricComponents", "React_FabricComponents", []))
9091
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-Mapbuffer", "React_Mapbuffer", []))

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,20 @@ 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-timing", "React_timing"],
366+
["React-utils", "React_utils"],
367+
].flat_map { |pod_name, framework_name|
368+
self.create_header_search_path_for_frameworks(base_folder, pod_name, framework_name, [])
369+
}
370+
end
371+
358372
# Add a new dependency to an existing spec, configuring also the headers search paths
359373
def self.add_dependency(spec, dependency_name, base_folder_for_frameworks, framework_name, additional_paths: [], version: nil, subspec_dependency: nil)
360374
# Update Search Path
@@ -397,6 +411,7 @@ def self.update_search_paths(installer)
397411
"react/renderer/components/scrollview/platform/cxx",
398412
"react/renderer/components/scrollview/platform/ios",
399413
], false))
414+
.concat(ReactNativePodsUtils.create_header_search_paths_for_stable_umbrellas("PODS_CONFIGURATION_BUILD_DIR"))
400415
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-FabricComponents", "React_FabricComponents", [
401416
"react/renderer/textlayoutmanager/platform/ios",
402417
"react/renderer/components/text/platform/cxx",

packages/react-native/scripts/codegen/__tests__/__snapshots__/generate-artifacts-executor-test.js.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ header_search_paths = [
426426
427427
if use_frameworks
428428
ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-Fabric\\", \\"React_Fabric\\", [\\"react/renderer/components/view/platform/cxx\\"])
429+
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-bridging\\", \\"React_bridging\\", []))
429430
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-FabricImage\\", \\"React_FabricImage\\", []))
430431
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-graphics\\", \\"React_graphics\\", [\\"react/renderer/graphics/platform/ios\\"]))
431432
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"ReactCommon\\", \\"ReactCommon\\", [\\"react/nativemodule/core\\"]))
@@ -909,6 +910,7 @@ header_search_paths = [
909910
910911
if use_frameworks
911912
ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-Fabric\\", \\"React_Fabric\\", [\\"react/renderer/components/view/platform/cxx\\"])
913+
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-bridging\\", \\"React_bridging\\", []))
912914
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-FabricImage\\", \\"React_FabricImage\\", []))
913915
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"React-graphics\\", \\"React_graphics\\", [\\"react/renderer/graphics/platform/ios\\"]))
914916
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks(\\"PODS_CONFIGURATION_BUILD_DIR\\", \\"ReactCommon\\", \\"ReactCommon\\", [\\"react/nativemodule/core\\"]))

packages/react-native/scripts/codegen/templates/ReactCodegen.podspec.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ header_search_paths = [
3030

3131
if use_frameworks
3232
ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-Fabric", "React_Fabric", ["react/renderer/components/view/platform/cxx"])
33+
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-bridging", "React_bridging", []))
3334
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-FabricImage", "React_FabricImage", []))
3435
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "React-graphics", "React_graphics", ["react/renderer/graphics/platform/ios"]))
3536
.concat(ReactNativePodsUtils.create_header_search_path_for_frameworks("PODS_CONFIGURATION_BUILD_DIR", "ReactCommon", "ReactCommon", ["react/nativemodule/core"]))

0 commit comments

Comments
 (0)