1# frozen_string_literal: true 2class Array 3 # Removes and returns the elements for which the block returns a true value. 4 # If no block is given, an Enumerator is returned instead. 5 # 6 # numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 7 # odd_numbers = numbers.extract! { |number| number.odd? } # => [1, 3, 5, 7, 9] 8 # numbers # => [0, 2, 4, 6, 8] 9 def expo_extract! 10 return to_enum(:extract!) { size } unless block_given? 11 12 extracted_elements = [] 13 14 reject! do |element| 15 extracted_elements << element if yield(element) 16 end 17 18 extracted_elements 19 end 20end 21 22# Overrides CocoaPods class to bypass module dependencies check. 23# We want to add vendored reanimated but then expo-dev-menu needs to 24# depend on react modules which don't have modular_headers set. 25module Pod 26 class Installer 27 class Xcode 28 class TargetValidator 29 private 30 31 _original_verify_swift_pods_have_module_dependencies = instance_method(:verify_swift_pods_have_module_dependencies) 32 33 define_method(:verify_swift_pods_have_module_dependencies) do 34 # save dev-menu target but remove it from pod_targets variable used by orginal implementation 35 # see: https://github.com/CocoaPods/CocoaPods/blob/f120f9fabda8bc7bea9995700e358ea22dd71cfe/lib/cocoapods/installer/xcode/target_validator.rb#L129-L153 36 dev_menu_target = pod_targets.expo_extract! { |target| target.name == "expo-dev-menu" } 37 # call orginal implementation 38 _original_verify_swift_pods_have_module_dependencies.bind(self).() 39 # restore orginal pod_targets for other checks 40 pod_targets.push(*dev_menu_target) 41 end 42 end 43 end # class UserProjectIntegrator 44 end # class Installer 45end # module Pod