elpeacho 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/peach/device.rb +80 -0
- data/lib/peach/xc.rb +49 -0
- data/lib/peach.rb +24 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 92702fdb447124f21145d4430851a5095d966176127a4f0645fb5db7ed84635a
|
4
|
+
data.tar.gz: ffdd685721004b567364867d768ddbe614326b8b1872dd0823ec686d5a5287ab
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1b2bd49f446357a7363a97f9840c86fc4253fae848e85c9f59e97b84bb1386eb47e5ece5d168b5e64de0dac77d167655438bd8284ee65ed7dc1893792adee0dc
|
7
|
+
data.tar.gz: c27c7b3c8033012d658127402576e0478f4de2a70c2532c14fb611ac3a1a1d7a0f4fa67aaa552b28665d05afa70e23e0c8b52bc6fd9ed2f77cf801d88f0564c3
|
data/lib/peach/device.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'plist'
|
2
|
+
|
3
|
+
class Device
|
4
|
+
attr_reader :name, :device_type, :runtime, :udid
|
5
|
+
|
6
|
+
def initialize(name:, device_type:, runtime:, udid: nil)
|
7
|
+
@name = name
|
8
|
+
@device_type = device_type
|
9
|
+
@runtime = runtime
|
10
|
+
@udid = udid
|
11
|
+
end
|
12
|
+
|
13
|
+
def exists?
|
14
|
+
#could pass XC in? Make this a class function?
|
15
|
+
Device.current_devices(xc: XC.new).include?(self)
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
xc = XC.new
|
20
|
+
runtime_id = xc.runtimes.key(@runtime)
|
21
|
+
`xcrun simctl create \"#{@name}\" \"#{@device_type}\" \"#{runtime_id}\"`
|
22
|
+
|
23
|
+
# reload everything to get the device.
|
24
|
+
newDevices = Device.current_devices(xc: xc).select { |d| d == self }
|
25
|
+
@udid = newDevices.first.udid
|
26
|
+
end
|
27
|
+
|
28
|
+
def destroy
|
29
|
+
`xcrun simctl delete #{@udid}`
|
30
|
+
end
|
31
|
+
|
32
|
+
alias_method :eql?, :==
|
33
|
+
def ==(o)
|
34
|
+
o.class == self.class &&
|
35
|
+
o.name == @name &&
|
36
|
+
o.device_type == @device_type &&
|
37
|
+
o.runtime == runtime
|
38
|
+
end
|
39
|
+
|
40
|
+
#class functions
|
41
|
+
|
42
|
+
def self.destroy_all(xc:)
|
43
|
+
Device.current_devices(xc: xc).each do |d|
|
44
|
+
d.destroy
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.current_devices(xc:)
|
49
|
+
devices = Array.new
|
50
|
+
|
51
|
+
simctl_json = JSON.parse(load_devices)
|
52
|
+
device_list = simctl_json['devices']
|
53
|
+
|
54
|
+
device_list.each do |type, ds|
|
55
|
+
runtime = xc.runtime_name(type)
|
56
|
+
|
57
|
+
ds.each do |d|
|
58
|
+
device_name = d["name"]
|
59
|
+
device_udid = d["udid"]
|
60
|
+
device_type = device_type(udid: device_udid, xc: xc)
|
61
|
+
devices << Device.new(name: device_name, device_type: device_type, runtime: runtime, udid: device_udid)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
devices
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.device_type_identifier(udid:, xc:)
|
69
|
+
plist = Plist.parse_xml("#{ENV['HOME']}/Library/Developer/CoreSimulator/Devices/#{udid}/device.plist")
|
70
|
+
plist["deviceType"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.device_type(udid:, xc:)
|
74
|
+
return xc.device_name(device_type_identifier(udid: udid, xc: xc))
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.load_devices
|
78
|
+
`xcrun simctl list devices -j`
|
79
|
+
end
|
80
|
+
end
|
data/lib/peach/xc.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
class XC
|
2
|
+
attr_reader :runtimes, :device_types
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@runtimes = init_runtimes
|
6
|
+
@device_types = init_device_types
|
7
|
+
end
|
8
|
+
|
9
|
+
def exists(device:)
|
10
|
+
return false unless device.udid
|
11
|
+
Device.current_devices.include?(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def runtime_name(identifier)
|
15
|
+
return @runtimes[identifier]
|
16
|
+
end
|
17
|
+
|
18
|
+
def device_name(identifier)
|
19
|
+
return @device_types[identifier]
|
20
|
+
end
|
21
|
+
|
22
|
+
def init_runtimes
|
23
|
+
runtimes_json = JSON.parse(load_runtimes())
|
24
|
+
runtimes = runtimes_json['runtimes']
|
25
|
+
runtime_hash = {}
|
26
|
+
runtimes.each do |runtime|
|
27
|
+
runtime_hash[runtime["identifier"]] = runtime["name"]
|
28
|
+
end
|
29
|
+
runtime_hash
|
30
|
+
end
|
31
|
+
|
32
|
+
def init_device_types
|
33
|
+
devicetypes_json = JSON.parse(load_device_types())
|
34
|
+
devicetypes = devicetypes_json['devicetypes']
|
35
|
+
devicetype_hash = {}
|
36
|
+
devicetypes.each do |runtime|
|
37
|
+
devicetype_hash[runtime["identifier"]] = runtime["name"]
|
38
|
+
end
|
39
|
+
devicetype_hash
|
40
|
+
end
|
41
|
+
|
42
|
+
def load_runtimes
|
43
|
+
`xcrun simctl list runtimes -j`
|
44
|
+
end
|
45
|
+
|
46
|
+
def load_device_types
|
47
|
+
`xcrun simctl list devicetypes -j`
|
48
|
+
end
|
49
|
+
end
|
data/lib/peach.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'yaml'
|
5
|
+
require 'peach/device'
|
6
|
+
require 'peach/xc'
|
7
|
+
|
8
|
+
class Peach
|
9
|
+
|
10
|
+
def self.destroy_all
|
11
|
+
Device.destroy_all(xc: XC.new)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.createDevices(peachFile = 'peach.yml')
|
15
|
+
peaches = YAML.load_file(peachFile)
|
16
|
+
peaches.each do |properties|
|
17
|
+
peach_name = properties["name"]
|
18
|
+
peach_device = properties["device_type"]
|
19
|
+
peach_runtime = properties["runtime"]
|
20
|
+
peach = Device.new(name: peach_name, device_type: peach_device, runtime: peach_runtime)
|
21
|
+
peach.create() unless peach.exists?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: elpeacho
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kevin Barnes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: plist
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Manage your iOS simulators with a yml file.
|
28
|
+
email: iamkevb@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/peach.rb
|
34
|
+
- lib/peach/device.rb
|
35
|
+
- lib/peach/xc.rb
|
36
|
+
homepage: http://rubygems.org/gems/peach
|
37
|
+
licenses:
|
38
|
+
- MIT
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubygems_version: 3.0.2
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: Manage your iOS simulators with a yml file.
|
59
|
+
test_files: []
|