class Snapshot::TestCommandGenerator
Responsible for building the fully working xcodebuild command
Public Class Methods
actions()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 49 def actions actions = [] actions << :clean if Snapshot.config[:clean] actions << :build # https://github.com/fastlane/snapshot/issues/246 actions << :test actions end
build_settings()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 42 def build_settings build_settings = [] build_settings << "FASTLANE_SNAPSHOT=YES" build_settings end
derived_data_path()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 113 def derived_data_path Snapshot.cache[:derived_data_path] ||= (Snapshot.config[:derived_data_path] || Dir.mktmpdir("snapshot_derived")) end
destination(device_name)
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 89 def destination(device_name) 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}'") return 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=#{os_version}" return ["-destination '#{value}'"] end
device_udid(device_name, os_version = Snapshot.config[:ios_version])
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 83 def device_udid(device_name, os_version = Snapshot.config[:ios_version]) device = find_device(device_name, os_version) device ? device.udid : nil end
find_device(device_name, os_version = Snapshot.config[:ios_version])
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 66 def find_device(device_name, os_version = Snapshot.config[:ios_version]) # We might get this error message # > The requested device could not be found because multiple devices matched the request. # # This happens when you have multiple simulators for a given device type / iOS combination # { platform:iOS Simulator, id:1685B071-AFB2-4DC1-BE29-8370BA4A6EBD, OS:9.0, name:iPhone 5 } # { platform:iOS Simulator, id:A141F23B-96B3-491A-8949-813B376C28A7, OS:9.0, name:iPhone 5 } # simulators = FastlaneCore::DeviceManager.simulators # Sort devices with matching names by OS version, largest first, so that we can # pick the device with the newest OS in case an exact OS match is not available name_matches = simulators.find_all { |sim| sim.name.strip == device_name.strip } .sort_by { |sim| Gem::Version.new(sim.os_version) } .reverse name_matches.find { |sim| sim.os_version == os_version } || name_matches.first end
generate(device_type: nil)
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 5 def generate(device_type: nil) parts = prefix parts << "xcodebuild" parts += options parts += destination(device_type) parts += build_settings parts += actions parts += suffix parts += pipe parts end
options()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 31 def options config = Snapshot.config options = [] options += project_path_array options << "-sdk '#{config[:sdk]}'" if config[:sdk] options << "-derivedDataPath '#{derived_data_path}'" options end
pipe()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 62 def pipe ["| tee #{xcodebuild_log_path.shellescape} | xcpretty #{Snapshot.config[:xcpretty_args]}"] end
prefix()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 18 def prefix ["set -o pipefail &&"] end
project_path_array()
click to toggle source
Path to the project or workspace as parameter This will also include the scheme (if given) @return [Array] The array with all the components to join
# File lib/snapshot/test_command_generator.rb, line 25 def project_path_array proj = Snapshot.project.xcodebuild_parameters return proj if proj.count > 0 UI.user_error!("No project/workspace found") end
suffix()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 58 def suffix [] end
xcodebuild_log_path()
click to toggle source
# File lib/snapshot/test_command_generator.rb, line 105 def xcodebuild_log_path file_name = "#{Snapshot.project.app_name}-#{Snapshot.config[:scheme]}.log" containing = File.expand_path(Snapshot.config[:buildlog_path]) FileUtils.mkdir_p(containing) return File.join(containing, file_name) end