Skip to content

Commit 4a0329d

Browse files
committed
add header search paths for transitive dep for React-Fabric
1 parent 9e3c9b7 commit 4a0329d

2 files changed

Lines changed: 53 additions & 4 deletions

File tree

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -981,6 +981,31 @@ def test_setStableUmbrellaSearchPaths_addsOwningFrameworkPathToDependentTarget
981981
end
982982
end
983983

984+
def test_setStableUmbrellaSearchPaths_addsOwningFrameworkPathToTransitivelyDependentTarget
985+
dependency = Struct.new(:name, :target)
986+
fabric_target = prepare_target("React-Fabric")
987+
intermediate_target = prepare_target(
988+
"Intermediate",
989+
nil,
990+
[dependency.new("React-Fabric", fabric_target)]
991+
)
992+
consumer_target = prepare_target(
993+
"Consumer",
994+
nil,
995+
[dependency.new("Intermediate", intermediate_target)]
996+
)
997+
target_installation_result = TargetInstallationResultMock.new(consumer_target, consumer_target)
998+
999+
ReactNativePodsUtils.set_stable_umbrella_search_paths(target_installation_result)
1000+
1001+
consumer_target.build_configurations.each do |config|
1002+
assert_equal(
1003+
'$(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers"',
1004+
config.build_settings["HEADER_SEARCH_PATHS"]
1005+
)
1006+
end
1007+
end
1008+
9841009
def test_setStableUmbrellaSearchPaths_doesNotAddOwningFrameworkPathToUnrelatedTarget
9851010
target = prepare_target("React-Fabric")
9861011
target_installation_result = TargetInstallationResultMock.new(target, target)

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

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -670,10 +670,29 @@ def self.add_search_path_if_not_included(current_search_paths, new_search_path)
670670
current_search_paths
671671
end
672672

673-
def self.update_header_paths_if_depends_on(target_installation_result, dependency_name, header_paths)
674-
depends_on_framework = target_installation_result.native_target.dependencies.any? { |d| d.name == dependency_name }
673+
def self.target_depends_on?(target, dependency_name, visited_targets = {})
674+
return false if target == nil
675+
676+
target_identifier = target.respond_to?(:uuid) ? target.uuid : target.object_id
677+
target_identifier ||= target.object_id
678+
return false if visited_targets[target_identifier]
679+
680+
visited_targets[target_identifier] = true
681+
target.dependencies.any? do |dependency|
682+
dependency.name == dependency_name ||
683+
(dependency.respond_to?(:target) && self.target_depends_on?(dependency.target, dependency_name, visited_targets))
684+
end
685+
end
686+
687+
def self.update_header_paths_if_depends_on(target_installation_result, dependency_name, header_paths, include_transitive_dependencies: false)
688+
native_target = target_installation_result.native_target
689+
depends_on_framework = if include_transitive_dependencies
690+
self.target_depends_on?(native_target, dependency_name)
691+
else
692+
native_target.dependencies.any? { |d| d.name == dependency_name }
693+
end
675694
if depends_on_framework
676-
target_installation_result.native_target.build_configurations.each do |config|
695+
native_target.build_configurations.each do |config|
677696
header_search_path = config.build_settings["HEADER_SEARCH_PATHS"] != nil ? config.build_settings["HEADER_SEARCH_PATHS"] : "$(inherited)"
678697
header_paths.each { |header| header_search_path = ReactNativePodsUtils.add_search_path_if_not_included(header_search_path, header) }
679698
config.build_settings["HEADER_SEARCH_PATHS"] = header_search_path
@@ -691,7 +710,12 @@ def self.set_stable_umbrella_search_paths(target_installation_result)
691710
framework_name,
692711
[]
693712
).map { |search_path| "\"#{search_path}\"" }
694-
ReactNativePodsUtils.update_header_paths_if_depends_on(target_installation_result, pod_name, header_search_paths)
713+
ReactNativePodsUtils.update_header_paths_if_depends_on(
714+
target_installation_result,
715+
pod_name,
716+
header_search_paths,
717+
include_transitive_dependencies: true
718+
)
695719
end
696720
end
697721

0 commit comments

Comments
 (0)