From 09e1ceaf485afc70ffb58a8ea349169015ab2269 Mon Sep 17 00:00:00 2001 From: evelant Date: Mon, 3 Jul 2023 09:53:17 -0400 Subject: [PATCH] Fix build failure on iOS with pnpm and use_frameworks! due to cocoapods copying symlinked headers to wrong paths When using pnpm all packages are symlinked to node_modules/.pnpm to prevent phantom dependency resolution. This causes react-native iOS build to fail because Cocoapods copies headers to incorrect destinations when they're behind symlinks. The fix resolves absolute paths to the header_mappings_dir at pod install time. With absolute paths cocoapods copies the headers correctly. This commit also adds a few missing header search paths in use_frameworks! mode. --- .../Libraries/LinkingIOS/React-RCTLinking.podspec | 5 ++++- .../Libraries/Network/React-RCTNetwork.podspec | 6 +++++- .../Libraries/Settings/React-RCTSettings.podspec | 5 ++++- .../Libraries/Vibration/React-RCTVibration.podspec | 4 +++- .../react-native/ReactCommon/React-Fabric.podspec | 2 +- .../react-native/ReactCommon/React-rncore.podspec | 12 ++++++++++++ .../react-native/ReactCommon/ReactCommon.podspec | 2 +- .../ReactCommon/react/debug/React-debug.podspec | 2 +- .../platform/ios/React-NativeModulesApple.podspec | 2 +- .../nativemodule/samples/ReactCommon-Samples.podspec | 2 +- .../react/renderer/graphics/React-graphics.podspec | 2 +- .../platform/ios/React-ImageManager.podspec | 2 +- .../runtimescheduler/React-runtimescheduler.podspec | 2 +- .../ReactCommon/react/utils/React-utils.podspec | 2 +- 14 files changed, 37 insertions(+), 13 deletions(-) diff --git a/packages/react-native/Libraries/LinkingIOS/React-RCTLinking.podspec b/packages/react-native/Libraries/LinkingIOS/React-RCTLinking.podspec index 5bf0a98802dc..360a3e296ae4 100644 --- a/packages/react-native/Libraries/LinkingIOS/React-RCTLinking.podspec +++ b/packages/react-native/Libraries/LinkingIOS/React-RCTLinking.podspec @@ -28,7 +28,10 @@ header_search_paths = [ if ENV["USE_FRAMEWORKS"] header_search_paths = header_search_paths.concat([ "\"$(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-NativeModulesApple/React_NativeModulesApple.framework/Headers\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers\"" ]) end diff --git a/packages/react-native/Libraries/Network/React-RCTNetwork.podspec b/packages/react-native/Libraries/Network/React-RCTNetwork.podspec index d8f54459dfe4..865dc4129909 100644 --- a/packages/react-native/Libraries/Network/React-RCTNetwork.podspec +++ b/packages/react-native/Libraries/Network/React-RCTNetwork.podspec @@ -28,7 +28,11 @@ header_search_paths = [ if ENV["USE_FRAMEWORKS"] header_search_paths = header_search_paths.concat([ "\"$(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-NativeModulesApple/React_NativeModulesApple.framework/Headers\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers\"", + ]) end diff --git a/packages/react-native/Libraries/Settings/React-RCTSettings.podspec b/packages/react-native/Libraries/Settings/React-RCTSettings.podspec index 4bbd4e476bd0..9fa55fded754 100644 --- a/packages/react-native/Libraries/Settings/React-RCTSettings.podspec +++ b/packages/react-native/Libraries/Settings/React-RCTSettings.podspec @@ -28,7 +28,10 @@ header_search_paths = [ if ENV["USE_FRAMEWORKS"] header_search_paths = header_search_paths.concat([ "\"$(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-NativeModulesApple/React_NativeModulesApple.framework/Headers\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers\"", ]) end diff --git a/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec b/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec index 2eb4c33882d7..616611ea1375 100644 --- a/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec +++ b/packages/react-native/Libraries/Vibration/React-RCTVibration.podspec @@ -28,7 +28,9 @@ header_search_paths = [ if ENV["USE_FRAMEWORKS"] header_search_paths = header_search_paths.concat([ "\"$(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-NativeModulesApple/React_NativeModulesApple.framework/Headers\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\"", + "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers\"" ]) end diff --git a/packages/react-native/ReactCommon/React-Fabric.podspec b/packages/react-native/ReactCommon/React-Fabric.podspec index 1ecfe08202d9..fe368542e996 100644 --- a/packages/react-native/ReactCommon/React-Fabric.podspec +++ b/packages/react-native/ReactCommon/React-Fabric.podspec @@ -37,7 +37,7 @@ Pod::Spec.new do |s| "DEFINES_MODULE" => "YES" } if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' + s.header_mappings_dir = File.absolute_path('./') s.module_name = 'React_Fabric' end diff --git a/packages/react-native/ReactCommon/React-rncore.podspec b/packages/react-native/ReactCommon/React-rncore.podspec index 62838bb5fe47..5465ed61a953 100644 --- a/packages/react-native/ReactCommon/React-rncore.podspec +++ b/packages/react-native/ReactCommon/React-rncore.podspec @@ -26,6 +26,17 @@ react_native_dependency_path = ENV['REACT_NATIVE_PATH'] # Relative path to react native from current podspec react_native_sources_path = '..' +header_search_paths = [ + "\"$(PODS_TARGET_SRCROOT)\"", + "\"$(PODS_TARGET_SRCROOT)/ReactCommon\"", +] + +if ENV["USE_FRAMEWORKS"] + header_search_paths = header_search_paths.concat([ + "\"$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\"", + ]) +end + Pod::Spec.new do |s| s.name = "React-rncore" s.version = version @@ -37,6 +48,7 @@ Pod::Spec.new do |s| s.source = source s.source_files = "dummyFile.cpp" s.pod_target_xcconfig = { "USE_HEADERMAP" => "YES", + "HEADER_SEARCH_PATHS" => header_search_paths.join(' '), "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" } diff --git a/packages/react-native/ReactCommon/ReactCommon.podspec b/packages/react-native/ReactCommon/ReactCommon.podspec index 448907b3b8f2..ff6abe3da9d7 100644 --- a/packages/react-native/ReactCommon/ReactCommon.podspec +++ b/packages/react-native/ReactCommon/ReactCommon.podspec @@ -37,7 +37,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", "GCC_WARN_PEDANTIC" => "YES" } if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' + s.header_mappings_dir = File.absolute_path("./") end # TODO (T48588859): Restructure this target to align with dir structure: "react/nativemodule/..." diff --git a/packages/react-native/ReactCommon/react/debug/React-debug.podspec b/packages/react-native/ReactCommon/react/debug/React-debug.podspec index 7c2d0d65ae64..933ace4d4d6f 100644 --- a/packages/react-native/ReactCommon/react/debug/React-debug.podspec +++ b/packages/react-native/ReactCommon/react/debug/React-debug.podspec @@ -32,6 +32,6 @@ Pod::Spec.new do |s| if ENV['USE_FRAMEWORKS'] s.module_name = "React_debug" - s.header_mappings_dir = "../.." + s.header_mappings_dir = File.absolute_path("../..") end end diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec index 8824ba73561b..00f5c923fe3d 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec @@ -37,7 +37,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", "GCC_WARN_PEDANTIC" => "YES" } if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' + s.header_mappings_dir = File.absolute_path('./') end s.source_files = "ReactCommon/**/*.{mm,cpp,h}" diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec b/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec index ddccfded0104..f1143cea212b 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec @@ -37,7 +37,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", "GCC_WARN_PEDANTIC" => "YES" } if ENV['USE_FRAMEWORKS'] - s.header_mappings_dir = './' + s.header_mappings_dir = File.absolute_path('./') end diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec index c4428e034670..4111d290bdf6 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec +++ b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec @@ -45,7 +45,7 @@ Pod::Spec.new do |s| if ENV['USE_FRAMEWORKS'] s.module_name = "React_graphics" - s.header_mappings_dir = "../../.." + s.header_mappings_dir = File.absolute_path("../../..") header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] end diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec index 34ad40c6fe5c..856b847e23d0 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec @@ -42,7 +42,7 @@ Pod::Spec.new do |s| if ENV['USE_FRAMEWORKS'] s.module_name = "React_ImageManager" - s.header_mappings_dir = "./" + s.header_mappings_dir = File.absolute_path("./") header_search_paths = header_search_paths + [ "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\"", "\"$(PODS_ROOT)/DoubleConversion\"", diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec index 2756131fa115..77aafd0d0e07 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec @@ -47,7 +47,7 @@ Pod::Spec.new do |s| if ENV['USE_FRAMEWORKS'] s.module_name = "React_runtimescheduler" - s.header_mappings_dir = "../../.." + s.header_mappings_dir = File.absolute_path("../../..") end s.dependency "React-jsi" diff --git a/packages/react-native/ReactCommon/react/utils/React-utils.podspec b/packages/react-native/ReactCommon/react/utils/React-utils.podspec index 795be868379d..183702365340 100644 --- a/packages/react-native/ReactCommon/react/utils/React-utils.podspec +++ b/packages/react-native/ReactCommon/react/utils/React-utils.podspec @@ -48,7 +48,7 @@ Pod::Spec.new do |s| if ENV['USE_FRAMEWORKS'] s.module_name = "React_utils" - s.header_mappings_dir = "../.." + s.header_mappings_dir = File.absolute_path("../..") end s.dependency "RCT-Folly", folly_version