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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/apple_data/boot_args.rb +1 -1
  3. data/lib/apple_data/data_file.rb +49 -0
  4. data/lib/apple_data/fdr.rb +1 -1
  5. data/lib/apple_data/ioreg.rb +40 -38
  6. data/lib/apple_data/lockdown.rb +35 -33
  7. data/lib/apple_data/macho.rb +3 -1
  8. data/lib/apple_data/version.rb +1 -1
  9. data/lib/apple_data.rb +19 -6
  10. data/share/cores.yaml +15 -0
  11. data/share/devices/iPhone15,2.yaml +0 -0
  12. data/share/ipsw.yaml +8214 -539
  13. data/share/keybags/7000.yaml +14818 -1
  14. data/share/keybags/7001.yaml +121 -1
  15. data/share/keybags/7002.yaml +1 -1
  16. data/share/keybags/8000.yaml +44278 -33365
  17. data/share/keybags/8001.yaml +273 -1
  18. data/share/keybags/8004.yaml +1 -1
  19. data/share/keybags/8006.yaml +1 -1
  20. data/share/keybags/8010.yaml +20525 -11064
  21. data/share/keybags/8011.yaml +337 -1
  22. data/share/keybags/8012.yaml +4461 -0
  23. data/share/keybags/8015.yaml +15674 -8728
  24. data/share/keybags/8020.yaml +49 -1
  25. data/share/keybags/8027.yaml +180 -4
  26. data/share/keybags/8030.yaml +1 -1
  27. data/share/keybags/8101.yaml +5998 -3292
  28. data/share/keybags/8103.yaml +118 -4
  29. data/share/keybags/8110.yaml +168 -0
  30. data/share/keybags/8112.yaml +136 -0
  31. data/share/keybags/8120.yaml +44 -0
  32. data/share/keybags/8301.yaml +1509 -0
  33. data/share/keybags/8720.yaml +1 -1
  34. data/share/keybags/8900.yaml +1999 -1
  35. data/share/keybags/8920.yaml +1 -1
  36. data/share/keybags/8922.yaml +1 -1
  37. data/share/keybags/8930.yaml +3 -3
  38. data/share/keybags/8940.yaml +1 -1
  39. data/share/keybags/8942.yaml +1 -1
  40. data/share/keybags/8945.yaml +1 -1
  41. data/share/keybags/8947.yaml +1 -1
  42. data/share/keybags/8950.yaml +1 -1
  43. data/share/keybags/8955.yaml +1 -1
  44. data/share/keybags/8960.yaml +30937 -1
  45. data/share/ota.yaml +4 -0
  46. data/share/tipw_sync.yaml +28312 -35096
  47. metadata +10 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f240e7d367575fe8d99486eb07bca0d43ec2fa8d5cf7545003687d2cedd0c0c4
4
- data.tar.gz: a76ebd9e597d58911736579fcc105d9e6e56b27ac7fbf96dc1764eb1ce58e3d7
3
+ metadata.gz: 22e817464fbce6112bd5dae6cbef2399725364505f7d285145c4da89f20434bd
4
+ data.tar.gz: 2fb9f60e8402670a5a666fcde3f3074f6a0b95331c5a4a31a621d058510ff914
5
5
  SHA512:
6
- metadata.gz: 667efca7e6dfc8c5e6e7a38a18f1bfeda459004fdcc433572dfc22f6ca0fbb76b921e033f30a07439e568c00d04748773dd4afe97f28f52eb20fa98f854a42d7
7
- data.tar.gz: 63c66b3939a84118fd437eaca612f4fa49b2450de3369106bce31a75c440cffc51483f776a1496aa38a8b097d9245f8ee9d577243d1807c4a358530f25b96eb2
6
+ metadata.gz: b4d339ff15e7c8903a6e59b68dd2e9ab356fea359a8d63d4eec34e11065b54a4a65fe1e35e9638db3536eb8a6a6e36d3d0208a0274d62dbb569c8cda5657cae6
7
+ data.tar.gz: 7bfb7bfd28fd4a671180f79efef654355acd58ec499a579ccaefa8fde3d2253ed2a0b5abe3c692e0917208b4f54761c6fa9263e8120cf0bf5bf6baab748113cf
@@ -1,5 +1,5 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- class BootArgsData < DataFile
4
+ class BootArgsData < AppleData::DataFile
5
5
  end
@@ -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
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Factory Device Restore
5
- class FDRData < DataFile
5
+ class FDRData < AppleData::DataFile
6
6
  def initialize
