simctl 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/lib/simctl/command/create.rb +7 -3
- data/lib/simctl/command/launch.rb +4 -2
- data/lib/simctl/command/rename.rb +18 -0
- data/lib/simctl/command.rb +2 -0
- data/lib/simctl/device.rb +27 -2
- data/lib/simctl/device_type.rb +4 -0
- data/lib/simctl/runtime.rb +4 -0
- data/lib/simctl/version.rb +1 -1
- data/simctl.gemspec +2 -0
- data/test/simctl/command/crud_test.rb +29 -8
- data/test/simctl/command/list_test.rb +6 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd8b47a97cfc1f00603d9a4a34f24b8660803cc2
|
4
|
+
data.tar.gz: 40bb8ad6343667c9f5fe2f871d3c42ff299b467f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 034237cf350ae1f5b691683cfaa113f4c0dcb8ab45f0c8e2b6fb3c5f3b3db0354d1e598374865be0f4d2d3d491597bc63e4e6434114b4614fea8010942cce857
|
7
|
+
data.tar.gz: b8b1f15f50397012431b030134d5b1d0699c9a0ad4bc19f01f93cbfd75039a4ccfde0dea66703bb3816b8b870ac2a022ba9b529255239f1a89c6ea5df9ffb5a5
|
data/Gemfile.lock
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
|
1
3
|
module SimCtl
|
2
4
|
class Command
|
3
5
|
module Create
|
@@ -6,11 +8,13 @@ module SimCtl
|
|
6
8
|
# Creates a device
|
7
9
|
#
|
8
10
|
# @param name [String] name of the new device
|
9
|
-
# @param
|
11
|
+
# @param devicetype [SimCtl::DeviceType] device type of the new device
|
10
12
|
# @param runtime [SimCtl::Runtime] runtime of the new device
|
11
13
|
# @return [SimCtl::Device] the device that was created
|
12
|
-
def create_device(name,
|
13
|
-
|
14
|
+
def create_device(name, devicetype, runtime)
|
15
|
+
runtime = runtime(name: runtime) unless runtime.is_a?(Runtime)
|
16
|
+
devicetype = devicetype(name: devicetype) unless devicetype.is_a?(DeviceType)
|
17
|
+
Executor.execute([COMMAND, Shellwords.shellescape(name), devicetype.identifier, runtime.identifier]) do |identifier|
|
14
18
|
device(udid: identifier)
|
15
19
|
end
|
16
20
|
end
|
@@ -2,16 +2,18 @@ module SimCtl
|
|
2
2
|
class Command
|
3
3
|
module Launch
|
4
4
|
XCODE_HOME = `xcode-select -p`.chomp
|
5
|
+
SUPPORTED_SCALE = [1.0, 0.75, 0.5, 0.25]
|
5
6
|
|
6
7
|
# Launches a Simulator instance with the given device
|
7
8
|
#
|
8
9
|
# @param device [SimCtl::Device] the device to launch
|
9
10
|
# @return [void]
|
10
|
-
def launch_device(device)
|
11
|
+
def launch_device(device, scale=1.0)
|
12
|
+
raise "unsupported scale '#{scale}' (supported: #{SUPPORTED_SCALE.join(', ')})" unless SUPPORTED_SCALE.include?(scale)
|
11
13
|
# Launching the same device twice does not work.
|
12
14
|
# Simulator.app would just hang. Solution: Kill first.
|
13
15
|
kill_device(device)
|
14
|
-
command = "open -n #{XCODE_HOME}/Applications/Simulator.app --args -ConnectHardwareKeyboard 0 -CurrentDeviceUDID #{device.udid}"
|
16
|
+
command = "open -n #{XCODE_HOME}/Applications/Simulator.app --args -ConnectHardwareKeyboard 0 -CurrentDeviceUDID #{device.udid} -SimulatorWindowLastScale-#{device.devicetype.identifier} #{scale}"
|
15
17
|
system command
|
16
18
|
end
|
17
19
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
|
3
|
+
module SimCtl
|
4
|
+
class Command
|
5
|
+
module Rename
|
6
|
+
COMMAND = %w[xcrun simctl rename]
|
7
|
+
|
8
|
+
# Boots a device
|
9
|
+
#
|
10
|
+
# @param device [SimCtl::Device] the device to boot
|
11
|
+
# @param name [String] the new device name
|
12
|
+
# @return [void]
|
13
|
+
def rename_device(device, name)
|
14
|
+
Executor.execute([COMMAND, device.udid, Shellwords.shellescape(name)])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/simctl/command.rb
CHANGED
@@ -5,6 +5,7 @@ require 'simctl/command/erase'
|
|
5
5
|
require 'simctl/command/kill'
|
6
6
|
require 'simctl/command/launch'
|
7
7
|
require 'simctl/command/list'
|
8
|
+
require 'simctl/command/rename'
|
8
9
|
require 'simctl/command/reset'
|
9
10
|
require 'simctl/command/shutdown'
|
10
11
|
require 'simctl/executor'
|
@@ -18,6 +19,7 @@ module SimCtl
|
|
18
19
|
include SimCtl::Command::Kill
|
19
20
|
include SimCtl::Command::Launch
|
20
21
|
include SimCtl::Command::List
|
22
|
+
include SimCtl::Command::Rename
|
21
23
|
include SimCtl::Command::Reset
|
22
24
|
include SimCtl::Command::Shutdown
|
23
25
|
end
|
data/lib/simctl/device.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'cfpropertylist'
|
2
|
+
require 'ostruct'
|
1
3
|
require 'simctl/object'
|
2
4
|
require 'timeout'
|
3
5
|
|
@@ -13,6 +15,10 @@ module SimCtl
|
|
13
15
|
SimCtl.delete_device(self)
|
14
16
|
end
|
15
17
|
|
18
|
+
def devicetype
|
19
|
+
@devicetype ||= SimCtl.devicetype(identifier: plist.deviceType)
|
20
|
+
end
|
21
|
+
|
16
22
|
def erase!
|
17
23
|
SimCtl.erase_device(self)
|
18
24
|
end
|
@@ -21,8 +27,16 @@ module SimCtl
|
|
21
27
|
SimCtl.kill_device(self)
|
22
28
|
end
|
23
29
|
|
24
|
-
def launch!
|
25
|
-
SimCtl.launch_device(self)
|
30
|
+
def launch!(scale=1.0)
|
31
|
+
SimCtl.launch_device(self, scale)
|
32
|
+
end
|
33
|
+
|
34
|
+
def rename!(name)
|
35
|
+
SimCtl.rename_device(self, name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def runtime
|
39
|
+
@runtime ||= SimCtl.runtime(identifier: plist.runtime)
|
26
40
|
end
|
27
41
|
|
28
42
|
def shutdown!
|
@@ -40,5 +54,16 @@ module SimCtl
|
|
40
54
|
end
|
41
55
|
end
|
42
56
|
end
|
57
|
+
|
58
|
+
def ==(other)
|
59
|
+
other.udid == udid
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def plist
|
65
|
+
@plist ||= OpenStruct.new(CFPropertyList.native_types(CFPropertyList::List.new(file: File.join(ENV['HOME'], 'Library/Developer/CoreSimulator/Devices', udid, 'device.plist')).value))
|
66
|
+
end
|
67
|
+
|
43
68
|
end
|
44
69
|
end
|
data/lib/simctl/device_type.rb
CHANGED
data/lib/simctl/runtime.rb
CHANGED
data/lib/simctl/version.rb
CHANGED
data/simctl.gemspec
CHANGED
@@ -6,7 +6,7 @@ class SimCtl::Command::CRUDTest < Minitest::Test
|
|
6
6
|
@devicetype = SimCtl.list_devicetypes.select {|devicetype| devicetype.name =~ %r[iPhone]}.first
|
7
7
|
@runtime = SimCtl.list_runtimes.select {|runtime| runtime.name =~ %r[iOS.*9]}.first
|
8
8
|
@device = SimCtl.create_device SecureRandom.hex, @devicetype, @runtime
|
9
|
-
@device.wait! {|
|
9
|
+
@device.wait! {|d| d.state != :creating}
|
10
10
|
end
|
11
11
|
|
12
12
|
def teardown
|
@@ -14,6 +14,20 @@ class SimCtl::Command::CRUDTest < Minitest::Test
|
|
14
14
|
return unless device
|
15
15
|
device.kill!
|
16
16
|
device.shutdown! if device.state != :shutdown
|
17
|
+
device.wait! {|d| d.state == :shutdown}
|
18
|
+
device.delete!
|
19
|
+
end
|
20
|
+
|
21
|
+
should 'have devicetype and runtime property' do
|
22
|
+
device = SimCtl.device(udid: @device.udid)
|
23
|
+
assert device == @device
|
24
|
+
assert device.devicetype == @devicetype
|
25
|
+
assert device.runtime == @runtime
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'lookup devicetype and runtime strings' do
|
29
|
+
device = SimCtl.create_device SecureRandom.hex, @devicetype.name, @runtime.name
|
30
|
+
device.wait! {|d| d.state != :creating}
|
17
31
|
device.delete!
|
18
32
|
end
|
19
33
|
|
@@ -30,21 +44,22 @@ class SimCtl::Command::CRUDTest < Minitest::Test
|
|
30
44
|
should 'launch and kill the device created in setup' do
|
31
45
|
device = SimCtl.device(udid: @device.udid)
|
32
46
|
assert device.launch!
|
33
|
-
device.wait!{|
|
47
|
+
device.wait!{|d| d.state == :booted}
|
34
48
|
assert device.kill!
|
49
|
+
device.wait!{|d| d.state == :shutdown}
|
35
50
|
end
|
36
51
|
|
37
52
|
should 'erase the device created in setup' do
|
38
53
|
device = SimCtl.device(udid: @device.udid)
|
39
|
-
|
54
|
+
device.erase!
|
40
55
|
end
|
41
56
|
|
42
57
|
should 'boot/shutdown the device created in setup' do
|
43
58
|
device = SimCtl.device(udid: @device.udid)
|
44
|
-
|
45
|
-
device.wait! {|
|
46
|
-
|
47
|
-
device.wait! {|
|
59
|
+
device.boot!
|
60
|
+
device.wait! {|d| d.state == :booted}
|
61
|
+
device.shutdown!
|
62
|
+
device.wait! {|d| d.state == :shutdown}
|
48
63
|
end
|
49
64
|
|
50
65
|
should 'delete the device created in setup' do
|
@@ -53,11 +68,17 @@ class SimCtl::Command::CRUDTest < Minitest::Test
|
|
53
68
|
assert_nil SimCtl.device(udid: @device.udid)
|
54
69
|
end
|
55
70
|
|
71
|
+
should 'rename the device created in setup' do
|
72
|
+
device = SimCtl.device(udid: @device.udid)
|
73
|
+
device.rename!('new name')
|
74
|
+
assert SimCtl.device(udid: @device.udid).name == 'new name'
|
75
|
+
end
|
76
|
+
|
56
77
|
should 'reset the device created in setup' do
|
57
78
|
device = SimCtl.reset_device @device.name, @devicetype, @runtime
|
58
79
|
assert_kind_of SimCtl::Device, device
|
59
80
|
assert_nil SimCtl.device(udid: @device.udid)
|
60
81
|
@device = device # teardown cleanup
|
61
|
-
device.wait! {|
|
82
|
+
device.wait! {|d| d.state != :creating}
|
62
83
|
end
|
63
84
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simctl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Plunien
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: CFPropertyList
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Ruby interface to xcrun simctl
|
70
84
|
email:
|
71
85
|
- plu@pqpq.de
|
@@ -90,6 +104,7 @@ files:
|
|
90
104
|
- lib/simctl/command/kill.rb
|
91
105
|
- lib/simctl/command/launch.rb
|
92
106
|
- lib/simctl/command/list.rb
|
107
|
+
- lib/simctl/command/rename.rb
|
93
108
|
- lib/simctl/command/reset.rb
|
94
109
|
- lib/simctl/command/shutdown.rb
|
95
110
|
- lib/simctl/device.rb
|