app-info 2.8.2 → 3.0.0
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 +7 -5
- data/.github/workflows/create_release.yml +15 -0
- data/.rubocop.yml +33 -11
- data/CHANGELOG.md +107 -1
- data/Gemfile +10 -5
- data/README.md +82 -15
- data/Rakefile +11 -0
- data/app_info.gemspec +14 -5
- data/lib/app_info/aab.rb +76 -110
- data/lib/app_info/android/signature.rb +114 -0
- data/lib/app_info/android/signatures/base.rb +53 -0
- data/lib/app_info/android/signatures/info.rb +158 -0
- data/lib/app_info/android/signatures/v1.rb +63 -0
- data/lib/app_info/android/signatures/v2.rb +121 -0
- data/lib/app_info/android/signatures/v3.rb +131 -0
- data/lib/app_info/android/signatures/v4.rb +18 -0
- data/lib/app_info/android.rb +181 -0
- data/lib/app_info/apk.rb +77 -112
- data/lib/app_info/apple.rb +192 -0
- data/lib/app_info/certificate.rb +176 -0
- data/lib/app_info/const.rb +76 -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 +81 -0
- data/lib/app_info/dsym/macho.rb +62 -0
- data/lib/app_info/dsym.rb +35 -135
- data/lib/app_info/error.rb +3 -1
- data/lib/app_info/file.rb +49 -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 -128
- data/lib/app_info/info_plist.rb +66 -29
- data/lib/app_info/ipa/framework.rb +4 -4
- data/lib/app_info/ipa.rb +61 -135
- data/lib/app_info/macos.rb +54 -102
- data/lib/app_info/mobile_provision.rb +66 -48
- data/lib/app_info/pe.rb +322 -0
- data/lib/app_info/png_uncrush.rb +25 -5
- data/lib/app_info/proguard.rb +39 -22
- data/lib/app_info/protobuf/manifest.rb +22 -11
- data/lib/app_info/protobuf/models/Configuration_pb.rb +1 -0
- data/lib/app_info/protobuf/models/README.md +8 -1
- data/lib/app_info/protobuf/models/Resources.proto +51 -0
- data/lib/app_info/protobuf/models/Resources_pb.rb +42 -0
- data/lib/app_info/protobuf/resources.rb +5 -5
- data/lib/app_info/version.rb +1 -1
- data/lib/app_info.rb +93 -43
- metadata +57 -37
@@ -132,6 +132,11 @@ message Visibility {
|
|
132
132
|
|
133
133
|
// The comment associated with the <public> tag.
|
134
134
|
string comment = 3;
|
135
|
+
|
136
|
+
// Indicates that the resource id may change across builds and that the public R.java identifier
|
137
|
+
// for this resource should not be final. This is set to `true` for resources in `staging-group`
|
138
|
+
// tags.
|
139
|
+
bool staged_api = 4;
|
135
140
|
}
|
136
141
|
|
137
142
|
// Whether a resource comes from a compile-time overlay and is explicitly allowed to not overlay an
|
@@ -185,6 +190,12 @@ message OverlayableItem {
|
|
185
190
|
uint32 overlayable_idx = 4;
|
186
191
|
}
|
187
192
|
|
193
|
+
// The staged resource ID definition of a finalized resource.
|
194
|
+
message StagedId {
|
195
|
+
Source source = 1;
|
196
|
+
uint32 staged_id = 2;
|
197
|
+
}
|
198
|
+
|
188
199
|
// An entry ID in the range [0x0000, 0xffff].
|
189
200
|
message EntryId {
|
190
201
|
uint32 id = 1;
|
@@ -217,6 +228,9 @@ message Entry {
|
|
217
228
|
// The set of values defined for this entry, each corresponding to a different
|
218
229
|
// configuration/variant.
|
219
230
|
repeated ConfigValue config_value = 6;
|
231
|
+
|
232
|
+
// The staged resource ID of this finalized resource.
|
233
|
+
StagedId staged_id = 7;
|
220
234
|
}
|
221
235
|
|
222
236
|
// A Configuration/Value pair.
|
@@ -268,6 +282,7 @@ message CompoundValue {
|
|
268
282
|
Styleable styleable = 3;
|
269
283
|
Array array = 4;
|
270
284
|
Plural plural = 5;
|
285
|
+
MacroBody macro = 6;
|
271
286
|
}
|
272
287
|
}
|
273
288
|
|
@@ -299,6 +314,13 @@ message Reference {
|
|
299
314
|
|
300
315
|
// Whether this reference is dynamic.
|
301
316
|
Boolean is_dynamic = 5;
|
317
|
+
|
318
|
+
// The type flags used when compiling the reference. Used for substituting the contents of macros.
|
319
|
+
uint32 type_flags = 6;
|
320
|
+
|
321
|
+
// Whether raw string values would have been accepted in place of this reference definition. Used
|
322
|
+
// for substituting the contents of macros.
|
323
|
+
bool allow_raw = 7;
|
302
324
|
}
|
303
325
|
|
304
326
|
// A value that represents an ID. This is just a placeholder, as ID values are used to occupy a
|
@@ -586,3 +608,32 @@ message XmlAttribute {
|
|
586
608
|
// The optional interpreted/compiled version of the `value` string.
|
587
609
|
Item compiled_item = 6;
|
588
610
|
}
|
611
|
+
|
612
|
+
message MacroBody {
|
613
|
+
string raw_string = 1;
|
614
|
+
StyleString style_string = 2;
|
615
|
+
repeated UntranslatableSection untranslatable_sections = 3;
|
616
|
+
repeated NamespaceAlias namespace_stack = 4;
|
617
|
+
SourcePosition source = 5;
|
618
|
+
}
|
619
|
+
|
620
|
+
message NamespaceAlias {
|
621
|
+
string prefix = 1;
|
622
|
+
string package_name = 2;
|
623
|
+
bool is_private = 3;
|
624
|
+
}
|
625
|
+
|
626
|
+
message StyleString {
|
627
|
+
message Span {
|
628
|
+
string name = 1;
|
629
|
+
uint32 start_index = 2;
|
630
|
+
uint32 end_index = 3;
|
631
|
+
}
|
632
|
+
string str = 1;
|
633
|
+
repeated Span spans = 2;
|
634
|
+
}
|
635
|
+
|
636
|
+
message UntranslatableSection {
|
637
|
+
uint64 start_index = 1;
|
638
|
+
uint64 end_index = 2;
|
639
|
+
}
|
@@ -47,6 +47,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
47
47
|
optional :level, :enum, 1, "aapt.pb.Visibility.Level"
|
48
48
|
optional :source, :message, 2, "aapt.pb.Source"
|
49
49
|
optional :comment, :string, 3
|
50
|
+
optional :staged_api, :bool, 4
|
50
51
|
end
|
51
52
|
add_enum "aapt.pb.Visibility.Level" do
|
52
53
|
value :UNKNOWN, 0
|
@@ -80,6 +81,10 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
80
81
|
value :ACTOR, 8
|
81
82
|
value :CONFIG_SIGNATURE, 9
|
82
83
|
end
|
84
|
+
add_message "aapt.pb.StagedId" do
|
85
|
+
optional :source, :message, 1, "aapt.pb.Source"
|
86
|
+
optional :staged_id, :uint32, 2
|
87
|
+
end
|
83
88
|
add_message "aapt.pb.EntryId" do
|
84
89
|
optional :id, :uint32, 1
|
85
90
|
end
|
@@ -90,6 +95,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
90
95
|
optional :allow_new, :message, 4, "aapt.pb.AllowNew"
|
91
96
|
optional :overlayable_item, :message, 5, "aapt.pb.OverlayableItem"
|
92
97
|
repeated :config_value, :message, 6, "aapt.pb.ConfigValue"
|
98
|
+
optional :staged_id, :message, 7, "aapt.pb.StagedId"
|
93
99
|
end
|
94
100
|
add_message "aapt.pb.ConfigValue" do
|
95
101
|
optional :config, :message, 1, "aapt.pb.Configuration"
|
@@ -122,6 +128,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
122
128
|
optional :styleable, :message, 3, "aapt.pb.Styleable"
|
123
129
|
optional :array, :message, 4, "aapt.pb.Array"
|
124
130
|
optional :plural, :message, 5, "aapt.pb.Plural"
|
131
|
+
optional :macro, :message, 6, "aapt.pb.MacroBody"
|
125
132
|
end
|
126
133
|
end
|
127
134
|
add_message "aapt.pb.Boolean" do
|
@@ -133,6 +140,8 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
133
140
|
optional :name, :string, 3
|
134
141
|
optional :private, :bool, 4
|
135
142
|
optional :is_dynamic, :message, 5, "aapt.pb.Boolean"
|
143
|
+
optional :type_flags, :uint32, 6
|
144
|
+
optional :allow_raw, :bool, 7
|
136
145
|
end
|
137
146
|
add_enum "aapt.pb.Reference.Type" do
|
138
147
|
value :REFERENCE, 0
|
@@ -285,10 +294,37 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
285
294
|
optional :resource_id, :uint32, 5
|
286
295
|
optional :compiled_item, :message, 6, "aapt.pb.Item"
|
287
296
|
end
|
297
|
+
add_message "aapt.pb.MacroBody" do
|
298
|
+
optional :raw_string, :string, 1
|
299
|
+
optional :style_string, :message, 2, "aapt.pb.StyleString"
|
300
|
+
repeated :untranslatable_sections, :message, 3, "aapt.pb.UntranslatableSection"
|
301
|
+
repeated :namespace_stack, :message, 4, "aapt.pb.NamespaceAlias"
|
302
|
+
optional :source, :message, 5, "aapt.pb.SourcePosition"
|
303
|
+
end
|
304
|
+
add_message "aapt.pb.NamespaceAlias" do
|
305
|
+
optional :prefix, :string, 1
|
306
|
+
optional :package_name, :string, 2
|
307
|
+
optional :is_private, :bool, 3
|
308
|
+
end
|
309
|
+
add_message "aapt.pb.StyleString" do
|
310
|
+
optional :str, :string, 1
|
311
|
+
repeated :spans, :message, 2, "aapt.pb.StyleString.Span"
|
312
|
+
end
|
313
|
+
add_message "aapt.pb.StyleString.Span" do
|
314
|
+
optional :name, :string, 1
|
315
|
+
optional :start_index, :uint32, 2
|
316
|
+
optional :end_index, :uint32, 3
|
317
|
+
end
|
318
|
+
add_message "aapt.pb.UntranslatableSection" do
|
319
|
+
optional :start_index, :uint64, 1
|
320
|
+
optional :end_index, :uint64, 2
|
321
|
+
end
|
288
322
|
end
|
289
323
|
end
|
290
324
|
|
325
|
+
# @!visibility private
|
291
326
|
module Aapt
|
327
|
+
|
292
328
|
module Pb
|
293
329
|
StringPool = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StringPool").msgclass
|
294
330
|
SourcePosition = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.SourcePosition").msgclass
|
@@ -305,6 +341,7 @@ module Aapt
|
|
305
341
|
Overlayable = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.Overlayable").msgclass
|
306
342
|
OverlayableItem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.OverlayableItem").msgclass
|
307
343
|
OverlayableItem::Policy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.OverlayableItem.Policy").enummodule
|
344
|
+
StagedId = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StagedId").msgclass
|
308
345
|
EntryId = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.EntryId").msgclass
|
309
346
|
Entry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.Entry").msgclass
|
310
347
|
ConfigValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.ConfigValue").msgclass
|
@@ -340,5 +377,10 @@ module Aapt
|
|
340
377
|
XmlElement = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.XmlElement").msgclass
|
341
378
|
XmlNamespace = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.XmlNamespace").msgclass
|
342
379
|
XmlAttribute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.XmlAttribute").msgclass
|
380
|
+
MacroBody = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.MacroBody").msgclass
|
381
|
+
NamespaceAlias = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.NamespaceAlias").msgclass
|
382
|
+
StyleString = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StyleString").msgclass
|
383
|
+
StyleString::Span = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StyleString.Span").msgclass
|
384
|
+
UntranslatableSection = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.UntranslatableSection").msgclass
|
343
385
|
end
|
344
386
|
end
|
@@ -12,7 +12,7 @@ module AppInfo
|
|
12
12
|
new(doc)
|
13
13
|
end
|
14
14
|
|
15
|
-
include Helper::
|
15
|
+
include Helper::Protobuf
|
16
16
|
|
17
17
|
attr_reader :packages, :tool_fingerprint
|
18
18
|
|
@@ -53,7 +53,7 @@ module AppInfo
|
|
53
53
|
end
|
54
54
|
|
55
55
|
class Package
|
56
|
-
include Helper::
|
56
|
+
include Helper::GenerateClass
|
57
57
|
|
58
58
|
attr_reader :name, :types
|
59
59
|
|
@@ -113,14 +113,14 @@ module AppInfo
|
|
113
113
|
end
|
114
114
|
|
115
115
|
class Entry
|
116
|
+
include Helper::GenerateClass
|
117
|
+
|
116
118
|
def self.parse_from(type, package)
|
117
119
|
type.entry.each_with_object([]) do |entry, obj|
|
118
120
|
obj << Entry.new(entry, package)
|
119
121
|
end
|
120
122
|
end
|
121
123
|
|
122
|
-
include Helper::Defines
|
123
|
-
|
124
124
|
attr_reader :name, :values
|
125
125
|
|
126
126
|
def initialize(doc, package)
|
@@ -155,7 +155,7 @@ module AppInfo
|
|
155
155
|
end
|
156
156
|
|
157
157
|
class Value
|
158
|
-
include Helper::
|
158
|
+
include Helper::Protobuf
|
159
159
|
extend Forwardable
|
160
160
|
|
161
161
|
attr_reader :locale, :config, :original_value, :value, :type
|
data/lib/app_info/version.rb
CHANGED
data/lib/app_info.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
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
|
|
14
|
+
require 'app_info/apple'
|
15
|
+
require 'app_info/macos'
|
11
16
|
require 'app_info/ipa'
|
12
17
|
require 'app_info/ipa/plugin'
|
13
18
|
require 'app_info/ipa/framework'
|
14
19
|
|
20
|
+
require 'app_info/android'
|
15
21
|
require 'app_info/apk'
|
16
22
|
require 'app_info/aab'
|
17
23
|
|
18
24
|
require 'app_info/proguard'
|
19
25
|
require 'app_info/dsym'
|
20
26
|
|
21
|
-
require 'app_info/
|
27
|
+
require 'app_info/pe'
|
22
28
|
|
23
29
|
# fix invaild date format warnings
|
24
30
|
Zip.warn_invalid_date = false
|
@@ -28,36 +34,56 @@ module AppInfo
|
|
28
34
|
class << self
|
29
35
|
# Get a new parser for automatic
|
30
36
|
def parse(file)
|
31
|
-
raise NotFoundError, file unless File.exist?(file)
|
32
|
-
|
33
|
-
case file_type(file)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
raise NotFoundError, file unless ::File.exist?(file)
|
38
|
+
|
39
|
+
parser = case file_type(file)
|
40
|
+
when Format::IPA then IPA.new(file)
|
41
|
+
when Format::APK then APK.new(file)
|
42
|
+
when Format::AAB then AAB.new(file)
|
43
|
+
when Format::MOBILEPROVISION then MobileProvision.new(file)
|
44
|
+
when Format::DSYM then DSYM.new(file)
|
45
|
+
when Format::PROGUARD then Proguard.new(file)
|
46
|
+
when Format::MACOS then Macos.new(file)
|
47
|
+
when Format::PE then PE.new(file)
|
48
|
+
else
|
49
|
+
raise UnknownFormatError, "Do not detect file format: #{file}"
|
50
|
+
end
|
51
|
+
|
52
|
+
return parser unless block_given?
|
53
|
+
|
54
|
+
# call block and clear!
|
55
|
+
yield parser
|
56
|
+
parser.clear!
|
44
57
|
end
|
45
58
|
alias dump parse
|
46
59
|
|
60
|
+
def parse?(file)
|
61
|
+
file_type(file) != Format::UNKNOWN
|
62
|
+
end
|
63
|
+
|
47
64
|
# Detect file type by read file header
|
48
65
|
#
|
49
66
|
# TODO: This can be better solution, if anyone knows, tell me please.
|
50
67
|
def file_type(file)
|
51
|
-
header_hex = File.read(file, 100)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
68
|
+
header_hex = ::File.read(file, 100)
|
69
|
+
case header_hex
|
70
|
+
when ZIP_RETGEX
|
71
|
+
detect_zip_file(file)
|
72
|
+
when PE_REGEX
|
73
|
+
Format::PE
|
74
|
+
when PLIST_REGEX, BPLIST_REGEX
|
75
|
+
Format::MOBILEPROVISION
|
76
|
+
else
|
77
|
+
Format::UNKNOWN
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def logger
|
82
|
+
@logger ||= Logger.new($stdout, level: :warn)
|
59
83
|
end
|
60
84
|
|
85
|
+
attr_writer :logger
|
86
|
+
|
61
87
|
private
|
62
88
|
|
63
89
|
# :nodoc:
|
@@ -65,35 +91,59 @@ module AppInfo
|
|
65
91
|
Zip.warn_invalid_date = false
|
66
92
|
zip_file = Zip::File.open(file)
|
67
93
|
|
68
|
-
return
|
69
|
-
return
|
70
|
-
|
94
|
+
return Format::PROGUARD if proguard_clues?(zip_file)
|
95
|
+
return Format::APK if apk_clues?(zip_file)
|
96
|
+
return Format::AAB if aab_clues?(zip_file)
|
97
|
+
return Format::MACOS if macos_clues?(zip_file)
|
98
|
+
return Format::PE if pe_clues?(zip_file)
|
99
|
+
return Format::UNKNOWN unless clue = other_clues?(zip_file)
|
71
100
|
|
72
|
-
|
73
|
-
|
101
|
+
clue
|
102
|
+
ensure
|
103
|
+
zip_file.close
|
104
|
+
end
|
74
105
|
|
75
|
-
|
76
|
-
|
106
|
+
# :nodoc:
|
107
|
+
def proguard_clues?(zip_file)
|
108
|
+
!zip_file.glob('*mapping*.txt').empty?
|
109
|
+
end
|
77
110
|
|
78
|
-
|
79
|
-
|
111
|
+
# :nodoc:
|
112
|
+
def apk_clues?(zip_file)
|
113
|
+
!zip_file.find_entry('AndroidManifest.xml').nil? &&
|
114
|
+
!zip_file.find_entry('classes.dex').nil?
|
115
|
+
end
|
80
116
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
117
|
+
# :nodoc:
|
118
|
+
def aab_clues?(zip_file)
|
119
|
+
!zip_file.find_entry('base/manifest/AndroidManifest.xml').nil? &&
|
120
|
+
!zip_file.find_entry('BundleConfig.pb').nil?
|
121
|
+
end
|
122
|
+
|
123
|
+
# :nodoc:
|
124
|
+
def macos_clues?(zip_file)
|
125
|
+
!zip_file.glob('*/Contents/MacOS/*').empty? &&
|
126
|
+
!zip_file.glob('*/Contents/Info.plist').empty?
|
86
127
|
end
|
87
128
|
|
88
|
-
|
89
|
-
|
129
|
+
# :nodoc:
|
130
|
+
def pe_clues?(zip_file)
|
131
|
+
!zip_file.glob('*.exe').empty?
|
132
|
+
end
|
90
133
|
|
91
134
|
# :nodoc:
|
92
|
-
def
|
93
|
-
|
94
|
-
|
95
|
-
|
135
|
+
def other_clues?(zip_file)
|
136
|
+
zip_file.each do |f|
|
137
|
+
path = f.name
|
138
|
+
|
139
|
+
return Format::IPA if path.include?('Payload/') && path.end_with?('Info.plist')
|
140
|
+
return Format::DSYM if path.include?('Contents/Resources/DWARF/')
|
96
141
|
end
|
97
142
|
end
|
98
143
|
end
|
144
|
+
|
145
|
+
ZIP_RETGEX = /^\x50\x4b\x03\x04/.freeze
|
146
|
+
PE_REGEX = /^MZ/.freeze
|
147
|
+
PLIST_REGEX = /\x3C\x3F\x78\x6D\x6C/.freeze
|
148
|
+
BPLIST_REGEX = /^\x62\x70\x6C\x69\x73\x74/.freeze
|
99
149
|
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
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- icyleaf
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: CFPropertyList
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: '1.5'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '3.
|
42
|
+
version: '3.3'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,7 +49,7 @@ dependencies:
|
|
49
49
|
version: '1.5'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '3.
|
52
|
+
version: '3.3'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: ruby-macho
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -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
|
@@ -139,75 +139,67 @@ dependencies:
|
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: 0.2.0
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
|
-
name:
|
142
|
+
name: pedump
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
145
|
- - "~>"
|
146
146
|
- !ruby/object:Gem::Version
|
147
|
-
version:
|
147
|
+
version: 0.6.2
|
148
148
|
type: :runtime
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
152
|
- - "~>"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
154
|
+
version: 0.6.2
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
156
|
+
name: google-protobuf
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
159
|
- - ">="
|
160
160
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
162
|
-
|
161
|
+
version: 3.19.4
|
162
|
+
- - "<"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: 3.23.0
|
165
|
+
type: :runtime
|
163
166
|
prerelease: false
|
164
167
|
version_requirements: !ruby/object:Gem::Requirement
|
165
168
|
requirements:
|
166
169
|
- - ">="
|
167
170
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
171
|
+
version: 3.19.4
|
172
|
+
- - "<"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 3.23.0
|
169
175
|
- !ruby/object:Gem::Dependency
|
170
|
-
name:
|
176
|
+
name: bundler
|
171
177
|
requirement: !ruby/object:Gem::Requirement
|
172
178
|
requirements:
|
173
179
|
- - ">="
|
174
180
|
- !ruby/object:Gem::Version
|
175
|
-
version: '
|
181
|
+
version: '1.12'
|
176
182
|
type: :development
|
177
183
|
prerelease: false
|
178
184
|
version_requirements: !ruby/object:Gem::Requirement
|
179
185
|
requirements:
|
180
186
|
- - ">="
|
181
187
|
- !ruby/object:Gem::Version
|
182
|
-
version: '
|
183
|
-
- !ruby/object:Gem::Dependency
|
184
|
-
name: rspec
|
185
|
-
requirement: !ruby/object:Gem::Requirement
|
186
|
-
requirements:
|
187
|
-
- - "~>"
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '3.0'
|
190
|
-
type: :development
|
191
|
-
prerelease: false
|
192
|
-
version_requirements: !ruby/object:Gem::Requirement
|
193
|
-
requirements:
|
194
|
-
- - "~>"
|
195
|
-
- !ruby/object:Gem::Version
|
196
|
-
version: '3.0'
|
188
|
+
version: '1.12'
|
197
189
|
- !ruby/object:Gem::Dependency
|
198
|
-
name:
|
190
|
+
name: rake
|
199
191
|
requirement: !ruby/object:Gem::Requirement
|
200
192
|
requirements:
|
201
|
-
- - "
|
193
|
+
- - ">="
|
202
194
|
- !ruby/object:Gem::Version
|
203
|
-
version: '
|
195
|
+
version: '10.0'
|
204
196
|
type: :development
|
205
197
|
prerelease: false
|
206
198
|
version_requirements: !ruby/object:Gem::Requirement
|
207
199
|
requirements:
|
208
|
-
- - "
|
200
|
+
- - ">="
|
209
201
|
- !ruby/object:Gem::Version
|
210
|
-
version: '
|
202
|
+
version: '10.0'
|
211
203
|
description: Teardown tool for ipa/apk files and dSYM file, even support for info.plist
|
212
204
|
and .mobileprovision files
|
213
205
|
email:
|
@@ -219,6 +211,7 @@ extra_rdoc_files: []
|
|
219
211
|
files:
|
220
212
|
- ".github/dependabot.yml"
|
221
213
|
- ".github/workflows/ci.yml"
|
214
|
+
- ".github/workflows/create_release.yml"
|
222
215
|
- ".gitignore"
|
223
216
|
- ".rspec"
|
224
217
|
- ".rubocop.yml"
|
@@ -233,19 +226,39 @@ files:
|
|
233
226
|
- lib/app-info.rb
|
234
227
|
- lib/app_info.rb
|
235
228
|
- lib/app_info/aab.rb
|
229
|
+
- lib/app_info/android.rb
|
230
|
+
- lib/app_info/android/signature.rb
|
231
|
+
- lib/app_info/android/signatures/base.rb
|
232
|
+
- lib/app_info/android/signatures/info.rb
|
233
|
+
- lib/app_info/android/signatures/v1.rb
|
234
|
+
- lib/app_info/android/signatures/v2.rb
|
235
|
+
- lib/app_info/android/signatures/v3.rb
|
236
|
+
- lib/app_info/android/signatures/v4.rb
|
236
237
|
- lib/app_info/apk.rb
|
238
|
+
- lib/app_info/apple.rb
|
239
|
+
- lib/app_info/certificate.rb
|
240
|
+
- lib/app_info/const.rb
|
237
241
|
- lib/app_info/core_ext.rb
|
238
242
|
- lib/app_info/core_ext/object/try.rb
|
239
243
|
- lib/app_info/core_ext/string/inflector.rb
|
240
244
|
- lib/app_info/dsym.rb
|
245
|
+
- lib/app_info/dsym/debug_info.rb
|
246
|
+
- lib/app_info/dsym/macho.rb
|
241
247
|
- lib/app_info/error.rb
|
248
|
+
- lib/app_info/file.rb
|
242
249
|
- lib/app_info/helper.rb
|
250
|
+
- lib/app_info/helper/archive.rb
|
251
|
+
- lib/app_info/helper/file_size.rb
|
252
|
+
- lib/app_info/helper/generate_class.rb
|
253
|
+
- lib/app_info/helper/protobuf.rb
|
254
|
+
- lib/app_info/helper/signatures.rb
|
243
255
|
- lib/app_info/info_plist.rb
|
244
256
|
- lib/app_info/ipa.rb
|
245
257
|
- lib/app_info/ipa/framework.rb
|
246
258
|
- lib/app_info/ipa/plugin.rb
|
247
259
|
- lib/app_info/macos.rb
|
248
260
|
- lib/app_info/mobile_provision.rb
|
261
|
+
- lib/app_info/pe.rb
|
249
262
|
- lib/app_info/png_uncrush.rb
|
250
263
|
- lib/app_info/proguard.rb
|
251
264
|
- lib/app_info/protobuf/manifest.rb
|
@@ -261,7 +274,14 @@ homepage: http://github.com/icyleaf/app-info
|
|
261
274
|
licenses:
|
262
275
|
- MIT
|
263
276
|
metadata: {}
|
264
|
-
post_install_message:
|
277
|
+
post_install_message: |
|
278
|
+
AppInfo 3.0 is coming!
|
279
|
+
**********************
|
280
|
+
The public API of some AppInfo classes has been changed.
|
281
|
+
|
282
|
+
Please ensure that your Gemfiles and .gemspecs are suitably restrictive
|
283
|
+
to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.8.5).
|
284
|
+
See https://github.com/icyleaf/app_info for details.
|
265
285
|
rdoc_options: []
|
266
286
|
require_paths:
|
267
287
|
- lib
|
@@ -276,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
296
|
- !ruby/object:Gem::Version
|
277
297
|
version: '0'
|
278
298
|
requirements: []
|
279
|
-
rubygems_version: 3.1
|
299
|
+
rubygems_version: 3.4.1
|
280
300
|
signing_key:
|
281
301
|
specification_version: 4
|
282
302
|
summary: Teardown tool for mobile app(ipa/apk) and dSYM file, analysis metedata like
|