class Fourflusher::SimControl
Executes `simctl` commands
Executes `simctl` commands
Executes `simctl` commands
Public Instance Methods
destination(filter, os = :ios, minimum_version = '1.0')
click to toggle source
# File lib/fourflusher/xcodebuild.rb, line 6 def destination(filter, os = :ios, minimum_version = '1.0') sim = simulator(filter, os, minimum_version) filter = "for #{os} #{minimum_version}" if filter == :oldest fail "Simulator #{filter} is not available." if sim.nil? ['-destination', "id=#{sim.id}"] end
list(args)
click to toggle source
# File lib/fourflusher/simctl.rb, line 9 def list(args) simctl!(['list'] + args) end
simulator(filter, os_name = :ios, minimum_version = '1.0')
click to toggle source
# File lib/fourflusher/find.rb, line 96 def simulator(filter, os_name = :ios, minimum_version = '1.0') usable_simulators(filter, os_name, minimum_version).first end
usable_simulators(filter = nil, os = :ios, minimum_version = '1.0')
click to toggle source
# File lib/fourflusher/find.rb, line 100 def usable_simulators(filter = nil, os = :ios, minimum_version = '1.0') sims = fetch_sims oses = sims.map(&:os_name).uniq os = os.downcase.to_sym unless oses.include?(os) fail "Could not find a `#{os}` simulator (valid values: #{oses.join(', ')}). Ensure that "\ "Xcode -> Window -> Devices has at least one `#{os}` simulator listed or otherwise add one." end return sims if filter.nil? minimum_version = Gem::Version.new(minimum_version) sims = sims.select { |sim| sim.os_name == os && sim.compatible?(minimum_version) } return [sims.min_by(&:os_version)] if filter == :oldest found_sims = sims.select { |sim| sim.name == filter } return found_sims if found_sims.count > 0 sims.select { |sim| sim.name.start_with?(filter) } end
Private Instance Methods
fetch_sims()
click to toggle source
Gets the simulators and transforms the simctl json into Simulator
objects
# File lib/fourflusher/find.rb, line 124 def fetch_sims device_list = JSON.parse(list(['-j', 'devices']))['devices'] unless device_list.is_a?(Hash) msg = "Expected devices to be of type Hash but instated found #{device_list.class}" fail Fourflusher::Informative, msg end device_list.flat_map do |runtime_str, devices| # This format changed with Xcode 10.2. if runtime_str.start_with?('com.apple.CoreSimulator.SimRuntime.') # Sample string: com.apple.CoreSimulator.SimRuntime.iOS-12-2 _unused, os_info = runtime_str.split 'com.apple.CoreSimulator.SimRuntime.' os_name, os_major_version, os_minor_version = os_info.split '-' os_version = "#{os_major_version}.#{os_minor_version}" else # Sample string: iOS 9.3 os_name, os_version = runtime_str.split ' ' end devices.map do |device| device_is_available = device['isAvailable'] == 'YES' || device['isAvailable'] == true if device['availability'] == '(available)' || device_is_available Simulator.new(device, os_name, os_version) end end end.compact.sort(&:sim_list_compare) end
simctl!(args)
click to toggle source
# File lib/fourflusher/simctl.rb, line 15 def simctl!(args) xcrun!(['simctl'] + args) end