7
7
  super('fdr.yaml')
8
8
 
@@ -1,57 +1,59 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- # Data file for the IOReg data
5
- class IORegData < DataFile
6
- def initialize
7
- super('ioreg.yaml')
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
- @classes = []
10
+ @classes = []
10
11
 
11
- @data['classes'].each do |single_class|
12
- @classes << IORegClass.load_one(single_class)
12
+ @data['classes'].each do |single_class|
13
+ @classes << IORegClass.load_one(single_class)
14
+ end
13
15
  end
14
- end
15
16
 
16
- def data
17
- @data = {}
18
- @data['classes'] = @classes.map(&:to_h)
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
- attr_accessor :description, :name, :parents, :known_names
23
+ # A single IOKit class
24
+ class IORegClass
25
+ attr_accessor :description, :name, :parents, :known_names
25
26
 
26
- def initialize(klass_name)
27
- @name = klass_name
28
- @parents = []
29
- end
27
+ def initialize(klass_name)
28
+ @name = klass_name
29
+ @parents = []
30
+ end
30
31
 
31
- def self.for_name(name)
32
- @instances ||= {}
32
+ def self.for_name(name)
33
+ @instances ||= {}
33
34
 
34
- @instances[name] = IORegClass.new name unless @instances.key? name
35
+ @instances[name] = IORegClass.new name unless @instances.key? name
35
36
 
36
- @instances[name]
37
- end
37
+ @instances[name]
38
+ end
38
39
 
39
- def self.values
40
- @instances.values.sort_by(&:name)
41
- end
40
+ def self.values
41
+ @instances.values.sort_by(&:name)
42
+ end
42
43
 
43
- def self.load_one(hash)
44
- instance = for_name hash['name']
45
- instance.description = hash['description']
46
- instance.parents = hash['parents']
47
- instance.known_names = (hash['known_names'] || []).sort
48
- end
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
- def to_h
51
- { 'name' => @name, 'description' => @description, 'parents' => @parents, 'known_names' => @known_names }
52
- end
51
+ def to_h
52
+ { 'name' => @name, 'description' => @description, 'parents' => @parents, 'known_names' => @known_names }
53
+ end
53
54
 
54
- def user_client?
55
- @parents.include? 'IOUserClient'
55
+ def user_client?
56
+ @parents.include? 'IOUserClient'
57
+ end
56
58
  end
57
59
  end
@@ -1,48 +1,50 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- # Schema file for the `lockdownd.yaml` file
5
- class LockdownData < DataFile
6
- def initialize
7
- super('lockdownd.yaml')
8
- @data ||= {}
9
- @data['clients'] ||= []
10
- @data['domains'] ||= []
11
- end
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
- def ensure_client(client)
14
- @data['clients'] << client unless @data['clients'].include? client
15
- end
14
+ def ensure_client(client)
15
+ @data['clients'] << client unless @data['clients'].include? client
16
+ end
16
17
 
17
- def ensure_domain_has_property(domain, property, _type = nil)
18
- domain_instance = get_domain domain
18
+ def ensure_domain_has_property(domain, property, _type = nil)
19
+ domain_instance = get_domain domain
19
20
 
20
- return unless property
21
+ return unless property
21
22
 
22
- domain_instance['properties'] << property unless domain_instance['properties'].include? property
23
- end
23
+ domain_instance['properties'] << property unless domain_instance['properties'].include? property
24
+ end
24
25
 
25
- def get_domain(domain)
26
- result = @data['domains'].find { |d| d['name'] == domain }
27
- unless result
28
- result = {}
29
- result['name'] = domain
30
- @data['domains'] << result
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
- def data
38
- @data['clients'].sort!
38
+ def data
39
+ @data['clients'].sort!
39
40
 
40
- @data['domains'].each do |domain|
41
- domain['properties'].sort!
42
- end
41
+ @data['domains'].each do |domain|
42
+ domain['properties'].sort!
43
+ end
43
44
 
44
- @data['domains'].sort_by! { |d| d['name'] }
45
+ @data['domains'].sort_by! { |d| d['name'] }
45
46
 
46
- @data
47
+ @data
48
+ end
47
49
  end
48
50
  end
@@ -1,5 +1,7 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- class MachoData < DataFile
4
+ module AppleData
5
+ class MachoData < AppleData::DataFile
6
+ end
5
7
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppleData
4
- VERSION = '1.0.587'
4
+ VERSION = '1.0.595'
5
5
  end
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