Skip to content

Commit 5fc88e9

Browse files
Kudokelset
authored andcommitted
#34214 for main (#34271)
Summary: cherry-pick changes from #34214 to main. because the `react_native_pods.rb` on main is quite different from 0.69, i have separated pr for the change. ## Changelog [iOS] [Fixed] - Fix React-bridging headers import not found Pull Request resolved: #34271 Test Plan: RNTester + pod install and verify pod targets to have `React-bridging` in header search paths. Reviewed By: cipolleschi Differential Revision: D38122074 Pulled By: dmitryrykun fbshipit-source-id: 64569abbfa3a684f0d6b84c9e3222bfc9a171061
1 parent 70daa6e commit 5fc88e9

5 files changed

Lines changed: 105 additions & 22 deletions

File tree

scripts/cocoapods/__tests__/new_architecture-test.rb

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,8 @@ def prepare_CXX_Flags_build_configuration(name)
208208
end
209209

210210
def prepare_pod_target_installation_results_mock(name, configs)
211-
return PodTargetInstallationResultsMock.new(
212-
:name => name,
213-
:native_target => TargetMock.new(name, configs)
214-
)
211+
target = TargetMock.new(name, configs)
212+
return TargetInstallationResultMock.new(target, target)
215213
end
216214

217215
def prepare_installer_for_cpp_flags(xcconfigs, build_configs)
@@ -232,8 +230,6 @@ def prepare_installer_for_cpp_flags(xcconfigs, build_configs)
232230
[
233231
AggregatedProjectMock.new(:xcconfigs => xcconfigs_map, :base_path => "a/path/")
234232
],
235-
:target_installation_results => TargetInstallationResultsMock.new(
236-
:pod_target_installation_results => pod_target_installation_results_map
237-
)
233+
:pod_target_installation_results => pod_target_installation_results_map
238234
)
239235
end

scripts/cocoapods/__tests__/test_utils/InstallerMock.rb

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,23 @@ class InstallerMock
4141
attr_reader :aggregate_targets
4242
attr_reader :target_installation_results
4343

44-
def initialize(pods_project = PodsProjectMock.new, aggregate_targets = [AggregatedProjectMock.new], target_installation_results: [])
44+
InstallationResults = Struct.new(:pod_target_installation_results, :aggregate_target_installation_results)
45+
46+
def initialize(pods_project = PodsProjectMock.new, aggregate_targets = [AggregatedProjectMock.new],
47+
pod_target_installation_results: {},
48+
aggregate_target_installation_results: {})
4549
@pods_project = pods_project
4650
@aggregate_targets = aggregate_targets
47-
@target_installation_results = target_installation_results
51+
52+
@target_installation_results = InstallationResults.new(pod_target_installation_results, aggregate_target_installation_results)
53+
aggregate_targets.each do |aggregate_target|
54+
aggregate_target.user_project.native_targets.each do |target|
55+
@target_installation_results.pod_target_installation_results[target.name] = TargetInstallationResultMock.new(target, target)
56+
end
57+
end
58+
pods_project.native_targets.each do |target|
59+
@target_installation_results.pod_target_installation_results[target.name] = TargetInstallationResultMock.new(target, target)
60+
end
4861
end
4962

5063
def target_with_name(name)
@@ -168,20 +181,27 @@ def initialize(name, build_settings = {})
168181
end
169182
end
170183

171-
class TargetInstallationResultsMock
172-
attr_reader :pod_target_installation_results
173-
174-
def initialize(pod_target_installation_results: {})
175-
@pod_target_installation_results = pod_target_installation_results
176-
end
177-
end
178-
179-
class PodTargetInstallationResultsMock
180-
attr_reader :name
184+
class TargetInstallationResultMock
185+
attr_reader :target
181186
attr_reader :native_target
182-
183-
def initialize(name: "", native_target: TargetMock.new())
184-
@name = name
187+
attr_reader :resource_bundle_targets
188+
attr_reader :test_native_targets
189+
attr_reader :test_resource_bundle_targets
190+
attr_reader :test_app_host_targets
191+
attr_reader :app_native_targets
192+
attr_reader :app_resource_bundle_targets
193+
194+
def initialize(target = TargetMock, native_target = TargetMock,
195+
resource_bundle_targets = [], test_native_targets = [],
196+
test_resource_bundle_targets = {}, test_app_host_targets = [],
197+
app_native_targets = {}, app_resource_bundle_targets = {})
198+
@target = target
185199
@native_target = native_target
200+
@resource_bundle_targets = resource_bundle_targets
201+
@test_native_targets = test_native_targets
202+
@test_resource_bundle_targets = test_resource_bundle_targets
203+
@test_app_host_targets = test_app_host_targets
204+
@app_native_targets = app_native_targets
205+
@app_resource_bundle_targets = app_resource_bundle_targets
186206
end
187207
end

