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.
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