deliver 0.7.10 → 0.7.11

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
  SHA1:
3
- metadata.gz: 945773ee223c9e92da550da88cb48c5c7e4ae892
4
- data.tar.gz: 2916e3bab546cba726de17b9f0c16ef0f950096f
3
+ metadata.gz: ae2a7efba86742205dd2fc3e8da2190613b359f1
4
+ data.tar.gz: f8c901ab211e04c82a6c891487c1e4b85ca7926f
5
5
  SHA512:
6
- metadata.gz: bfe66033b9b3da8127c2b5b6e0be30c7865550b0abdaf8abf8662663b7555d41f37cc103ae51500e032f553b00be67ce0f2d27f5d432d5057d8d13870e7f4b91
7
- data.tar.gz: 54d4f2f0ef25b1e8ce95755ce42bc230bef70f53be5396f643b5d18902fa6cd1a730bfbf7985e68a2036fd426f52d999cab119b622cfe80f1361ba82fcba4498
6
+ metadata.gz: 88989c941b95a4cf84cdd765c78c97449a8a71c2bc553d0fd24f937fc162aaaece7615766f67f340bb42b7de85cd2f88fd5363c26993d67b6fd4d8acbb45b196
7
+ data.tar.gz: 568c867e81a72391635f553636e797c3ff691c5953cf6861aa13d80026ca2354a963f1c8eed1bbd73913bcad6378557927a8c1d4a3ca596395958c7ba0108b2d
data/README.md CHANGED
@@ -11,7 +11,9 @@
11
11
  <a href="https://github.com/KrauseFx/frameit">frameit</a> &bull;
12
12
  <a href="https://github.com/KrauseFx/PEM">PEM</a> &bull;
13
13
  <a href="https://github.com/KrauseFx/sigh">sigh</a> &bull;
14
- <a href="https://github.com/KrauseFx/produce">produce</a>
14
+ <a href="https://github.com/KrauseFx/produce">produce</a> &bull;
15
+ <a href="https://github.com/KrauseFx/cert">cert</a> &bull;
16
+ <a href="https://github.com/KrauseFx/codes">codes</a>
15
17
  </p>
16
18
  -------
17
19
 
