app-info 2.8.3 → 2.8.5
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/workflows/ci.yml +4 -4
- data/.github/workflows/create_release.yml +15 -0
- data/CHANGELOG.md +16 -1
- data/README.md +14 -2
- data/app_info.gemspec +3 -3
- data/lib/app_info/aab.rb +3 -3
- data/lib/app_info/error.rb +2 -0
- data/lib/app_info/helper.rb +1 -3
- data/lib/app_info/png_uncrush.rb +1 -1
- data/lib/app_info/protobuf/manifest.rb +16 -8
- data/lib/app_info/protobuf/models/README.md +1 -1
- data/lib/app_info/protobuf/models/Resources.proto +51 -0
- data/lib/app_info/protobuf/models/Resources_pb.rb +40 -0
- data/lib/app_info/version.rb +1 -1
- data/lib/app_info.rb +7 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9406b7552e0bea00883446b85250398c7818120de74d0d6d3545d7b9b0d7ef6
|
4
|
+
data.tar.gz: a99bb2c55b4214ad72f8e6cf2e720199902fb37ad174b71bb5f9f4d529ba81a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '018d93bb67f489d4908f0701285ee6c177a627f3b5c602e90c24629da25f91fc2f5cb9b091675d471741361211289b71ed7c1ab51402f30cea843126c9c6271c'
|
7
|
+
data.tar.gz: 5eecd5818b12032898d33a14f74c43592d120ab751b2e4393591b0fd81e4df5cebb94342111478392fd84c5963f762de0383873c547176f74d546f7bfb7b8013
|
data/.github/workflows/ci.yml
CHANGED
@@ -12,11 +12,11 @@ jobs:
|
|
12
12
|
strategy:
|
13
13
|
fail-fast: false
|
14
14
|
matrix:
|
15
|
-
ruby: [ ruby-2.5, ruby-2.6, ruby-2.7, ruby-3.0 ]
|
15
|
+
ruby: [ ruby-2.5, ruby-2.6, ruby-2.7, ruby-3.0, ruby-3.1, ruby-3.2 ]
|
16
16
|
os: [ ubuntu-latest ]
|
17
17
|
|
18
18
|
steps:
|
19
|
-
- uses: actions/checkout@
|
19
|
+
- uses: actions/checkout@v3
|
20
20
|
|
21
21
|
- uses: ruby/setup-ruby@v1
|
22
22
|
with:
|
@@ -30,11 +30,11 @@ jobs:
|
|
30
30
|
runs-on: ubuntu-latest
|
31
31
|
|
32
32
|
steps:
|
33
|
-
- uses: actions/checkout@
|
33
|
+
- uses: actions/checkout@v3
|
34
34
|
|
35
35
|
- uses: ruby/setup-ruby@v1
|
36
36
|
with:
|
37
|
-
ruby-version:
|
37
|
+
ruby-version: 3.0
|
38
38
|
bundler-cache: true
|
39
39
|
|
40
40
|
- name: bundle exec rubocop
|
data/CHANGELOG.md
CHANGED
@@ -9,6 +9,19 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
9
9
|
|
10
10
|
> List all changes before release a new version.
|
11
11
|
|
12
|
+
## [2.8.5] (2023-03-16)
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
- Sync the latest appt2 proto files to parse Android SDK 31+ for aab parser. [#51](https://github.com/icyleaf/app_info/issues/51) (thanks @[UpBra](https://github.com/UpBra))
|
17
|
+
|
18
|
+
## [2.8.4] (2023-03-09)
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
|
22
|
+
- Force android device return as boolean for aab parser.
|
23
|
+
- Handle string resources referencing other resources for apk parser.
|
24
|
+
|
12
25
|
## [2.8.3] (2022-06-27)
|
13
26
|
|
14
27
|
### Fixed
|
@@ -234,7 +247,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
234
247
|
|
235
248
|
- Updated dependency of CFPropertly list be a range between 2.3.4. (thanks @[cschroed](https://github.com/cschroed))
|
236
249
|
|
237
|
-
[Unreleased]: https://github.com/icyleaf/app-info/compare/v2.8.
|
250
|
+
[Unreleased]: https://github.com/icyleaf/app-info/compare/v2.8.5..HEAD
|
251
|
+
[2.8.5]: https://github.com/icyleaf/app-info/compare/v2.8.4...v2.8.5
|
252
|
+
[2.8.4]: https://github.com/icyleaf/app-info/compare/v2.8.3...v2.8.4
|
238
253
|
[2.8.3]: https://github.com/icyleaf/app-info/compare/v2.8.2...v2.8.3
|
239
254
|
[2.8.2]: https://github.com/icyleaf/app-info/compare/v2.8.1...v2.8.2
|
240
255
|
[2.8.1]: https://github.com/icyleaf/app-info/compare/v2.8.0...v2.8.1
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# app_info
|
2
2
|
|
3
3
|
[](.github/workflows/ci.yml)
|
4
|
-
[](https://github.com/icyleaf/app_info/actions/workflows/ci.yml)
|
5
5
|
[](https://rubygems.org/gems/app_info)
|
6
6
|
[](LICENSE)
|
7
7
|
|
@@ -12,11 +12,23 @@ Teardown tool for mobile app (ipa, apk and aab file), macOS app and dSYM.zip fil
|
|
12
12
|
- Android file
|
13
13
|
- `.apk`
|
14
14
|
- `.aab` (Androld App Bundle)
|
15
|
-
- iOS
|
15
|
+
- iOS file
|
16
|
+
- `.ipa`
|
16
17
|
- `Info.plist` file
|
17
18
|
- `.mobileprovision`/`.provisionprofile` file
|
18
19
|
- Zipped macOS App file
|
20
|
+
- `.app.zip`
|
19
21
|
- Zipped dSYMs file
|
22
|
+
- `.dSYM.zip`
|
23
|
+
|
24
|
+
<hr />
|
25
|
+
|
26
|
+

|
27
|
+

|
28
|
+
|
29
|
+
[Zealot](https://zealot.ews.im/docs/user-guide/) is a self-hosted Beta App Distribution for Android, iOS and macOS apps. app_info it the core inside.
|
30
|
+
|
31
|
+
<hr />
|
20
32
|
|
21
33
|
## Installation
|
22
34
|
|
data/app_info.gemspec
CHANGED
@@ -21,13 +21,13 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = '>= 2.5'
|
22
22
|
|
23
23
|
spec.add_dependency 'CFPropertyList', '< 3.1.0', '>= 2.3.4'
|
24
|
-
spec.add_dependency 'image_size', '>= 1.5', '< 3.
|
24
|
+
spec.add_dependency 'image_size', '>= 1.5', '< 3.3'
|
25
25
|
spec.add_dependency 'ruby-macho', '>= 1.4', '< 4'
|
26
|
-
spec.add_dependency 'android_parser', '~> 2.5.
|
26
|
+
spec.add_dependency 'android_parser', '~> 2.5.1'
|
27
27
|
spec.add_dependency 'rubyzip', '>= 1.2', '< 3.0'
|
28
28
|
spec.add_dependency 'uuidtools', '>= 2.1.5', '< 2.3.0'
|
29
29
|
spec.add_dependency 'icns', '~> 0.2.0'
|
30
|
-
spec.add_dependency 'google-protobuf', '>= 3.19.4', '< 3.
|
30
|
+
spec.add_dependency 'google-protobuf', '>= 3.19.4', '< 3.23.0'
|
31
31
|
|
32
32
|
spec.add_development_dependency 'bundler', '>= 1.12'
|
33
33
|
spec.add_development_dependency 'rake', '>= 10.0'
|
data/lib/app_info/aab.rb
CHANGED
@@ -79,15 +79,15 @@ module AppInfo
|
|
79
79
|
# end
|
80
80
|
|
81
81
|
def wear?
|
82
|
-
use_features&.include?('android.hardware.type.watch')
|
82
|
+
!!use_features&.include?('android.hardware.type.watch')
|
83
83
|
end
|
84
84
|
|
85
85
|
def tv?
|
86
|
-
use_features&.include?('android.software.leanback')
|
86
|
+
!!use_features&.include?('android.software.leanback')
|
87
87
|
end
|
88
88
|
|
89
89
|
def automotive?
|
90
|
-
use_features&.include?('android.hardware.type.automotive')
|
90
|
+
!!use_features&.include?('android.hardware.type.automotive')
|
91
91
|
end
|
92
92
|
|
93
93
|
def min_sdk_version
|
data/lib/app_info/error.rb
CHANGED
data/lib/app_info/helper.rb
CHANGED
@@ -85,9 +85,7 @@ module AppInfo
|
|
85
85
|
def tempdir(file, prefix:)
|
86
86
|
dest_path ||= File.join(File.dirname(file), prefix)
|
87
87
|
dest_file = File.join(dest_path, File.basename(file))
|
88
|
-
|
89
|
-
Dir.mkdir(dest_path, 0_700) unless Dir.exist?(dest_path)
|
90
|
-
|
88
|
+
FileUtils.mkdir_p(dest_path, mode: 0_700)
|
91
89
|
dest_file
|
92
90
|
end
|
93
91
|
end
|
data/lib/app_info/png_uncrush.rb
CHANGED
@@ -17,7 +17,7 @@ module AppInfo
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def parse(_)
|
20
|
-
raise 'not implemented'
|
20
|
+
raise ProtobufParseError, 'not implemented'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -152,6 +152,8 @@ module AppInfo
|
|
152
152
|
|
153
153
|
def intent_filters(search: nil)
|
154
154
|
activities.each_with_object([]) do |activity, obj|
|
155
|
+
next unless activity.respond_to?(:intent_filter)
|
156
|
+
|
155
157
|
intent_filters = activity.intent_filter
|
156
158
|
next if intent_filters.nil? || intent_filters&.empty?
|
157
159
|
|
@@ -182,6 +184,8 @@ module AppInfo
|
|
182
184
|
CATEGORY_BROWSABLE = 'android.intent.category.BROWSABLE'
|
183
185
|
|
184
186
|
def deep_links?
|
187
|
+
return unless respond_to?(:data)
|
188
|
+
|
185
189
|
browsable? && data.any? { |d| DEEP_LINK_SCHEMES.include?(d.scheme) }
|
186
190
|
end
|
187
191
|
|
@@ -193,6 +197,12 @@ module AppInfo
|
|
193
197
|
.uniq
|
194
198
|
end
|
195
199
|
|
200
|
+
def schemes?
|
201
|
+
return unless respond_to?(:data)
|
202
|
+
|
203
|
+
browsable? && data.any? { |d| !DEEP_LINK_SCHEMES.include?(d.scheme) }
|
204
|
+
end
|
205
|
+
|
196
206
|
def schemes
|
197
207
|
return unless schemes?
|
198
208
|
|
@@ -201,23 +211,21 @@ module AppInfo
|
|
201
211
|
.uniq
|
202
212
|
end
|
203
213
|
|
204
|
-
def schemes?
|
205
|
-
browsable? && data.any? { |d| !DEEP_LINK_SCHEMES.include?(d.scheme) }
|
206
|
-
end
|
207
|
-
|
208
214
|
def browsable?
|
209
215
|
exist?(CATEGORY_BROWSABLE)
|
210
216
|
end
|
211
217
|
|
212
218
|
def exist?(name, type: nil)
|
213
219
|
if type.to_s.empty? && !name.start_with?('android.intent.')
|
214
|
-
raise '
|
220
|
+
raise ProtobufParseError, 'Not found intent type'
|
215
221
|
end
|
216
222
|
|
217
223
|
type ||= name.split('.')[2]
|
218
|
-
raise 'Not found type' unless TYPES.include?(type)
|
224
|
+
raise ProtobufParseError, 'Not found intent type' unless TYPES.include?(type)
|
225
|
+
|
226
|
+
return false unless intent = send(type.to_sym)
|
219
227
|
|
220
|
-
values =
|
228
|
+
values = intent.select { |e| e.name == name }
|
221
229
|
values.empty? ? false : values
|
222
230
|
end
|
223
231
|
end
|
@@ -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,6 +294,31 @@ 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
|
|
@@ -305,6 +339,7 @@ module Aapt
|
|
305
339
|
Overlayable = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.Overlayable").msgclass
|
306
340
|
OverlayableItem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.OverlayableItem").msgclass
|
307
341
|
OverlayableItem::Policy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.OverlayableItem.Policy").enummodule
|
342
|
+
StagedId = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StagedId").msgclass
|
308
343
|
EntryId = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.EntryId").msgclass
|
309
344
|
Entry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.Entry").msgclass
|
310
345
|
ConfigValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.ConfigValue").msgclass
|
@@ -340,5 +375,10 @@ module Aapt
|
|
340
375
|
XmlElement = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.XmlElement").msgclass
|
341
376
|
XmlNamespace = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.XmlNamespace").msgclass
|
342
377
|
XmlAttribute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.XmlAttribute").msgclass
|
378
|
+
MacroBody = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.MacroBody").msgclass
|
379
|
+
NamespaceAlias = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.NamespaceAlias").msgclass
|
380
|
+
StyleString = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StyleString").msgclass
|
381
|
+
StyleString::Span = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.StyleString.Span").msgclass
|
382
|
+
UntranslatableSection = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("aapt.pb.UntranslatableSection").msgclass
|
343
383
|
end
|
344
384
|
end
|
data/lib/app_info/version.rb
CHANGED
data/lib/app_info.rb
CHANGED
@@ -26,6 +26,8 @@ Zip.warn_invalid_date = false
|
|
26
26
|
# AppInfo Module
|
27
27
|
module AppInfo
|
28
28
|
class << self
|
29
|
+
UNKNOWN_FORMAT = :unkown
|
30
|
+
|
29
31
|
# Get a new parser for automatic
|
30
32
|
def parse(file)
|
31
33
|
raise NotFoundError, file unless File.exist?(file)
|
@@ -44,6 +46,10 @@ module AppInfo
|
|
44
46
|
end
|
45
47
|
alias dump parse
|
46
48
|
|
49
|
+
def parse?(file)
|
50
|
+
file_type(file) != UNKNOWN_FORMAT
|
51
|
+
end
|
52
|
+
|
47
53
|
# Detect file type by read file header
|
48
54
|
#
|
49
55
|
# TODO: This can be better solution, if anyone knows, tell me please.
|
@@ -55,7 +61,7 @@ module AppInfo
|
|
55
61
|
detect_mobileprovision(header_hex)
|
56
62
|
end
|
57
63
|
|
58
|
-
type ||
|
64
|
+
type || UNKNOWN_FORMAT
|
59
65
|
end
|
60
66
|
|
61
67
|
private
|
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: 2.8.
|
4
|
+
version: 2.8.5
|
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-03-16 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.5.
|
79
|
+
version: 2.5.1
|
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.5.
|
86
|
+
version: 2.5.1
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: rubyzip
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,7 +147,7 @@ dependencies:
|
|
147
147
|
version: 3.19.4
|
148
148
|
- - "<"
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version: 3.
|
150
|
+
version: 3.23.0
|
151
151
|
type: :runtime
|
152
152
|
prerelease: false
|
153
153
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -157,7 +157,7 @@ dependencies:
|
|
157
157
|
version: 3.19.4
|
158
158
|
- - "<"
|
159
159
|
- !ruby/object:Gem::Version
|
160
|
-
version: 3.
|
160
|
+
version: 3.23.0
|
161
161
|
- !ruby/object:Gem::Dependency
|
162
162
|
name: bundler
|
163
163
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,6 +225,7 @@ extra_rdoc_files: []
|
|
225
225
|
files:
|
226
226
|
- ".github/dependabot.yml"
|
227
227
|
- ".github/workflows/ci.yml"
|
228
|
+
- ".github/workflows/create_release.yml"
|
228
229
|
- ".gitignore"
|
229
230
|
- ".rspec"
|
230
231
|
- ".rubocop.yml"
|
@@ -282,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
283
|
- !ruby/object:Gem::Version
|
283
284
|
version: '0'
|
284
285
|
requirements: []
|
285
|
-
rubygems_version: 3.
|
286
|
+
rubygems_version: 3.4.1
|
286
287
|
signing_key:
|
287
288
|
specification_version: 4
|
288
289
|
summary: Teardown tool for mobile app(ipa/apk) and dSYM file, analysis metedata like
|