apprepo 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  module AppRepo
2
- VERSION = '0.0.6'.freeze
3
- DESCRIPTION = 'Upload icon, metadata and your app to the T-Mobile Enterprise AppRepo and notify users on updaet using a single command'
4
- SUMMARY = 'Upload icon, metadata and your app to SFTP'
2
+ VERSION = '0.0.8'.freeze
3
+ DESCRIPTION = 'Upload icon, manifest.json and your app to the T-Mobile Enterprise AppRepo and notify users on updaet using a single command'.freeze
4
+ SUMMARY = 'Upload icon, manifest and your app to SFTP'.freeze
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apprepo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -18,9 +18,6 @@ dependencies:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: 2.0.0
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
@@ -28,9 +25,6 @@ dependencies:
28
25
  - - "~>"
29
26
  - !ruby/object:Gem::Version
30
27
  version: '0'
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: 2.0.0
34
28
  - !ruby/object:Gem::Dependency
35
29
  name: fastlane_core
36
30
  requirement: !ruby/object:Gem::Requirement
@@ -267,21 +261,7 @@ dependencies:
267
261
  - - "~>"
268
262
  - !ruby/object:Gem::Version
269
263
  version: '0'
270
- - !ruby/object:Gem::Dependency
271
- name: fastlane
272
- requirement: !ruby/object:Gem::Requirement
273
- requirements:
274
- - - "~>"
275
- - !ruby/object:Gem::Version
276
- version: '1.89'
277
- type: :development
278
- prerelease: false
279
- version_requirements: !ruby/object:Gem::Requirement
280
- requirements:
281
- - - "~>"
282
- - !ruby/object:Gem::Version
283
- version: '1.89'
284
- description: Upload icon, metadata and your app to the T-Mobile Enterprise AppRepo
264
+ description: Upload icon, manifest.json and your app to the T-Mobile Enterprise AppRepo
285
265
  and notify users on updaet using a single command
286
266
  email:
287
267
  - suculent@me.com
@@ -292,17 +272,14 @@ files:
292
272
  - LICENSE
293
273
  - README.md
294
274
  - lib/apprepo.rb
275
+ - lib/apprepo/analyser.rb
295
276
  - lib/apprepo/commands_generator.rb
296
277
  - lib/apprepo/detect_values.rb
297
- - lib/apprepo/download_metadata.rb
298
278
  - lib/apprepo/loader.rb
299
279
  - lib/apprepo/manifest.rb
300
280
  - lib/apprepo/options.rb
301
281
  - lib/apprepo/runner.rb
302
282
  - lib/apprepo/setup.rb
303
- - lib/apprepo/upload_assets.rb
304
- - lib/apprepo/upload_descriptor.rb
305
- - lib/apprepo/upload_metadata.rb
306
283
  - lib/apprepo/uploader.rb
307
284
  - lib/apprepo/version.rb
308
285
  homepage: https://github.com/suculent/apprepo
@@ -328,7 +305,7 @@ rubyforge_project:
328
305
  rubygems_version: 2.6.1
329
306
  signing_key:
330
307
  specification_version: 4
331
- summary: Upload icon, metadata and your app to the T-Mobile Enterprise AppRepo and
332
- notify users on updaet using a single command
308
+ summary: Upload icon, manifest.json and your app to the T-Mobile Enterprise AppRepo
309
+ and notify users on updaet using a single command
333
310
  test_files: []
334
311
  has_rdoc:
