simctl 1.6.8 → 1.6.10
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/.github/workflows/test.yml +13 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +38 -33
- data/README.md +5 -5
- data/fastlane-plugin-simctl/lib/fastlane/plugin/simctl/actions/simctl_action.rb +1 -1
- data/lib/simctl/command/keychain.rb +18 -0
- data/lib/simctl/command/warmup.rb +1 -1
- data/lib/simctl/command.rb +2 -0
- data/lib/simctl/device.rb +20 -3
- data/lib/simctl/keychain.rb +18 -0
- data/lib/simctl/runtime.rb +1 -1
- data/lib/simctl/version.rb +1 -1
- data/spec/simctl/device_interaction_spec.rb +12 -0
- data/spec/simctl/list_spec.rb +8 -4
- data/spec/simctl/readme_spec.rb +5 -5
- data/spec/simctl/upgrade_spec.rb +3 -3
- data/spec/simctl/warmup_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -6
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01f3ce681b28771f0952bf633fa33fed96b06e009331fdcb1ba40452e6480dd9
|
4
|
+
data.tar.gz: eb15732f51c9ed7dc17a61d6439f5a185cdd7cd9aecdcabecc55fb221cb4d451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 665c06b9d2a31c17b0b614dcbb792476d2f1a519483c85834391736a148beaec615efd4361cc48af0ac0287e283842d5b73b5147f22a3568b17050711ef895cc
|
7
|
+
data.tar.gz: 9a9134735dee1ce4bb3eca2b1eb3c6f5d325f982dfe83c2b3c1f4ea63a4c002ff023c0721bb9bf8f062192b805b93ee7feac8a1a7e4237014a4f7a98d5b2ca37
|
@@ -0,0 +1,13 @@
|
|
1
|
+
name: Test
|
2
|
+
on: [push]
|
3
|
+
jobs:
|
4
|
+
build:
|
5
|
+
env:
|
6
|
+
LANG: en_US.UTF-8
|
7
|
+
runs-on: macos-11
|
8
|
+
steps:
|
9
|
+
- uses: actions/checkout@v2
|
10
|
+
- name: Install dependencies
|
11
|
+
run: gem install bundler:1.17.3 && bundle install
|
12
|
+
- name: Run tests
|
13
|
+
run: bundle exec rake
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,50 +1,52 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simctl (1.6.
|
4
|
+
simctl (1.6.10)
|
5
5
|
CFPropertyList
|
6
6
|
naturally
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
CFPropertyList (3.0.
|
12
|
-
|
11
|
+
CFPropertyList (3.0.6)
|
12
|
+
rexml
|
13
|
+
ast (2.4.2)
|
13
14
|
coveralls (0.8.23)
|
14
15
|
json (>= 1.8, < 3)
|
15
16
|
simplecov (~> 0.16.1)
|
16
17
|
term-ansicolor (~> 1.3)
|
17
18
|
thor (>= 0.19.4, < 2.0)
|
18
19
|
tins (~> 1.6)
|
19
|
-
diff-lcs (1.
|
20
|
-
docile (1.
|
21
|
-
io-console (0.
|
22
|
-
irb (1.2
|
23
|
-
reline (>= 0.0
|
24
|
-
json (2.
|
25
|
-
naturally (2.2.
|
26
|
-
parallel (1.
|
27
|
-
parser (2.
|
28
|
-
ast (~> 2.4.
|
29
|
-
powerpack (0.1.
|
20
|
+
diff-lcs (1.5.0)
|
21
|
+
docile (1.4.0)
|
22
|
+
io-console (0.6.0)
|
23
|
+
irb (1.6.2)
|
24
|
+
reline (>= 0.3.0)
|
25
|
+
json (2.6.3)
|
26
|
+
naturally (2.2.1)
|
27
|
+
parallel (1.22.1)
|
28
|
+
parser (2.7.2.0)
|
29
|
+
ast (~> 2.4.1)
|
30
|
+
powerpack (0.1.3)
|
30
31
|
rainbow (2.2.2)
|
31
32
|
rake
|
32
|
-
rake (
|
33
|
-
reline (0.
|
33
|
+
rake (13.0.6)
|
34
|
+
reline (0.3.2)
|
34
35
|
io-console (~> 0.5)
|
35
|
-
|
36
|
-
|
37
|
-
rspec-
|
38
|
-
rspec-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
rexml (3.2.5)
|
37
|
+
rspec (3.12.0)
|
38
|
+
rspec-core (~> 3.12.0)
|
39
|
+
rspec-expectations (~> 3.12.0)
|
40
|
+
rspec-mocks (~> 3.12.0)
|
41
|
+
rspec-core (3.12.0)
|
42
|
+
rspec-support (~> 3.12.0)
|
43
|
+
rspec-expectations (3.12.2)
|
42
44
|
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
-
rspec-support (~> 3.
|
44
|
-
rspec-mocks (3.
|
45
|
+
rspec-support (~> 3.12.0)
|
46
|
+
rspec-mocks (3.12.3)
|
45
47
|
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
-
rspec-support (~> 3.
|
47
|
-
rspec-support (3.
|
48
|
+
rspec-support (~> 3.12.0)
|
49
|
+
rspec-support (3.12.0)
|
48
50
|
rubocop (0.49.1)
|
49
51
|
parallel (~> 1.10)
|
50
52
|
parser (>= 2.3.3.1, < 3.0)
|
@@ -52,20 +54,23 @@ GEM
|
|
52
54
|
rainbow (>= 1.99.1, < 3.0)
|
53
55
|
ruby-progressbar (~> 1.7)
|
54
56
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
55
|
-
ruby-progressbar (1.
|
57
|
+
ruby-progressbar (1.11.0)
|
56
58
|
simplecov (0.16.1)
|
57
59
|
docile (~> 1.1)
|
58
60
|
json (>= 1.8, < 3)
|
59
61
|
simplecov-html (~> 0.10.0)
|
60
62
|
simplecov-html (0.10.2)
|
63
|
+
sync (0.5.0)
|
61
64
|
term-ansicolor (1.7.1)
|
62
65
|
tins (~> 1.0)
|
63
|
-
thor (
|
64
|
-
tins (1.
|
65
|
-
|
66
|
+
thor (1.2.1)
|
67
|
+
tins (1.32.1)
|
68
|
+
sync
|
69
|
+
unicode-display_width (1.8.0)
|
66
70
|
|
67
71
|
PLATFORMS
|
68
|
-
|
72
|
+
arm64-darwin-21
|
73
|
+
arm64-darwin-22
|
69
74
|
|
70
75
|
DEPENDENCIES
|
71
76
|
coveralls
|
@@ -76,4 +81,4 @@ DEPENDENCIES
|
|
76
81
|
simctl!
|
77
82
|
|
78
83
|
BUNDLED WITH
|
79
|
-
|
84
|
+
2.4.1
|
data/README.md
CHANGED
@@ -9,14 +9,14 @@ Ruby interface to xcrun simctl. Manage your iOS Simulators directly from a ruby
|
|
9
9
|
```ruby
|
10
10
|
require 'simctl'
|
11
11
|
|
12
|
-
# Select the iOS
|
13
|
-
runtime = SimCtl.runtime(name: 'iOS
|
12
|
+
# Select the iOS 14.5 runtime
|
13
|
+
runtime = SimCtl.runtime(name: 'iOS 14.5')
|
14
14
|
|
15
|
-
# Select the iPhone
|
16
|
-
devicetype = SimCtl.devicetype(name: 'iPhone
|
15
|
+
# Select the iPhone 8 device type
|
16
|
+
devicetype = SimCtl.devicetype(name: 'iPhone 8')
|
17
17
|
|
18
18
|
# Create a new device
|
19
|
-
device = SimCtl.create_device 'Unit Tests @ iPhone
|
19
|
+
device = SimCtl.create_device 'Unit Tests @ iPhone 8 - 14.5', devicetype, runtime
|
20
20
|
|
21
21
|
# Boot the device
|
22
22
|
device.boot
|
@@ -34,7 +34,7 @@ module Fastlane
|
|
34
34
|
description: "iOS device type used to create the simulator",
|
35
35
|
optional: true,
|
36
36
|
type: String,
|
37
|
-
default_value: 'iPhone
|
37
|
+
default_value: 'iPhone 8'),
|
38
38
|
FastlaneCore::ConfigItem.new(key: :name,
|
39
39
|
description: "String used to set the name to the simulator",
|
40
40
|
optional: true,
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module SimCtl
|
4
|
+
class Command
|
5
|
+
module Keychain
|
6
|
+
# Reset the keychain
|
7
|
+
#
|
8
|
+
# @param device [SimCtl::Device] the device
|
9
|
+
# @return [void]
|
10
|
+
def keychain_reset(device)
|
11
|
+
unless Xcode::Version.gte? '11.4'
|
12
|
+
raise UnsupportedCommandError, 'Needs at least Xcode 11.4'
|
13
|
+
end
|
14
|
+
Executor.execute(command_for('keychain', device.udid, 'reset'))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -10,7 +10,7 @@ module SimCtl
|
|
10
10
|
def warmup(devicetype, runtime, timeout = 120)
|
11
11
|
devicetype = devicetype(name: devicetype) unless devicetype.is_a?(DeviceType)
|
12
12
|
runtime = runtime(name: runtime) unless runtime.is_a?(Runtime)
|
13
|
-
device = device(
|
13
|
+
device = device(runtime: runtime, devicetype: devicetype)
|
14
14
|
raise DeviceNotFound, "Could not find device with type '#{devicetype.name}' and runtime '#{runtime.name}'" if device.nil?
|
15
15
|
device.boot if device.state != :booted
|
16
16
|
device.wait(timeout) { |d| d.state == :booted && d.ready? }
|
data/lib/simctl/command.rb
CHANGED
@@ -4,6 +4,7 @@ require 'simctl/command/delete'
|
|
4
4
|
require 'simctl/command/erase'
|
5
5
|
require 'simctl/command/install'
|
6
6
|
require 'simctl/command/io'
|
7
|
+
require 'simctl/command/keychain'
|
7
8
|
require 'simctl/command/kill'
|
8
9
|
require 'simctl/command/launch'
|
9
10
|
require 'simctl/command/privacy'
|
@@ -32,6 +33,7 @@ module SimCtl
|
|
32
33
|
include SimCtl::Command::Erase
|
33
34
|
include SimCtl::Command::IO
|
34
35
|
include SimCtl::Command::Install
|
36
|
+
include SimCtl::Command::Keychain
|
35
37
|
include SimCtl::Command::Kill
|
36
38
|
include SimCtl::Command::Launch
|
37
39
|
include SimCtl::Command::List
|
data/lib/simctl/device.rb
CHANGED
@@ -3,6 +3,7 @@ require 'ostruct'
|
|
3
3
|
require 'simctl/device_launchctl'
|
4
4
|
require 'simctl/device_path'
|
5
5
|
require 'simctl/device_settings'
|
6
|
+
require 'simctl/keychain'
|
6
7
|
require 'simctl/object'
|
7
8
|
require 'simctl/status_bar'
|
8
9
|
require 'timeout'
|
@@ -27,7 +28,12 @@ module SimCtl
|
|
27
28
|
#
|
28
29
|
# @return [Bool]
|
29
30
|
def available?
|
30
|
-
is_available
|
31
|
+
case is_available
|
32
|
+
when String
|
33
|
+
is_available !~ /unavailable/i
|
34
|
+
else
|
35
|
+
is_available
|
36
|
+
end
|
31
37
|
end
|
32
38
|
|
33
39
|
# Boots the device
|
@@ -46,9 +52,11 @@ module SimCtl
|
|
46
52
|
|
47
53
|
# Returns the device type
|
48
54
|
#
|
49
|
-
# @return [SimCtl::DeviceType]
|
55
|
+
# @return [SimCtl::DeviceType, String]
|
50
56
|
def devicetype
|
51
57
|
@devicetype ||= SimCtl.devicetype(identifier: plist.deviceType)
|
58
|
+
rescue
|
59
|
+
plist.deviceType
|
52
60
|
end
|
53
61
|
|
54
62
|
# Erases the device
|
@@ -95,6 +103,13 @@ module SimCtl
|
|
95
103
|
@launchctl ||= DeviceLaunchctl.new(self)
|
96
104
|
end
|
97
105
|
|
106
|
+
# Returns the keychain bar object
|
107
|
+
#
|
108
|
+
# @return [SimCtl::keychain]
|
109
|
+
def keychain
|
110
|
+
@keychain ||= SimCtl::Keychain.new(self)
|
111
|
+
end
|
112
|
+
|
98
113
|
# Launches an app in the given device
|
99
114
|
#
|
100
115
|
# @param opts [Hash] options hash - `{ wait_for_debugger: true/false }`
|
@@ -177,9 +192,11 @@ module SimCtl
|
|
177
192
|
|
178
193
|
# Returns the runtime object
|
179
194
|
#
|
180
|
-
# @return [SimCtl::Runtime]
|
195
|
+
# @return [SimCtl::Runtime, String]
|
181
196
|
def runtime
|
182
197
|
@runtime ||= SimCtl.runtime(identifier: plist.runtime)
|
198
|
+
rescue
|
199
|
+
plist.runtime
|
183
200
|
end
|
184
201
|
|
185
202
|
# Saves a screenshot to a file
|
data/lib/simctl/runtime.rb
CHANGED
@@ -32,7 +32,7 @@ module SimCtl
|
|
32
32
|
# @param name [String] type (ios, watchos, tvos)
|
33
33
|
# @return [SimCtl::Runtime] the latest available runtime
|
34
34
|
def self.latest(type)
|
35
|
-
Naturally.sort_by(SimCtl.list_runtimes.where(
|
35
|
+
Naturally.sort_by(SimCtl.list_runtimes.where(identifier: /#{type}/i), :version).last
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/lib/simctl/version.rb
CHANGED
@@ -169,6 +169,18 @@ RSpec.describe SimCtl, order: :defined do
|
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
172
|
+
describe 'keychain operations' do
|
173
|
+
if SimCtl::Xcode::Version.gte?('11.4')
|
174
|
+
it 'resets the keychain' do
|
175
|
+
@device.keychain.reset
|
176
|
+
end
|
177
|
+
else
|
178
|
+
it 'raises exception' do
|
179
|
+
expect { @device.keychain.reset }.to raise_error SimCtl::UnsupportedCommandError
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
172
184
|
describe 'overriding status bar values' do
|
173
185
|
if SimCtl::Xcode::Version.gte?('11.4')
|
174
186
|
it 'overrides the status bar values' do
|
data/spec/simctl/list_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe SimCtl do
|
4
4
|
describe '#devicetype' do
|
5
5
|
it 'find device type by name' do
|
6
|
-
expect(SimCtl.devicetype(name: 'iPhone
|
6
|
+
expect(SimCtl.devicetype(name: 'iPhone 8')).to be_kind_of SimCtl::DeviceType
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'raise exception if device type is not found' do
|
@@ -69,15 +69,19 @@ RSpec.describe SimCtl do
|
|
69
69
|
|
70
70
|
describe '#runtime' do
|
71
71
|
it 'find runtime by name' do
|
72
|
-
expect(SimCtl.runtime(name: 'iOS
|
72
|
+
expect(SimCtl.runtime(name: 'iOS 15.2')).to be_kind_of SimCtl::Runtime
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'raise exception if runtime is not found' do
|
76
|
-
expect { SimCtl.runtime(name: 'iOS
|
76
|
+
expect { SimCtl.runtime(name: 'iOS 19.0') }.to raise_error SimCtl::RuntimeNotFound
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'finds the latest runtime' do
|
80
|
-
if SimCtl::Xcode::Version.gte?('
|
80
|
+
if SimCtl::Xcode::Version.gte?('13.2')
|
81
|
+
expect(SimCtl::Runtime.latest(:ios).version).to be == '15.2'
|
82
|
+
elsif SimCtl::Xcode::Version.gte?('12.5')
|
83
|
+
expect(SimCtl::Runtime.latest(:ios).version).to be == '14.5'
|
84
|
+
elsif SimCtl::Xcode::Version.gte?('11.4')
|
81
85
|
expect(SimCtl::Runtime.latest(:ios).version).to be == '13.4'
|
82
86
|
elsif SimCtl::Xcode::Version.gte?('11.3')
|
83
87
|
expect(SimCtl::Runtime.latest(:ios).version).to be == '13.3'
|
data/spec/simctl/readme_spec.rb
CHANGED
@@ -2,14 +2,14 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.describe SimCtl do
|
4
4
|
it 'executes example code from readme' do
|
5
|
-
# Select the iOS
|
6
|
-
runtime = SimCtl.runtime(name: 'iOS
|
5
|
+
# Select the iOS 15.2 runtime
|
6
|
+
runtime = SimCtl.runtime(name: 'iOS 15.2')
|
7
7
|
|
8
|
-
# Select the iPhone
|
9
|
-
devicetype = SimCtl.devicetype(name: 'iPhone
|
8
|
+
# Select the iPhone 8 device type
|
9
|
+
devicetype = SimCtl.devicetype(name: 'iPhone 8')
|
10
10
|
|
11
11
|
# Create a new device
|
12
|
-
device = SimCtl.create_device 'Unit Tests @ iPhone
|
12
|
+
device = SimCtl.create_device 'Unit Tests @ iPhone 8 - 15.2', devicetype, runtime
|
13
13
|
|
14
14
|
# Boot the device
|
15
15
|
device.boot
|
data/spec/simctl/upgrade_spec.rb
CHANGED
@@ -3,9 +3,9 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe SimCtl do
|
4
4
|
describe '#upgrade' do
|
5
5
|
it 'upgrades a device to a newer runtime' do
|
6
|
-
old_runtime = SimCtl.runtime(name: 'iOS
|
7
|
-
new_runtime = SimCtl.runtime(name: 'iOS
|
8
|
-
device = SimCtl.reset_device 'iPhone
|
6
|
+
old_runtime = SimCtl.runtime(name: 'iOS 15.2')
|
7
|
+
new_runtime = SimCtl.runtime(name: 'iOS 15.2')
|
8
|
+
device = SimCtl.reset_device 'iPhone 8', SimCtl.devicetype(name: 'iPhone 8'), old_runtime
|
9
9
|
expect(device.runtime.version).to be == old_runtime.version
|
10
10
|
SimCtl.upgrade device, new_runtime
|
11
11
|
device.wait { |d| d.runtime.version == new_runtime.version }
|
data/spec/simctl/warmup_spec.rb
CHANGED
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe SimCtl do
|
4
4
|
describe '#warmup' do
|
5
5
|
it 'warms up and returns a device for given strings' do
|
6
|
-
SimCtl.reset_device 'iPhone
|
7
|
-
expect(SimCtl.warmup('iPhone
|
6
|
+
SimCtl.reset_device 'iPhone 8', SimCtl.devicetype(name: 'iPhone 8'), SimCtl.runtime(name: 'iOS 15.2')
|
7
|
+
expect(SimCtl.warmup('iPhone 8', 'iOS 15.2')).to be_kind_of SimCtl::Device
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'warms up and returns a device for given objects' do
|
data/spec/spec_helper.rb
CHANGED
@@ -9,12 +9,7 @@ Coveralls.wear!
|
|
9
9
|
$LOAD_PATH.push File.expand_path('../../lib', __FILE__)
|
10
10
|
require File.dirname(__FILE__) + '/../lib/simctl.rb'
|
11
11
|
|
12
|
-
SimCtl.default_timeout =
|
13
|
-
300
|
14
|
-
else
|
15
|
-
60
|
16
|
-
end
|
17
|
-
|
12
|
+
SimCtl.default_timeout = 300
|
18
13
|
SimCtl.device_set_path = Dir.mktmpdir 'foo bar' if ENV['CUSTOM_DEVICE_SET_PATH']
|
19
14
|
|
20
15
|
RSpec.configure do |config|
|
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.6.
|
4
|
+
version: 1.6.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Plunien
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -116,6 +116,7 @@ extensions: []
|
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
118
|
- ".coveralls.yml"
|
119
|
+
- ".github/workflows/test.yml"
|
119
120
|
- ".gitignore"
|
120
121
|
- ".rubocop.yml"
|
121
122
|
- ".rubocop_todo.yml"
|
@@ -149,6 +150,7 @@ files:
|
|
149
150
|
- lib/simctl/command/erase.rb
|
150
151
|
- lib/simctl/command/install.rb
|
151
152
|
- lib/simctl/command/io.rb
|
153
|
+
- lib/simctl/command/keychain.rb
|
152
154
|
- lib/simctl/command/kill.rb
|
153
155
|
- lib/simctl/command/launch.rb
|
154
156
|
- lib/simctl/command/list.rb
|
@@ -170,6 +172,7 @@ files:
|
|
170
172
|
- lib/simctl/device_settings.rb
|
171
173
|
- lib/simctl/device_type.rb
|
172
174
|
- lib/simctl/executor.rb
|
175
|
+
- lib/simctl/keychain.rb
|
173
176
|
- lib/simctl/list.rb
|
174
177
|
- lib/simctl/object.rb
|
175
178
|
- lib/simctl/runtime.rb
|
@@ -196,7 +199,7 @@ homepage: https://github.com/plu/simctl
|
|
196
199
|
licenses:
|
197
200
|
- MIT
|
198
201
|
metadata: {}
|
199
|
-
post_install_message:
|
202
|
+
post_install_message:
|
200
203
|
rdoc_options: []
|
201
204
|
require_paths:
|
202
205
|
- lib
|
@@ -211,8 +214,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
214
|
- !ruby/object:Gem::Version
|
212
215
|
version: '0'
|
213
216
|
requirements: []
|
214
|
-
rubygems_version: 3.
|
215
|
-
signing_key:
|
217
|
+
rubygems_version: 3.2.22
|
218
|
+
signing_key:
|
216
219
|
specification_version: 4
|
217
220
|
summary: Ruby interface to xcrun simctl
|
218
221
|
test_files:
|