Class: Scan::DetectValues

Inherits:
Object
  • Object
show all
Defined in:
lib/scan/detect_values.rb

Overview

This class detects all kinds of default values

Class Method Summary collapse

Class Method Details

.default_device_iosObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/scan/detect_values.rb', line 39

def self.default_device_ios
  config = Scan.config

  if config[:device] # make sure it actually exists
    device = config[:device].to_s.strip.tr('()', '') # Remove parenthesis

    found = FastlaneCore::Simulator.all.find do |d|
      (d.name + " " + d.ios_version).include? device
    end

    if found
      Scan.device = found
      return
    else
      UI.error("Couldn't find simulator '#{config[:device]}' - falling back to default simulator")
    end
  end

  sims = FastlaneCore::Simulator.all
  xcode_target = Scan.project.build_settings(key: "IPHONEOS_DEPLOYMENT_TARGET")
  sims = filter_simulators(sims, xcode_target)

  # An iPhone 5s is reasonable small and useful for tests
  found = sims.detect { |d| d.name == "iPhone 5s" }
  found ||= sims.first # anything is better than nothing

  Scan.device = found

  UI.user_error!("No simulators found") unless Scan.device
end

.default_device_tvosObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/scan/detect_values.rb', line 70

def self.default_device_tvos
  config = Scan.config

  if config[:device] # make sure it actually exists
    device = config[:device].to_s.strip.tr('()', '') # Remove parenthesis

    found = FastlaneCore::SimulatorTV.all.find do |d|
      (d.name + " " + d.tvos_version).include? device
    end

    if found
      Scan.device = found
      return
    else
      UI.error("Couldn't find simulator '#{config[:device]}' - falling back to default simulator")
    end
  end

  sims = FastlaneCore::SimulatorTV.all
  xcode_target = Scan.project.build_settings(key: "TVOS_DEPLOYMENT_TARGET")
  sims = filter_simulators(sims, xcode_target)

  # Apple TV 1080p is useful for tests
  found = sims.detect { |d| d.name == "Apple TV 1080p" }
  found ||= sims.first # anything is better than nothing

  Scan.device = found

  UI.user_error!("No simulators found") unless Scan.device
end

.detect_destinationObject

Is it an iOS device or a Mac?



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/scan/detect_values.rb', line 102

def self.detect_destination
  if Scan.config[:destination]
    UI.important("It's not recommended to set the `destination` value directly")
    UI.important("Instead use the other options available in `scan --help`")
    UI.important("Using your value '#{Scan.config[:destination]}' for now")
    UI.important("because I trust you know what you're doing...")
    return
  end

  # building up the destination now
  if Scan.project.ios?
    Scan.config[:destination] = "platform=iOS Simulator,id=#{Scan.device.udid}"
  elsif Scan.project.tvos?
    Scan.config[:destination] = "platform=tvOS Simulator,id=#{Scan.device.udid}"
  else
    Scan.config[:destination] = "platform=OS X"
  end
end

.filter_simulators(simulators, deployment_target) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/scan/detect_values.rb', line 30

def self.filter_simulators(simulators, deployment_target)
  # Filter out any simulators that are not the same major and minor version of our deployment target
  deployment_target_version = Gem::Version.new(deployment_target)
  simulators.select do |s|
    sim_version = Gem::Version.new(s.ios_version)
    (sim_version >= deployment_target_version)
  end
end

.set_additional_default_valuesObject

This is needed as these are more complex default values Returns the finished config object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/scan/detect_values.rb', line 6

def self.set_additional_default_values
  config = Scan.config

  # First, try loading the Scanfile from the current directory
  config.load_configuration_file(Scan.scanfile_name)

  # Detect the project
  FastlaneCore::Project.detect_projects(config)
  Scan.project = FastlaneCore::Project.new(config)

  # Go into the project's folder, as there might be a Snapfile there
  Dir.chdir(File.expand_path("..", Scan.project.path)) do
    config.load_configuration_file(Scan.scanfile_name)
  end

  Scan.project.select_scheme

  default_device_ios if Scan.project.ios?
  default_device_tvos if Scan.project.tvos?
  detect_destination

  return config
end