@@ -1,44 +0,0 @@
1
- module AppRepo
2
- class DownloadMetadata
3
- def self.run(options, path)
4
- UI.message('Downloading existing metadata.json...')
5
- download(options, path)
6
- UI.success('Successfully downloaded all metadata')
7
- rescue => ex
8
- UI.error(ex)
9
- UI.error("Couldn't download already existing metadata from AppRepo.")
10
- end
11
-
12
- def self.download(_options, _folder_path)
13
- UI.message('TODO: DOWNLOAD existing metadata.json NOT IMPLEMENTED')
14
-
15
- # v = options[:app].latest_version
16
-
17
- # v.screenshots.each do |language, screenshots|
18
- # screenshots.each do |screenshot|
19
- # file_name = [screenshot.sort_order, screenshot.device_type, screenshot.sort_order].join("_")
20
- # original_file_extension = File.basename(screenshot.original_file_name)
21
- # file_name += "." + original_file_extension
22
-
23
- # UI.message("Downloading existing screenshot '#{file_name}'")
24
-
25
- # # If the screen shot is for an appleTV we need to store it in a way that we'll know it's an appleTV
26
- # # screen shot later as the screen size is the same as an iPhone 6 Plus in landscape.
27
- # if screenshot.device_type == "appleTV"
28
- # containing_folder = File.join(folder_path, "appleTV", screenshot.language)
29
- # else
30
- # containing_folder = File.join(folder_path, screenshot.language)
31
- # end
32
-
33
- # begin
34
- # FileUtils.mkdir_p(containing_folder)
35
- # rescue
36
- # # if it's already there
37
- # end
38
- # path = File.join(containing_folder, file_name)
39
- # File.write(path, open(screenshot.url).read)
40
- # end
41
- # end
42
- end
43
- end
44
- end
@@ -1,22 +0,0 @@
1
- module AppRepo
2
- class UploadAssets
3
- def upload(options)
4
- app = options[:app]
5
-
6
- v = app.edit_version
7
- UI.user_error!("Could not find a version to edit for app '#{app.name}'") unless v
8
-
9
- if options[:app_icon]
10
- UI.message('Uploading app icon...')
11
- v.upload_large_icon!(options[:app_icon])
12
- end
13
-
14
- if options[:apple_watch_app_icon]
15
- UI.message('Uploading apple watchapp icon...')
16
- v.upload_watch_icon!(options[:apple_watch_app_icon])
17
- end
18
-
19
- v.save!
20
- end
21
- end
22
- end
@@ -1,12 +0,0 @@
1
- module AppRepo
2
- class UploadDescriptor
3
- attr_accessor :appcode # required
4
- attr_accessor :ipa # can be inferred anyway (glob or metadata)
5
- attr_accessor :metadata # optional, allows re-uploading same binary without metadata change
6
-
7
- def initialize(appcode)
8
- self.appcode = appcode
9
- UI.message('Initializing "AppRepo:UploadDescriptor with appcode "' + self.appcode + '"')
10
- end
11
- end
12
- end
@@ -1,192 +0,0 @@
1
- module AppRepo
2
- # upload description, rating, etc.
3
- class UploadMetadata
4
- # All the localised values attached to the version
5
- LOCALISED_VERSION_VALUES = [:description, :keywords, :release_notes, :support_url, :marketing_url].freeze
6
-
7
- # Everything attached to the version but not being localised
8
- NON_LOCALISED_VERSION_VALUES = [:copyright].freeze
9
-
10
- # Localised app details values
11
- LOCALISED_APP_VALUES = [:name, :privacy_url].freeze
12
-
13
- # Non localized app details values
14
- NON_LOCALISED_APP_VALUES = [:primary_category, :secondary_category,
15
- :primary_first_sub_category, :primary_second_sub_category,
16
- :secondary_first_sub_category, :secondary_second_sub_category
17
- ].freeze
18
-
19
- # Make sure to call `load_from_filesystem` before calling upload
20
- def upload(options)
21
- return if options[:skip_metadata]
22
- verify_available_languages!(options)
23
-
24
- app = options[:app]
25
-
26
- details = app.details
27
- v = app.edit_version
28
-
29
- (LOCALISED_VERSION_VALUES + LOCALISED_APP_VALUES).each do |key|
30
- current = options[key]
31
- next unless current
32
-
33
- unless current.is_a?(Hash)
34
- UI.error("Error with provided '#{key}'. Must be a hash, the key being the language.")
35
- next
36
- end
37
-
38
- current.each do |language, value|
39
- next unless value.to_s.length > 0
40
- strip_value = value.to_s.strip
41
- v.send(key)[language] = strip_value if LOCALISED_VERSION_VALUES.include?(key)
42
- details.send(key)[language] = strip_value if LOCALISED_APP_VALUES.include?(key)
43
- end
44
- end
45
-
46
- (NON_LOCALISED_VERSION_VALUES + NON_LOCALISED_APP_VALUES).each do |key|
47
- current = options[key].to_s.strip
48
- next unless current.to_s.length > 0
49
- v.send("#{key}=", current) if NON_LOCALISED_VERSION_VALUES.include?(key)
50
- details.send("#{key}=", current) if NON_LOCALISED_APP_VALUES.include?(key)
51
- end
52
-
53
- v.release_on_approval = options[:automatic_release]
54
-
55
- set_review_information(v, options)
56
- set_app_rating(v, options)
57
-
58
- UI.message('Uploading metadata to iTunes Connect')
59
- v.save!
60
- details.save!
61
- UI.success('Successfully uploaded initial set of metadata to iTunes Connect')
62
- end
63
-
64
- # If the user is using the 'default' language, then assign values where they are needed
65
- def assign_defaults(options)
66
- # Build a complete list of the required languages
67
- enabled_languages = []
68
-
69
- # Get all languages used in existing settings
70
- (LOCALISED_VERSION_VALUES + LOCALISED_APP_VALUES).each do |key|
71
- current = options[key]
72
- next unless current && current.is_a?(Hash)
73
- current.each do |language, _value|
74
- enabled_languages << language unless enabled_languages.include?(language)
75
- end
76
- end
77
-
78
- # Check folder list (an empty folder signifies a language is required)
79
- Dir.glob(File.join(options[:metadata_path], '*')).each do |lng_folder|
80
- next unless File.directory?(lng_folder) # We don't want to read txt as they are non localised
81
-
82
- language = File.basename(lng_folder)
83
- enabled_languages << language unless enabled_languages.include?(language)
84
- end
85
-
86
- return unless enabled_languages.include?('default')
87
- UI.message('Detected languages: ' + enabled_languages.to_s)
88
-
89
- (LOCALISED_VERSION_VALUES + LOCALISED_APP_VALUES).each do |key|
90
- current = options[key]
91
- next unless current && current.is_a?(Hash)
92
-
93
- default = current['default']
94
- next if default.nil?
95
-
96
- enabled_languages.each do |language|
97
- value = current[language]
98
- next unless value.nil?
99
-
100
- current[language] = default
101
- end
102
- current.delete('default')
103
- end
104
- end
105
-
106
- # Makes sure all languages we need are actually created
107
- def verify_available_languages!(options)
108
- return if options[:skip_metadata]
109
-
110
- # Collect all languages we need
111
- # We only care about languages from user provided values
112
- # as the other languages are on iTC already anyway
113
- v = options[:app].edit_version
114
- UI.user_error!("Could not find a version to edit for app '#{options[:app].name}', the app metadata is read-only currently") unless v
115
-
116
- enabled_languages = []
117
- LOCALISED_VERSION_VALUES.each do |key|
118
- current = options[key]
119
- next unless current && current.is_a?(Hash)
120
- current.each do |language, _value|
121
- enabled_languages << language unless enabled_languages.include?(language)
122
- end
123
- end
124
-
125
- if enabled_languages.count > 0
126
- v.create_languages(enabled_languages)
127
- lng_text = 'language'
128
- lng_text += 's' if enabled_languages.count != 1
129
- UI.message("Activating #{lng_text} #{enabled_languages.join(', ')}...")
130
- v.save!
131
- end
132
- true
133
- end
134
-
135
- # Loads the metadata files and stores them into the options object
136
- def load_from_filesystem(options)
137
- return if options[:skip_metadata]
138
-
139
- # Load localised data
140
- Loader.language_folders(options[:metadata_path]).each do |lng_folder|
141
- language = File.basename(lng_folder)
142
- (LOCALISED_VERSION_VALUES + LOCALISED_APP_VALUES).each do |key|
143
- path = File.join(lng_folder, "#{key}.txt")
144
- next unless File.exist?(path)
145
-
146
- UI.message("Loading '#{path}'...")
147
- options[key] ||= {}
148
- options[key][language] ||= File.read(path)
149
- end
150
- end
151
-
152
- # Load non localised data
153
- (NON_LOCALISED_VERSION_VALUES + NON_LOCALISED_APP_VALUES).each do |key|
154
- path = File.join(options[:metadata_path], "#{key}.txt")
155
- next unless File.exist?(path)
156
-
157
- UI.message("Loading '#{path}'...")
158
- options[key] ||= File.read(path)
159
- end
160
- end
161
-
162
- private
163
-
164
- def set_review_information(v, options)
165
- return unless options[:app_review_information]
166
- info = options[:app_review_information]
167
- UI.user_error!('`app_review_information` must be a hash') unless info.is_a?(Hash)
168
-
169
- v.review_first_name = info[:first_name] if info[:first_name]
170
- v.review_last_name = info[:last_name] if info[:last_name]
171
- v.review_phone_number = info[:phone_number] if info[:phone_number]
172
- v.review_email = info[:email_address] if info[:email_address]
173
- v.review_demo_user = info[:demo_user] if info[:demo_user]
174
- v.review_demo_password = info[:demo_password] if info[:demo_password]
175
- v.review_user_needed = (v.review_demo_user.to_s + v.review_demo_password.to_s).length > 0
176
- v.review_notes = info[:notes] if info[:notes]
177
- end
178
-
179
- def set_app_rating(v, options)
180
- return unless options[:app_rating_config_path]
181
-
182
- require 'json'
183
- begin
184
- json = JSON.parse(File.read(options[:app_rating_config_path]))
185
- rescue => ex
186
- UI.error(ex.to_s)
187
- UI.user_error!("Error parsing JSON file at path '#{options[:app_rating_config_path]}'")
188
- end
189
- v.update_rating(json)
190
- end
191
- end
192
- end