run_loop 1.5.5 → 1.5.6.pre1
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/cli/simctl.rb +37 -82
- data/lib/run_loop/core.rb +20 -17
- data/lib/run_loop/core_simulator.rb +648 -0
- data/lib/run_loop/device.rb +8 -8
- data/lib/run_loop/directory.rb +104 -17
- data/lib/run_loop/dot_dir.rb +83 -0
- data/lib/run_loop/environment.rb +27 -8
- data/lib/run_loop/instruments.rb +89 -1
- data/lib/run_loop/logging.rb +11 -0
- data/lib/run_loop/process_terminator.rb +5 -17
- data/lib/run_loop/sim_control.rb +114 -77
- data/lib/run_loop/version.rb +15 -3
- data/lib/run_loop.rb +9 -10
- metadata +6 -7
- data/lib/run_loop/life_cycle/core_simulator.rb +0 -515
- data/lib/run_loop/life_cycle/simulator.rb +0 -73
- data/lib/run_loop/simctl/bridge.rb +0 -499
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47569b6d831b193444445ef4c1df372e89c51ddb
|
4
|
+
data.tar.gz: 5bfa5312c3d512c6175a53dba49cd3ade7759b4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f03b8e29911c15d68e10a2f63a422ff475193e316d28c33cd8cea9de705cf338440126674cd5c81151b9e88868ed3c3583f94fd56d3351cc0521283a743bde97
|
7
|
+
data.tar.gz: 2affeeb8e17db2f0d7e21b6dcb34098ec0d6d445732aae798ddadd4d36b1d5d4f7ada9c57f9ca7ee7ec29006870b738c6865c5dc15f7d27fa1f939e61918993f
|
data/lib/run_loop/cli/simctl.rb
CHANGED
@@ -57,23 +57,14 @@ module RunLoop
|
|
57
57
|
device = options[:device]
|
58
58
|
|
59
59
|
if device
|
60
|
-
|
61
|
-
if debug
|
62
|
-
RunLoop::Environment.with_debugging do
|
63
|
-
launch_simulator(device)
|
64
|
-
end
|
65
|
-
else
|
60
|
+
RunLoop::Environment.with_debugging(debug) do
|
66
61
|
launch_simulator(device)
|
67
62
|
end
|
68
63
|
else
|
69
|
-
|
70
|
-
RunLoop::Environment.with_debugging do
|
71
|
-
launch_each_simulator
|
72
|
-
end
|
73
|
-
else
|
74
|
-
launch_each_simulator
|
75
|
-
end
|
64
|
+
launch_each_simulator
|
76
65
|
end
|
66
|
+
|
67
|
+
manage_processes
|
77
68
|
end
|
78
69
|
|
79
70
|
no_commands do
|
@@ -120,6 +111,14 @@ module RunLoop
|
|
120
111
|
@sim_control ||= RunLoop::SimControl.new
|
121
112
|
end
|
122
113
|
|
114
|
+
def xcode
|
115
|
+
@xcode ||= RunLoop::Xcode.new
|
116
|
+
end
|
117
|
+
|
118
|
+
def xcrun
|
119
|
+
@xcrun ||= RunLoop::Xcrun.new
|
120
|
+
end
|
121
|
+
|
123
122
|
def booted_device
|
124
123
|
sim_control.simulators.detect(nil) do |device|
|
125
124
|
device.state == 'Booted'
|
@@ -127,7 +126,7 @@ module RunLoop
|
|
127
126
|
end
|
128
127
|
end
|
129
128
|
|
130
|
-
desc 'install --app [OPTIONS]', 'Installs an app on a device'
|
129
|
+
desc 'install --app [OPTIONS]', 'Installs an app on a device.'
|
131
130
|
|
132
131
|
method_option 'app',
|
133
132
|
:desc => 'Path to a .app bundle to launch on simulator.',
|
@@ -141,16 +140,22 @@ module RunLoop
|
|
141
140
|
:required => false,
|
142
141
|
:type => :string
|
143
142
|
|
144
|
-
method_option '
|
145
|
-
:desc => '
|
146
|
-
:aliases => '-
|
143
|
+
method_option 'debug',
|
144
|
+
:desc => 'Enable debug logging.',
|
145
|
+
:aliases => '-v',
|
147
146
|
:required => false,
|
148
147
|
:default => false,
|
149
148
|
:type => :boolean
|
150
149
|
|
151
|
-
method_option '
|
152
|
-
:desc => '
|
153
|
-
:aliases => '-
|
150
|
+
method_option 'reset-app-sandbox',
|
151
|
+
:desc => 'If the app is already installed, erase the app data.',
|
152
|
+
:aliases => '-r',
|
153
|
+
:default => false,
|
154
|
+
:type => :boolean
|
155
|
+
|
156
|
+
method_option 'force',
|
157
|
+
:desc => 'Force a re-install the existing app. Deprecated 1.5.6.',
|
158
|
+
:aliases => '-f',
|
154
159
|
:required => false,
|
155
160
|
:default => false,
|
156
161
|
:type => :boolean
|
@@ -158,72 +163,22 @@ module RunLoop
|
|
158
163
|
def install
|
159
164
|
debug = options[:debug]
|
160
165
|
|
161
|
-
if debug
|
162
|
-
ENV['DEBUG'] = '1'
|
163
|
-
end
|
164
|
-
|
165
|
-
debug_logging = RunLoop::Environment.debug?
|
166
|
-
|
167
166
|
device = expect_device(options)
|
168
167
|
app = expect_app(options, device)
|
169
168
|
|
170
|
-
|
171
|
-
|
172
|
-
xcode = bridge.sim_control.xcode
|
173
|
-
if xcode.version >= RunLoop::Version.new('7.0')
|
174
|
-
puts "ERROR: Xcode #{xcode.version.to_s} detected."
|
175
|
-
puts "ERROR: Apple's simctl install/uninstall is broken for this version of Xcode."
|
176
|
-
puts "ERROR: See the following links for details:"
|
177
|
-
puts "ERROR: https://forums.developer.apple.com/message/51922"
|
178
|
-
puts "ERROR: https://github.com/calabash/run_loop/issues/235"
|
179
|
-
puts "ERROR: exiting 1"
|
180
|
-
exit 1
|
181
|
-
end
|
182
|
-
|
183
|
-
force_reinstall = options[:force]
|
169
|
+
core_sim = RunLoop::CoreSimulator.new(device, app)
|
184
170
|
|
185
|
-
|
171
|
+
RunLoop::Environment.with_debugging(debug) do
|
172
|
+
if options['reset-app-sandbox']
|
186
173
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
if force_reinstall
|
193
|
-
if debug_logging
|
194
|
-
puts 'Will force a re-install.'
|
195
|
-
end
|
196
|
-
bridge.uninstall
|
197
|
-
bridge.install
|
198
|
-
else
|
199
|
-
new_digest = RunLoop::Directory.directory_digest(app.path)
|
200
|
-
if debug_logging
|
201
|
-
puts " New app has SHA: '#{new_digest}'."
|
202
|
-
end
|
203
|
-
installed_app_bundle = bridge.fetch_app_dir
|
204
|
-
old_digest = RunLoop::Directory.directory_digest(installed_app_bundle)
|
205
|
-
if debug_logging
|
206
|
-
puts "Installed app has SHA: '#{old_digest}'."
|
207
|
-
end
|
208
|
-
if new_digest != old_digest
|
209
|
-
if debug_logging
|
210
|
-
puts "Will re-install '#{app.bundle_identifier}' because the SHAs don't match."
|
211
|
-
end
|
212
|
-
bridge.uninstall
|
213
|
-
bridge.install
|
174
|
+
if core_sim.app_is_installed?
|
175
|
+
RunLoop.log_debug('Resetting the app sandbox')
|
176
|
+
core_sim.uninstall_app_and_sandbox
|
214
177
|
else
|
215
|
-
|
216
|
-
puts "Will not re-install '#{app.bundle_identifier}' because the SHAs match."
|
217
|
-
end
|
178
|
+
RunLoop.log_debug('App is not installed; skipping sandbox reset')
|
218
179
|
end
|
219
180
|
end
|
220
|
-
|
221
|
-
bridge.install
|
222
|
-
end
|
223
|
-
|
224
|
-
if debug_logging
|
225
|
-
"Launching took #{Time.now-before} seconds"
|
226
|
-
puts "Installed '#{app.bundle_identifier}' on #{device} in #{Time.now-before} seconds."
|
181
|
+
core_sim.install
|
227
182
|
end
|
228
183
|
end
|
229
184
|
|
@@ -233,8 +188,8 @@ module RunLoop
|
|
233
188
|
simulators = sim_control.simulators
|
234
189
|
if device_from_options.nil?
|
235
190
|
default_name = RunLoop::Core.default_simulator
|
236
|
-
device = simulators.
|
237
|
-
sim.instruments_identifier == default_name
|
191
|
+
device = simulators.find do |sim|
|
192
|
+
sim.instruments_identifier(xcode) == default_name
|
238
193
|
end
|
239
194
|
|
240
195
|
if device.nil?
|
@@ -242,9 +197,9 @@ module RunLoop
|
|
242
197
|
"Could not find a simulator with name that matches '#{device_from_options}'"
|
243
198
|
end
|
244
199
|
else
|
245
|
-
device = simulators.
|
200
|
+
device = simulators.find do |sim|
|
246
201
|
sim.udid == device_from_options ||
|
247
|
-
sim.instruments_identifier == device_from_options
|
202
|
+
sim.instruments_identifier(xcode) == device_from_options
|
248
203
|
end
|
249
204
|
|
250
205
|
if device.nil?
|
data/lib/run_loop/core.rb
CHANGED
@@ -138,22 +138,16 @@ module RunLoop
|
|
138
138
|
#
|
139
139
|
# 1. enabling accessibility and software keyboard
|
140
140
|
# 2. installing / uninstalling apps
|
141
|
-
# 3. @todo resetting the app sandbox
|
142
|
-
#
|
143
|
-
# `Bridge#launch_simulator` launches the targeted iOS Simulator. The
|
144
|
-
# simulator itself has several async tasks that must be completed before
|
145
|
-
# we start interacting with it. If your simulator ends up in a bad state,
|
146
|
-
# you can increase the post-launch wait time by setting the
|
147
|
-
# `CAL_SIM_POST_LAUNCH_WAIT` environment variable. The default wait time
|
148
|
-
# is 1.0. This was arrived at through testing.
|
149
141
|
def self.prepare_simulator(launch_options, sim_control)
|
150
142
|
|
143
|
+
xcode = sim_control.xcode
|
144
|
+
|
151
145
|
# Respect option passed from Calabash
|
152
146
|
if launch_options[:relaunch_simulator]
|
153
147
|
sim_control.quit_sim
|
154
148
|
end
|
155
149
|
|
156
|
-
if !
|
150
|
+
if !xcode.version_gte_6?
|
157
151
|
# Xcode 5.1.1
|
158
152
|
|
159
153
|
# Will quit the simulator!
|
@@ -175,7 +169,6 @@ module RunLoop
|
|
175
169
|
end
|
176
170
|
|
177
171
|
udid = launch_options[:udid]
|
178
|
-
xcode = sim_control.xcode
|
179
172
|
|
180
173
|
device = sim_control.simulators.find do |sim|
|
181
174
|
sim.udid == udid || sim.instruments_identifier(xcode) == udid
|
@@ -189,9 +182,10 @@ module RunLoop
|
|
189
182
|
# Validate the architecture.
|
190
183
|
self.expect_simulator_compatible_arch(device, app, xcode)
|
191
184
|
|
192
|
-
|
185
|
+
# Quits the simulator.
|
186
|
+
core_sim = RunLoop::CoreSimulator.new(device, app)
|
193
187
|
|
194
|
-
|
188
|
+
core_sim.install
|
195
189
|
|
196
190
|
# Will quit the simulator if it is running.
|
197
191
|
# @todo fix accessibility_enabled? so we don't have to quit the sim
|
@@ -205,13 +199,12 @@ module RunLoop
|
|
205
199
|
# https://github.com/calabash/run_loop/issues/167
|
206
200
|
sim_control.ensure_software_keyboard(device)
|
207
201
|
|
208
|
-
|
209
202
|
# Xcode 6.3 instruments cannot launch an app that is already installed on
|
210
203
|
# iOS 8.3 Simulators. See: https://github.com/calabash/calabash-ios/issues/744
|
211
|
-
if
|
204
|
+
if xcode.version_gte_63?
|
212
205
|
|
213
|
-
if
|
214
|
-
|
206
|
+
if core_sim.app_is_installed? && !sim_control.sim_is_running?
|
207
|
+
core_sim.launch_simulator
|
215
208
|
end
|
216
209
|
end
|
217
210
|
end
|
@@ -220,6 +213,8 @@ module RunLoop
|
|
220
213
|
def self.run_with_options(options)
|
221
214
|
before = Time.now
|
222
215
|
|
216
|
+
self.prepare(options)
|
217
|
+
|
223
218
|
logger = options[:logger]
|
224
219
|
sim_control ||= options[:sim_control] || RunLoop::SimControl.new
|
225
220
|
|
@@ -245,7 +240,7 @@ Please update your sources to pass an instance of RunLoop::Xcode))
|
|
245
240
|
log_file = options[:log_path]
|
246
241
|
timeout = options[:timeout] || 30
|
247
242
|
|
248
|
-
results_dir = options[:results_dir] ||
|
243
|
+
results_dir = options[:results_dir] || RunLoop::DotDir.make_results_dir
|
249
244
|
results_dir_trace = File.join(results_dir, 'trace')
|
250
245
|
FileUtils.mkdir_p(results_dir_trace)
|
251
246
|
|
@@ -820,5 +815,13 @@ Please update your sources to pass an instance of RunLoop::Instruments))
|
|
820
815
|
def self.pids_for_run_loop(run_loop, &block)
|
821
816
|
RunLoop::Instruments.new.instruments_pids(&block)
|
822
817
|
end
|
818
|
+
|
819
|
+
private
|
820
|
+
|
821
|
+
def self.prepare(run_options)
|
822
|
+
RunLoop::DotDir.rotate_result_directories
|
823
|
+
RunLoop::Instruments.rotate_cache_directories
|
824
|
+
true
|
825
|
+
end
|
823
826
|
end
|
824
827
|
end
|