app-info 2.1.2 → 2.4.1
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/.rubocop.yml +1 -2
- data/.travis.yml +1 -0
- data/CHANGELOG.md +44 -1
- data/Gemfile +0 -1
- data/README.md +18 -2
- data/app_info.gemspec +2 -2
- data/lib/app_info.rb +2 -0
- data/lib/app_info/apk.rb +29 -14
- data/lib/app_info/dsym.rb +15 -2
- data/lib/app_info/ipa.rb +15 -5
- data/lib/app_info/ipa/framework.rb +51 -0
- data/lib/app_info/ipa/info_plist.rb +2 -0
- data/lib/app_info/ipa/mobile_provision.rb +137 -0
- data/lib/app_info/ipa/plugin.rb +16 -0
- data/lib/app_info/proguard.rb +13 -0
- data/lib/app_info/version.rb +1 -1
- metadata +24 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa6b8e87ba8dc7e9e7717d1e3c4885c5748c3aac3079780ff1262ab9ab62ea1d
|
4
|
+
data.tar.gz: 1d4b0f573c2b875b7347ceb5a161560e1453db0b891cc2b7c28cddea9ba6fdbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 300a98a543b36cee225ca5252f9f2883b5641f778f287c76e964a0a6c4c08054597e6de01e6ad023859f852d952d714c29d7ba47689f93355bd6c688bbf43102
|
7
|
+
data.tar.gz: e21a5002f708006fc0233034ecb5cecb40139ca7d9aefdc92e9004b9bd0b1e3ad10f94278959b1a4c5bd42d24ec416a1cf7e0f76736f777603f94431f4201ded
|
data/.rubocop.yml
CHANGED
@@ -26,7 +26,7 @@ Metrics/BlockLength:
|
|
26
26
|
Metrics/MethodLength:
|
27
27
|
Max: 20
|
28
28
|
|
29
|
-
|
29
|
+
Layout/LineLength:
|
30
30
|
Max: 100
|
31
31
|
|
32
32
|
Metrics/ClassLength:
|
@@ -36,6 +36,5 @@ Metrics/ClassLength:
|
|
36
36
|
Metrics/CyclomaticComplexity:
|
37
37
|
Max: 10
|
38
38
|
|
39
|
-
|
40
39
|
Style/Documentation:
|
41
40
|
Enabled: false
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -9,6 +9,45 @@ 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.4.1] (2021-03-08)
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
|
16
|
+
- Rename `cleanup!` to `clear!` method in ipa.
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- Add `clear!` method to ipa,apk, dsym and proguard.
|
21
|
+
- Make `contents` to be a public method.
|
22
|
+
|
23
|
+
## [2.3.0] (2021-01-15)
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
|
27
|
+
- Change `IPA::ExportType::INHOUSE` to `IPA::ExportType::ENTERPRISE` and change the value. #[24](https://github.com/icyleaf/app-info/pull/24)
|
28
|
+
### Added
|
29
|
+
|
30
|
+
- Add `plugins`, `frameworks` to `AppInfo::IPA`. #[25](https://github.com/icyleaf/app-info/pull/25)
|
31
|
+
|
32
|
+
## [2.2.0] (2020-07-21)
|
33
|
+
|
34
|
+
### Added
|
35
|
+
|
36
|
+
- Add `platforms`, `platform` and `type` to `AppInfo::MobileProvision`.
|
37
|
+
- Add Enabled Capabilities support for mobileprovision. #[21](https://github.com/icyleaf/app-info/pull/19)
|
38
|
+
|
39
|
+
## [2.1.4] (2020-01-21)
|
40
|
+
|
41
|
+
### Fixed
|
42
|
+
|
43
|
+
- Correct Zipped dSYM filename with directory.
|
44
|
+
|
45
|
+
## [2.1.3] (2020-01-16)
|
46
|
+
|
47
|
+
### Fixed
|
48
|
+
|
49
|
+
- Store Android icon with BINARY mode AGAIN(correct way).
|
50
|
+
|
12
51
|
## [2.1.2] (2020-01-11)
|
13
52
|
|
14
53
|
### Fixed
|
@@ -63,7 +102,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
63
102
|
|
64
103
|
- Updated dependency of CFPropertly list be a range between 2.3.4. (thanks @[cschroed](https://github.com/cschroed))
|
65
104
|
|
66
|
-
[Unreleased]: https://github.com/icyleaf/app-info/compare/v2.
|
105
|
+
[Unreleased]: https://github.com/icyleaf/app-info/compare/v2.3.0..HEAD
|
106
|
+
[2.2.0]: https://github.com/icyleaf/app-info/compare/v2.2.0...v2.3.0
|
107
|
+
[2.2.0]: https://github.com/icyleaf/app-info/compare/v2.1.4...v2.2.0
|
108
|
+
[2.1.4]: https://github.com/icyleaf/app-info/compare/v2.1.3...v2.1.4
|
109
|
+
[2.1.3]: https://github.com/icyleaf/app-info/compare/v2.1.2...v2.1.3
|
67
110
|
[2.1.2]: https://github.com/icyleaf/app-info/compare/v2.1.1...v2.1.2
|
68
111
|
[2.1.1]: https://github.com/icyleaf/app-info/compare/v2.1.0...v2.1.1
|
69
112
|
[2.1.0]: https://github.com/icyleaf/app-info/compare/v2.0.0...v2.1.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -12,7 +12,7 @@ Teardown tool for mobile app(ipa/apk) and dSYM.zip file, analysis metedata like
|
|
12
12
|
- Android apk file
|
13
13
|
- iOS ipa file
|
14
14
|
- Info.plist file
|
15
|
-
- .mobileprovision file
|
15
|
+
- .mobileprovision/.provisionprofile file
|
16
16
|
- dSYM(.zip) file
|
17
17
|
|
18
18
|
## Installation
|
@@ -51,7 +51,7 @@ parser = AppInfo.parse('App.dSYm.zip')
|
|
51
51
|
|
52
52
|
# If detect file type failed, you can parse in other way
|
53
53
|
parser = AppInfo::IPA.new('iphone.ipa')
|
54
|
-
parser = AppInfo::
|
54
|
+
parser = AppInfo::APK.new('android.apk')
|
55
55
|
parser = AppInfo::InfoPlist.new('App/Info.plist')
|
56
56
|
parser = AppInfo::MobileProvision.new('provisioning_profile/uuid.mobileprovision')
|
57
57
|
parser = AppInfo::DSYM.new('App.dSYm.zip')
|
@@ -101,6 +101,14 @@ ipa.release_type
|
|
101
101
|
ipa.archs
|
102
102
|
# => [:armv7, :arm64]
|
103
103
|
|
104
|
+
# get built-in frameworks
|
105
|
+
ipa.frameworks
|
106
|
+
# => [<AppInfo::Framework:520 @name=Masonry.framework>, <AppInfo::Framework:520 @name=libswiftPhotos.dylib>]
|
107
|
+
|
108
|
+
# get built-in plugins
|
109
|
+
ipa.plugins
|
110
|
+
# => [<AppInfo::Plugin:1680 @name=NotificationService>]
|
111
|
+
|
104
112
|
# get more propety in Info.plist
|
105
113
|
ipa.info[:CFBundleDisplayName]
|
106
114
|
# => 'AppInfoDemo'
|
@@ -127,6 +135,14 @@ profile.team_name
|
|
127
135
|
# get UDID of devices
|
128
136
|
profile.devices
|
129
137
|
# => ['18cf53cddee60c5af9c97b1521e7cbf8342628da']
|
138
|
+
|
139
|
+
# detect type
|
140
|
+
profile.type
|
141
|
+
# => :development/:adhoc/:appstore/:enterprise
|
142
|
+
|
143
|
+
# get enabled capabilities
|
144
|
+
profile.enabled_capabilities
|
145
|
+
# => ['Apple Pay', 'iCloud', 'Sign In with Apple', ...]
|
130
146
|
```
|
131
147
|
|
132
148
|
### dSYM
|
data/app_info.gemspec
CHANGED
@@ -20,12 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.required_ruby_version = '>= 2.3'
|
21
21
|
|
22
22
|
spec.add_dependency 'CFPropertyList', ['< 3.1.0', '>= 2.3.4']
|
23
|
-
spec.add_dependency 'image_size', '>= 1.5', '< 2.
|
23
|
+
spec.add_dependency 'image_size', '>= 1.5', '< 2.2'
|
24
24
|
spec.add_dependency 'pngdefry', '~> 0.1.2'
|
25
25
|
spec.add_dependency 'ruby-macho', '~> 2.2.0'
|
26
26
|
spec.add_dependency 'ruby_android', '~> 0.7.7'
|
27
27
|
spec.add_dependency 'rubyzip', '>= 1.2', '< 3.0'
|
28
|
-
spec.add_dependency 'uuidtools', '
|
28
|
+
spec.add_dependency 'uuidtools', '>= 2.1.5', '< 2.3.0'
|
29
29
|
|
30
30
|
spec.add_development_dependency 'bundler', '>= 1.12'
|
31
31
|
spec.add_development_dependency 'rake', '>= 10.0'
|
data/lib/app_info.rb
CHANGED
@@ -5,6 +5,8 @@ require 'app_info/version'
|
|
5
5
|
require 'app_info/ipa'
|
6
6
|
require 'app_info/ipa/info_plist'
|
7
7
|
require 'app_info/ipa/mobile_provision'
|
8
|
+
require 'app_info/ipa/plugin'
|
9
|
+
require 'app_info/ipa/framework'
|
8
10
|
require 'app_info/apk'
|
9
11
|
require 'app_info/dsym'
|
10
12
|
require 'app_info/proguard'
|
data/lib/app_info/apk.rb
CHANGED
@@ -10,7 +10,7 @@ module AppInfo
|
|
10
10
|
class APK
|
11
11
|
extend Forwardable
|
12
12
|
|
13
|
-
attr_reader :file
|
13
|
+
attr_reader :file
|
14
14
|
|
15
15
|
# APK Devices
|
16
16
|
module Device
|
@@ -22,9 +22,6 @@ module AppInfo
|
|
22
22
|
|
23
23
|
def initialize(file)
|
24
24
|
@file = file
|
25
|
-
|
26
|
-
Zip.warn_invalid_date = false # fix invaild date format warnings
|
27
|
-
@apk = ::Android::Apk.new(file)
|
28
25
|
end
|
29
26
|
|
30
27
|
def size(humanable = false)
|
@@ -36,7 +33,7 @@ module AppInfo
|
|
36
33
|
end
|
37
34
|
alias file_type os
|
38
35
|
|
39
|
-
def_delegators
|
36
|
+
def_delegators :apk, :manifest, :resource, :dex
|
40
37
|
|
41
38
|
def_delegators :manifest, :version_name, :package_name,
|
42
39
|
:use_permissions, :components
|
@@ -93,13 +90,13 @@ module AppInfo
|
|
93
90
|
end
|
94
91
|
|
95
92
|
def signs
|
96
|
-
|
93
|
+
apk.signs.each_with_object([]) do |(path, sign), obj|
|
97
94
|
obj << Sign.new(path, sign)
|
98
95
|
end
|
99
96
|
end
|
100
97
|
|
101
98
|
def certificates
|
102
|
-
|
99
|
+
apk.certificates.each_with_object([]) do |(path, certificate), obj|
|
103
100
|
obj << Certificate.new(path, certificate)
|
104
101
|
end
|
105
102
|
end
|
@@ -112,18 +109,20 @@ module AppInfo
|
|
112
109
|
components.select { |c| c.type == 'service' }
|
113
110
|
end
|
114
111
|
|
112
|
+
def apk
|
113
|
+
Zip.warn_invalid_date = false # fix invaild date format warnings
|
114
|
+
|
115
|
+
@apk ||= ::Android::Apk.new(@file)
|
116
|
+
end
|
117
|
+
|
115
118
|
def icons
|
116
119
|
unless @icons
|
117
|
-
|
118
|
-
|
119
|
-
@icons = @apk.icon.each_with_object([]) do |(path, data), obj|
|
120
|
+
@icons = apk.icon.each_with_object([]) do |(path, data), obj|
|
120
121
|
icon_name = File.basename(path)
|
121
|
-
icon_path = File.join(
|
122
|
+
icon_path = File.join(contents, File.dirname(path))
|
122
123
|
icon_file = File.join(icon_path, icon_name)
|
123
124
|
FileUtils.mkdir_p icon_path
|
124
|
-
File.open(icon_file, '
|
125
|
-
f.write(data.force_encoding('BINARY'))
|
126
|
-
end
|
125
|
+
File.open(icon_file, 'wb') { |f| f.write(data) }
|
127
126
|
|
128
127
|
obj << {
|
129
128
|
name: icon_name,
|
@@ -136,6 +135,22 @@ module AppInfo
|
|
136
135
|
@icons
|
137
136
|
end
|
138
137
|
|
138
|
+
def clear!
|
139
|
+
return unless @contents
|
140
|
+
|
141
|
+
FileUtils.rm_rf(@contents)
|
142
|
+
|
143
|
+
@apk = nil
|
144
|
+
@contents = nil
|
145
|
+
@icons = nil
|
146
|
+
@app_path = nil
|
147
|
+
@info = nil
|
148
|
+
end
|
149
|
+
|
150
|
+
def contents
|
151
|
+
@contents ||= File.join(Dir.mktmpdir, "AppInfo-android-#{SecureRandom.hex}")
|
152
|
+
end
|
153
|
+
|
139
154
|
private
|
140
155
|
|
141
156
|
def manifest_values(path, key = 'name')
|
data/lib/app_info/dsym.rb
CHANGED
@@ -74,7 +74,17 @@ module AppInfo
|
|
74
74
|
@app_path
|
75
75
|
end
|
76
76
|
|
77
|
-
|
77
|
+
def clear!
|
78
|
+
return unless @contents
|
79
|
+
|
80
|
+
FileUtils.rm_rf(@contents)
|
81
|
+
|
82
|
+
@contents = nil
|
83
|
+
@app_path = nil
|
84
|
+
@info = nil
|
85
|
+
@object = nil
|
86
|
+
@macho_type = nil
|
87
|
+
end
|
78
88
|
|
79
89
|
def contents
|
80
90
|
unless @contents
|
@@ -84,7 +94,10 @@ module AppInfo
|
|
84
94
|
dsym_dir = nil
|
85
95
|
@contents = Util.unarchive(@file, path: 'dsym') do |path, zip_file|
|
86
96
|
zip_file.each do |f|
|
87
|
-
dsym_dir
|
97
|
+
unless dsym_dir
|
98
|
+
dsym_dir = f.name
|
99
|
+
dsym_dir = dsym_dir.split('/')[0] # fix filename is xxx.app.dSYM/Contents
|
100
|
+
end
|
88
101
|
|
89
102
|
f_path = File.join(path, f.name)
|
90
103
|
zip_file.extract(f, f_path) unless File.exist?(f_path)
|
data/lib/app_info/ipa.rb
CHANGED
@@ -18,9 +18,11 @@ module AppInfo
|
|
18
18
|
module ExportType
|
19
19
|
DEBUG = 'Debug'
|
20
20
|
ADHOC = 'AdHoc'
|
21
|
-
|
21
|
+
ENTERPRISE = 'Enterprise'
|
22
22
|
RELEASE = 'Release'
|
23
23
|
UNKOWN = nil
|
24
|
+
|
25
|
+
INHOUSE = 'Enterprise' # Rename and Alias to enterprise
|
24
26
|
end
|
25
27
|
|
26
28
|
def initialize(file)
|
@@ -60,7 +62,7 @@ module AppInfo
|
|
60
62
|
if devices
|
61
63
|
ExportType::ADHOC
|
62
64
|
else
|
63
|
-
ExportType::
|
65
|
+
ExportType::ENTERPRISE
|
64
66
|
end
|
65
67
|
else
|
66
68
|
ExportType::DEBUG
|
@@ -86,6 +88,14 @@ module AppInfo
|
|
86
88
|
metadata? ? true : false
|
87
89
|
end
|
88
90
|
|
91
|
+
def plugins
|
92
|
+
@plugins ||= Plugin.parse(app_path)
|
93
|
+
end
|
94
|
+
|
95
|
+
def frameworks
|
96
|
+
@frameworks ||= Framework.parse(app_path)
|
97
|
+
end
|
98
|
+
|
89
99
|
def hide_developer_certificates
|
90
100
|
mobileprovision.delete('DeveloperCertificates') if mobileprovision?
|
91
101
|
end
|
@@ -137,7 +147,7 @@ module AppInfo
|
|
137
147
|
@app_path ||= Dir.glob(File.join(contents, 'Payload', '*.app')).first
|
138
148
|
end
|
139
149
|
|
140
|
-
def
|
150
|
+
def clear!
|
141
151
|
return unless @contents
|
142
152
|
|
143
153
|
FileUtils.rm_rf(@contents)
|
@@ -150,12 +160,12 @@ module AppInfo
|
|
150
160
|
@info = nil
|
151
161
|
end
|
152
162
|
|
153
|
-
private
|
154
|
-
|
155
163
|
def contents
|
156
164
|
@contents ||= Util.unarchive(@file, path: 'ios')
|
157
165
|
end
|
158
166
|
|
167
|
+
private
|
168
|
+
|
159
169
|
def icons_root_path
|
160
170
|
iphone = 'CFBundleIcons'
|
161
171
|
ipad = 'CFBundleIcons~ipad'
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module AppInfo
|
6
|
+
# iOS Plugin parser
|
7
|
+
class Framework
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
def self.parse(path, name = 'Frameworks')
|
11
|
+
files = Dir.glob(File.join(path, name.to_s, '*'))
|
12
|
+
return [] if files.empty?
|
13
|
+
|
14
|
+
files.each_with_object([]) do |file, obj|
|
15
|
+
obj << new(file)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_reader :file
|
20
|
+
|
21
|
+
def_delegators :info, :display_name, :bundle_name, :release_version, :build_version,
|
22
|
+
:identifier, :bundle_id, :min_sdk_version, :device_type
|
23
|
+
|
24
|
+
def initialize(file)
|
25
|
+
@file = file
|
26
|
+
end
|
27
|
+
|
28
|
+
def name
|
29
|
+
File.basename(file)
|
30
|
+
end
|
31
|
+
|
32
|
+
def macho
|
33
|
+
return unless lib?
|
34
|
+
|
35
|
+
require 'macho'
|
36
|
+
MachO.open(file)
|
37
|
+
end
|
38
|
+
|
39
|
+
def lib?
|
40
|
+
File.file?(file)
|
41
|
+
end
|
42
|
+
|
43
|
+
def info
|
44
|
+
@info ||= InfoPlist.new(file)
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_s
|
48
|
+
"<#{self.class}:#{object_id} @name=#{name}>"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -19,6 +19,26 @@ module AppInfo
|
|
19
19
|
mobileprovision.try(:[], 'AppIDName')
|
20
20
|
end
|
21
21
|
|
22
|
+
def type
|
23
|
+
return :development if development?
|
24
|
+
return :adhoc if adhoc?
|
25
|
+
return :appstore if appstore?
|
26
|
+
return :enterprise if enterprise?
|
27
|
+
end
|
28
|
+
|
29
|
+
def platforms
|
30
|
+
return unless platforms = mobileprovision.try(:[], 'Platform')
|
31
|
+
|
32
|
+
platforms.map { |v|
|
33
|
+
v = 'macOS' if v == 'OSX'
|
34
|
+
v.downcase.to_sym
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def platform
|
39
|
+
platforms[0]
|
40
|
+
end
|
41
|
+
|
22
42
|
def devices
|
23
43
|
mobileprovision.try(:[], 'ProvisionedDevices')
|
24
44
|
end
|
@@ -56,6 +76,123 @@ module AppInfo
|
|
56
76
|
end
|
57
77
|
end
|
58
78
|
|
79
|
+
# Detect is development type of mobileprovision
|
80
|
+
#
|
81
|
+
# related link: https://stackoverflow.com/questions/1003066/what-does-get-task-allow-do-in-xcode
|
82
|
+
def development?
|
83
|
+
case platform.downcase.to_sym
|
84
|
+
when :ios
|
85
|
+
entitlements['get-task-allow'] == true
|
86
|
+
when :macos
|
87
|
+
!devices.nil?
|
88
|
+
else
|
89
|
+
raise Error, "Not implement with platform: #{platform}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Detect app store type
|
94
|
+
#
|
95
|
+
# related link: https://developer.apple.com/library/archive/qa/qa1830/_index.html
|
96
|
+
def appstore?
|
97
|
+
case platform.downcase.to_sym
|
98
|
+
when :ios
|
99
|
+
!development? && entitlements.key?('beta-reports-active')
|
100
|
+
when :macos
|
101
|
+
!development?
|
102
|
+
else
|
103
|
+
raise Error, "Not implement with platform: #{platform}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def adhoc?
|
108
|
+
return false if platform == :macos # macOS no need adhoc
|
109
|
+
|
110
|
+
!development? && !devices.nil?
|
111
|
+
end
|
112
|
+
|
113
|
+
def enterprise?
|
114
|
+
return false if platform == :macos # macOS no need adhoc
|
115
|
+
|
116
|
+
!development? && !adhoc? && !appstore?
|
117
|
+
end
|
118
|
+
alias inhouse? enterprise?
|
119
|
+
|
120
|
+
# Enabled Capabilites
|
121
|
+
#
|
122
|
+
# Related link: https://developer.apple.com/support/app-capabilities/
|
123
|
+
def enabled_capabilities
|
124
|
+
capabilities = []
|
125
|
+
if adhoc? || appstore?
|
126
|
+
capabilities << 'In-App Purchase' << 'GameKit'
|
127
|
+
end
|
128
|
+
|
129
|
+
entitlements.each do |key, value|
|
130
|
+
case key
|
131
|
+
when 'aps-environment'
|
132
|
+
capabilities << 'Push Notifications'
|
133
|
+
when 'com.apple.developer.applesignin'
|
134
|
+
capabilities << 'Sign In with Apple'
|
135
|
+
when 'com.apple.developer.siri'
|
136
|
+
capabilities << 'SiriKit'
|
137
|
+
when 'com.apple.security.application-groups'
|
138
|
+
capabilities << 'App Groups'
|
139
|
+
when 'com.apple.developer.associated-domains'
|
140
|
+
capabilities << 'Associated Domains'
|
141
|
+
when 'com.apple.developer.default-data-protection'
|
142
|
+
capabilities << 'Data Protection'
|
143
|
+
when 'com.apple.developer.networking.networkextension'
|
144
|
+
capabilities << 'Network Extensions'
|
145
|
+
when 'com.apple.developer.networking.vpn.api'
|
146
|
+
capabilities << 'Personal VPN'
|
147
|
+
when 'com.apple.developer.healthkit', 'com.apple.developer.healthkit.access'
|
148
|
+
capabilities << 'HealthKit' unless capabilities.include?('HealthKit')
|
149
|
+
when 'com.apple.developer.icloud-services', 'com.apple.developer.icloud-container-identifiers'
|
150
|
+
capabilities << 'iCloud' unless capabilities.include?('iCloud')
|
151
|
+
when 'com.apple.developer.in-app-payments'
|
152
|
+
capabilities << 'Apple Pay'
|
153
|
+
when 'com.apple.developer.homekit'
|
154
|
+
capabilities << 'HomeKit'
|
155
|
+
when 'com.apple.developer.user-fonts'
|
156
|
+
capabilities << 'Fonts'
|
157
|
+
when 'com.apple.developer.pass-type-identifiers'
|
158
|
+
capabilities << 'Wallet'
|
159
|
+
when 'inter-app-audio'
|
160
|
+
capabilities << 'Inter-App Audio'
|
161
|
+
when 'com.apple.developer.networking.multipath'
|
162
|
+
capabilities << 'Multipath'
|
163
|
+
when 'com.apple.developer.authentication-services.autofill-credential-provider'
|
164
|
+
capabilities << 'AutoFill Credential Provider'
|
165
|
+
when 'com.apple.developer.networking.wifi-info'
|
166
|
+
capabilities << 'Access WiFi Information'
|
167
|
+
when 'com.apple.external-accessory.wireless-configuration'
|
168
|
+
capabilities << 'Wireless Accessory Configuration'
|
169
|
+
when 'com.apple.developer.kernel.extended-virtual-addressing'
|
170
|
+
capabilities << 'Extended Virtual Address Space'
|
171
|
+
when 'com.apple.developer.nfc.readersession.formats'
|
172
|
+
capabilities << 'NFC Tag Reading'
|
173
|
+
when 'com.apple.developer.ClassKit-environment'
|
174
|
+
capabilities << 'ClassKit'
|
175
|
+
when 'com.apple.developer.networking.HotspotConfiguration'
|
176
|
+
capabilities << 'Hotspot'
|
177
|
+
when 'com.apple.developer.devicecheck.appattest-environment'
|
178
|
+
capabilities << 'App Attest'
|
179
|
+
when 'com.apple.developer.coremedia.hls.low-latency'
|
180
|
+
capabilities << 'Low Latency HLS'
|
181
|
+
when 'com.apple.developer.associated-domains.mdm-managed'
|
182
|
+
capabilities << 'MDM Managed Associated Domains'
|
183
|
+
# macOS Only
|
184
|
+
when 'com.apple.developer.maps'
|
185
|
+
capabilities << 'Maps'
|
186
|
+
when 'com.apple.developer.system-extension.install'
|
187
|
+
capabilities << 'System Extension'
|
188
|
+
when 'com.apple.developer.networking.custom-protocol'
|
189
|
+
capabilities << 'Custom Network Protocol'
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
capabilities
|
194
|
+
end
|
195
|
+
|
59
196
|
def [](key)
|
60
197
|
mobileprovision.try(:[], key.to_s)
|
61
198
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'app_info/ipa/framework'
|
4
|
+
|
5
|
+
module AppInfo
|
6
|
+
# iOS Plugin parser
|
7
|
+
class Plugin < Framework
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
def self.parse(path, name = 'PlugIns')
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def_delegators :info, :name
|
15
|
+
end
|
16
|
+
end
|
data/lib/app_info/proguard.rb
CHANGED
@@ -86,5 +86,18 @@ module AppInfo
|
|
86
86
|
def contents
|
87
87
|
@contents ||= Util.unarchive(@file, path: 'proguard')
|
88
88
|
end
|
89
|
+
|
90
|
+
def clear!
|
91
|
+
return unless @contents
|
92
|
+
|
93
|
+
FileUtils.rm_rf(@contents)
|
94
|
+
|
95
|
+
@contents = nil
|
96
|
+
@manifest = nil
|
97
|
+
@mapping_path = nil
|
98
|
+
@metadata_path = nil
|
99
|
+
@manifest_path = nil
|
100
|
+
@symbol_path = nil
|
101
|
+
end
|
89
102
|
end
|
90
103
|
end
|
data/lib/app_info/version.rb
CHANGED
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app-info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1
|
4
|
+
version: 2.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- icyleaf
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: CFPropertyList
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 2.3.4
|
20
17
|
- - "<"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: 3.1.0
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.3.4
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 2.3.4
|
30
27
|
- - "<"
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: 3.1.0
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.3.4
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: image_size
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: '1.5'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '2.
|
42
|
+
version: '2.2'
|
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: '2.
|
52
|
+
version: '2.2'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: pngdefry
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,16 +116,22 @@ dependencies:
|
|
116
116
|
name: uuidtools
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
|
-
- - "
|
119
|
+
- - ">="
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: 2.1.5
|
122
|
+
- - "<"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.3.0
|
122
125
|
type: :runtime
|
123
126
|
prerelease: false
|
124
127
|
version_requirements: !ruby/object:Gem::Requirement
|
125
128
|
requirements:
|
126
|
-
- - "
|
129
|
+
- - ">="
|
127
130
|
- !ruby/object:Gem::Version
|
128
131
|
version: 2.1.5
|
132
|
+
- - "<"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 2.3.0
|
129
135
|
- !ruby/object:Gem::Dependency
|
130
136
|
name: bundler
|
131
137
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,8 +199,10 @@ files:
|
|
193
199
|
- lib/app_info/core_ext/object/try.rb
|
194
200
|
- lib/app_info/dsym.rb
|
195
201
|
- lib/app_info/ipa.rb
|
202
|
+
- lib/app_info/ipa/framework.rb
|
196
203
|
- lib/app_info/ipa/info_plist.rb
|
197
204
|
- lib/app_info/ipa/mobile_provision.rb
|
205
|
+
- lib/app_info/ipa/plugin.rb
|
198
206
|
- lib/app_info/proguard.rb
|
199
207
|
- lib/app_info/util.rb
|
200
208
|
- lib/app_info/version.rb
|
@@ -202,7 +210,7 @@ homepage: http://github.com/icyleaf/app-info
|
|
202
210
|
licenses:
|
203
211
|
- MIT
|
204
212
|
metadata: {}
|
205
|
-
post_install_message:
|
213
|
+
post_install_message:
|
206
214
|
rdoc_options: []
|
207
215
|
require_paths:
|
208
216
|
- lib
|
@@ -217,8 +225,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
225
|
- !ruby/object:Gem::Version
|
218
226
|
version: '0'
|
219
227
|
requirements: []
|
220
|
-
rubygems_version: 3.
|
221
|
-
signing_key:
|
228
|
+
rubygems_version: 3.1.4
|
229
|
+
signing_key:
|
222
230
|
specification_version: 4
|
223
231
|
summary: Teardown tool for mobile app(ipa/apk) and dSYM file, analysis metedata like
|
224
232
|
version, name, icon
|