run_loop 1.5.4 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/run_loop.rb +1 -0
- data/lib/run_loop/cli/simctl.rb +1 -28
- data/lib/run_loop/core.rb +5 -2
- data/lib/run_loop/device.rb +6 -2
- data/lib/run_loop/instruments.rb +18 -4
- data/lib/run_loop/life_cycle/core_simulator.rb +12 -56
- data/lib/run_loop/life_cycle/simulator.rb +73 -0
- data/lib/run_loop/simctl/bridge.rb +1 -49
- data/lib/run_loop/version.rb +1 -1
- data/lib/run_loop/xcrun.rb +80 -14
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2423db81abf3240a09a78b36e626e7fe9805e1b5
|
4
|
+
data.tar.gz: 2c121c18d79c9faaab075f94dea364042aed23d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5be1f66ae222c299dd0bdd685c52c4860064fabe99f91610a166662a88adc5e52c7d61450a5abb96ecd2390fae7ee5116a31c7afc19a2592ca4cd804c7a0554c
|
7
|
+
data.tar.gz: 523a6ab61c1090605b802dd5701f280d5ab033343093b42684af40de6952b143a43e70508e1aafdf1d379831ef1f7b1a9e27ae38b77f35fd9190cda8525766ca
|
data/lib/run_loop.rb
CHANGED
@@ -24,6 +24,7 @@ require 'run_loop/cache/cache'
|
|
24
24
|
require 'run_loop/host_cache'
|
25
25
|
require 'run_loop/patches/awesome_print'
|
26
26
|
require 'run_loop/patches/retriable'
|
27
|
+
require 'run_loop/life_cycle/simulator'
|
27
28
|
require 'run_loop/life_cycle/core_simulator'
|
28
29
|
require 'run_loop/simctl/bridge'
|
29
30
|
require 'run_loop/simctl/plists'
|
data/lib/run_loop/cli/simctl.rb
CHANGED
@@ -109,7 +109,7 @@ module RunLoop
|
|
109
109
|
|
110
110
|
begin
|
111
111
|
RunLoop::SimControl.terminate_all_sims
|
112
|
-
terminate_core_simulator_processes
|
112
|
+
RunLoop::LifeCycle::Simulator.new.terminate_core_simulator_processes
|
113
113
|
ensure
|
114
114
|
ENV['DEBUG'] = original_value if debug
|
115
115
|
end
|
@@ -125,33 +125,6 @@ module RunLoop
|
|
125
125
|
device.state == 'Booted'
|
126
126
|
end
|
127
127
|
end
|
128
|
-
|
129
|
-
# TODO this is duplicated code; extract!
|
130
|
-
# https://github.com/calabash/run_loop/issues/225
|
131
|
-
def terminate_core_simulator_processes
|
132
|
-
to_manage = RunLoop::LifeCycle::CoreSimulator::MANAGED_PROCESSES
|
133
|
-
to_manage << ['com.apple.CoreSimulator.CoreSimulatorService', false]
|
134
|
-
|
135
|
-
to_manage.each do |pair|
|
136
|
-
name = pair[0]
|
137
|
-
send_term = pair[1]
|
138
|
-
pids = RunLoop::ProcessWaiter.new(name).pids
|
139
|
-
pids.each do |pid|
|
140
|
-
|
141
|
-
if send_term
|
142
|
-
term = RunLoop::ProcessTerminator.new(pid, 'TERM', name)
|
143
|
-
killed = term.kill_process
|
144
|
-
else
|
145
|
-
killed = false
|
146
|
-
end
|
147
|
-
|
148
|
-
unless killed
|
149
|
-
term = RunLoop::ProcessTerminator.new(pid, 'KILL', name)
|
150
|
-
term.kill_process
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
128
|
end
|
156
129
|
|
157
130
|
desc 'install --app [OPTIONS]', 'Installs an app on a device'
|
data/lib/run_loop/core.rb
CHANGED
@@ -443,8 +443,11 @@ Logfile: #{log_file}
|
|
443
443
|
xcode = sim_control.xcode
|
444
444
|
if xcode.version_gte_6?
|
445
445
|
simulator = sim_control.simulators.find do |sim|
|
446
|
-
|
447
|
-
sim.
|
446
|
+
[
|
447
|
+
sim.instruments_identifier(xcode) == value,
|
448
|
+
sim.udid == value,
|
449
|
+
sim.name == value
|
450
|
+
].any?
|
448
451
|
end
|
449
452
|
!simulator.nil?
|
450
453
|
else
|
data/lib/run_loop/device.rb
CHANGED
@@ -282,23 +282,27 @@ Please update your sources to pass an instance of RunLoop::Xcode))
|
|
282
282
|
#
|
283
283
|
# 1. The SHA sum of the simulator data/ directory to be stable.
|
284
284
|
# 2. No more log messages are begin generated
|
285
|
-
# 3. 1 and 2 must hold for
|
285
|
+
# 3. 1 and 2 must hold for 1 seconds.
|
286
286
|
#
|
287
287
|
# When the simulator version is >= iOS 9 _and_ it is the first launch of
|
288
288
|
# the simulator after a reset or a new simulator install, a fourth condition
|
289
289
|
# is added:
|
290
290
|
#
|
291
291
|
# 4. The first three conditions must be met a second time.
|
292
|
+
#
|
293
|
+
# and the quiet time is increased to 2.0.
|
292
294
|
def simulator_wait_for_stable_state
|
293
295
|
require 'securerandom'
|
294
296
|
|
295
|
-
quiet_time = 2
|
296
297
|
delay = 0.5
|
297
298
|
|
298
299
|
first_launch = false
|
299
300
|
|
300
301
|
if version >= RunLoop::Version.new('9.0')
|
301
302
|
first_launch = simulator_data_dir_size < 20
|
303
|
+
quiet_time = 2
|
304
|
+
else
|
305
|
+
quiet_time = 1
|
302
306
|
end
|
303
307
|
|
304
308
|
now = Time.now
|
data/lib/run_loop/instruments.rb
CHANGED
@@ -9,6 +9,10 @@ module RunLoop
|
|
9
9
|
|
10
10
|
attr_reader :xcode
|
11
11
|
|
12
|
+
def pbuddy
|
13
|
+
@pbuddy ||= RunLoop::PlistBuddy.new
|
14
|
+
end
|
15
|
+
|
12
16
|
def xcode
|
13
17
|
@xcode ||= RunLoop::Xcode.new
|
14
18
|
end
|
@@ -110,10 +114,9 @@ Please update your sources to pass an instance of RunLoop::Xcode))
|
|
110
114
|
# @return [RunLoop::Version] A version object.
|
111
115
|
def version
|
112
116
|
@instruments_version ||= lambda do
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
RunLoop::Version.new(version_str)
|
117
|
+
version_string = pbuddy.plist_read('CFBundleShortVersionString',
|
118
|
+
path_to_instruments_app_plist)
|
119
|
+
RunLoop::Version.new(version_string)
|
117
120
|
end.call
|
118
121
|
end
|
119
122
|
|
@@ -398,5 +401,16 @@ Please update your sources to pass an instance of RunLoop::Xcode))
|
|
398
401
|
def line_is_simulator_paired_with_watch?(line)
|
399
402
|
line[CORE_SIMULATOR_UDID_REGEX, 0] && line[/Apple Watch/, 0]
|
400
403
|
end
|
404
|
+
|
405
|
+
# @!visibility private
|
406
|
+
def path_to_instruments_app_plist
|
407
|
+
@path_to_instruments_app_plist ||=
|
408
|
+
File.expand_path(File.join(xcode.developer_dir,
|
409
|
+
'..',
|
410
|
+
'Applications',
|
411
|
+
'Instruments.app',
|
412
|
+
'Contents',
|
413
|
+
'Info.plist'))
|
414
|
+
end
|
401
415
|
end
|
402
416
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RunLoop
|
2
2
|
module LifeCycle
|
3
3
|
|
4
|
-
class CoreSimulator
|
4
|
+
class CoreSimulator < Simulator
|
5
5
|
|
6
6
|
require 'securerandom'
|
7
7
|
|
@@ -11,36 +11,6 @@ module RunLoop
|
|
11
11
|
# @!visibility private
|
12
12
|
CORE_SIMULATOR_DEVICE_DIR = File.expand_path('~/Library/Developer/CoreSimulator/Devices')
|
13
13
|
|
14
|
-
# @!visibility private
|
15
|
-
# Pattern.
|
16
|
-
# [ '< process name >', < send term first > ]
|
17
|
-
MANAGED_PROCESSES =
|
18
|
-
[
|
19
|
-
# This process is a daemon, and requires 'KILL' to terminate.
|
20
|
-
# Killing the process is fast, but it takes a long time to
|
21
|
-
# restart.
|
22
|
-
# ['com.apple.CoreSimulator.CoreSimulatorService', false],
|
23
|
-
|
24
|
-
# Probably do not need to quit this, but it is tempting to do so.
|
25
|
-
#['com.apple.CoreSimulator.SimVerificationService', false],
|
26
|
-
|
27
|
-
# Started by Xamarin Studio, this is the parent process of the
|
28
|
-
# processes launched by Xamarin's interaction with
|
29
|
-
# CoreSimulatorBridge.
|
30
|
-
['csproxy', true],
|
31
|
-
|
32
|
-
# Yes.
|
33
|
-
['SimulatorBridge', true],
|
34
|
-
['configd_sim', true],
|
35
|
-
['launchd_sim', true],
|
36
|
-
|
37
|
-
# Does not always appear.
|
38
|
-
['CoreSimulatorBridge', true],
|
39
|
-
|
40
|
-
# Xcode 7
|
41
|
-
['ids_simd', true]
|
42
|
-
]
|
43
|
-
|
44
14
|
# @!visibility private
|
45
15
|
# How long to wait after the simulator has launched.
|
46
16
|
SIM_POST_LAUNCH_WAIT = RunLoop::Environment.sim_post_launch_wait || 1.0
|
@@ -409,29 +379,6 @@ module RunLoop
|
|
409
379
|
end
|
410
380
|
end
|
411
381
|
|
412
|
-
# @!visibility private
|
413
|
-
def terminate_core_simulator_processes
|
414
|
-
MANAGED_PROCESSES.each do |pair|
|
415
|
-
name = pair[0]
|
416
|
-
send_term = pair[1]
|
417
|
-
pids = RunLoop::ProcessWaiter.new(name).pids
|
418
|
-
pids.each do |pid|
|
419
|
-
|
420
|
-
if send_term
|
421
|
-
term = RunLoop::ProcessTerminator.new(pid, 'TERM', name)
|
422
|
-
killed = term.kill_process
|
423
|
-
else
|
424
|
-
killed = false
|
425
|
-
end
|
426
|
-
|
427
|
-
unless killed
|
428
|
-
term = RunLoop::ProcessTerminator.new(pid, 'KILL', name)
|
429
|
-
term.kill_process
|
430
|
-
end
|
431
|
-
end
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
382
|
# @!visibility private
|
436
383
|
def wait_for_device_state(target_state)
|
437
384
|
now = Time.now
|
@@ -537,9 +484,13 @@ module RunLoop
|
|
537
484
|
# For testing.
|
538
485
|
def launch
|
539
486
|
|
540
|
-
install
|
541
487
|
launch_simulator
|
542
488
|
|
489
|
+
args = ['simctl', 'install', device.udid, app.path]
|
490
|
+
RunLoop::Xcrun.new.exec(args, log_cmd: true, timeout: 10)
|
491
|
+
|
492
|
+
device.simulator_wait_for_stable_state
|
493
|
+
|
543
494
|
args = ['simctl', 'launch', device.udid, app.bundle_identifier]
|
544
495
|
hash = RunLoop::Xcrun.new.exec(args, log_cmd: true, timeout: 20)
|
545
496
|
|
@@ -551,7 +502,12 @@ module RunLoop
|
|
551
502
|
raise RuntimeError, "Could not launch #{app.bundle_identifier} on #{device}"
|
552
503
|
end
|
553
504
|
|
554
|
-
RunLoop::ProcessWaiter.new(app.executable_name,
|
505
|
+
RunLoop::ProcessWaiter.new(app.executable_name, {:timeout => 10,
|
506
|
+
:raise_on_timeout => true}).wait_for_any
|
507
|
+
|
508
|
+
|
509
|
+
device.simulator_wait_for_stable_state
|
510
|
+
|
555
511
|
true
|
556
512
|
end
|
557
513
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module RunLoop
|
2
|
+
|
3
|
+
# @!visibility private
|
4
|
+
module LifeCycle
|
5
|
+
|
6
|
+
# @!visibility private
|
7
|
+
#
|
8
|
+
# Defines a Life Cycle interface for Simulators.
|
9
|
+
class Simulator
|
10
|
+
|
11
|
+
# @!visibility private
|
12
|
+
# Pattern.
|
13
|
+
# [ '< process name >', < send term first > ]
|
14
|
+
MANAGED_PROCESSES =
|
15
|
+
[
|
16
|
+
# This process is a daemon, and requires 'KILL' to terminate.
|
17
|
+
# Killing the process is fast, but it takes a long time to
|
18
|
+
# restart.
|
19
|
+
# ['com.apple.CoreSimulator.CoreSimulatorService', false],
|
20
|
+
|
21
|
+
# Probably do not need to quit this, but it is tempting to do so.
|
22
|
+
#['com.apple.CoreSimulator.SimVerificationService', false],
|
23
|
+
|
24
|
+
# Started by Xamarin Studio, this is the parent process of the
|
25
|
+
# processes launched by Xamarin's interaction with
|
26
|
+
# CoreSimulatorBridge.
|
27
|
+
['csproxy', true],
|
28
|
+
|
29
|
+
# Yes.
|
30
|
+
['SimulatorBridge', true],
|
31
|
+
['configd_sim', true],
|
32
|
+
['launchd_sim', true],
|
33
|
+
|
34
|
+
# Does not always appear.
|
35
|
+
['CoreSimulatorBridge', true],
|
36
|
+
|
37
|
+
# assetsd instances clobber each other and are not properly
|
38
|
+
# killed when quiting the simulator.
|
39
|
+
['assetsd', true],
|
40
|
+
|
41
|
+
# iproxy is started by UITest. It is not necessary to send
|
42
|
+
# TERM first.
|
43
|
+
['iproxy', false],
|
44
|
+
|
45
|
+
# Xcode 7
|
46
|
+
['ids_simd', true]
|
47
|
+
]
|
48
|
+
|
49
|
+
# @!visibility private
|
50
|
+
def terminate_core_simulator_processes
|
51
|
+
MANAGED_PROCESSES.each do |pair|
|
52
|
+
name = pair[0]
|
53
|
+
send_term = pair[1]
|
54
|
+
pids = RunLoop::ProcessWaiter.new(name).pids
|
55
|
+
pids.each do |pid|
|
56
|
+
|
57
|
+
if send_term
|
58
|
+
term = RunLoop::ProcessTerminator.new(pid, 'TERM', name)
|
59
|
+
killed = term.kill_process
|
60
|
+
else
|
61
|
+
killed = false
|
62
|
+
end
|
63
|
+
|
64
|
+
unless killed
|
65
|
+
term = RunLoop::ProcessTerminator.new(pid, 'KILL', name)
|
66
|
+
term.kill_process
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -15,7 +15,7 @@ module RunLoop::Simctl
|
|
15
15
|
# TODO Reinstall if checksum does not match.
|
16
16
|
# TODO Analyze terminate_core_simulator_processes.
|
17
17
|
# TODO Figure out when CoreSimulator appears and does not appear.
|
18
|
-
class Bridge
|
18
|
+
class Bridge < RunLoop::LifeCycle::CoreSimulator
|
19
19
|
|
20
20
|
attr_reader :device
|
21
21
|
attr_reader :app
|
@@ -186,54 +186,6 @@ module RunLoop::Simctl
|
|
186
186
|
@device.state
|
187
187
|
end
|
188
188
|
|
189
|
-
def terminate_core_simulator_processes
|
190
|
-
[
|
191
|
-
# Pattern.
|
192
|
-
# [ '< process name >', < send term first > ]
|
193
|
-
|
194
|
-
# No. This process is a daemon, and requires 'KILL' to terminate.
|
195
|
-
# Killing the process is fast, but it takes a long time to restart.
|
196
|
-
# ['com.apple.CoreSimulator.CoreSimulatorService', false],
|
197
|
-
|
198
|
-
# Probably do not need to quit this, but it is tempting to do so.
|
199
|
-
#['com.apple.CoreSimulator.SimVerificationService', false],
|
200
|
-
|
201
|
-
# Started by Xamarin Studio, this is the parent process of the
|
202
|
-
# processes launched by Xamarin's interaction with
|
203
|
-
# CoreSimulatorBridge
|
204
|
-
['csproxy', true],
|
205
|
-
|
206
|
-
# Yes.
|
207
|
-
['SimulatorBridge', true],
|
208
|
-
['configd_sim', true],
|
209
|
-
['launchd_sim', true],
|
210
|
-
|
211
|
-
# Yes, but does not always appear.
|
212
|
-
['CoreSimulatorBridge', true],
|
213
|
-
|
214
|
-
# Xcode 7
|
215
|
-
['ids_simd', true],
|
216
|
-
].each do |pair|
|
217
|
-
name = pair[0]
|
218
|
-
send_term = pair[1]
|
219
|
-
pids = RunLoop::ProcessWaiter.new(name).pids
|
220
|
-
pids.each do |pid|
|
221
|
-
|
222
|
-
if send_term
|
223
|
-
term = RunLoop::ProcessTerminator.new(pid, 'TERM', name)
|
224
|
-
killed = term.kill_process
|
225
|
-
else
|
226
|
-
killed = false
|
227
|
-
end
|
228
|
-
|
229
|
-
unless killed
|
230
|
-
term = RunLoop::ProcessTerminator.new(pid, 'KILL', name)
|
231
|
-
term.kill_process
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
189
|
def wait_for_device_state(target_state)
|
238
190
|
return true if update_device_state == target_state
|
239
191
|
|
data/lib/run_loop/version.rb
CHANGED
data/lib/run_loop/xcrun.rb
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
module RunLoop
|
2
2
|
class Xcrun
|
3
3
|
|
4
|
+
require 'command_runner' if RUBY_VERSION >= '2.0'
|
5
|
+
|
4
6
|
DEFAULT_OPTIONS =
|
5
7
|
{
|
6
|
-
:timeout =>
|
8
|
+
:timeout => 30,
|
7
9
|
:log_cmd => false
|
8
10
|
}
|
9
11
|
|
10
|
-
DEFAULT_TIMEOUT = 10
|
11
|
-
|
12
12
|
# Raised when Xcrun fails.
|
13
|
-
class
|
13
|
+
class Error < RuntimeError; end
|
14
14
|
|
15
|
-
|
15
|
+
|
16
|
+
# Raised when Xcrun times out.
|
17
|
+
class TimeoutError < RuntimeError; end
|
16
18
|
|
17
19
|
def exec(args, options={})
|
20
|
+
|
18
21
|
merged_options = DEFAULT_OPTIONS.merge(options)
|
19
22
|
|
20
23
|
timeout = merged_options[:timeout]
|
@@ -24,7 +27,13 @@ module RunLoop
|
|
24
27
|
"Expected args '#{args}' to be an Array, but found '#{args.class}'"
|
25
28
|
end
|
26
29
|
|
27
|
-
|
30
|
+
args.each do |arg|
|
31
|
+
unless arg.is_a?(String)
|
32
|
+
raise ArgumentError,
|
33
|
+
%Q{Expected arg '#{arg}' to be a String, but found '#{arg.class}'
|
34
|
+
IO.popen requires all arguments to be Strings.}
|
35
|
+
end
|
36
|
+
end
|
28
37
|
|
29
38
|
cmd = "xcrun #{args.join(' ')}"
|
30
39
|
|
@@ -32,8 +41,61 @@ module RunLoop
|
|
32
41
|
# Commands are only logged when debugging.
|
33
42
|
RunLoop.log_unix_cmd(cmd) if merged_options[:log_cmd]
|
34
43
|
|
44
|
+
# Ruby < 2.0 support
|
45
|
+
return exec_ruby19(args, merged_options) if RUBY_VERSION < '2.0'
|
46
|
+
|
47
|
+
hash = {}
|
48
|
+
|
49
|
+
begin
|
50
|
+
|
51
|
+
start_time = Time.now
|
52
|
+
command_output = CommandRunner.run(['xcrun'] + args, timeout: timeout)
|
53
|
+
|
54
|
+
if command_output[:out]
|
55
|
+
out = command_output[:out].force_encoding('utf-8').chomp
|
56
|
+
else
|
57
|
+
out = ''
|
58
|
+
end
|
59
|
+
|
60
|
+
process_status = command_output[:status]
|
61
|
+
|
62
|
+
hash =
|
63
|
+
{
|
64
|
+
:out => out,
|
65
|
+
:pid => process_status.pid,
|
66
|
+
# nil if process was killed before completion
|
67
|
+
:exit_status => process_status.exitstatus
|
68
|
+
}
|
69
|
+
|
70
|
+
rescue => e
|
71
|
+
elapsed = "%0.2f" % (Time.now - start_time)
|
72
|
+
raise Error, "Xcrun encountered an error after #{elapsed} seconds: #{e}"
|
73
|
+
end
|
74
|
+
|
75
|
+
if hash[:exit_status].nil?
|
76
|
+
elapsed = "%0.2f" % (Time.now - start_time)
|
77
|
+
raise TimeoutError,
|
78
|
+
"Xcrun timed out after #{elapsed} seconds executing '#{cmd}' with a timeout of #{timeout}"
|
79
|
+
end
|
80
|
+
|
81
|
+
hash
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
attr_reader :stdin, :stdout, :stderr, :pid
|
87
|
+
|
88
|
+
def exec_ruby19(args, options)
|
89
|
+
|
90
|
+
timeout = options[:timeout]
|
91
|
+
|
92
|
+
cmd = "xcrun #{args.join(' ')}"
|
93
|
+
|
94
|
+
err, out, pid, exit_status, process_status = nil
|
95
|
+
|
96
|
+
hash = nil
|
35
97
|
begin
|
36
|
-
Timeout.timeout(timeout,
|
98
|
+
Timeout.timeout(timeout, Timeout::Error) do
|
37
99
|
@stdin, @stdout, @stderr, process_status = Open3.popen3('xcrun', *args)
|
38
100
|
|
39
101
|
@pid = process_status.pid
|
@@ -45,14 +107,17 @@ module RunLoop
|
|
45
107
|
out = @stdout.read.force_encoding('utf-8').chomp
|
46
108
|
end
|
47
109
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
110
|
+
hash =
|
111
|
+
{
|
112
|
+
:err => err,
|
113
|
+
:out => out,
|
114
|
+
:pid => pid,
|
115
|
+
:exit_status => exit_status
|
116
|
+
}
|
117
|
+
rescue Timeout::Error => _
|
118
|
+
raise TimeoutError, "Xcrun.exec timed out after #{timeout} running '#{cmd}'"
|
54
119
|
rescue StandardError => e
|
55
|
-
raise
|
120
|
+
raise Error, e
|
56
121
|
ensure
|
57
122
|
stdin.close if stdin && !stdin.closed?
|
58
123
|
stdout.close if stdout && !stdout.closed?
|
@@ -70,6 +135,7 @@ module RunLoop
|
|
70
135
|
process_status.join
|
71
136
|
end
|
72
137
|
end
|
138
|
+
hash
|
73
139
|
end
|
74
140
|
end
|
75
141
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: run_loop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Krukow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -92,6 +92,20 @@ dependencies:
|
|
92
92
|
- - "<"
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '1.0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: command_runner_ng
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.0.2
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 0.0.2
|
95
109
|
- !ruby/object:Gem::Dependency
|
96
110
|
name: luffa
|
97
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -286,6 +300,7 @@ files:
|
|
286
300
|
- lib/run_loop/ipa.rb
|
287
301
|
- lib/run_loop/l10n.rb
|
288
302
|
- lib/run_loop/life_cycle/core_simulator.rb
|
303
|
+
- lib/run_loop/life_cycle/simulator.rb
|
289
304
|
- lib/run_loop/lipo.rb
|
290
305
|
- lib/run_loop/lldb.rb
|
291
306
|
- lib/run_loop/logging.rb
|
@@ -341,3 +356,4 @@ specification_version: 4
|
|
341
356
|
summary: The bridge between Calabash iOS and Xcode command-line tools like instruments
|
342
357
|
and simctl.
|
343
358
|
test_files: []
|
359
|
+
has_rdoc:
|