app-info 2.2.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.
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uuidtools'
4
+ require 'rexml/document'
5
+ require 'app_info/util'
6
+
7
+ module AppInfo
8
+ # Proguard parser
9
+ class Proguard
10
+ NAMESPACE = UUIDTools::UUID.sha1_create(UUIDTools::UUID_DNS_NAMESPACE, 'icyleaf.com')
11
+
12
+ attr_reader :file
13
+
14
+ def initialize(file)
15
+ @file = file
16
+ end
17
+
18
+ def file_type
19
+ AppInfo::Platform::PROGUARD
20
+ end
21
+
22
+ def uuid
23
+ # Similar to https://docs.sentry.io/workflow/debug-files/#proguard-uuids
24
+ UUIDTools::UUID.sha1_create(NAMESPACE, File.read(mapping_path)).to_s
25
+ end
26
+ alias debug_id uuid
27
+
28
+ def mapping?
29
+ File.exist?(mapping_path)
30
+ end
31
+
32
+ def manifest?
33
+ File.exist?(manifest_path)
34
+ end
35
+
36
+ def symbol?
37
+ File.exist?(symbol_path)
38
+ end
39
+ alias resource? symbol?
40
+
41
+ def package_name
42
+ return unless manifest?
43
+
44
+ manifest.root.attributes['package']
45
+ end
46
+
47
+ def releasd_version
48
+ return unless manifest?
49
+
50
+ manifest.root.attributes['package']
51
+ end
52
+
53
+ def version_name
54
+ return unless manifest?
55
+
56
+ manifest.root.attributes['versionName']
57
+ end
58
+ alias release_version version_name
59
+
60
+ def version_code
61
+ return unless manifest?
62
+
63
+ manifest.root.attributes['versionCode']
64
+ end
65
+ alias build_version version_code
66
+
67
+ def manifest
68
+ return unless manifest?
69
+
70
+ @manifest ||= REXML::Document.new(File.new(manifest_path))
71
+ end
72
+
73
+ def mapping_path
74
+ @mapping_path ||= Dir.glob(File.join(contents, '*mapping*.txt')).first
75
+ end
76
+
77
+ def manifest_path
78
+ @manifest_path ||= File.join(contents, 'AndroidManifest.xml')
79
+ end
80
+
81
+ def symbol_path
82
+ @symbol_path ||= File.join(contents, 'R.txt')
83
+ end
84
+ alias resource_path symbol_path
85
+
86
+ def contents
87
+ @contents ||= Util.unarchive(@file, path: 'proguard')
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zip'
4
+ require 'fileutils'
5
+ require 'securerandom'
6
+
7
+ module AppInfo
8
+ # AppInfo Util
9
+ module Util
10
+ FILE_SIZE_UNITS = %w[B KB MB GB TB].freeze
11
+
12
+ def self.format_key(key)
13
+ key = key.to_s
14
+ return key unless key.include?('_')
15
+
16
+ key.split('_').map(&:capitalize).join('')
17
+ end
18
+
19
+ def self.file_size(file, humanable)
20
+ file_size = File.size(file)
21
+ humanable ? size_to_humanable(file_size) : file_size
22
+ end
23
+
24
+ def self.size_to_humanable(number)
25
+ if number.to_i < 1024
26
+ exponent = 0
27
+ else
28
+ max_exp = FILE_SIZE_UNITS.size - 1
29
+ exponent = (Math.log(number) / Math.log(1024)).to_i
30
+ exponent = max_exp if exponent > max_exp
31
+ number = format('%<number>.2f', number: (number / (1024**exponent.to_f)))
32
+ end
33
+
34
+ "#{number} #{FILE_SIZE_UNITS[exponent]}"
35
+ end
36
+
37
+ # Unarchive zip file
38
+ #
39
+ # source: https://github.com/soffes/lagunitas/blob/master/lib/lagunitas/ipa.rb
40
+ def self.unarchive(file, path: nil)
41
+ path = path ? "#{path}-" : ''
42
+ root_path = "#{Dir.mktmpdir}/AppInfo-#{path}#{SecureRandom.hex}"
43
+ Zip::File.open(file) do |zip_file|
44
+ if block_given?
45
+ yield root_path, zip_file
46
+ else
47
+ zip_file.each do |f|
48
+ f_path = File.join(root_path, f.name)
49
+ FileUtils.mkdir_p(File.dirname(f_path))
50
+ zip_file.extract(f, f_path) unless File.exist?(f_path)
51
+ end
52
+ end
53
+ end
54
+
55
+ root_path
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AppInfo
4
+ VERSION = '2.2.0'
5
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: app-info
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.2.0
5
+ platform: ruby
6
+ authors:
7
+ - icyleaf
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: CFPropertyList
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.3.4
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 3.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.3.4
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.1.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: image_size
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.5'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.1'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '1.5'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.1'
53
+ - !ruby/object:Gem::Dependency
54
+ name: pngdefry
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 0.1.2
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 0.1.2
67
+ - !ruby/object:Gem::Dependency
68
+ name: ruby-macho
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 2.2.0
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 2.2.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: ruby_android
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: 0.7.7
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: 0.7.7
95
+ - !ruby/object:Gem::Dependency
96
+ name: rubyzip
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '1.2'
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: '3.0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '1.2'
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: '3.0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: uuidtools
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 2.1.5
122
+ - - "<"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.3.0
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.1.5
132
+ - - "<"
133
+ - !ruby/object:Gem::Version
134
+ version: 2.3.0
135
+ - !ruby/object:Gem::Dependency
136
+ name: bundler
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '1.12'
142
+ type: :development
143
+ prerelease: false
144
+ version_requirements: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '1.12'
149
+ - !ruby/object:Gem::Dependency
150
+ name: rake
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '10.0'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '10.0'
163
+ - !ruby/object:Gem::Dependency
164
+ name: rspec
165
+ requirement: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '3.0'
170
+ type: :development
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '3.0'
177
+ description: Teardown tool for ipa/apk files and dSYM file, even support for info.plist
178
+ and .mobileprovision files
179
+ email:
180
+ - icyleaf.cn@gmail.com
181
+ executables: []
182
+ extensions: []
183
+ extra_rdoc_files: []
184
+ files:
185
+ - ".gitignore"
186
+ - ".rspec"
187
+ - ".rubocop.yml"
188
+ - ".travis.yml"
189
+ - CHANGELOG.md
190
+ - CODE_OF_CONDUCT.md
191
+ - Gemfile
192
+ - LICENSE
193
+ - README.md
194
+ - Rakefile
195
+ - app_info.gemspec
196
+ - lib/app-info.rb
197
+ - lib/app_info.rb
198
+ - lib/app_info/apk.rb
199
+ - lib/app_info/core_ext/object/try.rb
200
+ - lib/app_info/dsym.rb
201
+ - lib/app_info/ipa.rb
202
+ - lib/app_info/ipa/info_plist.rb
203
+ - lib/app_info/ipa/mobile_provision.rb
204
+ - lib/app_info/proguard.rb
205
+ - lib/app_info/util.rb
206
+ - lib/app_info/version.rb
207
+ homepage: http://github.com/icyleaf/app-info
208
+ licenses:
209
+ - MIT
210
+ metadata: {}
211
+ post_install_message:
212
+ rdoc_options: []
213
+ require_paths:
214
+ - lib
215
+ required_ruby_version: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: '2.3'
220
+ required_rubygems_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ requirements: []
226
+ rubygems_version: 3.0.3
227
+ signing_key:
228
+ specification_version: 4
229
+ summary: Teardown tool for mobile app(ipa/apk) and dSYM file, analysis metedata like
230
+ version, name, icon
231
+ test_files: []