deliver 1.0.0.beta2 → 1.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9fb4847975830357721f85e8cbb9632d6f34216
4
- data.tar.gz: 18d885cc25098731f12fb1ae44efcb09b796a3b3
3
+ metadata.gz: 0a5b737293ce73f59d6a2a28caac48d4f0c743b4
4
+ data.tar.gz: 5e0ee132997246d7bd51f14d1f5310e7627d8e20
5
5
  SHA512:
6
- metadata.gz: 50dcbfe8b9072e8ccc1625255cacdc1b70bba7af2068057920fe79cb5301d5d5ca8d331ffd30aaed02b7b664836b5016ca9e65ff1ee5253384d03f221ada7363
7
- data.tar.gz: d9384a6081a57ec61c5246e2ec4fa1bd80bdd6b4f2e3d350a0f876872d09c8e4645ca566a6de4833c87fe3126412c5919aabcbf8db37ce44343c874060eb0611
6
+ metadata.gz: 21d14cfcdf927fed64439e24cc36164b40fccccfa3977ba55f949b1299c378103e1b28caee293ee53581aedd90b93349f4261420d15fa46c22223bd8a0d2e59c
7
+ data.tar.gz: 2bdf1e912069b245e4f563db6e753987ac971d91bd5ea47fac44a68a43765ac94e62fb61c9e402db50c93032131d4792a89ea910e64572c54236288977907811
data/README.md CHANGED
@@ -35,7 +35,7 @@ deliver
35
35
 
36
36
  ###### Upload screenshots, metadata and your app to the App Store using a single command
37
37
 
38
- `deliver` **can upload ipa files, app screenshots and more to the iTunes Connect backend**, which means, you can deploy new iPhone app updates using the command line.
38
+ `deliver` **can upload ipa files, app screenshots and more to iTunes Connect** from the command line.
39
39
 
40
40
  Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/KrauseFx)
41
41
 
@@ -46,7 +46,6 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
46
46
  <a href="#installation">Installation</a> &bull;
47
47
  <a href="#quick-start">Quick Start</a> &bull;
48
48
  <a href="#usage">Usage</a> &bull;
49
- <a href="#can-i-trust-deliver">Can I trust deliver?</a> &bull;
50
49
  <a href="#tips">Tips</a> &bull;
51
50
  <a href="#need-help">Need help?</a>
52
51
  </p>
@@ -56,13 +55,14 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
56
55
  <h5 align="center"><code>deliver</code> is part of <a href="https://fastlane.tools">fastlane</a>: connect all deployment tools into one streamlined workflow.</h5>
57
56
 
58
57
  # Features
