Class: Fastlane::CreateSimulatorDevices::Runner
- Inherits:
-
Object
- Object
- Fastlane::CreateSimulatorDevices::Runner
- Defined in:
- lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb
Overview
Does all the work to create simulator devices.
Constant Summary collapse
- UI =
::Fastlane::UI
- PRODUCT_FAMILY_TO_OS_NAME =
{ 'iPhone' => 'iOS', 'iPad' => 'iOS', 'iPod' => 'iOS', 'Apple TV' => 'tvOS', 'Apple Watch' => 'watchOS', 'Apple Vision' => 'xrOS' }.freeze
Instance Attribute Summary collapse
-
#runtime_helper ⇒ Object
Returns the value of attribute runtime_helper.
-
#shell_helper ⇒ Object
Returns the value of attribute shell_helper.
-
#verbose ⇒ Object
Returns the value of attribute verbose.
Instance Method Summary collapse
- #available_device_for_required_device(required_device) ⇒ Object
- #create_missing_devices(required_devices) ⇒ Object
- #delete_unavailable_devices ⇒ Object
- #find_runtime_and_device_for_required_devices(required_devices) ⇒ Object
-
#initialize(runtime_helper:, shell_helper:, verbose:) ⇒ Runner
constructor
A new instance of Runner.
- #required_device_for_device(device) ⇒ Object
- #run(devices) ⇒ Object
Constructor Details
#initialize(runtime_helper:, shell_helper:, verbose:) ⇒ Runner
Returns a new instance of Runner.
14 15 16 17 18 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 14 def initialize(runtime_helper:, shell_helper:, verbose:) self.shell_helper = shell_helper self.verbose = verbose || shell_helper.verbose self.runtime_helper = runtime_helper end |
Instance Attribute Details
#runtime_helper ⇒ Object
Returns the value of attribute runtime_helper.
12 13 14 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 12 def runtime_helper @runtime_helper end |
#shell_helper ⇒ Object
Returns the value of attribute shell_helper.
12 13 14 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 12 def shell_helper @shell_helper end |
#verbose ⇒ Object
Returns the value of attribute verbose.
12 13 14 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 12 def verbose @verbose end |
Instance Method Details
#available_device_for_required_device(required_device) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 56 def available_device_for_required_device(required_device) return nil if required_device.available_runtime.nil? available_devices = shell_helper.available_devices_for_runtimes[required_device.available_runtime.identifier.to_sym] available_devices.detect { |device| device.device_type_identifier == required_device.device_type.identifier } end |
#create_missing_devices(required_devices) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 64 def create_missing_devices(required_devices) find_runtime_and_device_for_required_devices(required_devices) missing_devices = required_devices .select { |required_device| required_device.available_device.nil? } return if missing_devices.empty? UI.('Creating missing devices') missing_devices.each do |missing_device| shell_helper.create_device( missing_device.description, missing_device.device_type.identifier, missing_device.available_runtime.identifier ) end shell_helper.available_devices_for_runtimes(force: true) find_runtime_and_device_for_required_devices(missing_devices) end |
#delete_unavailable_devices ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 48 def delete_unavailable_devices return unless shell_helper.available_devices_for_runtimes.values.flatten.any?(&:available?) shell_helper.delete_unavailable_devices shell_helper.available_devices_for_runtimes(force: true) end |
#find_runtime_and_device_for_required_devices(required_devices) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 86 def find_runtime_and_device_for_required_devices(required_devices) UI.('Searching for matching available devices...') required_devices.each do |required_device| required_device.available_runtime = runtime_helper.available_runtime_for_required_device(required_device) required_device.available_device = available_device_for_required_device(required_device) end end |
#required_device_for_device(device) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 103 def required_device_for_device(device) available_device_types = shell_helper.available_device_types device_type = available_device_types.detect do |available_device_type| # Avoid matching "iPhone 16" for the "iPhone 16e" device. "#{device} ".start_with?("#{available_device_type.name} ") end unless device_type UI.important("Device type not found for device #{device}") return nil end product_family = device_type.product_family os_name = PRODUCT_FAMILY_TO_OS_NAME[product_family] device_os_version = device.delete_prefix(device_type.name).strip device_os_version = device_os_version[/\(([\d.]*?)\)/, 1] runtime_version = nil unless device_os_version.nil? || device_os_version.empty? device_os_version += '.0' if device_os_version.scan('.').none? runtime_version = Gem::Version.new(device_os_version) end required_device = RequiredDevice.new( device_type:, os_name:, required_runtime: nil, available_runtime: nil, available_device: nil ) required_device.required_runtime = runtime_helper.required_runtime_for_device(required_device, runtime_version) required_device.required_runtime.nil? ? nil : required_device end |
#run(devices) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/fastlane/plugin/create_simulator_devices/helpers/create_simulator_devices/runner.rb', line 20 def run(devices) shell_helper.stop_core_simulator_services # Delete unusable runtimes and unavailable devices. runtime_helper.delete_unusable_runtimes delete_unavailable_devices # Create distict required devices from a given list of device strings. required_devices = devices .filter_map { |device| required_device_for_device(device) } .uniq { |required_device| [required_device.device_type.name, required_device.required_runtime.product_version] } # Install missing runtimes if needed. runtime_helper.install_missing_runtimes(required_devices) # Create missing devices for required devices. create_missing_devices(required_devices) # Return distinct matched devices strings matched_devices = required_devices .reject { |required_device| required_device.available_device.nil? } .map(&:description) UI.user_error!('No available devices found') if matched_devices.empty? matched_devices end |