class Snapshot::TestCommandGeneratorXcode8

Responsible for building the fully working xcodebuild command This TestCommandGenerator supports Xcode 8's `xcodebuild` requirements It is its own object, as the logic differs for how we want to handle creating `xcodebuild` commands for Xcode 9 (see test_command_generator.rb)

Public Class Methods

destination(device_name) click to toggle source
# File snapshot/lib/snapshot/test_command_generator_xcode_8.rb, line 33
def destination(device_name)
  # on Mac we will always run on host machine, so should specify only platform
  return ["-destination 'platform=macOS'"] if device_name =~ /^Mac/

  # if device_name is nil, use the config and get all devices
  os = device_name =~ /^Apple TV/ ? "tvOS" : "iOS"
  os_version = Snapshot.config[:ios_version] || Snapshot::LatestOsVersion.version(os)

  device = find_device(device_name, os_version)
  if device.nil?
    UI.user_error!("No device found named '#{device_name}' for version '#{os_version}'")
  elsif device.os_version != os_version
    UI.important("Using device named '#{device_name}' with version '#{device.os_version}' because no match was found for version '#{os_version}'")
  end
  value = "platform=#{os} Simulator,id=#{device.udid},OS=#{device.os_version}"

  return ["-destination '#{value}'"]
end
generate(device_type: nil, language: nil, locale: nil) click to toggle source
# File snapshot/lib/snapshot/test_command_generator_xcode_8.rb, line 12
def generate(device_type: nil, language: nil, locale: nil)
  parts = prefix
  parts << "xcodebuild"
  parts += options(language, locale)
  parts += destination(device_type)
  parts += build_settings(language, locale)
  parts += actions
  parts += suffix
  parts += pipe(device_type, language, locale)

  return parts
end
pipe(device_type, language, locale) click to toggle source
# File snapshot/lib/snapshot/test_command_generator_xcode_8.rb, line 25
def pipe(device_type, language, locale)
  log_path = xcodebuild_log_path(device_type: device_type, language: language, locale: locale)
  pipe = ["| tee #{log_path.shellescape}"]
  pipe << "| xcpretty #{Snapshot.config[:xcpretty_args]}"
  pipe << "> /dev/null" if Snapshot.config[:suppress_xcode_output]
  return pipe
end
xcodebuild_log_path(device_type: nil, language: nil, locale: nil) click to toggle source
# File snapshot/lib/snapshot/test_command_generator_xcode_8.rb, line 52
def xcodebuild_log_path(device_type: nil, language: nil, locale: nil)
  name_components = [Snapshot.project.app_name, Snapshot.config[:scheme]]

  if Snapshot.config[:namespace_log_files]
    name_components << device_type if device_type
    name_components << language if language
    name_components << locale if locale
  end

  file_name = "#{name_components.join('-')}.log"

  containing = File.expand_path(Snapshot.config[:buildlog_path])
  FileUtils.mkdir_p(containing)

  return File.join(containing, file_name)
end