59
- - Upload hundreds of screenshots with different languages from different devices
60
- - Upload a new ipa file to iTunes Connect without Xcode from any computer
61
- - Update app metadata
62
- - Easily implement a real Continuous Deployment process using [fastlane](https://github.com/KrauseFx/fastlane)
63
- - Store the configuration in git to easily deploy from **any** computer, including your Continuous Integration server (e.g. Jenkins)
64
- - Get a PDF preview of the fetched metadata before uploading the app metadata and screenshots to Apple: [Example Preview](https://github.com/krausefx/deliver/blob/master/assets/PDFExample.png?raw=1)
65
- - Automatically create new screenshots with [snapshot](https://github.com/KrauseFx/snapshot)
58
+ - Upload hundreds of localised screenshots completely automatically
59
+ - Upload a new ipa file to iTunes Connect without Xcode from any Mac
60
+ - Maintain your app metadata locally and push changes back to iTunes Connect
61
+ - Easily implement a real Continuous Deployment process using [fastlane](https://fastlane.tools)
62
+ - Store the configuration in git to easily deploy from **any** Mac, including your Continuous Integration server
63
+ - Get a HTML preview of the fetched metadata before uploading the app metadata and screenshots to iTC
64
+
65
+ To upload builds to TestFlight check out [pilot](https://github.com/fastlane/pilot).
66
66
 
67
67
  ##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
68
68
 
@@ -76,10 +76,6 @@ Make sure, you have the latest version of the Xcode command line tools installed
76
76
 
77
77
  xcode-select --install
78
78
 
79
- To create new screenshots automatically, check out my other open source project [snapshot](https://github.com/KrauseFx/snapshot).
80
-
81
- To upload builds to TestFlight check out [pilot](https://github.com/fastlane/pilot).
82
-
83
79
  # Quick Start
84
80
 
85
81
  The guide will create all the necessary files for you, using the existing app metadata from iTunes Connect.
@@ -94,20 +90,53 @@ From now on, you can run `deliver` to deploy a new update, or just upload new ap
94
90
 
95
91
  # Usage
96
92
 
97
- TODO
93
+ Check out your local `./fastlane/metadata` and `./fastlane/screenshots` folders (if you don't use [fastlane](https://fastlane.tools) it's `./metadata` instead)
94
+
95
+ ![/assets/metadata.png](/assets/metadata.png)
96
+
97
+ You'll see your metadata from iTunes Connect. Feel free to store the metadata in git (not the screenshots). You can now modify it locally and push the changes back to iTunes Connect.
98
+
99
+ Run `deliver` to upload the app metadata from your local machine
100
+
101
+ ```
102
+ deliver
103
+ ```
104
+
105
+ Provide the path to an `ipa` file to upload and submit your app for review:
106
+
107
+ ```
108
+ deliver --ipa "App.ipa" --submit_for_review
109
+ ```
110
+
111
+ If you use [fastlane](https://fastlane.tools) you don't have to manually specify the path to your `ipa` file.
112
+
113
+ This is just a small sub-set of what you can do with `deliver`, check out the full documentation in [Deliverfile.md](https://github.com/KrauseFx/deliver/blob/master/Deliverfile.md)
114
+
115
+ Download existing screenshots from iTunes Connect
116
+
117
+ ```
118
+ deliver download_screenshots
119
+ ```
120
+
121
+ To get a list of available options run
122
+
123
+ ```
124
+ deliver --help
125
+ ```
126
+
127
+ Check out [Deliverfile.md](https://github.com/KrauseFx/deliver/blob/master/Deliverfile.md) for more options.
98
128
 
99
129
  # Credentials
100
130
 
101
131
  A detailed description about your credentials is available on a [separate repo](https://github.com/fastlane/CredentialsManager).
102
132
 
103
- # Can I trust `deliver`?
104
- ###How does this thing even work? Is magic involved? 🎩###
133
+ ### How does this thing even work? Is magic involved? 🎩###
105
134
 
106
- `deliver` is fully open source, you can take a look at its source files. It will only modify the content you want to modify using the ```Deliverfile```. Your password will be stored in the Mac OS X keychain, but can also be passed using environment variables. (More information available on [CredentialsManager](https://github.com/fastlane/CredentialsManager))
135
+ Your password will be stored in the Mac OS X keychain, but can also be passed using environment variables. (More information available on [CredentialsManager](https://github.com/fastlane/CredentialsManager))
107
136
 
108
- Before actually uploading anything to iTunes, ```deliver``` will generate a [HTML summary](https://github.com/krausefx/deliver/blob/master/assets/PDFExample.png?raw=1) of the collected data.
137
+ Before actually uploading anything to iTunes, ```deliver``` will generate a HTML summary of the collected data.
109
138
 
110
- ```deliver``` uses the following techniques under the hood:
139
+ `deliver` uses the following techniques under the hood:
111
140
 
112
141
  - The iTMSTransporter tool is used to upload the binary to iTunes Connect. iTMSTransporter is a command line tool provided by Apple.
113
142
  - For all metadata related actions `deliver` uses [spaceship](https://github.com/fastlane/spaceship)
@@ -132,15 +161,13 @@ Before actually uploading anything to iTunes, ```deliver``` will generate a [HTM
132
161
  ##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
133
162
 
134
163
  ## Available language codes
135
- ```ruby
136
- "da", "de-DE", "el", "en-AU", "en-CA", "en-GB", "en-US", "es-ES", "es-MX", "fi", "fr-CA", "fr-FR", "id", "it", "ja", "ko", "ms", "nl", "no", "pt-BR", "pt-PT", "ru", "sv", "th", "tr", "vi", "zh-Hans", "zh-Hant"
164
+ ```
165
+ en-GB, de-DE, fr-FR, it, nl-NL, pt-PT, ru, es-ES, sv, es-MX, pt-BR, en-CA, en-US, en-AU, zh-Hans, ja, ko
137
166
  ```
138
167
 
139
168
  ## Automatically create screenshots
140
169
 
141
- If you want to integrate ```deliver``` with ```snapshot```, check out [fastlane](https://github.com/KrauseFx/fastlane)!
142
-
143
- More information about ```snapshot``` can be found on the [Snapshot GitHub page](https://github.com/KrauseFx/snapshot).
170
+ If you want to integrate `deliver` with [snapshot](https://github.com/KrauseFx/snapshot), check out [fastlane](https://fastlane.tools)!
144
171
 
145
172
  ## Jenkins integration
146
173
  Detailed instructions about how to set up `deliver` and `fastlane` in `Jenkins` can be found in the [fastlane README](https://github.com/KrauseFx/fastlane/blob/master/docs/Jenkins.md).
@@ -110,7 +110,7 @@
110
110
  </head>
111
111
 
112
112
  <body>
113
- <% @options[:description].keys.each do |language| %>
113
+ <% @languages.each do |language| %>
114
114
  <% if @options[:name] %>
115
115
  <div id="app-name">
116
116
  <%= language %>: <%= @options[:name][language] %>
@@ -120,7 +120,7 @@
120
120
  <div id="app-urls">
121
121
  <% all_keys = [:support_url, :marketing_url] %>
122
122
  <% all_keys.each do |key| %>
123
- <% value = @options[key][language] %>
123
+ <% value = @options[key][language] if @options[key] %>
124
124
  <% if value %>
125
125
  <div class="app-url-descr">
126
126
  <%= key %>: <a target="_blank" class="app-url" href="<%= value %>"><%= value %></a>
@@ -140,17 +140,21 @@
140
140
  </div>
141
141
  <% end %>
142
142
 
143
- <div id="app-description">
144
- <div class="cat-headline">Description</div>
145
- <div id="app-description-text">
146
- <%= (@options[:description][language] || '').gsub("\n", "<br />") %>
147
- </div>
148
- </div>
143
+ <% if @options[:description] %>
144
+ <div id="app-description">
145
+ <div class="cat-headline">Description</div>
146
+ <div id="app-description-text">
147
+ <%= (@options[:description][language] || '').gsub("\n", "<br />") %>
148
+ </div>
149
+ </div>
150
+ <% end %>
149
151
 
150
- <div id="app-changelog">
151
- <div class="cat-headline">Changelog</div>
152
- <%= (@options[:release_notes][language] || '').gsub("\n", "<br />") %>
153
- </div>
152
+ <% if @options[:release_notes] %>
153
+ <div id="app-changelog">
154
+ <div class="cat-headline">Changelog</div>
155
+ <%= (@options[:release_notes][language] || '').gsub("\n", "<br />") %>
156
+ </div>
157
+ <% end %>
154
158
 
155
159
  <div id="app-screenshots">
156
160
  <div class="cat-headline">Screenshots</div>
@@ -33,7 +33,17 @@ module Deliver
33
33
  c.description = 'Upload metadata and binary to iTunes Connect'
34
34
  c.action do |args, options|
35
35
  options = FastlaneCore::Configuration.create(Deliver::Options.available_options, options.__hash__)
36
- options.load_configuration_file("Deliverfile")
36
+ loaded = options.load_configuration_file("Deliverfile")
37
+ loaded = true if options[:description] || options[:ipa] # do we have *anything* here?
38
+ unless loaded
39
+ if agree("No deliver configuration found in the current directory. Do you want to setup deliver? (y/n)".yellow, true)
40
+ require 'deliver/setup'
41
+ Deliver::Runner.new(options) # to login...
42
+ Deliver::Setup.new.run(options)
43
+ return 0
44
+ end
45
+ end
46
+
37
47
  Deliver::Runner.new(options).run
38
48
  end
39
49
  end
@@ -14,10 +14,10 @@ module Deliver
14
14
  def find_folders(options)
15
15
  containing = Helper.fastlane_enabled? ? './fastlane' : '.'
16
16
  options[:screenshots_path] ||= File.join(containing, 'screenshots')
17
- options[:metadata_folder] ||= File.join(containing, 'metadata')
17
+ options[:metadata_path] ||= File.join(containing, 'metadata')
18
18
 
19
19
  FileUtils.mkdir_p(options[:screenshots_path])
20
- FileUtils.mkdir_p(options[:metadata_folder])
20
+ FileUtils.mkdir_p(options[:metadata_path])
21
21
  end
22
22
  end
23
23
  end
@@ -1,5 +1,30 @@
1
1
  module Deliver
2
2
  class HtmlGenerator
3
+ def run(options, screenshots)
4
+ begin
5
+ html_path = self.render(options, screenshots, '.')
6
+ rescue => ex
7
+ Helper.log.error ex.inspect
8
+ Helper.log.error ex.backtrace.join("\n")
9
+ okay = agree("Could not render HTML preview. Do you still want to continue? (y/n)".red, true)
10
+ return if okay
11
+ raise "Could not render HTML page"
12
+ end
13
+ puts "----------------------------------------------------------------------------"
14
+ puts "Verifying the upload via the HTML file can be disabled by either adding"
15
+ puts "`force true` to your Deliverfile or using `deliver --force`"
16
+ puts "----------------------------------------------------------------------------"
17
+
18
+ system("open '#{html_path}'")
19
+ okay = agree("Does the Preview on path '#{html_path}' look okay for you? (blue = updated) (y/n)", true)
20
+
21
+ if okay
22
+ puts "HTML file confirmed...".green # print this to give feedback to the user immediately
23
+ else
24
+ raise "Did not upload the metadata, because the HTML file was rejected by the user".yellow
25
+ end
26
+ end
27
+
3
28
  # Renders all data available to quickly see if everything was correctly generated.
4
29
  # @param export_path (String) The path to a folder where the resulting HTML file should be stored.
5
30
  def render(options, screenshots, export_path = nil)
@@ -11,6 +36,9 @@ module Deliver
11
36
  @app_name = (options[:name]['en-US'] || options[:name].values.first) if options[:name]
12
37
  @app_name ||= options[:app].name
13
38
 
39
+ @languages = options[:description].keys if options[:description]
40
+ @languages ||= options[:app].latest_version.description.languages
41
+
14
42
  html_path = File.join(lib_path, "lib/assets/summary.html.erb")
15
43
  html = ERB.new(File.read(html_path)).result(binding) # http://www.rrn.dk/rubys-erb-templating-system
16
44
 
@@ -30,7 +30,7 @@ module Deliver
30
30
  raise "Could not find ipa file at path '#{value}'".red unless File.exist?(value)
31
31
  raise "'#{value}' doesn't seem to be an ipa file".red unless value.end_with?(".ipa")
32
32
  end),
33
- FastlaneCore::ConfigItem.new(key: :metadata_folder,
33
+ FastlaneCore::ConfigItem.new(key: :metadata_path,
34
34
  short_option: '-m',
35
35
  description: "Path to the folder containing the metadata files",
36
36
  optional: true),
@@ -51,11 +51,29 @@ module Deliver
51
51
  description: "Submit the new version for Review after uploading everything",
52
52
  is_string: false,
53
53
  default_value: false),
54
+ FastlaneCore::ConfigItem.new(key: :automatic_release,
55
+ description: "Should the app be automatically released once it's approved?",
56
+ is_string: false,
57
+ default_value: false),
54
58
  FastlaneCore::ConfigItem.new(key: :price_tier,
55
59
  short_option: "-r",
56
60
  description: "The price tier of this application",
57
61
  is_string: false,
58
62
  optional: true),
63
+ FastlaneCore::ConfigItem.new(key: :app_rating_config_path,
64
+ short_option: "-g",
65
+ description: "Path to the app rating's config",
66
+ is_string: true,
67
+ optional: true,
68
+ verify_block: proc do |value|
69
+ raise "Could not find config file at path '#{value}'".red unless File.exist?(value)
70
+ raise "'#{value}' doesn't seem to be a JSON file".red unless value.end_with?(".json")
71
+ end),
72
+ FastlaneCore::ConfigItem.new(key: :submission_information,
73
+ short_option: "-b",
74
+ description: "Extra information for the submission (e.g. third party content)",
75
+ is_string: false,
76
+ optional: true),
59
77
 
60
78
  # App Metadata
61
79
  # Non Localised
@@ -15,6 +15,7 @@ module Deliver
15
15
  end
16
16
 
17
17
  def run
18
+ verify_version if options[:ipa]
18
19
  upload_metadata unless options[:skip_metadata]
19
20
  upload_binary if options[:ipa]
20
21
 
@@ -23,18 +24,22 @@ module Deliver
23
24
  submit_for_review if options[:submit_for_review]
24
25
  end
25
26
 
26
- def upload_binary
27
- Helper.log.info "Uploading binary to iTunes Connect"
28
- package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
29
- app_id: options[:app].apple_id,
30
- ipa_path: options[:ipa],
31
- package_path: "/tmp"
32
- )
33
-
34
- transporter = FastlaneCore::ItunesTransporter.new(options[:username])
35
- transporter.upload(options[:app].apple_id, package_path)
27
+ # Make sure the version on iTunes Connect matches the one in the ipa
28
+ # If not, the new version will automatically be created
29
+ def verify_version
30
+ app_version = FastlaneCore::IpaFileAnalyser.fetch_app_version(options[:ipa])
31
+ return unless app_version.to_s.length > 0
32
+ Helper.log.info "Making sure the latest version on iTunes Connect matches '#{app_version}' from the ipa file..."
33
+
34
+ changed = options[:app].ensure_version!(app_version)
35
+ if changed
36
+ Helper.log.info "Successfully set the version to '#{app_version}'".green
37
+ else
38
+ Helper.log.info "'#{app_version}' is the latest version on iTunes Connect".green
39
+ end
36
40
  end
37
41
 
42
+ # Upload all metadata, screenshots, pricing information, etc. to iTunes Connect
38
43
  def upload_metadata
39
44
  # First, collect all the things for the HTML Report
40
45
  screenshots = UploadScreenshots.new.collect_screenshots(options)
@@ -50,6 +55,19 @@ module Deliver
50
55
  UploadAssets.new.upload(options) # e.g. app icon
51
56
  end
52
57
 
58
+ # Upload the binary to iTunes Connect
59
+ def upload_binary
60
+ Helper.log.info "Uploading binary to iTunes Connect"
61
+ package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
62
+ app_id: options[:app].apple_id,
63
+ ipa_path: options[:ipa],
64
+ package_path: "/tmp"
65
+ )
66
+
67
+ transporter = FastlaneCore::ItunesTransporter.new(options[:username])
68
+ transporter.upload(options[:app].apple_id, package_path)
69
+ end
70
+
53
71
  def submit_for_review
54
72
  SubmitForReview.new.submit!(options)
55
73
  end
@@ -58,21 +76,7 @@ module Deliver
58
76
 
59
77
  def validate_html(screenshots)
60
78
  return if options[:force]
61
- Helper.log.info "In the beta version of deliver the generation of the PDF is currently disabled"
62
- return
63
-
64
- html_path = HtmlGenerator.new.render(options, screenshots, '.')
65
- puts "----------------------------------------------------------------------------"
66
- puts "Verifying the upload via the HTML file can be disabled by either adding"
67
- puts "'skip_pdf true' to your Deliverfile or using the flag --force."
68
- puts "----------------------------------------------------------------------------"
69
-
70
- system("open '#{html_path}'")
71
- okay = agree("Does the Preview on path '#{html_path}' look okay for you? (blue = updated) (y/n)", true)
72
-
73
- unless okay
74
- raise "Did not upload the metadata, because the HTML file was rejected by the user".yellow
75
- end
79
+ HtmlGenerator.new.run(options, screenshots)
76
80
  end
77
81
  end
78
82
  end
@@ -8,10 +8,20 @@ module Deliver
8
8
  submission = app.create_submission
9
9
 
10
10
  # Set app submission information
11
+ # Default Values
11
12
  submission.content_rights_contains_third_party_content = false
12
13
  submission.content_rights_has_rights = true
13
14
  submission.add_id_info_uses_idfa = false
14
15
 
16
+ # User Values
17
+ if options[:submission_information]
18
+ raise "`submission_information` must be a hash" unless options[:submission_information].kind_of?(Hash)
19
+ options[:submission_information].each do |key, value|
20
+ Helper.log.info "Setting '#{key}' to '#{value}'..."
21
+ submission.send("#{key}=", value)
22
+ end
23
+ end
24
+
15
25
  # Finalize app submission
16
26
  submission.complete!
17
27
 
@@ -15,13 +15,12 @@ module Deliver
15
15
 
16
16
  # Make sure to call `load_from_filesystem` before calling upload
17
17
  def upload(options)
18
+ verify_available_languages!(options)
19
+
18
20
  app = options[:app]
19
21
 
20
22
  details = app.details
21
23
  v = app.edit_version
22
- raise "Could not find a version to edit for app '#{app.name}'".red unless v
23
-
24
- # TODO: Create new language
25
24
 
26
25
  (LOCALISED_VERSION_VALUES + LOCALISED_APP_VALUES).each do |key|
27
26
  current = options[key]
@@ -46,7 +45,10 @@ module Deliver
46
45
  details.send("#{key}=", current) if NON_LOCALISED_APP_VALUES.include?(key)
47
46
  end
48
47
 
49
- set_review_information(v, options) if options[:app_review_information]
48
+ v.release_on_approval = options[:automatic_release]
49
+
50
+ set_review_information(v, options)
51
+ set_app_rating(v, options)
50
52
 
51
53
  Helper.log.info "Uploading metadata to iTunes Connect"
52
54
  v.save!
@@ -54,10 +56,37 @@ module Deliver
54
56
  Helper.log.info "Successfully uploaded initial set of metadata to iTunes Connect".green
55
57
  end
56
58
 
59
+ # Makes sure all languages we need are actually created
60
+ def verify_available_languages!(options)
61
+ # Collect all languages we need
62
+ # We only care about languages from user provided values
63
+ # as the other languages are on iTC already anyway
64
+ v = options[:app].edit_version
65
+ raise "Could not find a version to edit for app '#{options[:app].name}', the app metadata is read-only currently".red unless v
66
+
67
+ enabled_languages = []
68
+ LOCALISED_VERSION_VALUES.each do |key|
69
+ current = options[key]
70
+ next unless current && current.kind_of?(Hash)
71
+ current.each do |language, value|
72
+ enabled_languages << language unless enabled_languages.include?(language)
73
+ end
74
+ end
75
+
76
+ if enabled_languages.count > 0
77
+ v.create_languages(enabled_languages)
78
+ lng_text = "language"
79
+ lng_text += "s" if enabled_languages.count != 1
80
+ Helper.log.info "Activating #{lng_text} #{enabled_languages.join(', ')}..."
81
+ v.save!
82
+ end
83
+ true
84
+ end
85
+
57
86
  # Loads the metadata files and stores them into the options object
58
87
  def load_from_filesystem(options)
59
88
  # Load localised data
60
- Dir.glob(File.join(options[:metadata_folder], "*")).each do |lng_folder|
89
+ Dir.glob(File.join(options[:metadata_path], "*")).each do |lng_folder|
61
90
  next unless File.directory?(lng_folder) # We don't want to read txt as they are non localised
62
91
 
63
92
  language = File.basename(lng_folder)
@@ -74,7 +103,7 @@ module Deliver
74
103
 
75
104
  # Load non localised data
76
105
  (NON_LOCALISED_VERSION_VALUES + NON_LOCALISED_APP_VALUES).each do |key|
77
- path = File.join(options[:metadata_folder], "#{key}.txt")
106
+ path = File.join(options[:metadata_path], "#{key}.txt")
78
107
  next unless File.exist?(path)
79
108
 
80
109
  Helper.log.info "Loading '#{path}'..."
@@ -85,6 +114,7 @@ module Deliver
85
114
  private
86
115
 
87
116
  def set_review_information(v, options)
117
+ return unless options[:app_review_information]
88
118
  info = options[:app_review_information]
89
119
  raise "`app_review_information` must be a hash" unless info.kind_of?(Hash)
90
120
 
@@ -96,5 +126,18 @@ module Deliver
96
126
  v.review_demo_password = info[:demo_password] if info[:demo_password]
97
127
  v.review_notes = info[:notes] if info[:notes]
98
128
  end
129
+
130
+ def set_app_rating(v, options)
131
+ return unless options[:app_rating_config_path]
132
+
133
+ require 'json'
134
+ begin
135
+ json = JSON.parse(File.read(options[:app_rating_config_path]))
136
+ rescue => ex
137
+ Helper.log.fatal ex.to_s
138
+ raise "Error parsing JSON file at path '#{options[:app_rating_config_path]}'".red
139
+ end
140
+ v.update_rating(json)
141
+ end
99
142
  end
100
143
  end
@@ -52,7 +52,10 @@ module Deliver
52
52
  files = Dir.glob(File.join(lng_folder, '*.png'))
53
53
  next if files.count == 0
54
54
 
55
+ prefer_framed = Dir.glob(File.join(lng_folder, '*_framed.png')).count > 0
56
+
55
57
  files.each do |path|
58
+ next if prefer_framed && !path.include?("_framed.png")
56
59
  screenshots << AppScreenshot.new(path, language)
57
60
  end
58
61
  end
@@ -1,4 +1,4 @@
1
1
  module Deliver
2
- VERSION = "1.0.0.beta2"
2
+ VERSION = "1.0.0.beta3"
3
3
  DESCRIPTION = 'Upload screenshots, metadata and your app to the App Store using a single command'
4
4
  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: 1.0.0.beta2
4
+ version: 1.0.0.beta3
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-09-27 00:00:00.000000000 Z
11
+ date: 2015-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane_core
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.0
53
+ version: 0.10.1
54
54
  - - "<="
55
55
  - !ruby/object:Gem::Version
56
56
  version: 1.0.0
@@ -60,7 +60,7 @@ dependencies:
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.9.0
63
+ version: 0.10.1
64
64
  - - "<="
65
65
  - !ruby/object:Gem::Version
66
66
  version: 1.0.0
@@ -254,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
254
  version: 1.3.1
255
255
  requirements: []
256
256
  rubyforge_project:
257
- rubygems_version: 2.4.6
257
+ rubygems_version: 2.4.5
258
258
  signing_key:
259
259
  specification_version: 4
260
260
  summary: Upload screenshots, metadata and your app to the App Store using a single