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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52ef8fe809311ff9d63351e44fbe764f2160d14c5634e06306e3c92c35d4aa94
4
- data.tar.gz: 7f7a7a9f302d6f0c5a9a088aaed496134f07000feda646801f708277736459ce
3
+ metadata.gz: aa6b8e87ba8dc7e9e7717d1e3c4885c5748c3aac3079780ff1262ab9ab62ea1d
4
+ data.tar.gz: 1d4b0f573c2b875b7347ceb5a161560e1453db0b891cc2b7c28cddea9ba6fdbf
5
5
  SHA512:
6
- metadata.gz: a94f533ae1e9af400ccb46a0c7a03a951050b5a76ea49d37a7d45601cd97caeab53f3ffa4514cc8cb3ff1a69c0049a78d1f7898753f16a84702cd15cc8e03555
7
- data.tar.gz: 0e88aef01907033da2be21326c5ced3b6eae2420ab5220268c519b6af52e2c9b6b42ac95d2106af5b4735e4a91d034c5a0373a119361133b056de93846f34384
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
- Metrics/LineLength:
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
@@ -5,4 +5,5 @@ rvm:
5
5
  - 2.4
6
6
  - 2.5
7
7
  - 2.6
8
+ - 2.7
8
9
  before_install: gem install bundler
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.1.2..HEAD
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
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  source 'https://rubygems.org'
4
- # source 'https://gems.ruby-china.com'
5
4
 
6
5
  # Specify your gem's dependencies in app-info.gemspec
7
6
  gemspec
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::IPA.new('android.apk')
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.1'
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', '~> 2.1.5'
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, :apk
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 :@apk, :manifest, :resource, :dex
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
- @apk.signs.each_with_object([]) do |(path, sign), obj|
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
- @apk.certificates.each_with_object([]) do |(path, certificate), obj|
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
- tmp_path = File.join(Dir.mktmpdir, "AppInfo-android-#{SecureRandom.hex}")
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(tmp_path, File.dirname(path))
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, 'w') do |f|
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
- private
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 ||= f.name
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
- INHOUSE = 'inHouse'
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::INHOUSE
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 cleanup!
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
@@ -122,6 +122,8 @@ module AppInfo
122
122
  private
123
123
 
124
124
  def info
125
+ return unless File.file?(info_path)
126
+
125
127
  @info ||= CFPropertyList.native_types(CFPropertyList::List.new(file: info_path).value)
126
128
  end
127
129
 
@@ -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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppInfo
4
- VERSION = '2.1.2'
4
+ VERSION = '2.4.1'
5
5
  end
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.2
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: 2020-01-11 00:00:00.000000000 Z
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.1'
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.1'
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.0.6
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