scripts/cocoapods/__tests__/utils-test.rb

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,60 @@ def test_fixLibrarySearchPaths_correctlySetsTheSearchPathsForAllProjects
315315
assert_equal(pods_projects_mock.save_invocation_count, 1)
316316
end
317317

318+
# ============================================= #
319+
# Test - Fix React-bridging Header Search Paths #
320+
# ============================================= #
321+
322+
def test_fixReactBridgingHeaderSearchPaths_correctlySetsTheHeaderSearchPathsForAllTargets
323+
# Arrange
324+
first_target = prepare_target("FirstTarget")
325+
second_target = prepare_target("SecondTarget")
326+
third_target = TargetMock.new("ThirdTarget", [
327+
BuildConfigurationMock.new("Debug", {
328+
"HEADER_SEARCH_PATHS" => '$(inherited) "${PODS_ROOT}/Headers/Public" '
329+
}),
330+
BuildConfigurationMock.new("Release", {
331+
"HEADER_SEARCH_PATHS" => '$(inherited) "${PODS_ROOT}/Headers/Public" '
332+
}),
333+
], nil)
334+
335+
user_project_mock = UserProjectMock.new("a/path", [
336+
prepare_config("Debug"),
337+
prepare_config("Release"),
338+
],
339+
:native_targets => [
340+
first_target,
341+
second_target
342+
]
343+
)
344+
pods_projects_mock = PodsProjectMock.new([], {"hermes-engine" => {}}, :native_targets => [
345+
third_target
346+
])
347+
installer = InstallerMock.new(pods_projects_mock, [
348+
AggregatedProjectMock.new(user_project_mock)
349+
])
350+
351+
# Act
352+
ReactNativePodsUtils.fix_react_bridging_header_search_paths(installer)
353+
354+
# Assert
355+
first_target.build_configurations.each do |config|
356+
assert_equal(config.build_settings["HEADER_SEARCH_PATHS"].strip,
357+
'$(inherited) "$(PODS_ROOT)/Headers/Private/React-bridging/react/bridging" "$(PODS_CONFIGURATION_BUILD_DIR)/React-bridging/react_bridging.framework/Headers"'
358+
)
359+
end
360+
second_target.build_configurations.each do |config|
361+
assert_equal(config.build_settings["HEADER_SEARCH_PATHS"].strip,
362+
'$(inherited) "$(PODS_ROOT)/Headers/Private/React-bridging/react/bridging" "$(PODS_CONFIGURATION_BUILD_DIR)/React-bridging/react_bridging.framework/Headers"'
363+
)
364+
end
365+
third_target.build_configurations.each do |config|
366+
assert_equal(config.build_settings["HEADER_SEARCH_PATHS"].strip,
367+
'$(inherited) "${PODS_ROOT}/Headers/Public" "$(PODS_ROOT)/Headers/Private/React-bridging/react/bridging" "$(PODS_CONFIGURATION_BUILD_DIR)/React-bridging/react_bridging.framework/Headers"'
368+
)
369+
end
370+
end
371+
318372
# ================================= #
319373
# Test - Apply Mac Catalyst Patches #
320374
# ================================= #

scripts/cocoapods/utils.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,18 @@ def self.fix_library_search_paths(installer)
9393
end
9494
end
9595

96+
def self.fix_react_bridging_header_search_paths(installer)
97+
installer.target_installation_results.pod_target_installation_results
98+
.each do |pod_name, target_installation_result|
99+
target_installation_result.native_target.build_configurations.each do |config|
100+
# For third party modules who have React-bridging dependency to search correct headers
101+
config.build_settings['HEADER_SEARCH_PATHS'] ||= '$(inherited) '
102+
config.build_settings['HEADER_SEARCH_PATHS'] << '"$(PODS_ROOT)/Headers/Private/React-bridging/react/bridging" '
103+
config.build_settings['HEADER_SEARCH_PATHS'] << '"$(PODS_CONFIGURATION_BUILD_DIR)/React-bridging/react_bridging.framework/Headers" '
104+
end
105+
end
106+
end
107+
96108
def self.apply_mac_catalyst_patches(installer)
97109
# Fix bundle signing issues
98110
installer.pods_project.targets.each do |target|

scripts/react_native_pods.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ def react_native_post_install(installer, react_native_path = "../node_modules/re
156156

157157
ReactNativePodsUtils.exclude_i386_architecture_while_using_hermes(installer)
158158
ReactNativePodsUtils.fix_library_search_paths(installer)
159+
ReactNativePodsUtils.fix_react_bridging_header_search_paths(installer)
159160
ReactNativePodsUtils.set_node_modules_user_settings(installer, react_native_path)
160161

161162
NewArchitectureHelper.set_clang_cxx_language_standard_if_needed(installer)

0 commit comments

Comments
 (0)