app-info 3.0.0.beta1 → 3.0.0.beta2

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.
data/lib/app_info/pe.rb CHANGED
@@ -24,14 +24,21 @@ module AppInfo
24
24
  0x5128 => 'RISC-v 128'
25
25
  }.freeze
26
26
 
27
- def file_type
28
- Format::PE
29
- end
30
-
27
+ # @return [Symbol] {Platform}
31
28
  def platform
32
29
  Platform::WINDOWS
33
30
  end
34
31
 
32
+ # @return [Symbol] {OperaSystem}
33
+ def opera_system
34
+ OperaSystem::WINDOWS
35
+ end
36
+
37
+ # @return [Symbol] {Device}
38
+ def device
39
+ Device::WINDOWS
40
+ end
41
+
35
42
  # return file size
36
43
  # @example Read file size in integer
37
44
  # aab.size # => 3618865
@@ -49,23 +56,38 @@ module AppInfo
49
56
  file_to_human_size(binary_file, human_size: human_size)
50
57
  end
51
58
 
59
+ # @!method product_name
60
+ # @see VersionInfo#product_name
61
+ # @return [String]
62
+ # @!method product_version
63
+ # @see VersionInfo#product_version
64
+ # @return [String]
65
+ # @!method company_name
66
+ # @see VersionInfo#company_name
67
+ # @return [String]
68
+ # @!method assembly_version
69
+ # @see VersionInfo#assembly_version
70
+ # @return [String]
52
71
  def_delegators :version_info, :product_name, :product_version, :company_name, :assembly_version
53
72
 
54
73
  alias name product_name
55
74
  alias release_version product_version
56
75
  alias build_version assembly_version
57
76
 
77
+ # @return [String]
58
78
  def archs
59
79
  ARCH[image_file_header.Machine] || 'unknown'
60
80
  end
61
81
  alias architectures archs
62
82
 
83
+ # @return [Hash{String => String}] imports imports of libraries
63
84
  def imports
64
85
  @imports ||= pe.imports.each_with_object({}) do |import, obj|
65
86
  obj[import.module_name] = import.first_thunk.map(&:name).compact
66
87
  end
67
88
  end
68
89
 
90
+ # @return [Array{String}] icons paths of bmp image icons
69
91
  def icons
70
92
  @icons ||= lambda {
71
93
  # Fetch the largest size icon
@@ -105,6 +127,7 @@ module AppInfo
105
127
  }.call
106
128
  end
107
129
 
130
+ # @return [PEdump]
108
131
  def pe
109
132
  @pe ||= lambda {
110
133
  pe = PEdump.new(io)
@@ -113,6 +136,7 @@ module AppInfo
113
136
  }.call
114
137
  end
115
138
 
139
+ # @return [VersionInfo]
116
140
  def version_info
117
141
  @version_info ||= VersionInfo.new(pe.version_info)
118
142
  end
@@ -124,6 +148,7 @@ module AppInfo
124
148
  @imports = nil
125
149
  end
126
150
 
151
+ # @return [String] binary_file path
127
152
  def binary_file
