apple-data 1.0.587 → 1.0.595
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/apple_data/boot_args.rb +1 -1
- data/lib/apple_data/data_file.rb +49 -0
- data/lib/apple_data/fdr.rb +1 -1
- data/lib/apple_data/ioreg.rb +40 -38
- data/lib/apple_data/lockdown.rb +35 -33
- data/lib/apple_data/macho.rb +3 -1
- data/lib/apple_data/version.rb +1 -1
- data/lib/apple_data.rb +19 -6
- data/share/cores.yaml +15 -0
- data/share/devices/iPhone15,2.yaml +0 -0
- data/share/ipsw.yaml +8214 -539
- data/share/keybags/7000.yaml +14818 -1
- data/share/keybags/7001.yaml +121 -1
- data/share/keybags/7002.yaml +1 -1
- data/share/keybags/8000.yaml +44278 -33365
- data/share/keybags/8001.yaml +273 -1
- data/share/keybags/8004.yaml +1 -1
- data/share/keybags/8006.yaml +1 -1
- data/share/keybags/8010.yaml +20525 -11064
- data/share/keybags/8011.yaml +337 -1
- data/share/keybags/8012.yaml +4461 -0
- data/share/keybags/8015.yaml +15674 -8728
- data/share/keybags/8020.yaml +49 -1
- data/share/keybags/8027.yaml +180 -4
- data/share/keybags/8030.yaml +1 -1
- data/share/keybags/8101.yaml +5998 -3292
- data/share/keybags/8103.yaml +118 -4
- data/share/keybags/8110.yaml +168 -0
- data/share/keybags/8112.yaml +136 -0
- data/share/keybags/8120.yaml +44 -0
- data/share/keybags/8301.yaml +1509 -0
- data/share/keybags/8720.yaml +1 -1
- data/share/keybags/8900.yaml +1999 -1
- data/share/keybags/8920.yaml +1 -1
- data/share/keybags/8922.yaml +1 -1
- data/share/keybags/8930.yaml +3 -3
- data/share/keybags/8940.yaml +1 -1
- data/share/keybags/8942.yaml +1 -1
- data/share/keybags/8945.yaml +1 -1
- data/share/keybags/8947.yaml +1 -1
- data/share/keybags/8950.yaml +1 -1
- data/share/keybags/8955.yaml +1 -1
- data/share/keybags/8960.yaml +30937 -1
- data/share/ota.yaml +4 -0
- data/share/tipw_sync.yaml +28312 -35096
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22e817464fbce6112bd5dae6cbef2399725364505f7d285145c4da89f20434bd
|
4
|
+
data.tar.gz: 2fb9f60e8402670a5a666fcde3f3074f6a0b95331c5a4a31a621d058510ff914
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4d339ff15e7c8903a6e59b68dd2e9ab356fea359a8d63d4eec34e11065b54a4a65fe1e35e9638db3536eb8a6a6e36d3d0208a0274d62dbb569c8cda5657cae6
|
7
|
+
data.tar.gz: 7bfb7bfd28fd4a671180f79efef654355acd58ec499a579ccaefa8fde3d2253ed2a0b5abe3c692e0917208b4f54761c6fa9263e8120cf0bf5bf6baab748113cf
|
data/lib/apple_data/boot_args.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AppleData
|
4
|
+
# Base class for all data files
|
5
|
+
class DataFile
|
6
|
+
extend T::Sig
|
7
|
+
attr_reader :data
|
8
|
+
|
9
|
+
sig { params(parts: String).void }
|
10
|
+
def initialize(*parts)
|
11
|
+
@parts = parts
|
12
|
+
@collections = {}
|
13
|
+
T.unsafe(self).load_file(*parts)
|
14
|
+
ensure_metadata
|
15
|
+
end
|
16
|
+
|
17
|
+
sig { params(parts: String).returns(T::Hash[T.untyped, T.untyped]) }
|
18
|
+
def load_file(*parts)
|
19
|
+
parts[-1] = "#{parts[-1]}.yaml" unless T.must(parts[-1]).end_with? '.yaml'
|
20
|
+
@filename = File.join(AppleData.data_location, T.unsafe(File).join(*parts))
|
21
|
+
@data = {}
|
22
|
+
@data = YAML.load_file @filename if File.exist? @filename
|
23
|
+
@data
|
24
|
+
end
|
25
|
+
|
26
|
+
def save!
|
27
|
+
save_data data
|
28
|
+
end
|
29
|
+
|
30
|
+
def save
|
31
|
+
save!
|
32
|
+
end
|
33
|
+
|
34
|
+
def collection(name)
|
35
|
+
@collections[name.to_s] ||= DataFileCollection.new(self, name)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def save_data(data)
|
41
|
+
File.write(@filename, data.to_yaml)
|
42
|
+
end
|
43
|
+
|
44
|
+
def ensure_metadata
|
45
|
+
@data['metadata'] ||= {}
|
46
|
+
@data['metadata'].reverse_merge!({ 'description' => nil, 'credits' => [] })
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/apple_data/fdr.rb
CHANGED
data/lib/apple_data/ioreg.rb
CHANGED
@@ -1,57 +1,59 @@
|
|
1
1
|
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
module AppleData
|
5
|
+
# Data file for the IOReg data
|
6
|
+
class IORegData < AppleData::DataFile
|
7
|
+
def initialize
|
8
|
+
super('ioreg.yaml')
|
8
9
|
|
9
|
-
|
10
|
+
@classes = []
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
@data['classes'].each do |single_class|
|
13
|
+
@classes << IORegClass.load_one(single_class)
|
14
|
+
end
|
13
15
|
end
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
def data
|
18
|
+
@data = {}
|
19
|
+
@data['classes'] = @classes.map(&:to_h)
|
20
|
+
end
|
19
21
|
end
|
20
|
-
end
|
21
22
|
|
22
|
-
# A single IOKit class
|
23
|
-
class IORegClass
|
24
|
-
|
23
|
+
# A single IOKit class
|
24
|
+
class IORegClass
|
25
|
+
attr_accessor :description, :name, :parents, :known_names
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def initialize(klass_name)
|
28
|
+
@name = klass_name
|
29
|
+
@parents = []
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
def self.for_name(name)
|
33
|
+
@instances ||= {}
|
33
34
|
|
34
|
-
|
35
|
+
@instances[name] = IORegClass.new name unless @instances.key? name
|
35
36
|
|
36
|
-
|
37
|
-
|
37
|
+
@instances[name]
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
def self.values
|
41
|
+
@instances.values.sort_by(&:name)
|
42
|
+
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
def self.load_one(hash)
|
45
|
+
instance = for_name hash['name']
|
46
|
+
instance.description = hash['description']
|
47
|
+
instance.parents = hash['parents']
|
48
|
+
instance.known_names = (hash['known_names'] || []).sort
|
49
|
+
end
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-
|
51
|
+
def to_h
|
52
|
+
{ 'name' => @name, 'description' => @description, 'parents' => @parents, 'known_names' => @known_names }
|
53
|
+
end
|
53
54
|
|
54
|
-
|
55
|
-
|
55
|
+
def user_client?
|
56
|
+
@parents.include? 'IOUserClient'
|
57
|
+
end
|
56
58
|
end
|
57
59
|
end
|
data/lib/apple_data/lockdown.rb
CHANGED
@@ -1,48 +1,50 @@
|
|
1
1
|
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
module AppleData
|
5
|
+
# Schema file for the `lockdownd.yaml` file
|
6
|
+
class LockdownData < AppleData::DataFile
|
7
|
+
def initialize
|
8
|
+
super('lockdownd.yaml')
|
9
|
+
@data ||= {}
|
10
|
+
@data['clients'] ||= []
|
11
|
+
@data['domains'] ||= []
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
def ensure_client(client)
|
15
|
+
@data['clients'] << client unless @data['clients'].include? client
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
def ensure_domain_has_property(domain, property, _type = nil)
|
19
|
+
domain_instance = get_domain domain
|
19
20
|
|
20
|
-
|
21
|
+
return unless property
|
21
22
|
|
22
|
-
|
23
|
-
|
23
|
+
domain_instance['properties'] << property unless domain_instance['properties'].include? property
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
def get_domain(domain)
|
27
|
+
result = @data['domains'].find { |d| d['name'] == domain }
|
28
|
+
unless result
|
29
|
+
result = {}
|
30
|
+
result['name'] = domain
|
31
|
+
@data['domains'] << result
|
32
|
+
end
|
33
|
+
result['description'] ||= nil
|
34
|
+
result['properties'] ||= []
|
35
|
+
result
|
31
36
|
end
|
32
|
-
result['description'] ||= nil
|
33
|
-
result['properties'] ||= []
|
34
|
-
result
|
35
|
-
end
|
36
37
|
|
37
|
-
|
38
|
-
|
38
|
+
def data
|
39
|
+
@data['clients'].sort!
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
@data['domains'].each do |domain|
|
42
|
+
domain['properties'].sort!
|
43
|
+
end
|
43
44
|
|
44
|
-
|
45
|
+
@data['domains'].sort_by! { |d| d['name'] }
|
45
46
|
|
46
|
-
|
47
|
+
@data
|
48
|
+
end
|
47
49
|
end
|
48
50
|
end
|
data/lib/apple_data/macho.rb
CHANGED
data/lib/apple_data/version.rb
CHANGED
data/lib/apple_data.rb
CHANGED
@@ -1,13 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
DEFAULT_APPLE_DATA_SHARE = T.let(File.join(File.dirname(__FILE__), '../share/'), String)
|
4
|
+
|
5
|
+
# Base Namespace for AppleData gem
|
6
|
+
module AppleData
|
7
|
+
def get_data(file)
|
8
|
+
YAML.load_file(File.join(@apple_data, file))
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.data_location=(location)
|
12
|
+
@apple_data = location
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.data_location
|
16
|
+
@apple_data || DEFAULT_APPLE_DATA_SHARE
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'apple_data/data_file'
|
3
21
|
require 'apple_data/boot_args'
|
4
22
|
require 'apple_data/fdr'
|
5
23
|
require 'apple_data/ioreg'
|
6
24
|
require 'apple_data/macho'
|
7
25
|
require 'apple_data/lockdown'
|
8
|
-
|
9
|
-
APPLE_DATA_SHARE = T.let(File.join(File.dirname(__FILE__), '../share/'), String)
|
10
|
-
|
11
|
-
def get_data(file)
|
12
|
-
YAML.load_file(File.join(APPLE_DATA_SHARE, file))
|
13
|
-
end
|
26
|
+
require 'apple_data/keybag'
|
data/share/cores.yaml
CHANGED
@@ -315,7 +315,18 @@ chip_ids:
|
|
315
315
|
board_name: J475dAP
|
316
316
|
|
317
317
|
|
318
|
+
0x6500:
|
319
|
+
name: R1
|
320
|
+
description: Vision Pro R1
|
321
|
+
architecture: arm64
|
322
|
+
type: AVISP
|
318
323
|
|
324
|
+
revisions:
|
325
|
+
boards:
|
326
|
+
0x01:
|
327
|
+
product_name: Apple Vision Pro (R1)
|
328
|
+
product_id:
|
329
|
+
board_name:
|
319
330
|
|
320
331
|
0x7000:
|
321
332
|
name: t7000
|
@@ -1594,6 +1605,10 @@ chip_ids:
|
|
1594
1605
|
product_name: MacBook Air (M2, 2023)
|
1595
1606
|
product_id: Mac14,15
|
1596
1607
|
board_name: J415AP
|
1608
|
+
0x42:
|
1609
|
+
product_name: Apple Vision Pro
|
1610
|
+
product_id: RealityDevice14,1
|
1611
|
+
board_name: n301
|
1597
1612
|
|
1598
1613
|
0x8120:
|
1599
1614
|
name: t8120
|
File without changes
|