run_loop 3.0.1 → 4.0.0
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/core_simulator.rb +10 -24
- data/lib/run_loop/device.rb +0 -19
- 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/iOSDeviceManager +0 -0
- data/lib/run_loop/device_agent/client.rb +15 -1
- data/lib/run_loop/device_agent/ipa/DeviceAgent-Runner.app.zip +0 -0
- data/lib/run_loop/plist_buddy.rb +7 -3
- data/lib/run_loop/sim_keyboard_settings.rb +94 -0
- data/lib/run_loop/simctl.rb +1 -1
- data/lib/run_loop/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 773e38132d69d69b39507b5df09c9474e4f6ede3d1dc8be2fcb4059a4daf4756
|
4
|
+
data.tar.gz: abd675b715e3984defb47b0797853643b1db82a4b7055a3ac8910ed1efdc518e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f40b4a0e2fc0efd7293086396f70cb23a4a97f135b248cf35863d0bcaf5563dbee7927cfc2cd35c0eb88da5c6e0fe5db6762f8806b743a142f0fc4bb62431f5a
|
7
|
+
data.tar.gz: 7dbbf670bcad98456db942bc6ef8a0ae1bc0c05144112f7cbc2b8a5b1562e4a42ade9bbb4d1e621d3aaf2934dcb5ff07403001a5031c6e82e6c72509f7a7c9ef
|
data/lib/run_loop.rb
CHANGED
@@ -40,6 +40,7 @@ require 'run_loop/lipo'
|
|
40
40
|
require "run_loop/otool"
|
41
41
|
require "run_loop/strings"
|
42
42
|
require 'run_loop/cache'
|
43
|
+
require "run_loop/sim_keyboard_settings"
|
43
44
|
require 'run_loop/patches/awesome_print'
|
44
45
|
require 'run_loop/core_simulator'
|
45
46
|
require "run_loop/simctl"
|
@@ -45,6 +45,9 @@ class RunLoop::CoreSimulator
|
|
45
45
|
# @!visibility private
|
46
46
|
attr_reader :xcrun
|
47
47
|
|
48
|
+
# @!visibility private
|
49
|
+
attr_reader :sim_keyboard
|
50
|
+
|
48
51
|
# @!visibility private
|
49
52
|
METADATA_PLIST = '.com.apple.mobile_container_manager.metadata.plist'
|
50
53
|
|
@@ -400,6 +403,11 @@ class RunLoop::CoreSimulator
|
|
400
403
|
@xcrun ||= RunLoop::Xcrun.new
|
401
404
|
end
|
402
405
|
|
406
|
+
# @!visibility private
|
407
|
+
def sim_keyboard
|
408
|
+
@sim_keyboard ||= RunLoop::SimKeyboardSettings.new(device)
|
409
|
+
end
|
410
|
+
|
403
411
|
# @!visibility private
|
404
412
|
def simctl
|
405
413
|
@simctl ||= RunLoop::Simctl.new
|
@@ -424,7 +432,7 @@ class RunLoop::CoreSimulator
|
|
424
432
|
|
425
433
|
RunLoop::CoreSimulator.quit_simulator
|
426
434
|
RunLoop::CoreSimulator.ensure_hardware_keyboard_connected(pbuddy)
|
427
|
-
|
435
|
+
sim_keyboard.ensure_soft_keyboard_will_show
|
428
436
|
|
429
437
|
args = ['open', '-g', '-a', sim_app_path, '--args',
|
430
438
|
'-CurrentDeviceUDID', device.udid,
|
@@ -446,11 +454,6 @@ class RunLoop::CoreSimulator
|
|
446
454
|
options = { :timeout => 5, :raise_on_timeout => true }
|
447
455
|
RunLoop::ProcessWaiter.new(sim_name, options).wait_for_any
|
448
456
|
|
449
|
-
# open -g no longer launches application in the background. We want the
|
450
|
-
# Simulator to open in the background because when it is opened in the
|
451
|
-
# foreground, it steals (key application) focus which is disruptive.
|
452
|
-
send_simulator_to_background
|
453
|
-
|
454
457
|
if merged_options[:wait_for_stable]
|
455
458
|
device.simulator_wait_for_stable_state
|
456
459
|
end
|
@@ -678,23 +681,6 @@ Command had no output.
|
|
678
681
|
hash
|
679
682
|
end
|
680
683
|
|
681
|
-
# @!visibility private
|
682
|
-
def send_simulator_to_background
|
683
|
-
script = "tell application \"System Events\" to tell process \"#{sim_name}\" to set visible to false"
|
684
|
-
begin
|
685
|
-
system("osascript", "-e", script)
|
686
|
-
rescue => _
|
687
|
-
RunLoop.log_debug("Could not put simulator into the background")
|
688
|
-
end
|
689
|
-
|
690
|
-
script = "tell application \"System Events\" to tell process \"#{sim_name}\" to set visible to true"
|
691
|
-
begin
|
692
|
-
system("osascript", "-e", script)
|
693
|
-
rescue => _
|
694
|
-
RunLoop.log_debug("Could not put simulator into the foreground")
|
695
|
-
end
|
696
|
-
end
|
697
|
-
|
698
684
|
# @!visibility private
|
699
685
|
def uninstall_app_with_simctl
|
700
686
|
launch_simulator
|
@@ -824,7 +810,7 @@ Command had no output.
|
|
824
810
|
return true
|
825
811
|
end
|
826
812
|
|
827
|
-
if !
|
813
|
+
if !sim_keyboard.soft_keyboard_will_show?
|
828
814
|
RunLoop.log_debug("Simulator relaunch required: software keyboard is minimized")
|
829
815
|
return true
|
830
816
|
end
|
data/lib/run_loop/device.rb
CHANGED
@@ -40,7 +40,6 @@ module RunLoop
|
|
40
40
|
attr_reader :state
|
41
41
|
attr_reader :simulator_root_dir
|
42
42
|
attr_reader :simulator_accessibility_plist_path
|
43
|
-
attr_reader :simulator_preferences_plist_path
|
44
43
|
attr_reader :simulator_log_file_path
|
45
44
|
|
46
45
|
# Create a new device.
|
@@ -325,14 +324,6 @@ version: #{version}
|
|
325
324
|
pbuddy.ensure_plist(directory, "com.apple.Accessibility.plist")
|
326
325
|
end
|
327
326
|
|
328
|
-
# @!visibility private
|
329
|
-
def simulator_preferences_plist_path
|
330
|
-
return nil if physical_device?
|
331
|
-
|
332
|
-
directory = File.join(simulator_root_dir, "data", "Library", "Preferences")
|
333
|
-
pbuddy.ensure_plist(directory, "com.apple.Preferences.plist")
|
334
|
-
end
|
335
|
-
|
336
327
|
# @!visibility private
|
337
328
|
def simulator_log_file_path
|
338
329
|
return nil if physical_device?
|
@@ -536,16 +527,6 @@ Could not update the Simulator languages.
|
|
536
527
|
running_apps
|
537
528
|
end
|
538
529
|
|
539
|
-
def simulator_software_keyboard_will_show?
|
540
|
-
plist = simulator_preferences_plist_path
|
541
|
-
pbuddy.plist_read("AutomaticMinimizationEnabled", plist).to_i == 0
|
542
|
-
end
|
543
|
-
|
544
|
-
def simulator_ensure_software_keyboard_will_show
|
545
|
-
plist = simulator_preferences_plist_path
|
546
|
-
pbuddy.plist_set("AutomaticMinimizationEnabled", "integer", 0, plist)
|
547
|
-
end
|
548
|
-
|
549
530
|
=begin
|
550
531
|
PRIVATE METHODS
|
551
532
|
=end
|
Binary file
|
Binary file
|
Binary file
|
@@ -111,6 +111,14 @@ module RunLoop
|
|
111
111
|
if device.simulator? && app
|
112
112
|
RunLoop::Core.expect_simulator_compatible_arch(device, app)
|
113
113
|
|
114
|
+
# Enable or disable keyboard autocorrection, caps lock and
|
115
|
+
# autocapitalization when running on simulator, disables these value by default
|
116
|
+
# unless user don't pass true values for these keys
|
117
|
+
sim_keyboard = RunLoop::SimKeyboardSettings.new(device)
|
118
|
+
sim_keyboard.enable_autocorrection(options[:autocorrection_enabled])
|
119
|
+
sim_keyboard.enable_caps_lock(options[:capslock_enabled])
|
120
|
+
sim_keyboard.enable_autocapitalization(options[:autocapitalization_enabled])
|
121
|
+
|
114
122
|
if merged_options[:relaunch_simulator]
|
115
123
|
RunLoop.log_debug("Detected :relaunch_simulator option; will force simulator to restart")
|
116
124
|
RunLoop::CoreSimulator.quit_simulator
|
@@ -378,7 +386,13 @@ INSTANCE METHODS
|
|
378
386
|
response = client.post(request)
|
379
387
|
hash = expect_300_response(response)
|
380
388
|
result = hash["result"]
|
381
|
-
|
389
|
+
|
390
|
+
return false if result.count == 0
|
391
|
+
return false if result[0].count == 0
|
392
|
+
|
393
|
+
element = result[0]
|
394
|
+
hit_point = element["hit_point"]
|
395
|
+
hit_point["x"] != -1 && hit_point["y"] != -1
|
382
396
|
end
|
383
397
|
|
384
398
|
# @!visibility private
|
Binary file
|
data/lib/run_loop/plist_buddy.rb
CHANGED
@@ -233,7 +233,9 @@ in plist:
|
|
233
233
|
raise(ArgumentError, "expected '#{value_type}' to be one of '#{allowed_value_types}'")
|
234
234
|
end
|
235
235
|
value = args_hash[:value]
|
236
|
-
|
236
|
+
if value_type == 'bool'
|
237
|
+
value = !!value
|
238
|
+
elsif !value
|
237
239
|
raise(ArgumentError, ':value is a required key for :add command')
|
238
240
|
end
|
239
241
|
key = args_hash[:key]
|
@@ -249,8 +251,10 @@ in plist:
|
|
249
251
|
cmd_part = "Print :#{key}"
|
250
252
|
when :set
|
251
253
|
value = args_hash[:value]
|
252
|
-
|
253
|
-
|
254
|
+
if args_hash[:type] == 'bool'
|
255
|
+
value = !!value
|
256
|
+
elsif !value
|
257
|
+
raise(ArgumentError, ':value is a required key for :add command')
|
254
258
|
end
|
255
259
|
key = args_hash[:key]
|
256
260
|
unless key
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module RunLoop
|
2
|
+
class SimKeyboardSettings
|
3
|
+
attr_reader :pbuddy, :device, :plist
|
4
|
+
|
5
|
+
def initialize(device)
|
6
|
+
@device = device
|
7
|
+
@pbuddy = RunLoop::PlistBuddy.new
|
8
|
+
end
|
9
|
+
|
10
|
+
# Check if all the properties needed for the soft keyboard to appear are set
|
11
|
+
# Approach to negate 'true' and 'false' was chosen in order to do not
|
12
|
+
# reboot sim too often, as this will cover the cases when the properties
|
13
|
+
# are not set which means that keyboard will be shown anyways
|
14
|
+
#
|
15
|
+
# @return [Bool]
|
16
|
+
def soft_keyboard_will_show?
|
17
|
+
hw_keyboard_disabled = pbuddy.plist_read('HardwareKeyboardLastSeen', plist) != 'true'
|
18
|
+
soft_keyboard_enabled = pbuddy.plist_read('SoftwareKeyboardShownByTouch', plist) != 'false'
|
19
|
+
minimization_disabled = pbuddy.plist_read('AutomaticMinimizationEnabled', plist) != 'true'
|
20
|
+
|
21
|
+
hw_keyboard_disabled && minimization_disabled && soft_keyboard_enabled
|
22
|
+
end
|
23
|
+
|
24
|
+
# Add properties needed for soft keyboard to show into preferences plist
|
25
|
+
def ensure_soft_keyboard_will_show
|
26
|
+
pbuddy.plist_set('HardwareKeyboardLastSeen', 'bool', false, plist)
|
27
|
+
pbuddy.plist_set('SoftwareKeyboardShownByTouch', 'bool', true, plist)
|
28
|
+
pbuddy.plist_set('AutomaticMinimizationEnabled', 'bool', false, plist)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Enable/disable keyboard autocorrection
|
32
|
+
#
|
33
|
+
# @param [Boolean] condition, option passed by the user in launch arguments
|
34
|
+
# default: nil(false)
|
35
|
+
def enable_autocorrection(condition)
|
36
|
+
pbuddy.plist_set('KeyboardAutocorrection', 'bool', condition, plist)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Enable/disable keyboard caps lock
|
40
|
+
#
|
41
|
+
# @param [Boolean] condition, option passed by the user in launch arguments
|
42
|
+
# default: nil(false)
|
43
|
+
def enable_caps_lock(condition)
|
44
|
+
pbuddy.plist_set('KeyboardCapsLock', 'bool', condition, plist)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Enable/disable keyboard autocapitalization
|
48
|
+
#
|
49
|
+
# @param [Boolean] condition, option passed by the user in launch arguments
|
50
|
+
# default: nil(false)
|
51
|
+
def enable_autocapitalization(condition)
|
52
|
+
pbuddy.plist_set('KeyboardAutocapitalization', 'bool', condition, plist)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Checks if plist value that responds for autocorrection is set to true
|
56
|
+
#
|
57
|
+
# @return [Boolean]
|
58
|
+
def autocorrection_enabled?
|
59
|
+
pbuddy.plist_read('KeyboardAutocorrection', plist) == 'true'
|
60
|
+
end
|
61
|
+
|
62
|
+
# Checks if plist value that responds for caps lock is set to true
|
63
|
+
#
|
64
|
+
# @return [Boolean]
|
65
|
+
def caps_lock_enabled?
|
66
|
+
pbuddy.plist_read('KeyboardCapsLock', plist) == 'true'
|
67
|
+
end
|
68
|
+
|
69
|
+
# Checks if plist value that responds for autocapitalization is set to true
|
70
|
+
#
|
71
|
+
# @return [Boolean]
|
72
|
+
def autocapitalization_enabled?
|
73
|
+
pbuddy.plist_read('KeyboardAutocapitalization', plist) == 'true'
|
74
|
+
end
|
75
|
+
|
76
|
+
# Get plist path or use existing one
|
77
|
+
#
|
78
|
+
# @return [String] plist path
|
79
|
+
def plist
|
80
|
+
@plist ||= preferences_plist_path
|
81
|
+
end
|
82
|
+
|
83
|
+
# Get preferences plist path
|
84
|
+
#
|
85
|
+
# @return nil if doesn't run against simulator
|
86
|
+
# @return [String] with path to the plist
|
87
|
+
def preferences_plist_path
|
88
|
+
return nil if device.physical_device?
|
89
|
+
|
90
|
+
directory = File.join(device.simulator_root_dir, 'data', 'Library', 'Preferences')
|
91
|
+
pbuddy.ensure_plist(directory, 'com.apple.Preferences.plist')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/lib/run_loop/simctl.rb
CHANGED
@@ -596,7 +596,7 @@ while trying to list devices.
|
|
596
596
|
|
597
597
|
# @!visibility private
|
598
598
|
def device_available?(record)
|
599
|
-
record["availability"] == "(available)"
|
599
|
+
record["isAvailable"] == "YES" || record["availability"] == "(available)"
|
600
600
|
end
|
601
601
|
|
602
602
|
# @!visibility private
|
data/lib/run_loop/version.rb
CHANGED
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:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Krukow
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-09
|
12
|
+
date: 2018-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: awesome_print
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -391,6 +391,7 @@ files:
|
|
391
391
|
- lib/run_loop/process_waiter.rb
|
392
392
|
- lib/run_loop/regex.rb
|
393
393
|
- lib/run_loop/shell.rb
|
394
|
+
- lib/run_loop/sim_keyboard_settings.rb
|
394
395
|
- lib/run_loop/simctl.rb
|
395
396
|
- lib/run_loop/strings.rb
|
396
397
|
- lib/run_loop/template.rb
|