128
153
  @binary_file ||= lambda {
129
154
  file_io = ::File.open(@file, 'rb')
@@ -131,7 +156,7 @@ module AppInfo
131
156
 
132
157
  zip_file = Zip::File.open(@file)
133
158
  zip_entry = zip_file.glob('*.exe').first
134
- raise NotFoundWinBinraryError, 'Not found .exe file in archive file' if zip_entry.nil?
159
+ raise NotFoundError, 'Not found .exe file in archive file' if zip_entry.nil?
135
160
 
136
161
  exe_file = tempdir(zip_entry.name, prefix: 'pe-exe', system: true)
137
162
  zip_entry.extract(exe_file)
@@ -147,6 +172,7 @@ module AppInfo
147
172
  @image_file_header ||= pe.pe.image_file_header
148
173
  end
149
174
 
175
+ # @return [Hash{Symbol => String}]
150
176
  def icon_metadata(file, mask_file: nil)
151
177
  {
152
178
  name: ::File.basename(file),
@@ -156,6 +182,7 @@ module AppInfo
156
182
  }
157
183
  end
158
184
 
185
+ # @return [File]
159
186
  def io
160
187
  @io ||= ::File.open(binary_file, 'rb')
161
188
  end
@@ -168,30 +195,37 @@ module AppInfo
168
195
  @raw = raw
169
196
  end
170
197
 
198
+ # @return [String]
171
199
  def company_name
172
200
  @company_name ||= value_of('CompanyName')
173
201
  end
174
202
 
203
+ # @return [String]
175
204
  def product_name
176
205
  @product_name ||= value_of('ProductName')
177
206
  end
178
207
 
208
+ # @return [String]
179
209
  def product_version
180
210
  @product_version ||= value_of('ProductVersion')
181
211
  end
182
212
 
213
+ # @return [String]
183
214
  def assembly_version
184
215
  @assembly_version ||= value_of('Assembly Version')
185
216
  end
186
217
 
218
+ # @return [String]
187
219
  def file_version
188
220
  @file_version ||= value_of('FileVersion')
189
221
  end
190
222
 
223
+ # @return [String]
191
224
  def file_description
192
225
  @file_description ||= value_of('FileDescription')
193
226
  end
194
227
 
228
+ # @return [String]
195
229
  def copyright
196
230
  @copyright ||= value_of('LegalCopyright')
197
231
  end
@@ -32,18 +32,24 @@ module AppInfo
32
32
  @data = String.new
33
33
  end
34
34
 
35
+ # @return [Integer]
35
36
  def size
36
37
  @io.size
37
38
  end
38
39
 
40
+ # @param [String] format
41
+ # @return [String]
42
+ # @see IO package data
39
43
  def unpack(format)
40
44
  @io.unpack(format)
41
45
  end
42
46
 
47
+ # @return [String]
43
48
  def header
44
49
  @header ||= self[0, 8]
45
50
  end
46
51
 
52
+ # @return [Boolean]
47
53
  def png?
48
54
  header.bytes == PNG_HEADER
49
55
  end
@@ -61,10 +67,17 @@ module AppInfo
61
67
  end
62
68
  end
63
69
 
70
+ # Decompress crushed png file.
71
+ # @param [String] input path of png file
72
+ # @param [String] output path of output file
73
+ # @return [Boolean] result whether decompress successfully
64
74
  def self.decompress(input, output)
65
75
  new(input).decompress(output)
66
76
  end
67
77
 
78
+ # get png dimensions
79
+ # @param [String] input path of png file
80
+ # @return [Array<Integer>] dimensions width, height value of png file
68
81
  def self.dimensions(input)
69
82
  new(input).dimensions
70
83
  end
@@ -74,10 +87,16 @@ module AppInfo
74
87
  raise FormatError, 'not a png file' unless @io.png?
75
88
  end
76
89
 
90
+ # get png dimensions
91
+ # @param [String] input path of png file
92
+ # @return [Array<Integer>] dimensions width, height value of png file
77
93
  def dimensions
78
94
  _dump_sections(dimensions: true)
79
95
  end
80
96
 
97
+ # Decompress crushed png file.
98
+ # @param [String] output path of output file
99
+ # @return [Boolean] result whether decompress successfully
81
100
  def decompress(output)
82
101
  content = _remap(_dump_sections)
83
102
  return false unless content
@@ -10,41 +10,54 @@ module AppInfo
10
10
 
11
11
  NAMESPACE = UUIDTools::UUID.sha1_create(UUIDTools::UUID_DNS_NAMESPACE, 'icyleaf.com')
12
12
 
13
- def file_type
14
- Format::PROGUARD
13
+ # @return [Symbol] {Platform}
14
+ def platform
15
+ Platform::GOOGLE
15
16
  end
16
17
 
18
+ # @return [Symbol] {OperaSystem}
19
+ def opera_system
20
+ OperaSystem::ANDROID
21
+ end
22
+
23
+ # @return [String]
17
24
  def uuid
18
25
  # Similar to https://docs.sentry.io/workflow/debug-files/#proguard-uuids
19
26
  UUIDTools::UUID.sha1_create(NAMESPACE, ::File.read(mapping_path)).to_s
20
27
  end
21
28
  alias debug_id uuid
22
29
 
30
+ # @return [Boolean]
23
31
  def mapping?
24
32
  ::File.exist?(mapping_path)
25
33
  end
26
34
 
35
+ # @return [Boolean]
27
36
  def manifest?
28
37
  ::File.exist?(manifest_path)
29
38
  end
30
39
 
40
+ # @return [Boolean]
31
41
  def symbol?
32
42
  ::File.exist?(symbol_path)
33
43
  end
34
44
  alias resource? symbol?
35
45
 
46
+ # @return [String, nil]
36
47
  def package_name
37
48
  return unless manifest?
38
49
 
39
50
  manifest.root.attributes['package']
40
51
  end
41
52
 
53
+ # @return [String, nil]
42
54
  def releasd_version
43
55
  return unless manifest?
44
56
 
45
57
  manifest.root.attributes['package']
46
58
  end
47
59
 
60
+ # @return [String, nil]
48
61
  def version_name
49
62
  return unless manifest?
50
63
 
@@ -52,6 +65,7 @@ module AppInfo
52
65
  end
53
66
  alias release_version version_name
54
67
 
68
+ # @return [String, nil]
55
69
  def version_code
56
70
  return unless manifest?
57
71
 
@@ -59,25 +73,30 @@ module AppInfo
59
73
  end
60
74
  alias build_version version_code
61
75
 
76
+ # @return [REXML::Document]
62
77
  def manifest
63
78
  return unless manifest?
64
79
 
65
80
  @manifest ||= REXML::Document.new(::File.new(manifest_path))
66
81
  end
67
82
 
83
+ # @return [String]
68
84
  def mapping_path
69
85
  @mapping_path ||= Dir.glob(::File.join(contents, '*mapping*.txt')).first
70
86
  end
71
87
 
88
+ # @return [String]
72
89
  def manifest_path
73
90
  @manifest_path ||= ::File.join(contents, 'AndroidManifest.xml')
74
91
  end
75
92
 
93
+ # @return [String]
76
94
  def symbol_path
77
95
  @symbol_path ||= ::File.join(contents, 'R.txt')
78
96
  end
79
97
  alias resource_path symbol_path
80
98
 
99
+ # @return [String] contents path of contents
81
100
  def contents
82
101
  @contents ||= unarchive(@file, prefix: 'proguard')
83
102
  end
@@ -6,6 +6,7 @@ require 'app_info/core_ext'
6
6
 
7
7
  module AppInfo
8
8
  module Protobuf
9
+ # AAB Protobuf Base class
9
10
  class Base
10
11
  include Helper::GenerateClass
11
12
 
@@ -21,6 +22,7 @@ module AppInfo
21
22
  end
22
23
  end
23
24
 
25
+ # AAB Protobuf Attribute
24
26
  class Attribute < Base
25
27
  attr_reader :namespace, :name, :value, :resource_id
26
28
 
@@ -47,6 +49,8 @@ module AppInfo
47
49
  end
48
50
  end
49
51
 
52
+ # AAB Protobuf Node class.
53
+ # example: manifest,activity, activity-alias, service, receiver, provider, application
50
54
  class Node < Base
51
55
  attr_reader :name, :attributes, :children
52
56
 
@@ -106,6 +110,7 @@ module AppInfo
106
110
  end
107
111
  end
108
112
 
113
+ # AAB Protobuf Manifest
109
114
  class Manifest < Node
110
115
  def self.parse(io, resources = nil)
111
116
  doc = Aapt::Pb::XmlNode.decode(io)
@@ -170,7 +175,6 @@ module AppInfo
170
175
  end.flatten.uniq
171
176
  end
172
177
 
173
- # :nodoc:
174
178
  # Workaround ruby always return true by called `Object.const_defined?(Data)`
175
179
  class Data < Node; end
176
180
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppInfo
4
- VERSION = '3.0.0.beta1'
4
+ VERSION = '3.0.0.beta2'
5
5
  end
data/lib/app_info.rb CHANGED
@@ -11,18 +11,19 @@ require 'app_info/file'
11
11
  require 'app_info/info_plist'
12
12
  require 'app_info/mobile_provision'
13
13
 
14
+ require 'app_info/apple'
15
+ require 'app_info/macos'
14
16
  require 'app_info/ipa'
15
17
  require 'app_info/ipa/plugin'
16
18
  require 'app_info/ipa/framework'
17
19
 
18
- require 'app_info/android/signature'
20
+ require 'app_info/android'
19
21
  require 'app_info/apk'
20
22
  require 'app_info/aab'
21
23
 
22
24
  require 'app_info/proguard'
23
25
  require 'app_info/dsym'
24
26
 
25
- require 'app_info/macos'
26
27
  require 'app_info/pe'
27
28
 
28
29
  # fix invaild date format warnings
@@ -45,7 +46,7 @@ module AppInfo
45
46
  when Format::MACOS then Macos.new(file)
46
47
  when Format::PE then PE.new(file)
47
48
  else
48
- raise UnknownFileTypeError, "Do not detect file type: #{file}"
49
+ raise UnknownFormatError, "Do not detect file format: #{file}"
49
50
  end
50
51
 
51
52
  return parser unless block_given?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app-info
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta1
4
+ version: 3.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - icyleaf
@@ -226,6 +226,7 @@ files:
226
226
  - lib/app-info.rb
227
227
  - lib/app_info.rb
228
228
  - lib/app_info/aab.rb
229
+ - lib/app_info/android.rb
229
230
  - lib/app_info/android/signature.rb
230
231
  - lib/app_info/android/signatures/base.rb
231
232
  - lib/app_info/android/signatures/info.rb
@@ -234,6 +235,7 @@ files:
234
235
  - lib/app_info/android/signatures/v3.rb
235
236
  - lib/app_info/android/signatures/v4.rb
236
237
  - lib/app_info/apk.rb
238
+ - lib/app_info/apple.rb
237
239
  - lib/app_info/certificate.rb
238
240
  - lib/app_info/const.rb
239
241
  - lib/app_info/core_ext.rb