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 +4 -4
- data/README.md +51 -24
- data/lib/assets/summary.html.erb +16 -12
- data/lib/deliver/commands_generator.rb +11 -1
- data/lib/deliver/detect_values.rb +2 -2
- data/lib/deliver/html_generator.rb +28 -0
- data/lib/deliver/options.rb +19 -1
- data/lib/deliver/runner.rb +29 -25
- data/lib/deliver/submit_for_review.rb +10 -0
- data/lib/deliver/upload_metadata.rb +49 -6
- data/lib/deliver/upload_screenshots.rb +3 -0
- data/lib/deliver/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a5b737293ce73f59d6a2a28caac48d4f0c743b4
|
4
|
+
data.tar.gz: 5e0ee132997246d7bd51f14d1f5310e7627d8e20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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> •
|
47
47
|
<a href="#quick-start">Quick Start</a> •
|
48
48
|
<a href="#usage">Usage</a> •
|
49
|
-
<a href="#can-i-trust-deliver">Can I trust deliver?</a> •
|
50
49
|
<a href="#tips">Tips</a> •
|
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
|
60
|
-
- Upload a new ipa file to iTunes Connect without Xcode from any
|
61
|
-
-
|
62
|
-
- Easily implement a real Continuous Deployment process using [fastlane](https://
|
63
|
-
- Store the configuration in git to easily deploy from **any**
|
64
|
-
- Get a
|
65
|
-
|
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
|
-
|
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
|
-
|
104
|
-
###How does this thing even work? Is magic involved? 🎩###
|
133
|
+
### How does this thing even work? Is magic involved? 🎩###
|
105
134
|
|
106
|
-
|
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
|
137
|
+
Before actually uploading anything to iTunes, ```deliver``` will generate a HTML summary of the collected data.
|
109
138
|
|
110
|
-
|
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
|
-
```
|
136
|
-
|
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
|
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).
|
data/lib/assets/summary.html.erb
CHANGED
@@ -110,7 +110,7 @@
|
|
110
110
|
</head>
|
111
111
|
|
112
112
|
<body>
|
113
|
-
<% @
|
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
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
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[:
|
17
|
+
options[:metadata_path] ||= File.join(containing, 'metadata')
|
18
18
|
|
19
19
|
FileUtils.mkdir_p(options[:screenshots_path])
|
20
|
-
FileUtils.mkdir_p(options[:
|
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
|
|
data/lib/deliver/options.rb
CHANGED
@@ -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: :
|
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
|
data/lib/deliver/runner.rb
CHANGED
@@ -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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
-
|
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
|
-
|
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[:
|
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[:
|
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
|
data/lib/deliver/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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.
|
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
|