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