run_loop 2.2.2 → 2.2.3
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/app.rb +1 -1
- data/lib/run_loop/cli/simctl.rb +13 -10
- data/lib/run_loop/core.rb +3 -1
- data/lib/run_loop/device_agent/Frameworks.zip +0 -0
- data/lib/run_loop/device_agent/app/DeviceAgent-Runner.app.zip +0 -0
- data/lib/run_loop/device_agent/bin/CLI.json +27 -0
- data/lib/run_loop/device_agent/bin/iOSDeviceManager +0 -0
- data/lib/run_loop/device_agent/client.rb +35 -28
- data/lib/run_loop/device_agent/ios_device_manager.rb +23 -17
- data/lib/run_loop/device_agent/ipa/DeviceAgent-Runner.app.zip +0 -0
- data/lib/run_loop/patches/awesome_print.rb +16 -0
- data/lib/run_loop/version.rb +1 -1
- data/lib/run_loop/xcode.rb +16 -1
- data/scripts/lib/on_alert.js +21 -3
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14c23a62a0cf301b62d65aa43ef9bb51fd0f8100
|
4
|
+
data.tar.gz: 4e8f52d124fd7f17975317a09467ad12c39a39d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6aaeec05f315cba210c7c914f4f2c7fd50ab996a3fe0e42e4696376cc940d3d05508ba8066542a273fd9764a6400236243b210fad34c513f6c0b2676acf14210
|
7
|
+
data.tar.gz: 789c10cfc7de7e83e0622a8b28948bb063360154c5d589d582a386794932ac51f4eacb94d6986900e19444506319b0babb93157f42399c1325d7b5597ee2d602
|
data/lib/run_loop/app.rb
CHANGED
data/lib/run_loop/cli/simctl.rb
CHANGED
@@ -10,19 +10,22 @@ module RunLoop
|
|
10
10
|
|
11
11
|
desc 'tail', 'Tail the log file of the booted simulator'
|
12
12
|
def tail
|
13
|
-
|
13
|
+
tail_simulator_logs
|
14
14
|
end
|
15
15
|
|
16
16
|
no_commands do
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
17
|
+
def tail_simulator_logs
|
18
|
+
paths = simctl.simulators.map do |simulator|
|
19
|
+
log_file_path = simulator.simulator_log_file_path
|
20
|
+
if log_file_path && File.exist?(log_file_path)
|
21
|
+
log_file_path
|
22
|
+
else
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
end.compact
|
26
|
+
|
27
|
+
args = ["-n", "1000", "-F"] + paths
|
28
|
+
exec("tail", *args)
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
data/lib/run_loop/core.rb
CHANGED
@@ -320,7 +320,9 @@ Logfile: #{log_file}
|
|
320
320
|
# version.
|
321
321
|
def self.default_simulator(xcode=RunLoop::Xcode.new)
|
322
322
|
|
323
|
-
if xcode.
|
323
|
+
if xcode.version_gte_82?
|
324
|
+
"iPhone 7 (10.2)"
|
325
|
+
elsif xcode.version_gte_81?
|
324
326
|
"iPhone 7 (10.1)"
|
325
327
|
elsif xcode.version_gte_8?
|
326
328
|
"iPhone 7 (10.0)"
|
Binary file
|
Binary file
|
@@ -28,6 +28,33 @@
|
|
28
28
|
"default" : true
|
29
29
|
}
|
30
30
|
},
|
31
|
+
"upload" : {
|
32
|
+
"-b" : {
|
33
|
+
"longFlag" : "--bundle-identifier",
|
34
|
+
"optionName" : "bundle-id",
|
35
|
+
"info" : "bundle identifier (e.g. com.my.app)",
|
36
|
+
"required" : true
|
37
|
+
},
|
38
|
+
"-d" : {
|
39
|
+
"longFlag" : "--device-id",
|
40
|
+
"optionName" : "device-identifier",
|
41
|
+
"info" : "iOS Simulator GUID or 40-digit physical device ID",
|
42
|
+
"required" : true
|
43
|
+
},
|
44
|
+
"-f" : {
|
45
|
+
"longFlag" : "--filepath",
|
46
|
+
"optionName" : "filepath",
|
47
|
+
"info" : "absolute path to file to be uploaded",
|
48
|
+
"required" : true
|
49
|
+
},
|
50
|
+
"-o" : {
|
51
|
+
"longFlag" : "--overwrite",
|
52
|
+
"optionName" : "overwrite",
|
53
|
+
"info" : "overwrite file if already in app container",
|
54
|
+
"required" : false,
|
55
|
+
"default" : false
|
56
|
+
}
|
57
|
+
},
|
31
58
|
"is_installed" : {
|
32
59
|
"-b" : {
|
33
60
|
"longFlag" : "--bundle-identifier",
|
Binary file
|
@@ -29,15 +29,16 @@ module RunLoop
|
|
29
29
|
# For example:
|
30
30
|
#
|
31
31
|
# RunLoop::DeviceAgent::Client::DEFAULTS[:http_timeout] = 60
|
32
|
+
# RunLoop::DeviceAgent::Client::DEFAULTS[:device_agent_install_timeout] = 120
|
32
33
|
DEFAULTS = {
|
33
34
|
:port => 27753,
|
34
35
|
:simulator_ip => "127.0.0.1",
|
35
|
-
:http_timeout => (RunLoop::Environment.ci? || RunLoop::Environment.xtc?) ? 120 :
|
36
|
+
:http_timeout => (RunLoop::Environment.ci? || RunLoop::Environment.xtc?) ? 120 : 20,
|
36
37
|
:route_version => "1.0",
|
37
38
|
|
38
39
|
# Ignored in the XTC.
|
39
40
|
# This key is subject to removal or changes
|
40
|
-
:device_agent_install_timeout => RunLoop::Environment.ci? ? 120 :
|
41
|
+
:device_agent_install_timeout => RunLoop::Environment.ci? ? 120 : 90,
|
41
42
|
# This value must always be false on the XTC.
|
42
43
|
# This is should only be used by gem maintainers or very advanced users.
|
43
44
|
:shutdown_device_agent_before_launch => false
|
@@ -106,33 +107,20 @@ module RunLoop
|
|
106
107
|
code_sign_identity = RunLoop::Environment::code_sign_identity
|
107
108
|
end
|
108
109
|
|
109
|
-
if device.physical_device? && cbx_launcher.name == :ios_device_manager
|
110
|
-
if !code_sign_identity
|
111
|
-
raise RuntimeError, %Q[
|
112
|
-
Targeting a physical devices requires a code signing identity.
|
113
|
-
|
114
|
-
Rerun your test with:
|
115
|
-
|
116
|
-
$ CODE_SIGN_IDENTITY="iPhone Developer: Your Name (ABCDEF1234)" cucumber
|
117
|
-
|
118
|
-
To see the valid code signing identities on your device run:
|
119
|
-
|
120
|
-
$ xcrun security find-identity -v -p codesigning
|
121
|
-
|
122
|
-
]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
110
|
install_timeout = options.fetch(:device_agent_install_timeout,
|
127
111
|
DEFAULTS[:device_agent_install_timeout])
|
128
112
|
shutdown_before_launch = options.fetch(:shutdown_device_agent_before_launch,
|
129
113
|
DEFAULTS[:shutdown_device_agent_before_launch])
|
114
|
+
aut_args = options.fetch(:args, [])
|
115
|
+
aut_env = options.fetch(:env, {})
|
130
116
|
|
131
117
|
launcher_options = {
|
132
118
|
code_sign_identity: code_sign_identity,
|
133
119
|
device_agent_install_timeout: install_timeout,
|
134
120
|
shutdown_device_agent_before_launch: shutdown_before_launch,
|
135
|
-
dylib_injection_details: dylib_injection_details
|
121
|
+
dylib_injection_details: dylib_injection_details,
|
122
|
+
aut_args: aut_args,
|
123
|
+
aut_env: aut_env
|
136
124
|
}
|
137
125
|
|
138
126
|
xcuitest = RunLoop::DeviceAgent::Client.new(bundle_id, device,
|
@@ -307,10 +295,6 @@ INSTANCE METHODS
|
|
307
295
|
expect_300_response(response)
|
308
296
|
end
|
309
297
|
|
310
|
-
# TODO Legacy API; remove once this branch is merged:
|
311
|
-
# https://github.com/calabash/DeviceAgent.iOS/pull/133
|
312
|
-
alias_method :runtime, :device_info
|
313
|
-
|
314
298
|
# @!visibility private
|
315
299
|
def server_version
|
316
300
|
options = http_options
|
@@ -362,7 +346,7 @@ INSTANCE METHODS
|
|
362
346
|
parameters = {
|
363
347
|
:gesture => "enter_text",
|
364
348
|
:options => {
|
365
|
-
:string => string
|
349
|
+
:string => string.to_s
|
366
350
|
}
|
367
351
|
}
|
368
352
|
request = request("gesture", parameters)
|
@@ -382,7 +366,7 @@ INSTANCE METHODS
|
|
382
366
|
parameters = {
|
383
367
|
:gesture => "enter_text",
|
384
368
|
:options => {
|
385
|
-
:string => string
|
369
|
+
:string => string.to_s
|
386
370
|
}
|
387
371
|
}
|
388
372
|
request = request("gesture", parameters)
|
@@ -802,6 +786,8 @@ Timed out after #{timeout} seconds waiting for an alert to disappear.
|
|
802
786
|
merged_options = WAIT_DEFAULTS.merge(options)
|
803
787
|
result = wait_for_view(uiquery, merged_options)
|
804
788
|
|
789
|
+
# This is not quite right. It is possible to get a false positive.
|
790
|
+
# If result does not have "value" or "label" and the text is nil
|
805
791
|
candidates = [result["value"],
|
806
792
|
result["label"]]
|
807
793
|
match = candidates.any? do |elm|
|
@@ -1250,7 +1236,7 @@ device: #{device}
|
|
1250
1236
|
|
1251
1237
|
To diagnose the problem tail the launcher log file:
|
1252
1238
|
|
1253
|
-
$ tail -1000 -F #{
|
1239
|
+
$ tail -1000 -F #{cbx_launcher_log_file}
|
1254
1240
|
|
1255
1241
|
]
|
1256
1242
|
end
|
@@ -1294,9 +1280,19 @@ Please install it.
|
|
1294
1280
|
|
1295
1281
|
retries = 5
|
1296
1282
|
|
1283
|
+
# Launch arguments and environment arguments cannot be nil
|
1284
|
+
# The public interface Client.run has a guard against this, but
|
1285
|
+
# internal callers to do not.
|
1286
|
+
aut_args = launcher_options.fetch(:aut_args, [])
|
1287
|
+
aut_env = launcher_options.fetch(:aut_env, {})
|
1297
1288
|
begin
|
1298
1289
|
client = http_client(http_options)
|
1299
|
-
request = request("session",
|
1290
|
+
request = request("session",
|
1291
|
+
{
|
1292
|
+
:bundleID => bundle_id,
|
1293
|
+
:launchArgs => aut_args,
|
1294
|
+
:environment => aut_env
|
1295
|
+
})
|
1300
1296
|
response = client.post(request)
|
1301
1297
|
RunLoop.log_debug("Launched #{bundle_id} on #{device}")
|
1302
1298
|
RunLoop.log_debug("#{response.body}")
|
@@ -1421,6 +1417,17 @@ Valid values are: :down, :up, :right, :left, :bottom, :top
|
|
1421
1417
|
end
|
1422
1418
|
end
|
1423
1419
|
|
1420
|
+
# @!visibility private
|
1421
|
+
def cbx_launcher_log_file
|
1422
|
+
if cbx_launcher.name == :ios_device_manager
|
1423
|
+
# The location of the iOSDeviceManager logs has changed
|
1424
|
+
File.join(RunLoop::Environment.user_home_directory,
|
1425
|
+
".calabash", "iOSDeviceManager", "logs", "current.log")
|
1426
|
+
else
|
1427
|
+
cbx_launcher.class.log_file
|
1428
|
+
end
|
1429
|
+
end
|
1430
|
+
|
1424
1431
|
# @!visibility private
|
1425
1432
|
# Private method. Do not call.
|
1426
1433
|
# Flattens the result of `tree`.
|
@@ -67,6 +67,15 @@ but binary does not exist at that path.
|
|
67
67
|
end
|
68
68
|
|
69
69
|
# @!visibility private
|
70
|
+
#
|
71
|
+
# In earlier implementations, the ios-device-manager.log was located in
|
72
|
+
# ~/.run-loop/xcuitest/ios-device-manager.log
|
73
|
+
#
|
74
|
+
# Now iOSDeviceManager logs almost everything to a fixed location.
|
75
|
+
#
|
76
|
+
# ~/.calabash/iOSDeviceManager/logs/current.log
|
77
|
+
#
|
78
|
+
# There is still occasional output to ~/.run-loop.
|
70
79
|
def self.log_file
|
71
80
|
path = File.join(LauncherStrategy.dot_dir, "ios-device-manager.log")
|
72
81
|
FileUtils.touch(path) if !File.exist?(path)
|
@@ -98,27 +107,24 @@ Expected :device_agent_install_timeout key in options:
|
|
98
107
|
|
99
108
|
#{options}
|
100
109
|
|
101
|
-
]
|
102
|
-
end
|
103
|
-
|
104
|
-
if !code_sign_identity
|
105
|
-
raise ArgumentError, %Q[
|
106
|
-
Targeting a physical devices requires a code signing identity.
|
107
|
-
|
108
|
-
Rerun your test with:
|
109
|
-
|
110
|
-
$ CODE_SIGN_IDENTITY="iPhone Developer: Your Name (ABCDEF1234)" cucumber
|
111
|
-
|
112
110
|
]
|
113
111
|
end
|
114
112
|
|
115
113
|
options = {:log_cmd => true, :timeout => install_timeout}
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
114
|
+
if code_sign_identity
|
115
|
+
args = [
|
116
|
+
cmd, "install",
|
117
|
+
"--device-id", device.udid,
|
118
|
+
"--app-bundle", runner.runner,
|
119
|
+
"--codesign-identity", code_sign_identity
|
120
|
+
]
|
121
|
+
else
|
122
|
+
args = [
|
123
|
+
cmd, "install",
|
124
|
+
"--device-id", device.udid,
|
125
|
+
"--app-bundle", runner.runner
|
126
|
+
]
|
127
|
+
end
|
122
128
|
|
123
129
|
start = Time.now
|
124
130
|
hash = run_shell_command(args, options)
|
Binary file
|
@@ -15,3 +15,19 @@ module AwesomePrint
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
module Kernel
|
20
|
+
# Patch for BasicObject inspections.
|
21
|
+
# https://github.com/awesome-print/awesome_print/pull/253
|
22
|
+
def ap(object, options = {})
|
23
|
+
if object_id
|
24
|
+
begin
|
25
|
+
puts object.ai(options)
|
26
|
+
rescue NoMethodError => _
|
27
|
+
puts "(Object doesn't support #inspect)"
|
28
|
+
end
|
29
|
+
|
30
|
+
object unless AwesomePrint.console?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/run_loop/version.rb
CHANGED
data/lib/run_loop/xcode.rb
CHANGED
@@ -24,6 +24,14 @@ module RunLoop
|
|
24
24
|
to_s
|
25
25
|
end
|
26
26
|
|
27
|
+
# Returns a version instance for Xcode 8.2 ; used to check for the
|
28
|
+
# availability of features and paths to various items on the filesystem
|
29
|
+
#
|
30
|
+
# @return [RunLoop::Version] 8.2
|
31
|
+
def v82
|
32
|
+
fetch_version(:v82)
|
33
|
+
end
|
34
|
+
|
27
35
|
# Returns a version instance for `Xcode 8.1`; used to check for the
|
28
36
|
# availability of features and paths to various items on the filesystem.
|
29
37
|
#
|
@@ -128,9 +136,16 @@ module RunLoop
|
|
128
136
|
fetch_version(:v50)
|
129
137
|
end
|
130
138
|
|
139
|
+
# Is the active Xcode version 8.2 or above?
|
140
|
+
#
|
141
|
+
# @return [Boolean] `true` if the current Xcode version is >= 8.2
|
142
|
+
def version_gte_82?
|
143
|
+
version >= v82
|
144
|
+
end
|
145
|
+
|
131
146
|
# Is the active Xcode version 8.1 or above?
|
132
147
|
#
|
133
|
-
# @return [Boolean] `true` if the current Xcode version is >= 8.
|
148
|
+
# @return [Boolean] `true` if the current Xcode version is >= 8.1
|
134
149
|
def version_gte_81?
|
135
150
|
version >= v81
|
136
151
|
end
|
data/scripts/lib/on_alert.js
CHANGED
@@ -155,6 +155,23 @@ function frenchLocalizations() {
|
|
155
155
|
];
|
156
156
|
}
|
157
157
|
|
158
|
+
function portugueseBrazilLocalizations() {
|
159
|
+
return [
|
160
|
+
["Permitir", /acesso à sua localização/],
|
161
|
+
["Permitir", /acesso à sua localização/],
|
162
|
+
["OK", /Deseja Ter Acesso às Suas Fotos/],
|
163
|
+
["OK", /Deseja Ter Acesso aos Seus Contatos/],
|
164
|
+
["OK", /Acesso ao Seu Calendário/],
|
165
|
+
["OK", /Deseja Ter Acesso aos Seus Lembretes/],
|
166
|
+
["OK", /Would Like to Access Your Motion Activity/],
|
167
|
+
["OK", /Deseja Ter Acesso à Câmera/],
|
168
|
+
["OK", /Deseja Ter Acesso às Suas Atividades de Movimento e Preparo Físico/],
|
169
|
+
["OK", /Deseja Ter Acesso às Contas do Twitter/],
|
170
|
+
["OK", /data available to nearby bluetooth devices/],
|
171
|
+
["OK", /[Dd]eseja [Ee]nviar-lhe [Nn]otificações/]
|
172
|
+
];
|
173
|
+
}
|
174
|
+
|
158
175
|
function localizations() {
|
159
176
|
return [].concat(
|
160
177
|
danishLocalizations(),
|
@@ -163,7 +180,8 @@ function localizations() {
|
|
163
180
|
germanLocalizations(),
|
164
181
|
russianLocalizations(),
|
165
182
|
spanishLocalizations(),
|
166
|
-
frenchLocalizations()
|
183
|
+
frenchLocalizations(),
|
184
|
+
portugueseBrazilLocalizations()
|
167
185
|
);
|
168
186
|
}
|
169
187
|
|
@@ -207,8 +225,8 @@ function isPrivacyAlert(alert) {
|
|
207
225
|
// $ APP_LANG="nl" APP_LOCALE="nl" be cucumber -t @supported -p macmini
|
208
226
|
|
209
227
|
// This is very slow, so only do this if you are trying to capture regexes.
|
210
|
-
//var buttonNames = findAlertButtonNames(alert);
|
211
|
-
//Log.output({"alert":{"title":title, "buttons":buttonNames, "capture":"YES"}});
|
228
|
+
// var buttonNames = findAlertButtonNames(alert);
|
229
|
+
// Log.output({"alert":{"title":title, "buttons":buttonNames, "capture":"YES"}});
|
212
230
|
|
213
231
|
var answer;
|
214
232
|
var expression;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: run_loop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Krukow
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-12-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -301,20 +301,6 @@ dependencies:
|
|
301
301
|
- - ">="
|
302
302
|
- !ruby/object:Gem::Version
|
303
303
|
version: '0'
|
304
|
-
- !ruby/object:Gem::Dependency
|
305
|
-
name: rb-readline
|
306
|
-
requirement: !ruby/object:Gem::Requirement
|
307
|
-
requirements:
|
308
|
-
- - ">="
|
309
|
-
- !ruby/object:Gem::Version
|
310
|
-
version: '0'
|
311
|
-
type: :development
|
312
|
-
prerelease: false
|
313
|
-
version_requirements: !ruby/object:Gem::Requirement
|
314
|
-
requirements:
|
315
|
-
- - ">="
|
316
|
-
- !ruby/object:Gem::Version
|
317
|
-
version: '0'
|
318
304
|
description:
|
319
305
|
email:
|
320
306
|
- karl.krukow@xamarin.com
|