app-info 2.8.5 → 3.0.0.beta1
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/.github/dependabot.yml +12 -7
- data/.github/workflows/ci.yml +3 -1
- data/.rubocop.yml +31 -11
- data/CHANGELOG.md +22 -0
- data/Gemfile +7 -1
- data/README.md +64 -9
- data/Rakefile +11 -0
- data/app_info.gemspec +12 -3
- data/lib/app_info/aab.rb +58 -39
- data/lib/app_info/android/signature.rb +114 -0
- data/lib/app_info/android/signatures/base.rb +49 -0
- data/lib/app_info/android/signatures/info.rb +152 -0
- data/lib/app_info/android/signatures/v1.rb +59 -0
- data/lib/app_info/android/signatures/v2.rb +117 -0
- data/lib/app_info/android/signatures/v3.rb +127 -0
- data/lib/app_info/android/signatures/v4.rb +14 -0
- data/lib/app_info/apk.rb +43 -46
- data/lib/app_info/certificate.rb +181 -0
- data/lib/app_info/const.rb +41 -0
- data/lib/app_info/core_ext/object/try.rb +3 -1
- data/lib/app_info/core_ext/string/inflector.rb +2 -0
- data/lib/app_info/dsym/debug_info.rb +72 -0
- data/lib/app_info/dsym/macho.rb +55 -0
- data/lib/app_info/dsym.rb +27 -134
- data/lib/app_info/error.rb +7 -1
- data/lib/app_info/file.rb +23 -0
- data/lib/app_info/helper/archive.rb +37 -0
- data/lib/app_info/helper/file_size.rb +25 -0
- data/lib/app_info/helper/generate_class.rb +29 -0
- data/lib/app_info/helper/protobuf.rb +12 -0
- data/lib/app_info/helper/signatures.rb +229 -0
- data/lib/app_info/helper.rb +5 -126
- data/lib/app_info/info_plist.rb +14 -6
- data/lib/app_info/ipa/framework.rb +4 -4
- data/lib/app_info/ipa.rb +41 -36
- data/lib/app_info/macos.rb +34 -26
- data/lib/app_info/mobile_provision.rb +19 -30
- data/lib/app_info/pe.rb +226 -0
- data/lib/app_info/png_uncrush.rb +5 -4
- data/lib/app_info/proguard.rb +11 -17
- data/lib/app_info/protobuf/manifest.rb +1 -2
- data/lib/app_info/protobuf/models/Configuration_pb.rb +1 -0
- data/lib/app_info/protobuf/models/README.md +7 -0
- data/lib/app_info/protobuf/models/Resources_pb.rb +2 -0
- data/lib/app_info/protobuf/resources.rb +5 -5
- data/lib/app_info/version.rb +1 -1
- data/lib/app_info.rb +88 -45
- metadata +46 -35
data/lib/app_info.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'app_info/version'
|
4
|
-
require 'app_info/error'
|
5
4
|
require 'app_info/core_ext'
|
5
|
+
require 'app_info/const'
|
6
|
+
require 'app_info/certificate'
|
6
7
|
require 'app_info/helper'
|
8
|
+
require 'app_info/error'
|
7
9
|
|
10
|
+
require 'app_info/file'
|
8
11
|
require 'app_info/info_plist'
|
9
12
|
require 'app_info/mobile_provision'
|
10
13
|
|
@@ -12,6 +15,7 @@ require 'app_info/ipa'
|
|
12
15
|
require 'app_info/ipa/plugin'
|
13
16
|
require 'app_info/ipa/framework'
|
14
17
|
|
18
|
+
require 'app_info/android/signature'
|
15
19
|
require 'app_info/apk'
|
16
20
|
require 'app_info/aab'
|
17
21
|
|
@@ -19,6 +23,7 @@ require 'app_info/proguard'
|
|
19
23
|
require 'app_info/dsym'
|
20
24
|
|
21
25
|
require 'app_info/macos'
|
26
|
+
require 'app_info/pe'
|
22
27
|
|
23
28
|
# fix invaild date format warnings
|
24
29
|
Zip.warn_invalid_date = false
|
@@ -26,44 +31,58 @@ Zip.warn_invalid_date = false
|
|
26
31
|
# AppInfo Module
|
27
32
|
module AppInfo
|
28
33
|
class << self
|
29
|
-
UNKNOWN_FORMAT = :unkown
|
30
|
-
|
31
34
|
# Get a new parser for automatic
|
32
35
|
def parse(file)
|
33
|
-
raise NotFoundError, file unless File.exist?(file)
|
34
|
-
|
35
|
-
case file_type(file)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
36
|
+
raise NotFoundError, file unless ::File.exist?(file)
|
37
|
+
|
38
|
+
parser = case file_type(file)
|
39
|
+
when Format::IPA then IPA.new(file)
|
40
|
+
when Format::APK then APK.new(file)
|
41
|
+
when Format::AAB then AAB.new(file)
|
42
|
+
when Format::MOBILEPROVISION then MobileProvision.new(file)
|
43
|
+
when Format::DSYM then DSYM.new(file)
|
44
|
+
when Format::PROGUARD then Proguard.new(file)
|
45
|
+
when Format::MACOS then Macos.new(file)
|
46
|
+
when Format::PE then PE.new(file)
|
47
|
+
else
|
48
|
+
raise UnknownFileTypeError, "Do not detect file type: #{file}"
|
49
|
+
end
|
50
|
+
|
51
|
+
return parser unless block_given?
|
52
|
+
|
53
|
+
# call block and clear!
|
54
|
+
yield parser
|
55
|
+
parser.clear!
|
46
56
|
end
|
47
57
|
alias dump parse
|
48
58
|
|
49
59
|
def parse?(file)
|
50
|
-
file_type(file) !=
|
60
|
+
file_type(file) != Format::UNKNOWN
|
51
61
|
end
|
52
62
|
|
53
63
|
# Detect file type by read file header
|
54
64
|
#
|
55
65
|
# TODO: This can be better solution, if anyone knows, tell me please.
|
56
66
|
def file_type(file)
|
57
|
-
header_hex = File.read(file, 100)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
67
|
+
header_hex = ::File.read(file, 100)
|
68
|
+
case header_hex
|
69
|
+
when ZIP_RETGEX
|
70
|
+
detect_zip_file(file)
|
71
|
+
when PE_REGEX
|
72
|
+
Format::PE
|
73
|
+
when PLIST_REGEX, BPLIST_REGEX
|
74
|
+
Format::MOBILEPROVISION
|
75
|
+
else
|
76
|
+
Format::UNKNOWN
|
77
|
+
end
|
65
78
|
end
|
66
79
|
|
80
|
+
def logger
|
81
|
+
@logger ||= Logger.new($stdout, level: :warn)
|
82
|
+
end
|
83
|
+
|
84
|
+
attr_writer :logger
|
85
|
+
|
67
86
|
private
|
68
87
|
|
69
88
|
# :nodoc:
|
@@ -71,35 +90,59 @@ module AppInfo
|
|
71
90
|
Zip.warn_invalid_date = false
|
72
91
|
zip_file = Zip::File.open(file)
|
73
92
|
|
74
|
-
return
|
75
|
-
return
|
76
|
-
|
93
|
+
return Format::PROGUARD if proguard_clues?(zip_file)
|
94
|
+
return Format::APK if apk_clues?(zip_file)
|
95
|
+
return Format::AAB if aab_clues?(zip_file)
|
96
|
+
return Format::MACOS if macos_clues?(zip_file)
|
97
|
+
return Format::PE if pe_clues?(zip_file)
|
98
|
+
return Format::UNKNOWN unless clue = other_clues?(zip_file)
|
77
99
|
|
78
|
-
|
79
|
-
|
100
|
+
clue
|
101
|
+
ensure
|
102
|
+
zip_file.close
|
103
|
+
end
|
80
104
|
|
81
|
-
|
82
|
-
|
105
|
+
# :nodoc:
|
106
|
+
def proguard_clues?(zip_file)
|
107
|
+
!zip_file.glob('*mapping*.txt').empty?
|
108
|
+
end
|
83
109
|
|
84
|
-
|
85
|
-
|
110
|
+
# :nodoc:
|
111
|
+
def apk_clues?(zip_file)
|
112
|
+
!zip_file.find_entry('AndroidManifest.xml').nil? &&
|
113
|
+
!zip_file.find_entry('classes.dex').nil?
|
114
|
+
end
|
86
115
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
zip_file.close
|
116
|
+
# :nodoc:
|
117
|
+
def aab_clues?(zip_file)
|
118
|
+
!zip_file.find_entry('base/manifest/AndroidManifest.xml').nil? &&
|
119
|
+
!zip_file.find_entry('BundleConfig.pb').nil?
|
92
120
|
end
|
93
121
|
|
94
|
-
|
95
|
-
|
122
|
+
# :nodoc:
|
123
|
+
def macos_clues?(zip_file)
|
124
|
+
!zip_file.glob('*/Contents/MacOS/*').empty? &&
|
125
|
+
!zip_file.glob('*/Contents/Info.plist').empty?
|
126
|
+
end
|
96
127
|
|
97
128
|
# :nodoc:
|
98
|
-
def
|
99
|
-
|
100
|
-
|
101
|
-
|
129
|
+
def pe_clues?(zip_file)
|
130
|
+
!zip_file.glob('*.exe').empty?
|
131
|
+
end
|
132
|
+
|
133
|
+
# :nodoc:
|
134
|
+
def other_clues?(zip_file)
|
135
|
+
zip_file.each do |f|
|
136
|
+
path = f.name
|
137
|
+
|
138
|
+
return Format::IPA if path.include?('Payload/') && path.end_with?('Info.plist')
|
139
|
+
return Format::DSYM if path.include?('Contents/Resources/DWARF/')
|
102
140
|
end
|
103
141
|
end
|
104
142
|
end
|
143
|
+
|
144
|
+
ZIP_RETGEX = /^\x50\x4b\x03\x04/.freeze
|
145
|
+
PE_REGEX = /^MZ/.freeze
|
146
|
+
PLIST_REGEX = /\x3C\x3F\x78\x6D\x6C/.freeze
|
147
|
+
BPLIST_REGEX = /^\x62\x70\x6C\x69\x73\x74/.freeze
|
105
148
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app-info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- icyleaf
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: CFPropertyList
|
@@ -76,14 +76,14 @@ dependencies:
|
|
76
76
|
requirements:
|
77
77
|
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 2.
|
79
|
+
version: 2.6.0
|
80
80
|
type: :runtime
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - "~>"
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: 2.
|
86
|
+
version: 2.6.0
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: rubyzip
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,6 +138,20 @@ dependencies:
|
|
138
138
|
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: 0.2.0
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: pedump
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - "~>"
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: 0.6.2
|
148
|
+
type: :runtime
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 0.6.2
|
141
155
|
- !ruby/object:Gem::Dependency
|
142
156
|
name: google-protobuf
|
143
157
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,34 +200,6 @@ dependencies:
|
|
186
200
|
- - ">="
|
187
201
|
- !ruby/object:Gem::Version
|
188
202
|
version: '10.0'
|
189
|
-
- !ruby/object:Gem::Dependency
|
190
|
-
name: rspec
|
191
|
-
requirement: !ruby/object:Gem::Requirement
|
192
|
-
requirements:
|
193
|
-
- - "~>"
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
version: '3.0'
|
196
|
-
type: :development
|
197
|
-
prerelease: false
|
198
|
-
version_requirements: !ruby/object:Gem::Requirement
|
199
|
-
requirements:
|
200
|
-
- - "~>"
|
201
|
-
- !ruby/object:Gem::Version
|
202
|
-
version: '3.0'
|
203
|
-
- !ruby/object:Gem::Dependency
|
204
|
-
name: rubocop
|
205
|
-
requirement: !ruby/object:Gem::Requirement
|
206
|
-
requirements:
|
207
|
-
- - "~>"
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
version: '1.19'
|
210
|
-
type: :development
|
211
|
-
prerelease: false
|
212
|
-
version_requirements: !ruby/object:Gem::Requirement
|
213
|
-
requirements:
|
214
|
-
- - "~>"
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
version: '1.19'
|
217
203
|
description: Teardown tool for ipa/apk files and dSYM file, even support for info.plist
|
218
204
|
and .mobileprovision files
|
219
205
|
email:
|
@@ -240,19 +226,37 @@ files:
|
|
240
226
|
- lib/app-info.rb
|
241
227
|
- lib/app_info.rb
|
242
228
|
- lib/app_info/aab.rb
|
229
|
+
- lib/app_info/android/signature.rb
|
230
|
+
- lib/app_info/android/signatures/base.rb
|
231
|
+
- lib/app_info/android/signatures/info.rb
|
232
|
+
- lib/app_info/android/signatures/v1.rb
|
233
|
+
- lib/app_info/android/signatures/v2.rb
|
234
|
+
- lib/app_info/android/signatures/v3.rb
|
235
|
+
- lib/app_info/android/signatures/v4.rb
|
243
236
|
- lib/app_info/apk.rb
|
237
|
+
- lib/app_info/certificate.rb
|
238
|
+
- lib/app_info/const.rb
|
244
239
|
- lib/app_info/core_ext.rb
|
245
240
|
- lib/app_info/core_ext/object/try.rb
|
246
241
|
- lib/app_info/core_ext/string/inflector.rb
|
247
242
|
- lib/app_info/dsym.rb
|
243
|
+
- lib/app_info/dsym/debug_info.rb
|
244
|
+
- lib/app_info/dsym/macho.rb
|
248
245
|
- lib/app_info/error.rb
|
246
|
+
- lib/app_info/file.rb
|
249
247
|
- lib/app_info/helper.rb
|
248
|
+
- lib/app_info/helper/archive.rb
|
249
|
+
- lib/app_info/helper/file_size.rb
|
250
|
+
- lib/app_info/helper/generate_class.rb
|
251
|
+
- lib/app_info/helper/protobuf.rb
|
252
|
+
- lib/app_info/helper/signatures.rb
|
250
253
|
- lib/app_info/info_plist.rb
|
251
254
|
- lib/app_info/ipa.rb
|
252
255
|
- lib/app_info/ipa/framework.rb
|
253
256
|
- lib/app_info/ipa/plugin.rb
|
254
257
|
- lib/app_info/macos.rb
|
255
258
|
- lib/app_info/mobile_provision.rb
|
259
|
+
- lib/app_info/pe.rb
|
256
260
|
- lib/app_info/png_uncrush.rb
|
257
261
|
- lib/app_info/proguard.rb
|
258
262
|
- lib/app_info/protobuf/manifest.rb
|
@@ -268,7 +272,14 @@ homepage: http://github.com/icyleaf/app-info
|
|
268
272
|
licenses:
|
269
273
|
- MIT
|
270
274
|
metadata: {}
|
271
|
-
post_install_message:
|
275
|
+
post_install_message: |
|
276
|
+
AppInfo 3.0 is coming!
|
277
|
+
**********************
|
278
|
+
The public API of some AppInfo classes has been changed.
|
279
|
+
|
280
|
+
Please ensure that your Gemfiles and .gemspecs are suitably restrictive
|
281
|
+
to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.8.5).
|
282
|
+
See https://github.com/icyleaf/app_info for details.
|
272
283
|
rdoc_options: []
|
273
284
|
require_paths:
|
274
285
|
- lib
|
@@ -279,9 +290,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
279
290
|
version: '2.5'
|
280
291
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
281
292
|
requirements:
|
282
|
-
- - "
|
293
|
+
- - ">"
|
283
294
|
- !ruby/object:Gem::Version
|
284
|
-
version:
|
295
|
+
version: 1.3.1
|
285
296
|
requirements: []
|
286
297
|
rubygems_version: 3.4.1
|
287
298
|
signing_key:
|