apple-data 1.0.587 → 1.0.595
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/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
|