class FastlaneCore::Simulator

Public Class Methods

all() click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 252
def all
  return DeviceManager.simulators('iOS')
end
clear_cache() click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 290
def clear_cache
  @devices = nil
end
copy_logs(device, log_identity, logs_destination_dir, log_collection_start_time) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 304
def copy_logs(device, log_identity, logs_destination_dir, log_collection_start_time)
  logs_destination_dir = File.expand_path(logs_destination_dir)
  os_version = FastlaneCore::CommandExecutor.execute(command: 'sw_vers -productVersion', print_all: false, print_command: false)

  host_computer_supports_logarchives = Gem::Version.new(os_version) >= Gem::Version.new('10.12.0')
  device_supports_logarchives = Gem::Version.new(device.os_version) >= Gem::Version.new('10.0')

  are_logarchives_supported = device_supports_logarchives && host_computer_supports_logarchives
  if are_logarchives_supported
    copy_logarchive(device, log_identity, logs_destination_dir, log_collection_start_time)
  else
    copy_logfile(device, log_identity, logs_destination_dir)
  end
end
delete_all() click to toggle source

Delete all simulators of this type

# File fastlane_core/lib/fastlane_core/device_manager.rb, line 274
def delete_all
  all.each(&:delete)
end
delete_all_by_version(os_version: nil) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 278
def delete_all_by_version(os_version: nil)
  return false unless os_version
  all.select { |device| device.os_version == os_version }.each(&:delete)
end
disable_slide_to_type(udid: nil, name: nil, os_version: nil) click to toggle source

Disable 'Slide to Type' by UDID or name and OS version Latter is useful when combined with -destination option of xcodebuild

# File fastlane_core/lib/fastlane_core/device_manager.rb, line 285
def disable_slide_to_type(udid: nil, name: nil, os_version: nil)
  match = all.detect { |device| device.udid == udid || device.name == name && device.os_version == os_version }
  match.disable_slide_to_type if match
end
launch(device) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 294
def launch(device)
  return unless device.is_simulator

  simulator_path = File.join(Helper.xcode_path, 'Applications', 'Simulator.app')

  UI.verbose("Launching #{simulator_path} for device: #{device.name} (#{device.udid})")

  Helper.backticks("open -a #{simulator_path} --args -CurrentDeviceUDID #{device.udid}", print: FastlaneCore::Globals.verbose?)
end
reset(udid: nil, name: nil, os_version: nil) click to toggle source

Reset simulator by UDID or name and OS version Latter is useful when combined with -destination option of xcodebuild

# File fastlane_core/lib/fastlane_core/device_manager.rb, line 268
def reset(udid: nil, name: nil, os_version: nil)
  match = all.detect { |device| device.udid == udid || device.name == name && device.os_version == os_version }
  match.reset if match
end
reset_all() click to toggle source

Reset all simulators of this type

# File fastlane_core/lib/fastlane_core/device_manager.rb, line 257
def reset_all
  all.each(&:reset)
end
reset_all_by_version(os_version: nil) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 261
def reset_all_by_version(os_version: nil)
  return false unless os_version
  all.select { |device| device.os_version == os_version }.each(&:reset)
end
uninstall_app(app_identifier, device_type, device_udid) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 319
def uninstall_app(app_identifier, device_type, device_udid)
  UI.verbose("Uninstalling app '#{app_identifier}' from #{device_type}...")

  UI.message("Launch Simulator #{device_type}")
  Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")

  UI.message("Uninstall application #{app_identifier}")
  Helper.backticks("xcrun simctl uninstall #{device_udid} #{app_identifier} &> /dev/null")
end

Private Class Methods

copy_logarchive(device, log_identity, logs_destination_dir, log_collection_start_time) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 343
def copy_logarchive(device, log_identity, logs_destination_dir, log_collection_start_time)
  require 'shellwords'

  logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive")
  FileUtils.rm_rf(logarchive_dst)
  FileUtils.mkdir_p(File.expand_path("..", logarchive_dst))

  logs_collection_start = log_collection_start_time.strftime('%Y-%m-%d %H:%M:%S')
  command = "xcrun simctl spawn #{device.udid} log collect "
  command << "--start '#{logs_collection_start}' "
  command << "--output #{logarchive_dst.shellescape} 2>/dev/null"
  FastlaneCore::CommandExecutor.execute(command: command, print_all: false, print_command: true)
end
copy_logfile(device, log_identity, logs_destination_dir) click to toggle source
# File fastlane_core/lib/fastlane_core/device_manager.rb, line 331
def copy_logfile(device, log_identity, logs_destination_dir)
  logfile_src = File.expand_path("~/Library/Logs/CoreSimulator/#{device.udid}/system.log")
  return unless File.exist?(logfile_src)

  FileUtils.mkdir_p(logs_destination_dir)
  logfile_dst = File.join(logs_destination_dir, "system-#{log_identity}.log")

  FileUtils.rm_f(logfile_dst)
  FileUtils.cp(logfile_src, logfile_dst)
  UI.success("Copying file '#{logfile_src}' to '#{logfile_dst}'...")
end