@@ -60,6 +62,8 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
60
62
  - Automatically create new screenshots with [Snapshot](https://github.com/KrauseFx/snapshot)
61
63
  - Upload new builds to the new Apple TestFlight
62
64
 
65
+ ##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
66
+
63
67
  # Installation
64
68
 
65
69
  Install the gem
@@ -125,8 +129,6 @@ The guide will create all the necessary files for you, using the existing app me
125
129
  - Enjoy a good drink, while the computer does all the work for you
126
130
  - When it's a new app: ```n```
127
131
 
128
- Copy your screenshots into the ```deliver/screenshots/[language]``` folders (see [Available language codes](#available-language-codes))
129
-
130
132
  From now on, you can run ```deliver``` to deploy a new update, or just upload new app metadata and screenshots.
131
133
 
132
134
  ### Customize the ```Deliverfile```
@@ -287,7 +289,7 @@ app.metadata.set_all_screenshots_from_path("./screenshots")
287
289
  app.upload_metadata!
288
290
  app.itc.submit_for_review!(app)
289
291
 
290
- Deliver::ItunesSearchApi.fetch_by_identifier("net.sunapps.15") # => Fetches public metadata
292
+ FastlaneCore::ItunesSearchApi.fetch_by_identifier("net.sunapps.15") # => Fetches public metadata
291
293
  ```
292
294
  This project is well documented, check it out on [Rubydoc](http://www.rubydoc.info/github/KrauseFx/deliver/frames).
293
295
 
@@ -320,6 +322,10 @@ Before actually uploading anything to iTunes, ```Deliver``` will generate a [PDF
320
322
  - [`PEM`](https://github.com/KrauseFx/pem): Automatically generate and renew your push notification profiles
321
323
  - [`sigh`](https://github.com/KrauseFx/sigh): Because you would rather spend your time building stuff than fighting provisioning
322
324
  - [`produce`](https://github.com/KrauseFx/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
325
+ - [`cert`](https://github.com/KrauseFx/cert): Automatically create and maintain iOS code signing certificates
326
+ - [`codes`](https://github.com/KrauseFx/codes): Create promo codes for iOS Apps using the command line
327
+
328
+ ##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
323
329
 
324
330
  ## Available language codes
325
331
  ```ruby
@@ -0,0 +1,167 @@
1
+ [
2
+ {
3
+ "locale": "cmn-Hans",
4
+ "name": "Simplified Chinese",
5
+ "game-center": true
6
+
7
+ },
8
+ {
9
+ "locale": "cmn-Hant",
10
+ "name": "Traditional Chinese",
11
+ "game-center": true
12
+ },
13
+ {
14
+ "locale": "da-DK",
15
+ "name": "Danish",
16
+ "game-center": true,
17
+ "alternatives": ["da"]
18
+ },
19
+ {
20
+ "locale": "nl-NL",
21
+ "name": "Dutch",
22
+ "game-center": true,
23
+ "alternatives": ["nl"]
24
+ },
25
+ {
26
+ "locale": "en-AU",
27
+ "name": "Australian English",
28
+ "game-center": false,
29
+ "readable-alternatives": ["English_Australian"]
30
+ },
31
+ {
32
+ "locale": "en-CA",
33
+ "name": "Canadian English",
34
+ "game-center": false,
35
+ "readable-alternatives": ["English_CA"]
36
+ },
37
+ {
38
+ "locale": "en-GB",
39
+ "name": "UK English",
40
+ "game-center": true,
41
+ "readable-alternatives": ["English_UK"]
42
+ },
43
+ {
44
+ "locale": "en-US",
45
+ "name": "English",
46
+ "game-center": true
47
+ },
48
+ {
49
+ "locale": "fi-FI",
50
+ "name": "Finnish",
51
+ "game-center": true,
52
+ "alternatives": ["fi"]
53
+ },
54
+ {
55
+ "locale": "fr-CA",
56
+ "name": "Canadian French",
57
+ "game-center": false,
58
+ "readable-alternatives": ["French_CA"]
59
+ },
60
+ {
61
+ "locale": "fr-FR",
62
+ "name": "French",
63
+ "game-center": true,
64
+ "alternatives": ["fr"]
65
+ },
66
+ {
67
+ "locale": "de-DE",
68
+ "name": "German",
69
+ "game-center": true,
70
+ "alternatives": ["de"]
71
+ },
72
+ {
73
+ "locale": "el-GR",
74
+ "name": "Greek",
75
+ "game-center": true,
76
+ "alternatives": ["el"]
77
+ },
78
+ {
79
+ "locale": "id-ID",
80
+ "name": "Indonesian",
81
+ "game-center": true,
82
+ "alternatives": ["id"]
83
+ },
84
+ {
85
+ "locale": "it-IT",
86
+ "name": "Italian",
87
+ "game-center": true,
88
+ "alternatives": ["it"]
89
+ },
90
+ {
91
+ "locale": "ja-JP",
92
+ "name": "Japanese",
93
+ "game-center": true,
94
+ "alternatives": ["ja"]
95
+ },
96
+ {
97
+ "locale": "ko-KR",
98
+ "name": "Korean",
99
+ "game-center": true,
100
+ "alternatives": ["ko"]
101
+ },
102
+ {
103
+ "locale": "ms-MY",
104
+ "name": "Malay",
105
+ "game-center": true,
106
+ "alternatives": ["ms"]
107
+ },
108
+ {
109
+ "locale": "no-NO",
110
+ "name": "Norwegian",
111
+ "game-center": true,
112
+ "alternatives": ["no"]
113
+ },
114
+ {
115
+ "locale": "pt-BR",
116
+ "name": "Brazilian Portuguese",
117
+ "game-center": true
118
+ },
119
+ {
120
+ "locale": "pt-PT",
121
+ "name": "Portuguese",
122
+ "game-center": true,
123
+ "alternatives": ["pt"]
124
+ },
125
+ {
126
+ "locale": "ru-RU",
127
+ "name": "Russian",
128
+ "game-center": true,
129
+ "alternatives": ["ru"]
130
+ },
131
+ {
132
+ "locale": "es-MX",
133
+ "name": "Mexican Spanish",
134
+ "game-center": false,
135
+ "readable-alternatives": ["Spanish_MX"]
136
+ },
137
+ {
138
+ "locale": "es-ES",
139
+ "name": "Spanish",
140
+ "game-center": true,
141
+ "alternatives": ["es"]
142
+ },
143
+ {
144
+ "locale": "sv-SE",
145
+ "name": "Swedish",
146
+ "game-center": true,
147
+ "alternatives": ["sv"]
148
+ },
149
+ {
150
+ "locale": "th-TH",
151
+ "name": "Thai",
152
+ "game-center": true,
153
+ "alternatives": ["th"]
154
+ },
155
+ {
156
+ "locale": "tr-TR",
157
+ "name": "Turkish",
158
+ "game-center": true,
159
+ "alternatives": ["tr"]
160
+ },
161
+ {
162
+ "locale": "vi-VI",
163
+ "name" : "Vietnamese",
164
+ "game-center": true,
165
+ "alternatives": ["vi"]
166
+ }
167
+ ]
@@ -12,7 +12,7 @@
12
12
  # This folder has to include one folder for each language
13
13
  # More information about automatic screenshot upload:
14
14
  # https://github.com/KrauseFx/deliver#upload-screenshots-to-itunes-connect
15
- screenshots_path "./deliver/screenshots/"
15
+ screenshots_path "./screenshots/"
16
16
 
17
17
 
18
18
  # version '1.2' # you can pass this if you want to verify the version number with the ipa file
data/lib/deliver.rb CHANGED
@@ -5,7 +5,6 @@ require 'deliver/app_metadata'
5
5
  require 'deliver/metadata_item'
6
6
  require 'deliver/app_screenshot'
7
7
  require 'deliver/itunes_connect/itunes_connect'
8
- require 'deliver/itunes_search_api'
9
8
  require 'deliver/itunes_transporter'
10
9
  require 'deliver/deliverfile/deliverfile'
11
10
  require 'deliver/deliverfile/deliverfile_creator'
data/lib/deliver/app.rb CHANGED
@@ -37,11 +37,11 @@ module Deliver
37
37
 
38
38
  if apple_id and not app_identifier
39
39
  # Fetch the app identifier based on the given Apple ID
40
- self.app_identifier = Deliver::ItunesSearchApi.fetch_bundle_identifier(apple_id)
40
+ self.app_identifier = FastlaneCore::ItunesSearchApi.fetch_bundle_identifier(apple_id)
41
41
  elsif app_identifier and not apple_id
42
42
  # Fetch the Apple ID based on the given app identifier
43
43
  begin
44
- self.apple_id = Deliver::ItunesSearchApi.fetch_by_identifier(app_identifier)['trackId']
44
+ self.apple_id = FastlaneCore::ItunesSearchApi.fetch_by_identifier(app_identifier)['trackId']
45
45
  rescue
46
46
  unless Helper.is_test?
47
47
  Helper.log.info "Could not find Apple ID based on the app identifier in the US App Store. Maybe the app is not yet in the store?".yellow
@@ -1,5 +1,6 @@
1
1
  require 'credentials_manager/password_manager'
2
2
  require 'credentials_manager/appfile_config'
3
+ require 'deliver/itunes_connect/itunes_connect'
3
4
 
4
5
  module Deliver
5
6
  # Helps new user quickly adopt Deliver
@@ -45,8 +46,6 @@ module Deliver
45
46
  example.gsub!("[[APP_NAME]]", project_name)
46
47
  File.write(path, example)
47
48
 
48
- FileUtils.mkdir_p './screenshots/'
49
-
50
49
  puts "Successfully created new Deliverfile at '#{path}'".green
51
50
  end
52
51
 
@@ -62,16 +61,28 @@ module Deliver
62
61
  file_path = [deliver_path, Deliver::Deliverfile::Deliverfile::FILE_NAME].join('/')
63
62
  json = generate_deliver_file(app, deliver_path, project_name)
64
63
  File.write(file_path, json)
64
+
65
+ FileUtils.mkdir_p './screenshots/'
66
+ begin
67
+ Helper.log.info "Downloading all previously used app screenshots.".green
68
+ ItunesConnect.new.download_existing_screenshots(app)
69
+ rescue
70
+ Helper.log.error "Couldn't download already existing screenshots from iTunesConnect. You have to add them manually!".red
71
+ end
72
+
73
+ # Add a README to the screenshots folder
74
+ FileUtils.mkdir_p File.join(deliver_path, 'screenshots') # just in case the fetching didn't work
75
+ File.write(File.join(deliver_path, 'screenshots', 'README.txt'), File.read("#{Helper.gem_path('deliver')}/lib/assets/ScreenshotsHelp"))
65
76
 
66
- puts "Successfully created new Deliverfile at '#{file_path}'".green
77
+ Helper.log.info "Successfully created new Deliverfile at '#{file_path}'".green
67
78
  end
68
79
 
69
80
  private
70
81
  # This method takes care of creating a new 'deliver' folder, containg the app metadata
71
82
  # and screenshots folders
72
83
  def self.generate_deliver_file(app, path, project_name)
73
- metadata_path = "#{path}/deliver/"
74
- FileUtils.mkdir_p metadata_path
84
+ metadata_path = File.join(path, 'deliver')
85
+ FileUtils.mkdir_p metadata_path rescue nil # never mind if it's already there
75
86
 
76
87
  json = create_json_based_on_xml(app, metadata_path)
77
88
 
@@ -79,15 +90,12 @@ module Deliver
79
90
  json[key].delete(:version_whats_new)
80
91
  end
81
92
 
82
- meta_path = "#{metadata_path}metadata.json"
93
+ meta_path = File.join(metadata_path, "metadata.json")
83
94
  File.write(meta_path, JSON.pretty_generate(json))
84
95
  puts "Successfully created new metadata JSON file at '#{meta_path}'".green
85
96
 
86
97
  gem_path = Helper.gem_path('deliver')
87
98
 
88
- # Add a README to the screenshots folder
89
- File.write("#{metadata_path}screenshots/README.txt", File.read("#{gem_path}/lib/assets/ScreenshotsHelp"))
90
-
91
99
  # Generate the final Deliverfile here
92
100
  deliver = File.read("#{gem_path}/lib/assets/DeliverfileDefault")
93
101
  deliver.gsub!("[[APP_IDENTIFIER]]", app.app_identifier)
@@ -112,9 +120,6 @@ module Deliver
112
120
  end
113
121
 
114
122
  json[locale] = current
115
-
116
- # Create an empty folder for the screenshots too
117
- FileUtils.mkdir_p "#{path}screenshots/#{locale}/"
118
123
  end
119
124
 
120
125
  return json
@@ -7,6 +7,7 @@ require 'deliver/itunes_connect/itunes_connect_new_version'
7
7
  require 'deliver/itunes_connect/itunes_connect_app_icon'
8
8
  require 'deliver/itunes_connect/itunes_connect_app_rating'
9
9
  require 'deliver/itunes_connect/itunes_connect_additional'
10
+ require 'deliver/itunes_connect/itunes_connect_screenshot_fetcher'
10
11
 
11
12
  module Deliver
12
13
  ItunesConnect = FastlaneCore::ItunesConnect
@@ -0,0 +1,55 @@
1
+ require 'open-uri'
2
+
3
+ module FastlaneCore
4
+ # For all the information reading (e.g. version number)
5
+ class ItunesConnect
6
+ ALL_INFORMATION_URL = "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/apps/version/"
7
+
8
+ # This method will download all existing app screenshots
9
+ # @param app (Deliver::App) the app you want this information from
10
+ # @raise [ItunesConnectGeneralError] General error while executing
11
+ # this action
12
+ # @raise [ItunesConnectLoginError] Login data is wrong
13
+ def download_existing_screenshots(app)
14
+ languages = JSON.parse(File.read(File.join(Helper.gem_path('deliver'), "lib", "assets", "DeliverLanguageMapping.json")))
15
+
16
+ begin
17
+ verify_app(app)
18
+
19
+ url = ALL_INFORMATION_URL + app.apple_id.to_s
20
+
21
+ # Turn off/on the async mode of jQuery
22
+ evaluate_script("jQuery.ajaxSetup({async:false});")
23
+ response = evaluate_script("$.get('#{url}').responseText")
24
+ evaluate_script("jQuery.ajaxSetup({async:true});")
25
+
26
+ raise "Could not fetch previously uploaded screenshots" unless response
27
+
28
+ data = JSON.parse(response)
29
+ screenshots = data['data']['details']['value'].each do |language_values|
30
+ language_code = languages.find { |a| a['name'] == language_values['language'] }
31
+ unless language_code
32
+ Helper.log.error "Could not find language information for language #{language_values['language']}".red
33
+ next
34
+ end
35
+ language_code = language_code['locale']
36
+
37
+ language_values['screenshots']['value'].each do |type, value|
38
+ value['value'].each do |screenshot|
39
+ url = screenshot['value']['url']
40
+ file_name = [screenshot['value']['sortOrder'], type, screenshot['value']['originalFileName']].join("_")
41
+ Helper.log.info "Downloading existing screenshot '#{file_name}' of device type: '#{type}'"
42
+
43
+ containing_folder = File.join(".", "screenshots", language_code)
44
+ FileUtils.mkdir_p containing_folder rescue nil # if it's already there
45
+ path = File.join(containing_folder, file_name)
46
+ File.write(path, open(url).read)
47
+ end
48
+ end
49
+ end
50
+ rescue Exception => ex
51
+ error_occured(ex)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module Deliver
2
- VERSION = "0.7.10"
2
+ VERSION = "0.7.11"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deliver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.10
4
+ version: 0.7.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-18 00:00:00.000000000 Z
11
+ date: 2015-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane_core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.1.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.1.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -204,6 +204,7 @@ files:
204
204
  - LICENSE
205
205
  - README.md
206
206
  - bin/deliver
207
+ - lib/assets/DeliverLanguageMapping.json
207
208
  - lib/assets/DeliverfileDefault
208
209
  - lib/assets/DeliverfileExample
209
210
  - lib/assets/ScreenshotsHelp
@@ -228,8 +229,8 @@ files:
228
229
  - lib/deliver/itunes_connect/itunes_connect_app_rating.rb
229
230
  - lib/deliver/itunes_connect/itunes_connect_new_version.rb
230
231
  - lib/deliver/itunes_connect/itunes_connect_reader.rb
232
+ - lib/deliver/itunes_connect/itunes_connect_screenshot_fetcher.rb
231
233
  - lib/deliver/itunes_connect/itunes_connect_submission.rb
232
- - lib/deliver/itunes_search_api.rb
233
234
  - lib/deliver/itunes_transporter.rb
234
235
  - lib/deliver/metadata_item.rb
235
236
  - lib/deliver/pdf_generator.rb
@@ -1,48 +0,0 @@
1
- require 'open-uri'
2
-
3
- module Deliver
4
- # A wrapper around the Apple iTunes Search API to access app information like
5
- # the app identifier of an app.
6
- class ItunesSearchApi
7
-
8
- # Fetch all information you can get from a specific AppleID of an app
9
- # @param id (int) The AppleID of the given app. This usually consists of 9 digits.
10
- # @return (Hash) the response of the first result from Apple (https://itunes.apple.com/lookup?id=284882215)
11
- # @example Response of Facebook App: https://itunes.apple.com/lookup?id=284882215
12
- # {
13
- # ...
14
- # artistName: "Facebook, Inc.",
15
- # price: 0,
16
- # version: "14.9",
17
- # ...
18
- # }
19
- def self.fetch(id)
20
- # Example: https://itunes.apple.com/lookup?id=284882215
21
- fetch_url("https://itunes.apple.com/lookup?id=#{id.to_s}")
22
- end
23
-
24
- def self.fetch_by_identifier(app_identifier)
25
- # Example: http://itunes.apple.com/lookup?bundleId=net.sunapps.1
26
- fetch_url("https://itunes.apple.com/lookup?bundleId=#{app_identifier}")
27
- end
28
-
29
-
30
- # This method only fetches the bundle identifier of a given app
31
- # @param id (int) The AppleID of the given app. This usually consists of 9 digits.
32
- # @return (String) the Bundle identifier of the app
33
- def self.fetch_bundle_identifier(id)
34
- self.fetch(id)['bundleId']
35
- end
36
-
37
- private
38
- def self.fetch_url(url)
39
- response = JSON.parse(open(url).read)
40
- return nil if response['resultCount'] == 0
41
-
42
- return response['results'].first
43
- rescue
44
- Helper.log.error "Could not find object '#{url}' using the iTunes API"
45
- nil
46
- end
47
- end
48
- end