Created
April 7, 2021 12:52
-
-
Save efstathiosntonas/e743bb4974af0a9411ce55949c663d02 to your computer and use it in GitHub Desktop.
patched react_native_pods.rb, fixes directory not found in rn 0.64.0 ios builds
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (c) Facebook, Inc. and its affiliates. | |
# | |
# This source code is licensed under the MIT license found in the | |
# LICENSE file in the root directory of this source tree. | |
def use_react_native! (options={}) | |
# The prefix to react-native | |
prefix = options[:path] ||= "../node_modules/react-native" | |
# Include Fabric dependencies | |
fabric_enabled = options[:fabric_enabled] ||= false | |
# Include DevSupport dependency | |
production = options[:production] ||= false | |
# Include Hermes dependencies | |
hermes_enabled = options[:hermes_enabled] ||= false | |
# The Pods which should be included in all projects | |
pod 'FBLazyVector', :path => "#{prefix}/Libraries/FBLazyVector" | |
pod 'FBReactNativeSpec', :path => "#{prefix}/React/FBReactNativeSpec" | |
pod 'RCTRequired', :path => "#{prefix}/Libraries/RCTRequired" | |
pod 'RCTTypeSafety', :path => "#{prefix}/Libraries/TypeSafety" | |
pod 'React', :path => "#{prefix}/" | |
pod 'React-Core', :path => "#{prefix}/" | |
pod 'React-CoreModules', :path => "#{prefix}/React/CoreModules" | |
pod 'React-RCTActionSheet', :path => "#{prefix}/Libraries/ActionSheetIOS" | |
pod 'React-RCTAnimation', :path => "#{prefix}/Libraries/NativeAnimation" | |
pod 'React-RCTBlob', :path => "#{prefix}/Libraries/Blob" | |
pod 'React-RCTImage', :path => "#{prefix}/Libraries/Image" | |
pod 'React-RCTLinking', :path => "#{prefix}/Libraries/LinkingIOS" | |
pod 'React-RCTNetwork', :path => "#{prefix}/Libraries/Network" | |
pod 'React-RCTSettings', :path => "#{prefix}/Libraries/Settings" | |
pod 'React-RCTText', :path => "#{prefix}/Libraries/Text" | |
pod 'React-RCTVibration', :path => "#{prefix}/Libraries/Vibration" | |
pod 'React-Core/RCTWebSocket', :path => "#{prefix}/" | |
unless production | |
pod 'React-Core/DevSupport', :path => "#{prefix}/" | |
end | |
pod 'React-cxxreact', :path => "#{prefix}/ReactCommon/cxxreact" | |
pod 'React-jsi', :path => "#{prefix}/ReactCommon/jsi" | |
pod 'React-jsiexecutor', :path => "#{prefix}/ReactCommon/jsiexecutor" | |
pod 'React-jsinspector', :path => "#{prefix}/ReactCommon/jsinspector" | |
pod 'React-callinvoker', :path => "#{prefix}/ReactCommon/callinvoker" | |
pod 'React-runtimeexecutor', :path => "#{prefix}/ReactCommon/runtimeexecutor" | |
pod 'React-perflogger', :path => "#{prefix}/ReactCommon/reactperflogger" | |
pod 'ReactCommon/turbomodule/core', :path => "#{prefix}/ReactCommon" | |
pod 'Yoga', :path => "#{prefix}/ReactCommon/yoga", :modular_headers => true | |
pod 'DoubleConversion', :podspec => "#{prefix}/third-party-podspecs/DoubleConversion.podspec" | |
pod 'glog', :podspec => "#{prefix}/third-party-podspecs/glog.podspec" | |
pod 'RCT-Folly', :podspec => "#{prefix}/third-party-podspecs/RCT-Folly.podspec" | |
if fabric_enabled | |
pod 'React-Fabric', :path => "#{prefix}/ReactCommon" | |
pod 'React-graphics', :path => "#{prefix}/ReactCommon/react/renderer/graphics" | |
pod 'React-jsi/Fabric', :path => "#{prefix}/ReactCommon/jsi" | |
pod 'React-RCTFabric', :path => "#{prefix}/React" | |
pod 'RCT-Folly/Fabric', :podspec => "#{prefix}/third-party-podspecs/RCT-Folly.podspec" | |
end | |
if hermes_enabled | |
pod 'React-hermes', :path => "#{prefix}/ReactCommon/hermes" | |
pod 'hermes-engine' | |
pod 'libevent', '~> 2.1.12' | |
end | |
end | |
def use_flipper!(versions = {}, configurations: ['Debug']) | |
versions['Flipper'] ||= '~> 0.75.1' | |
versions['Flipper-DoubleConversion'] ||= '1.1.7' | |
versions['Flipper-Folly'] ||= '~> 2.5' | |
versions['Flipper-Glog'] ||= '0.3.6' | |
versions['Flipper-PeerTalk'] ||= '~> 0.0.4' | |
versions['Flipper-RSocket'] ||= '~> 1.3' | |
pod 'FlipperKit', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FlipperKitLayoutPlugin', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/SKIOSNetworkPlugin', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FlipperKitUserDefaultsPlugin', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FlipperKitReactPlugin', versions['Flipper'], :configurations => configurations | |
# List all transitive dependencies for FlipperKit pods | |
# to avoid them being linked in Release builds | |
pod 'Flipper', versions['Flipper'], :configurations => configurations | |
pod 'Flipper-DoubleConversion', versions['Flipper-DoubleConversion'], :configurations => configurations | |
pod 'Flipper-Folly', versions['Flipper-Folly'], :configurations => configurations | |
pod 'Flipper-Glog', versions['Flipper-Glog'], :configurations => configurations | |
pod 'Flipper-PeerTalk', versions['Flipper-PeerTalk'], :configurations => configurations | |
pod 'Flipper-RSocket', versions['Flipper-RSocket'], :configurations => configurations | |
pod 'FlipperKit/Core', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/CppBridge', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FBCxxFollyDynamicConvert', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FBDefines', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FKPortForwarding', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FlipperKitHighlightOverlay', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FlipperKitLayoutTextSearchable', versions['Flipper'], :configurations => configurations | |
pod 'FlipperKit/FlipperKitNetworkPlugin', versions['Flipper'], :configurations => configurations | |
end | |
def has_pod(installer, name) | |
installer.pods_project.pod_group(name) != nil | |
end | |
# Post Install processing for Flipper | |
def flipper_post_install(installer) | |
installer.pods_project.targets.each do |target| | |
if target.name == 'YogaKit' | |
target.build_configurations.each do |config| | |
config.build_settings['SWIFT_VERSION'] = '4.1' | |
end | |
end | |
end | |
end | |
def exclude_architectures(installer) | |
projects = installer.aggregate_targets | |
.map{ |t| t.user_project } | |
.uniq{ |p| p.path } | |
.push(installer.pods_project) | |
arm_value = `/usr/sbin/sysctl -n hw.optional.arm64 2>&1`.to_i | |
# Hermes does not support `i386` architecture | |
excluded_archs_default = has_pod(installer, 'hermes-engine') ? "i386" : "" | |
projects.each do |project| | |
project.build_configurations.each do |config| | |
if arm_value == 1 then | |
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = excluded_archs_default | |
else | |
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64 " + excluded_archs_default | |
end | |
end | |
project.save() | |
end | |
end | |
def react_native_post_install(installer) | |
if has_pod(installer, 'Flipper') | |
flipper_post_install(installer) | |
end | |
exclude_architectures(installer) | |
end | |
def use_react_native_codegen!(spec, options={}) | |
return if ENV['DISABLE_CODEGEN'] == '1' | |
# The path to react-native (e.g. react_native_path) | |
prefix = options[:path] ||= File.join(__dir__, "..") | |
# The path to JavaScript files | |
srcs_dir = options[:srcs_dir] ||= File.join(prefix, "Libraries") | |
# Library name (e.g. FBReactNativeSpec) | |
codegen_modules_library_name = spec.name | |
codegen_modules_output_dir = options[:codegen_modules_output_dir] ||= File.join(prefix, "React/#{codegen_modules_library_name}/#{codegen_modules_library_name}") | |
# Run the codegen as part of the Xcode build pipeline. | |
env_vars = "SRCS_DIR='#{srcs_dir}'" | |
env_vars += " CODEGEN_MODULES_OUTPUT_DIR='#{codegen_modules_output_dir}'" | |
# Since the generated files are not guaranteed to exist when CocoaPods is run, we need to create | |
# empty files to ensure the references are included in the resulting Pods Xcode project. | |
mkdir_command = "mkdir -p '#{codegen_modules_output_dir}'" | |
generated_filenames = [ "#{codegen_modules_library_name}.h", "#{codegen_modules_library_name}-generated.mm" ] | |
generated_files = generated_filenames.map { |filename| File.join(codegen_modules_output_dir, filename) } | |
if ENV['USE_FABRIC'] == '1' | |
# We use a different library name for components, as well as an additional set of files. | |
# Eventually, we want these to be part of the same library as #{codegen_modules_library_name} above. | |
codegen_components_library_name = "rncore" | |
codegen_components_output_dir = File.join(prefix, "ReactCommon/react/renderer/components/#{codegen_components_library_name}") | |
env_vars += " CODEGEN_COMPONENTS_OUTPUT_DIR='#{codegen_components_output_dir}'" | |
mkdir_command += " '#{codegen_components_output_dir}'" | |
components_generated_filenames = [ | |
"ComponentDescriptors.h", | |
"EventEmitters.cpp", | |
"EventEmitters.h", | |
"Props.cpp", | |
"Props.h", | |
"RCTComponentViewHelpers.h", | |
"ShadowNodes.cpp", | |
"ShadowNodes.h" | |
] | |
generated_files = generated_files.concat(components_generated_filenames.map { |filename| File.join(codegen_components_output_dir, filename) }) | |
end | |
spec.script_phase = { | |
:name => 'Generate Specs', | |
:input_files => [srcs_dir], | |
:output_files => ["$(DERIVED_FILE_DIR)/codegen-#{codegen_modules_library_name}.log"].concat(generated_files), | |
:script => "set -o pipefail\n\nbash -l -c \"#{env_vars} CODEGEN_MODULES_LIBRARY_NAME='#{codegen_modules_library_name}' '#{File.join(__dir__, "generate-specs.sh")}'\" 2>&1 | tee \"${SCRIPT_OUTPUT_FILE_0}\"", | |
:execution_position => :before_compile, | |
:show_env_vars_in_log => true | |
} | |
spec.prepare_command = "#{mkdir_command} && touch #{generated_files.map {|file| "'#{file}'"}.join(" ")}" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
PR: facebook/react-native#31141