1d1194e24SŁukasz Kosmatyrequire 'json' 2d1194e24SŁukasz Kosmaty 3d1194e24SŁukasz Kosmatypackage = JSON.parse(File.read(File.join(__dir__, 'package.json'))) 4d1194e24SŁukasz Kosmaty 5*db6683c6SKudo ChienreactNativeVersion = '0.0.0' 6*db6683c6SKudo Chienbegin 7*db6683c6SKudo Chien reactNativeVersion = `node --print "require('react-native/package.json').version"` 8*db6683c6SKudo Chienrescue 9*db6683c6SKudo Chien reactNativeVersion = '0.0.0' 10*db6683c6SKudo Chienend 11*db6683c6SKudo Chienif ENV["REACT_NATIVE_OVERRIDE_VERSION"] 12*db6683c6SKudo Chien reactNativeVersion = ENV["REACT_NATIVE_OVERRIDE_VERSION"] 13*db6683c6SKudo Chienend 14*db6683c6SKudo ChienreactNativeTargetVersion = reactNativeVersion.split('.')[1].to_i 15*db6683c6SKudo Chien 1638967aefSKudo Chienfolly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' 17*db6683c6SKudo Chiencompiler_flags = folly_compiler_flags + ' ' + "-DREACT_NATIVE_TARGET_VERSION=#{reactNativeTargetVersion}" 1838967aefSKudo Chien 19d1194e24SŁukasz KosmatyPod::Spec.new do |s| 20d1194e24SŁukasz Kosmaty s.name = 'expo-dev-menu' 21d1194e24SŁukasz Kosmaty s.version = package['version'] 22d1194e24SŁukasz Kosmaty s.summary = package['description'] 23d1194e24SŁukasz Kosmaty s.description = package['description'] 24d1194e24SŁukasz Kosmaty s.license = package['license'] 25d1194e24SŁukasz Kosmaty s.author = package['author'] 26d1194e24SŁukasz Kosmaty s.homepage = package['homepage'] 27c88b85cfSTomasz Sapeta s.platform = :ios, '13.0' 28d1194e24SŁukasz Kosmaty s.swift_version = '5.2' 29d1194e24SŁukasz Kosmaty s.source = { git: 'https://github.com/expo/expo.git' } 30d1194e24SŁukasz Kosmaty s.static_framework = true 31d1194e24SŁukasz Kosmaty s.requires_arc = true 32d1194e24SŁukasz Kosmaty s.header_dir = 'EXDevMenu' 33d1194e24SŁukasz Kosmaty 34d1194e24SŁukasz Kosmaty s.resource_bundles = { 'EXDevMenu' => [ 356bbae4b3Sandy 'ios/assets', 36d1194e24SŁukasz Kosmaty 'assets/*.ios.js', 37d1194e24SŁukasz Kosmaty 'assets/dev-menu-packager-host', 385f784512Sandy 'assets/*.ttf', 395f784512Sandy 'assets/*.otf' 40d1194e24SŁukasz Kosmaty ]} 41d1194e24SŁukasz Kosmaty 420674a2c9SJanic Duplessis s.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'EX_DEV_MENU_ENABLED=1', 'OTHER_SWIFT_FLAGS' => '-DEX_DEV_MENU_ENABLED' } 43d1194e24SŁukasz Kosmaty 44dfd15ebdSKudo Chien s.user_target_xcconfig = { 45dfd15ebdSKudo Chien "HEADER_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-menu/Swift Compatibility Header\"", 46dfd15ebdSKudo Chien } 47dfd15ebdSKudo Chien 4838967aefSKudo Chien header_search_paths = [ 4938967aefSKudo Chien '"$(PODS_ROOT)/boost"', 5038967aefSKudo Chien '"${PODS_ROOT}/Headers/Private/React-Core"', 5138967aefSKudo Chien '"$(PODS_CONFIGURATION_BUILD_DIR)/ExpoModulesCore/Swift Compatibility Header"', 5238967aefSKudo Chien '"$(PODS_CONFIGURATION_BUILD_DIR)/expo-dev-menu-interface/Swift Compatibility Header"', 5338967aefSKudo Chien ] 54a61b5e5aSKudo Chien if ENV['USE_FRAMEWORKS'] 55a61b5e5aSKudo Chien header_search_paths.concat([ 56a61b5e5aSKudo Chien '"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers"', 57a61b5e5aSKudo Chien ]) 58a61b5e5aSKudo Chien end 5938967aefSKudo Chien s.pod_target_xcconfig = { 6038967aefSKudo Chien 'DEFINES_MODULE' => 'YES', 6138967aefSKudo Chien 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++17', 6238967aefSKudo Chien 'HEADER_SEARCH_PATHS' => header_search_paths.join(' '), 6338967aefSKudo Chien } 64c0a96678SKudo Chien unless defined?(install_modules_dependencies) 65c0a96678SKudo Chien # `install_modules_dependencies` is defined from react_native_pods.rb. 66c0a96678SKudo Chien # when running with `pod ipc spec`, this method is not defined and we have to require manually. 67c0a96678SKudo Chien require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") 68c0a96678SKudo Chien end 69c0a96678SKudo Chien install_modules_dependencies(s) 70d1194e24SŁukasz Kosmaty 71d1194e24SŁukasz Kosmaty s.subspec 'SafeAreaView' do |safearea| 7259828b0dSGabriel Donadel Dall'Agnol safearea.dependency 'ExpoModulesCore' 7359828b0dSGabriel Donadel Dall'Agnol 7459828b0dSGabriel Donadel Dall'Agnol # Swift/Objective-C compatibility 7559828b0dSGabriel Donadel Dall'Agnol safearea.pod_target_xcconfig = { 7659828b0dSGabriel Donadel Dall'Agnol 'DEFINES_MODULE' => 'YES', 7759828b0dSGabriel Donadel Dall'Agnol 'SWIFT_COMPILATION_MODE' => 'wholemodule' 7859828b0dSGabriel Donadel Dall'Agnol } 791915f6b4SŁukasz Kosmaty if File.exist?("vendored/react-native-safe-area-context/dev-menu-react-native-safe-area-context.xcframework") && Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0') 801915f6b4SŁukasz Kosmaty safearea.source_files = "vendored/react-native-safe-area-context/**/*.{h}" 811915f6b4SŁukasz Kosmaty safearea.vendored_frameworks = "vendored/react-native-safe-area-context/dev-menu-react-native-safe-area-context.xcframework" 821915f6b4SŁukasz Kosmaty safearea.private_header_files = 'vendored/react-native-safe-area-context/**/*.h' 831915f6b4SŁukasz Kosmaty else 8459828b0dSGabriel Donadel Dall'Agnol safearea.source_files = 'vendored/react-native-safe-area-context/**/*.{h,m,swift}' 85d1194e24SŁukasz Kosmaty safearea.private_header_files = 'vendored/react-native-safe-area-context/**/*.h' 86d1194e24SŁukasz Kosmaty 87d1194e24SŁukasz Kosmaty safearea.compiler_flags = '-w -Xanalyzer -analyzer-disable-all-checks' 88d1194e24SŁukasz Kosmaty end 891915f6b4SŁukasz Kosmaty end 90d1194e24SŁukasz Kosmaty 91d1194e24SŁukasz Kosmaty s.subspec 'Vendored' do |vendored| 92d1194e24SŁukasz Kosmaty vendored.dependency "expo-dev-menu/SafeAreaView" 93d1194e24SŁukasz Kosmaty end 94d1194e24SŁukasz Kosmaty 95d1194e24SŁukasz Kosmaty s.subspec 'Main' do |main| 96d1194e24SŁukasz Kosmaty s.source_files = 'ios/**/*.{h,m,mm,swift}' 97d1194e24SŁukasz Kosmaty s.preserve_paths = 'ios/**/*.{h,m,mm,swift}' 98*db6683c6SKudo Chien s.exclude_files = 'ios/*Tests/**/*', 'ios/ReactNativeCompatibles/**/*', 'vendored/**/*' 99*db6683c6SKudo Chien s.compiler_flags = compiler_flags 100d1194e24SŁukasz Kosmaty 101d1194e24SŁukasz Kosmaty main.dependency 'React-Core' 102e3928631Sandy main.dependency "EXManifests" 1036b9ef7d1SEric Samelson main.dependency 'ExpoModulesCore' 104d1194e24SŁukasz Kosmaty main.dependency 'expo-dev-menu-interface' 105d1194e24SŁukasz Kosmaty main.dependency "expo-dev-menu/Vendored" 106d1194e24SŁukasz Kosmaty end 107d1194e24SŁukasz Kosmaty 108*db6683c6SKudo Chien s.subspec 'ReactNativeCompatibles' do |ss| 109*db6683c6SKudo Chien if reactNativeTargetVersion >= 73 110*db6683c6SKudo Chien ss.source_files = 'ios/ReactNativeCompatibles/ReactNative/**/*' 111*db6683c6SKudo Chien else 112*db6683c6SKudo Chien ss.source_files = 'ios/ReactNativeCompatibles/ReactNative72/**/*' 113*db6683c6SKudo Chien end 114*db6683c6SKudo Chien ss.compiler_flags = compiler_flags 115*db6683c6SKudo Chien ss.dependency 'React-Core' 116*db6683c6SKudo Chien end 117*db6683c6SKudo Chien 118d1194e24SŁukasz Kosmaty s.test_spec 'Tests' do |test_spec| 119d1194e24SŁukasz Kosmaty test_spec.requires_app_host = false 120d1194e24SŁukasz Kosmaty test_spec.source_files = 'ios/Tests/**/*' 121d1194e24SŁukasz Kosmaty test_spec.dependency 'Quick' 122d1194e24SŁukasz Kosmaty test_spec.dependency 'Nimble' 123d1194e24SŁukasz Kosmaty test_spec.dependency 'React-CoreModules' 12484f418d7SKudo Chien # ExpoModulesCore requires React-hermes or React-jsc in tests, add ExpoModulesTestCore for the underlying dependencies 12584f418d7SKudo Chien test_spec.dependency 'ExpoModulesTestCore' 126c88b85cfSTomasz Sapeta test_spec.platform = :ios, '13.0' 127d1194e24SŁukasz Kosmaty end 128d1194e24SŁukasz Kosmaty 129d1194e24SŁukasz Kosmaty s.test_spec 'UITests' do |test_spec| 130d1194e24SŁukasz Kosmaty test_spec.requires_app_host = true 131d1194e24SŁukasz Kosmaty test_spec.source_files = 'ios/UITests/**/*' 132d1194e24SŁukasz Kosmaty test_spec.dependency 'React-CoreModules' 133d1194e24SŁukasz Kosmaty test_spec.dependency 'React' 134c88b85cfSTomasz Sapeta test_spec.platform = :ios, '13.0' 135d1194e24SŁukasz Kosmaty end 136d1194e24SŁukasz Kosmaty 137*db6683c6SKudo Chien s.default_subspec = ['Main', 'ReactNativeCompatibles'] 138d1194e24SŁukasz Kosmatyend 139