11b00d0c7SŁukasz Kosmatyrequire 'json' 21b00d0c7SŁukasz Kosmaty 31b00d0c7SŁukasz Kosmatypackage = JSON.parse(File.read(File.join(__dir__, 'package.json'))) 4e68edf7aSKudo Chien 5e68edf7aSKudo ChienreactNativeVersion = '0.0.0' 6e68edf7aSKudo Chienbegin 7e68edf7aSKudo Chien reactNativeVersion = `node --print "require('react-native/package.json').version"` 8e68edf7aSKudo Chienrescue 9e68edf7aSKudo Chien reactNativeVersion = '0.0.0' 10e68edf7aSKudo Chienend 11e68edf7aSKudo Chienif ENV["REACT_NATIVE_OVERRIDE_VERSION"] 12e68edf7aSKudo Chien reactNativeVersion = ENV["REACT_NATIVE_OVERRIDE_VERSION"] 13e68edf7aSKudo Chienend 14e68edf7aSKudo Chien 15c0a96678SKudo ChienreactNativeMinorVersion = reactNativeVersion.split('.')[1].to_i 16e68edf7aSKudo Chien 1797075668STomasz Sapetafabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' 18d4cd4dfcSKudo Chienfabric_compiler_flags = '-DRN_FABRIC_ENABLED -DRCT_NEW_ARCH_ENABLED' 1922b45c56SKudo Chienfolly_version = '2021.07.22.00' 2097075668STomasz Sapetafolly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' 211b00d0c7SŁukasz Kosmaty 221b00d0c7SŁukasz KosmatyPod::Spec.new do |s| 231b00d0c7SŁukasz Kosmaty s.name = 'ExpoModulesCore' 241b00d0c7SŁukasz Kosmaty s.version = package['version'] 251b00d0c7SŁukasz Kosmaty s.summary = package['description'] 261b00d0c7SŁukasz Kosmaty s.description = package['description'] 271b00d0c7SŁukasz Kosmaty s.license = package['license'] 281b00d0c7SŁukasz Kosmaty s.author = package['author'] 291b00d0c7SŁukasz Kosmaty s.homepage = package['homepage'] 30*ef901781SDouglas Lowder s.platforms = { :ios => '13.0', :tvos => '13.0'} 311b00d0c7SŁukasz Kosmaty s.swift_version = '5.4' 321b00d0c7SŁukasz Kosmaty s.source = { git: 'https://github.com/expo/expo.git' } 331b00d0c7SŁukasz Kosmaty s.static_framework = true 341b00d0c7SŁukasz Kosmaty s.header_dir = 'ExpoModulesCore' 351b00d0c7SŁukasz Kosmaty 36d4cd4dfcSKudo Chien header_search_paths = [ 37d4cd4dfcSKudo Chien # EXJavaScriptRuntime -> Hermes 38d4cd4dfcSKudo Chien '"$(PODS_ROOT)/boost"', 39d4cd4dfcSKudo Chien '"$(PODS_ROOT)/DoubleConversion"', 40d4cd4dfcSKudo Chien '"$(PODS_ROOT)/RCT-Folly"', 41d4cd4dfcSKudo Chien '"${PODS_ROOT}/Headers/Public/React-hermes"', 42d4cd4dfcSKudo Chien '"${PODS_ROOT}/Headers/Public/hermes-engine"', 43d4cd4dfcSKudo Chien 44d4cd4dfcSKudo Chien # EXAppDelegateWrapper -> RCTAppDelegate -> RCTCxxBridgeDelegate 45d4cd4dfcSKudo Chien '"${PODS_ROOT}/Headers/Private/React-Core"', 46d4cd4dfcSKudo Chien 47d4cd4dfcSKudo Chien # similar to https://github.com/facebook/react-native/commit/c4b51e8d7, review this when we drop SDK 47 48d4cd4dfcSKudo Chien '"$(PODS_ROOT)/Headers/Private/React-bridging/react/bridging"', 49d4cd4dfcSKudo Chien '"$(PODS_CONFIGURATION_BUILD_DIR)/React-bridging/react_bridging.framework/Headers"', 50d4cd4dfcSKudo Chien ] 51d4cd4dfcSKudo Chien 521b00d0c7SŁukasz Kosmaty # Swift/Objective-C compatibility 531b00d0c7SŁukasz Kosmaty s.pod_target_xcconfig = { 541b00d0c7SŁukasz Kosmaty 'USE_HEADERMAP' => 'YES', 551b00d0c7SŁukasz Kosmaty 'DEFINES_MODULE' => 'YES', 5697075668STomasz Sapeta 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++17', 571b00d0c7SŁukasz Kosmaty 'SWIFT_COMPILATION_MODE' => 'wholemodule', 58d4cd4dfcSKudo Chien 'HEADER_SEARCH_PATHS' => header_search_paths.join(' '), 59d4cd4dfcSKudo Chien "FRAMEWORK_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\"", 60f1d8dff1STomasz Sapeta 'OTHER_SWIFT_FLAGS' => "$(inherited) #{fabric_enabled ? fabric_compiler_flags : ''}" 611b00d0c7SŁukasz Kosmaty } 62c0a96678SKudo Chien user_header_search_paths = [ 63c0a96678SKudo Chien '"${PODS_CONFIGURATION_BUILD_DIR}/ExpoModulesCore/Swift Compatibility Header"', 64c0a96678SKudo Chien '"$(PODS_ROOT)/Headers/Private/React-bridging/react/bridging"', 65c0a96678SKudo Chien '"$(PODS_CONFIGURATION_BUILD_DIR)/React-bridging/react_bridging.framework/Headers"', 66c0a96678SKudo Chien ] 67c0a96678SKudo Chien if fabric_enabled && ENV['USE_FRAMEWORKS'] 68c0a96678SKudo Chien user_header_search_paths << "\"$(PODS_ROOT)/DoubleConversion\"" 69c0a96678SKudo Chien user_header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\"" 70c0a96678SKudo Chien user_header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\"" 71c0a96678SKudo Chien user_header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\"" 72c0a96678SKudo Chien user_header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\"" 73c0a96678SKudo Chien user_header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\"" 74c0a96678SKudo Chien user_header_search_paths << "\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\"" 75c0a96678SKudo Chien end 761b00d0c7SŁukasz Kosmaty s.user_target_xcconfig = { 77c0a96678SKudo Chien "HEADER_SEARCH_PATHS" => user_header_search_paths, 781b00d0c7SŁukasz Kosmaty } 79b61e665eSTomasz Sapeta 80c0a96678SKudo Chien compiler_flags = folly_compiler_flags + ' ' + "-DREACT_NATIVE_MINOR_VERSION=#{reactNativeMinorVersion}" 811b00d0c7SŁukasz Kosmaty 821b00d0c7SŁukasz Kosmaty s.dependency 'React-Core' 831b00d0c7SŁukasz Kosmaty s.dependency 'ReactCommon/turbomodule/core' 84c0a96678SKudo Chien s.dependency 'React-RCTAppDelegate' if reactNativeMinorVersion >= 71 85c0a96678SKudo Chien s.dependency 'React-NativeModulesApple' if reactNativeMinorVersion >= 72 861b00d0c7SŁukasz Kosmaty 8797075668STomasz Sapeta if fabric_enabled 88b61e665eSTomasz Sapeta compiler_flags << ' ' << fabric_compiler_flags 8997075668STomasz Sapeta 9097075668STomasz Sapeta s.dependency 'React-RCTFabric' 9197075668STomasz Sapeta s.dependency 'RCT-Folly', folly_version 9297075668STomasz Sapeta end 9397075668STomasz Sapeta 94c0a96678SKudo Chien unless defined?(install_modules_dependencies) 95c0a96678SKudo Chien # `install_modules_dependencies` is defined from react_native_pods.rb. 96c0a96678SKudo Chien # when running with `pod ipc spec`, this method is not defined and we have to require manually. 97c0a96678SKudo Chien require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") 98c0a96678SKudo Chien end 99c0a96678SKudo Chien install_modules_dependencies(s) 100c0a96678SKudo Chien 1011b00d0c7SŁukasz Kosmaty if !$ExpoUseSources&.include?(package['name']) && ENV['EXPO_USE_SOURCE'].to_i == 0 && File.exist?("ios/#{s.name}.xcframework") && Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0') 1021b00d0c7SŁukasz Kosmaty s.source_files = 'ios/**/*.h', 'common/cpp/**/*.h' 1031b00d0c7SŁukasz Kosmaty s.vendored_frameworks = "ios/#{s.name}.xcframework" 1041b00d0c7SŁukasz Kosmaty else 1051b00d0c7SŁukasz Kosmaty s.source_files = 'ios/**/*.{h,m,mm,swift,cpp}', 'common/cpp/**/*.{h,cpp}' 1061b00d0c7SŁukasz Kosmaty end 1071b00d0c7SŁukasz Kosmaty 10897075668STomasz Sapeta exclude_files = ['ios/Tests/'] 10997075668STomasz Sapeta if !fabric_enabled 11097075668STomasz Sapeta exclude_files.append('ios/Fabric/') 111b065ac74SKudo Chien exclude_files.append('common/cpp/fabric/') 11297075668STomasz Sapeta end 11397075668STomasz Sapeta 114b61e665eSTomasz Sapeta s.exclude_files = exclude_files 115b61e665eSTomasz Sapeta s.compiler_flags = compiler_flags 1161b00d0c7SŁukasz Kosmaty s.private_header_files = ['ios/**/*+Private.h', 'ios/**/Swift.h'] 1171b00d0c7SŁukasz Kosmaty 1181b00d0c7SŁukasz Kosmaty s.test_spec 'Tests' do |test_spec| 1191b00d0c7SŁukasz Kosmaty test_spec.dependency 'ExpoModulesTestCore' 1201b00d0c7SŁukasz Kosmaty 1211b00d0c7SŁukasz Kosmaty test_spec.source_files = 'ios/Tests/**/*.{m,swift}' 1221b00d0c7SŁukasz Kosmaty end 1231b00d0c7SŁukasz Kosmatyend 124