class RunLoop::DeviceAgent::Xcodebuild
@!visibility private
Public Class Methods
derived_data_directory()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 18 def self.derived_data_directory path = File.join(Xcodebuild.dot_dir, "DerivedData") FileUtils.mkdir_p(path) if !File.exist?(path) path end
log_file()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 11 def self.log_file path = File.join(Xcodebuild.dot_dir, "xcodebuild.log") FileUtils.touch(path) if !File.exist?(path) path end
process_env(pid)
click to toggle source
@visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 176 def self.process_env(pid) options = {:log_cmd => true} args = ["ps", "-p", pid.to_s, "-wwwE"] hash = RunLoop::Shell.run_shell_command(args, options) hash[:out] end
terminate_device_test(udid)
click to toggle source
@visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 130 def self.terminate_device_test(udid) should_term_test = lambda do |process_description| process_description[/id=#{udid}/] end self.terminate_xcodebuild_test_processes(should_term_test) end
terminate_simulator_tests()
click to toggle source
@visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 121 def self.terminate_simulator_tests should_term_test = lambda do |process_description| xcodebuild_destination_is_simulator?(process_description) end self.terminate_xcodebuild_test_processes(should_term_test) end
terminate_xcodebuild_test_process(pid)
click to toggle source
@visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 150 def self.terminate_xcodebuild_test_process(pid) term_options = { :timeout => 1.5 } kill_options = { :timeout => 1.0 } process_name = "xcodebuild test-without-building" term = RunLoop::ProcessTerminator.new(pid.to_i, "TERM", process_name, term_options) if !term.kill_process kill = RunLoop::ProcessTerminator.new(pid.to_i, "KILL", process_name, kill_options) kill.kill_process end sleep(1.0) end
terminate_xcodebuild_test_processes(should_term_test)
click to toggle source
@visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 138 def self.terminate_xcodebuild_test_processes(should_term_test) options = { :timeout => 0.5, :raise_on_timeout => false } pids = RunLoop::ProcessWaiter.new("xcodebuild", options).pids pids.each do |pid| if should_term_test.call(process_env(pid)) RunLoop.log_debug("Will terminate xcodebuild process: #{pid}") terminate_xcodebuild_test_process(pid) end end end
xcodebuild_destination_is_simulator?(process_description)
click to toggle source
@visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 171 def self.xcodebuild_destination_is_simulator?(process_description) process_description[/-destination id=#{RunLoop::Regex::CORE_SIMULATOR_UDID_REGEX}/] end
Public Instance Methods
default_workspace()
click to toggle source
# File lib/run_loop/device_agent/xcodebuild.rb, line 114 def default_workspace this_dir = File.expand_path(File.dirname(__FILE__)) relative = File.expand_path(File.join(this_dir, "..", "..", "..", "..")) File.join(relative, "DeviceAgent.iOS/DeviceAgent.xcworkspace") end
inspect()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 30 def inspect to_s end
launch(_)
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 40 def launch(_) workspace if device.simulator? # quits the simulator # sim = CoreSimulator.new(device, "") # sim.launch_simulator({:wait_for_stable => false}) end xcodebuild end
name()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 35 def name :xcodebuild end
to_s()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 25 def to_s "#<Xcodebuild #{workspace}>" end
workspace()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 53 def workspace @workspace ||= begin path = RunLoop::Environment.send(:cbxws) || default_workspace if File.exist?(path) path else raise(RuntimeError, %Q[ Cannot find the DeviceAgent.xcworkspace. Expected it here: #{path} Use the CBXWS environment variable to override the default. ]) end end end
xcodebuild()
click to toggle source
@!visibility private
# File lib/run_loop/device_agent/xcodebuild.rb, line 76 def xcodebuild env = { "COMMAND_LINE_BUILD" => "1", "CLOBBER" => "1" } args = [ "xcrun", "xcodebuild", "-derivedDataPath", Xcodebuild.derived_data_directory, "-scheme", "AppStub", "-workspace", workspace, "-config", "Debug", "-destination", "id=#{device.udid}", "test" ] log_file = Xcodebuild.log_file options = { :out => log_file, :err => log_file } command = "#{env.map.each { |k, v| "#{k}=#{v}" }.join(" ")} #{args.join(" ")}" RunLoop.log_unix_cmd("#{command} >& #{log_file}") pid = Process.spawn(env, *args, options) Process.detach(pid) sleep_for = 15 RunLoop.log_debug("Waiting #{sleep_for} seconds for DeviceAgent to build...") sleep(sleep_for) pid.to_i end