deliver 0.7.9 → 0.7.10
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 +4 -4
- data/lib/deliver.rb +4 -6
- data/lib/deliver/app_metadata.rb +12 -12
- data/lib/deliver/app_metadata_screenshots.rb +7 -7
- data/lib/deliver/deliverfile/deliverfile_creator.rb +3 -8
- data/lib/deliver/deliverfile/dsl.rb +1 -1
- data/lib/deliver/itunes_connect/itunes_connect.rb +3 -64
- data/lib/deliver/itunes_connect/itunes_connect_additional.rb +1 -1
- data/lib/deliver/itunes_connect/itunes_connect_app_icon.rb +2 -2
- data/lib/deliver/itunes_connect/itunes_connect_app_rating.rb +1 -1
- data/lib/deliver/itunes_connect/itunes_connect_new_version.rb +1 -1
- data/lib/deliver/itunes_connect/itunes_connect_reader.rb +5 -5
- data/lib/deliver/itunes_connect/itunes_connect_submission.rb +2 -1
- data/lib/deliver/version.rb +1 -1
- metadata +3 -120
- data/lib/deliver/helper.rb +0 -60
- data/lib/deliver/itunes_connect/itunes_connect_helper.rb +0 -82
- data/lib/deliver/itunes_connect/itunes_connect_login.rb +0 -61
- data/lib/deliver/languages.rb +0 -6
- data/lib/deliver/update_checker.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 945773ee223c9e92da550da88cb48c5c7e4ae892
|
4
|
+
data.tar.gz: 2916e3bab546cba726de17b9f0c16ef0f950096f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfe66033b9b3da8127c2b5b6e0be30c7865550b0abdaf8abf8662663b7555d41f37cc103ae51500e032f553b00be67ce0f2d27f5d432d5057d8d13870e7f4b91
|
7
|
+
data.tar.gz: 54d4f2f0ef25b1e8ce95755ce42bc230bef70f53be5396f643b5d18902fa6cd1a730bfbf7985e68a2036fd426f52d999cab119b622cfe80f1361ba82fcba4498
|
data/lib/deliver.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'deliver/version'
|
3
|
-
require 'deliver/helper'
|
4
3
|
require 'deliver/app'
|
5
4
|
require 'deliver/app_metadata'
|
6
5
|
require 'deliver/metadata_item'
|
@@ -12,18 +11,17 @@ require 'deliver/deliverfile/deliverfile'
|
|
12
11
|
require 'deliver/deliverfile/deliverfile_creator'
|
13
12
|
require 'deliver/deliverer'
|
14
13
|
require 'deliver/ipa_uploader'
|
15
|
-
require 'deliver/languages'
|
16
14
|
require 'deliver/pdf_generator'
|
17
15
|
require 'deliver/deliver_process'
|
18
16
|
require 'deliver/dependency_checker'
|
19
|
-
require 'deliver/update_checker'
|
20
17
|
require 'deliver/ipa_file_analyser'
|
21
18
|
require 'deliver/testflight'
|
22
19
|
|
23
|
-
|
24
|
-
require 'colored'
|
20
|
+
require 'fastlane_core'
|
25
21
|
|
26
22
|
module Deliver
|
27
|
-
|
23
|
+
Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
|
24
|
+
|
25
|
+
FastlaneCore::UpdateChecker.verify_latest_version('deliver', Deliver::VERSION)
|
28
26
|
Deliver::DependencyChecker.check_dependencies
|
29
27
|
end
|
data/lib/deliver/app_metadata.rb
CHANGED
@@ -36,7 +36,7 @@ module Deliver
|
|
36
36
|
|
37
37
|
private_constant :METADATA_FILE_NAME, :MAXIMUM_NUMBER_OF_SCREENSHOTS
|
38
38
|
|
39
|
-
INVALID_LANGUAGE_ERROR = "The specified language could not be found. Make sure it is available in
|
39
|
+
INVALID_LANGUAGE_ERROR = "The specified language could not be found. Make sure it is available in FastlaneCore::Languages::ALL_LANGUAGES"
|
40
40
|
|
41
41
|
# You don't have to manually create an AppMetadata object. It will
|
42
42
|
# be created when you access the app's metadata ({Deliver::App#metadata})
|
@@ -83,13 +83,13 @@ module Deliver
|
|
83
83
|
end
|
84
84
|
|
85
85
|
# Adds a new locale (language) to the given app
|
86
|
-
# @param language (
|
86
|
+
# @param language (FastlaneCore::Languages::ALL_LANGUAGES) the language you want to
|
87
87
|
# this app
|
88
88
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
89
89
|
# @return (Bool) Is true, if the language was created. False, when the language alreade existed
|
90
90
|
def add_new_locale(language)
|
91
|
-
unless
|
92
|
-
raise "Language '#{language}' is invalid. It must be in #{
|
91
|
+
unless FastlaneCore::Languages::ALL_LANGUAGES.include?language
|
92
|
+
raise "Language '#{language}' is invalid. It must be in #{FastlaneCore::Languages::ALL_LANGUAGES}."
|
93
93
|
end
|
94
94
|
|
95
95
|
if information[language] != nil
|
@@ -126,7 +126,7 @@ module Deliver
|
|
126
126
|
#####################################################
|
127
127
|
|
128
128
|
# Updates the app title
|
129
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
129
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
130
130
|
# as keys.
|
131
131
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
132
132
|
def update_title(hash)
|
@@ -134,7 +134,7 @@ module Deliver
|
|
134
134
|
end
|
135
135
|
|
136
136
|
# Updates the app description which is shown in the AppStore
|
137
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
137
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
138
138
|
# as keys.
|
139
139
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
140
140
|
def update_description(hash)
|
@@ -142,7 +142,7 @@ module Deliver
|
|
142
142
|
end
|
143
143
|
|
144
144
|
# Updates the app changelog of the latest version
|
145
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
145
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
146
146
|
# as keys.
|
147
147
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
148
148
|
def update_changelog(hash)
|
@@ -150,7 +150,7 @@ module Deliver
|
|
150
150
|
end
|
151
151
|
|
152
152
|
# Updates the Marketing URL
|
153
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
153
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
154
154
|
# as keys.
|
155
155
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
156
156
|
def update_marketing_url(hash)
|
@@ -158,7 +158,7 @@ module Deliver
|
|
158
158
|
end
|
159
159
|
|
160
160
|
# Updates the Support URL
|
161
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
161
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
162
162
|
# as keys.
|
163
163
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
164
164
|
def update_support_url(hash)
|
@@ -166,7 +166,7 @@ module Deliver
|
|
166
166
|
end
|
167
167
|
|
168
168
|
# Updates the Privacy URL
|
169
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
169
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
170
170
|
# as keys.
|
171
171
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
172
172
|
def update_privacy_url(hash)
|
@@ -174,7 +174,7 @@ module Deliver
|
|
174
174
|
end
|
175
175
|
|
176
176
|
# Updates the app keywords
|
177
|
-
# @param (Hash) hash The hash should contain the correct language codes ({
|
177
|
+
# @param (Hash) hash The hash should contain the correct language codes ({FastlaneCore::Languages})
|
178
178
|
# as keys. The value should be an array of keywords (each keyword is a string)
|
179
179
|
# @raise (AppMetadataParameterError) Is thrown when don't pass a correct hash with correct language codes.
|
180
180
|
def update_keywords(hash)
|
@@ -272,7 +272,7 @@ module Deliver
|
|
272
272
|
|
273
273
|
locale = fetch_value("//x:locale[@name='#{language}']").first
|
274
274
|
|
275
|
-
raise AppMetadataParameterError.new("#{INVALID_LANGUAGE_ERROR} (#{language})") unless Languages::ALL_LANGUAGES.include?language
|
275
|
+
raise AppMetadataParameterError.new("#{INVALID_LANGUAGE_ERROR} (#{language})") unless FastlaneCore::Languages::ALL_LANGUAGES.include?language
|
276
276
|
|
277
277
|
|
278
278
|
field = locale.search(xpath_name).first
|
@@ -5,9 +5,9 @@ module Deliver
|
|
5
5
|
#####################################################
|
6
6
|
|
7
7
|
# Removes all currently enabled screenshots for the given language.
|
8
|
-
# @param (String) language The language, which has to be in this list: {
|
8
|
+
# @param (String) language The language, which has to be in this list: {FastlaneCore::Languages}.
|
9
9
|
def clear_all_screenshots(language)
|
10
|
-
raise AppMetadataParameterError.new(INVALID_LANGUAGE_ERROR) unless Languages::ALL_LANGUAGES.include?language
|
10
|
+
raise AppMetadataParameterError.new(INVALID_LANGUAGE_ERROR) unless FastlaneCore::Languages::ALL_LANGUAGES.include?language
|
11
11
|
|
12
12
|
update_localized_value('software_screenshots', {language => {}}) do |field, useless, language|
|
13
13
|
field.children.remove # remove all the screenshots
|
@@ -17,12 +17,12 @@ module Deliver
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# Appends another screenshot to the already existing ones
|
20
|
-
# @param (String) language The language, which has to be in this list: {
|
20
|
+
# @param (String) language The language, which has to be in this list: {FastlaneCore::Languages}.
|
21
21
|
# @param (Deliver::AppScreenshot) app_screenshot The screenshot you want to add to the app metadata.
|
22
22
|
# @raise (AppMetadataTooManyScreenshotsError) When there are already 5 screenshots (MAXIMUM_NUMBER_OF_SCREENSHOTS).
|
23
23
|
|
24
24
|
def add_screenshot(language, app_screenshot)
|
25
|
-
raise AppMetadataParameterError.new(INVALID_LANGUAGE_ERROR) unless Languages::ALL_LANGUAGES.include?language
|
25
|
+
raise AppMetadataParameterError.new(INVALID_LANGUAGE_ERROR) unless FastlaneCore::Languages::ALL_LANGUAGES.include?language
|
26
26
|
|
27
27
|
create_locale_if_not_exists(language)
|
28
28
|
|
@@ -100,14 +100,14 @@ module Deliver
|
|
100
100
|
# This method will automatically detect which device type each screenshot is.
|
101
101
|
#
|
102
102
|
# This will also clear all existing screenshots before setting the new ones.
|
103
|
-
# @param (Hash) hash A hash containing a different path for each locale ({
|
103
|
+
# @param (Hash) hash A hash containing a different path for each locale ({FastlaneCore::Languages::ALL_LANGUAGES})
|
104
104
|
def set_screenshots_for_each_language(hash)
|
105
105
|
raise AppMetadataParameterError.new("Parameter needs to be an hash, containg strings with the new description") unless hash.kind_of?Hash
|
106
106
|
|
107
107
|
hash.each do |language, current_path|
|
108
108
|
resulting_path = "#{current_path}/**/*.{png,jpg,jpeg}"
|
109
109
|
|
110
|
-
raise AppMetadataParameterError.new(INVALID_LANGUAGE_ERROR) unless Languages::ALL_LANGUAGES.include?language
|
110
|
+
raise AppMetadataParameterError.new(INVALID_LANGUAGE_ERROR) unless FastlaneCore::Languages::ALL_LANGUAGES.include?language
|
111
111
|
|
112
112
|
# https://stackoverflow.com/questions/21688855/
|
113
113
|
# File::FNM_CASEFOLD = ignore case
|
@@ -138,7 +138,7 @@ module Deliver
|
|
138
138
|
raise AppMetadataParameterError.new("Parameter needs to be a path (string)") unless path.kind_of?String
|
139
139
|
|
140
140
|
found = false
|
141
|
-
|
141
|
+
FastlaneCore::Languages::ALL_LANGUAGES.each do |language|
|
142
142
|
full_path = path + "/#{language}"
|
143
143
|
if File.directory?(full_path)
|
144
144
|
found = true
|
@@ -40,6 +40,7 @@ module Deliver
|
|
40
40
|
# @param path (String) The exact path (including the file name) in which the Deliverfile should be created
|
41
41
|
# @param project_name (String) The default name of the project, which is used in the generated Deliverfile
|
42
42
|
def self.create_example_deliver_file(path, project_name)
|
43
|
+
gem_path = Helper.gem_path('deliver')
|
43
44
|
example = File.read("#{gem_path}/lib/assets/DeliverfileExample")
|
44
45
|
example.gsub!("[[APP_NAME]]", project_name)
|
45
46
|
File.write(path, example)
|
@@ -66,14 +67,6 @@ module Deliver
|
|
66
67
|
end
|
67
68
|
|
68
69
|
private
|
69
|
-
def self.gem_path
|
70
|
-
if not Helper.is_test? and Gem::Specification::find_all_by_name('deliver').any?
|
71
|
-
return Gem::Specification.find_by_name('deliver').gem_dir
|
72
|
-
else
|
73
|
-
return './'
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
70
|
# This method takes care of creating a new 'deliver' folder, containg the app metadata
|
78
71
|
# and screenshots folders
|
79
72
|
def self.generate_deliver_file(app, path, project_name)
|
@@ -90,6 +83,8 @@ module Deliver
|
|
90
83
|
File.write(meta_path, JSON.pretty_generate(json))
|
91
84
|
puts "Successfully created new metadata JSON file at '#{meta_path}'".green
|
92
85
|
|
86
|
+
gem_path = Helper.gem_path('deliver')
|
87
|
+
|
93
88
|
# Add a README to the screenshots folder
|
94
89
|
File.write("#{metadata_path}screenshots/README.txt", File.read("#{gem_path}/lib/assets/ScreenshotsHelp"))
|
95
90
|
|
@@ -66,7 +66,7 @@ module Deliver
|
|
66
66
|
# This is approach only is recommend for deployments where you are only
|
67
67
|
# supporting one language.
|
68
68
|
#
|
69
|
-
# The language itself must be included in {
|
69
|
+
# The language itself must be included in {FastlaneCore::Languages::ALL_LANGUAGES}.
|
70
70
|
# @example
|
71
71
|
# default_language 'en-US'
|
72
72
|
# @example
|
@@ -1,74 +1,13 @@
|
|
1
|
-
require '
|
2
|
-
require 'capybara/poltergeist'
|
3
|
-
require 'fastimage'
|
4
|
-
require 'credentials_manager/password_manager'
|
5
|
-
require 'phantomjs/poltergeist'
|
1
|
+
require 'fastlane_core/itunes_connect/itunes_connect'
|
6
2
|
|
7
3
|
# Import all the actions
|
8
4
|
require 'deliver/itunes_connect/itunes_connect_submission'
|
9
5
|
require 'deliver/itunes_connect/itunes_connect_reader'
|
10
|
-
require 'deliver/itunes_connect/itunes_connect_helper'
|
11
6
|
require 'deliver/itunes_connect/itunes_connect_new_version'
|
12
|
-
require 'deliver/itunes_connect/itunes_connect_login'
|
13
7
|
require 'deliver/itunes_connect/itunes_connect_app_icon'
|
14
8
|
require 'deliver/itunes_connect/itunes_connect_app_rating'
|
15
9
|
require 'deliver/itunes_connect/itunes_connect_additional'
|
16
10
|
|
17
11
|
module Deliver
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
# Every method you call here, might take a time
|
22
|
-
class ItunesConnect
|
23
|
-
# This error occurs only if there is something wrong with the given login data
|
24
|
-
class ItunesConnectLoginError < StandardError
|
25
|
-
end
|
26
|
-
|
27
|
-
# This error can occur for many reaons. It is
|
28
|
-
# usually raised when a UI element could not be found
|
29
|
-
class ItunesConnectGeneralError < StandardError
|
30
|
-
end
|
31
|
-
|
32
|
-
include Capybara::DSL
|
33
|
-
|
34
|
-
ITUNESCONNECT_URL = "https://itunesconnect.apple.com/"
|
35
|
-
APP_DETAILS_URL = "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app/[[app_id]]"
|
36
|
-
|
37
|
-
BUTTON_STRING_NEW_VERSION = "New Version"
|
38
|
-
BUTTON_STRING_SUBMIT_FOR_REVIEW = "Submit for Review"
|
39
|
-
BUTTON_ADD_NEW_BUILD = 'Click + to add a build before you submit your app.'
|
40
|
-
|
41
|
-
WAITING_FOR_REVIEW = "Waiting For Review"
|
42
|
-
PROCESSING_TEXT = "Processing"
|
43
|
-
|
44
|
-
def initialize
|
45
|
-
super
|
46
|
-
|
47
|
-
return if Helper.is_test?
|
48
|
-
|
49
|
-
DependencyChecker.check_dependencies
|
50
|
-
|
51
|
-
Capybara.run_server = false
|
52
|
-
Capybara.default_driver = :poltergeist
|
53
|
-
Capybara.javascript_driver = :poltergeist
|
54
|
-
Capybara.current_driver = :poltergeist
|
55
|
-
Capybara.app_host = ITUNESCONNECT_URL
|
56
|
-
|
57
|
-
# Since Apple has some SSL errors, we have to configure the client properly:
|
58
|
-
# https://github.com/ariya/phantomjs/issues/11239
|
59
|
-
Capybara.register_driver :poltergeist do |a|
|
60
|
-
conf = ['--debug=no', '--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1']
|
61
|
-
Capybara::Poltergeist::Driver.new(a, {
|
62
|
-
phantomjs: Phantomjs.path,
|
63
|
-
phantomjs_options: conf,
|
64
|
-
phantomjs_logger: File.open("/tmp/poltergeist_log.txt", "a"),
|
65
|
-
js_errors: false
|
66
|
-
})
|
67
|
-
end
|
68
|
-
|
69
|
-
page.driver.headers = { "Accept-Language" => "en" }
|
70
|
-
|
71
|
-
login
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
12
|
+
ItunesConnect = FastlaneCore::ItunesConnect
|
13
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'fastimage'
|
2
2
|
|
3
|
-
module
|
3
|
+
module FastlaneCore
|
4
4
|
class ItunesConnect
|
5
5
|
# Uploading a new full size app icon
|
6
6
|
|
@@ -14,7 +14,7 @@ module Deliver
|
|
14
14
|
# Remove alpha channel
|
15
15
|
Helper.log.info "Removing alpha channel from provided App Icon (iTunes Connect requirement)".green
|
16
16
|
|
17
|
-
`sips -s format bmp '#{path}' &> /dev/null ` # &> /dev/null
|
17
|
+
`sips -s format bmp '#{path}' &> /dev/null ` # &> /dev/null since there is warning because of the extension
|
18
18
|
`sips -s format png '#{path}'`
|
19
19
|
|
20
20
|
begin
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module FastlaneCore
|
2
2
|
# For all the information reading (e.g. version number)
|
3
3
|
class ItunesConnect
|
4
4
|
# This method will fetch the current status ({Deliver::App::AppStatus})
|
@@ -17,14 +17,14 @@ module Deliver
|
|
17
17
|
if page.has_content?WAITING_FOR_REVIEW
|
18
18
|
# That's either Upload Received or Waiting for Review
|
19
19
|
if page.has_content?"To submit a new build, you must remove this version from review"
|
20
|
-
return App::AppStatus::WAITING_FOR_REVIEW
|
20
|
+
return Deliver::App::AppStatus::WAITING_FOR_REVIEW
|
21
21
|
else
|
22
|
-
return App::AppStatus::UPLOAD_RECEIVED
|
22
|
+
return Deliver::App::AppStatus::UPLOAD_RECEIVED
|
23
23
|
end
|
24
24
|
elsif page.has_content?BUTTON_STRING_NEW_VERSION
|
25
|
-
return App::AppStatus::READY_FOR_SALE
|
25
|
+
return Deliver::App::AppStatus::READY_FOR_SALE
|
26
26
|
elsif page.has_content?BUTTON_STRING_SUBMIT_FOR_REVIEW
|
27
|
-
return App::AppStatus::PREPARE_FOR_SUBMISSION
|
27
|
+
return Deliver::App::AppStatus::PREPARE_FOR_SUBMISSION
|
28
28
|
else
|
29
29
|
raise "App status not yet implemented"
|
30
30
|
end
|
@@ -1,6 +1,7 @@
|
|
1
|
-
module
|
1
|
+
module FastlaneCore
|
2
2
|
# Everything related to submitting the app
|
3
3
|
class ItunesConnect
|
4
|
+
BUTTON_ADD_NEW_BUILD = 'Click + to add a build before you submit your app.'
|
4
5
|
|
5
6
|
# This will put the latest uploaded build as a new beta build
|
6
7
|
def put_build_into_beta_testing!(app, version_number)
|
data/lib/deliver/version.rb
CHANGED
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deliver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.10
|
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-
|
11
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: fastlane_core
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - '>='
|
@@ -24,34 +24,6 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: multi_json
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: highline
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.6.21
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.6.21
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: nokogiri
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,34 +80,6 @@ dependencies:
|
|
108
80
|
- - ~>
|
109
81
|
- !ruby/object:Gem::Version
|
110
82
|
version: 3.1.0
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: colored
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - '>='
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: commander
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ~>
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '4'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ~>
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '4'
|
139
83
|
- !ruby/object:Gem::Dependency
|
140
84
|
name: prawn
|
141
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,62 +94,6 @@ dependencies:
|
|
150
94
|
- - '>='
|
151
95
|
- !ruby/object:Gem::Version
|
152
96
|
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: credentials_manager
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - '>='
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :runtime
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - '>='
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: phantomjs
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ~>
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 1.9.8
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ~>
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: 1.9.8
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: capybara
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ~>
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: 2.4.3
|
188
|
-
type: :runtime
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ~>
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: 2.4.3
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: poltergeist
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ~>
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: 1.5.1
|
202
|
-
type: :runtime
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ~>
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: 1.5.1
|
209
97
|
- !ruby/object:Gem::Dependency
|
210
98
|
name: bundler
|
211
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -332,25 +220,20 @@ files:
|
|
332
220
|
- lib/deliver/deliverfile/deliverfile_creator.rb
|
333
221
|
- lib/deliver/deliverfile/dsl.rb
|
334
222
|
- lib/deliver/dependency_checker.rb
|
335
|
-
- lib/deliver/helper.rb
|
336
223
|
- lib/deliver/ipa_file_analyser.rb
|
337
224
|
- lib/deliver/ipa_uploader.rb
|
338
225
|
- lib/deliver/itunes_connect/itunes_connect.rb
|
339
226
|
- lib/deliver/itunes_connect/itunes_connect_additional.rb
|
340
227
|
- lib/deliver/itunes_connect/itunes_connect_app_icon.rb
|
341
228
|
- lib/deliver/itunes_connect/itunes_connect_app_rating.rb
|
342
|
-
- lib/deliver/itunes_connect/itunes_connect_helper.rb
|
343
|
-
- lib/deliver/itunes_connect/itunes_connect_login.rb
|
344
229
|
- lib/deliver/itunes_connect/itunes_connect_new_version.rb
|
345
230
|
- lib/deliver/itunes_connect/itunes_connect_reader.rb
|
346
231
|
- lib/deliver/itunes_connect/itunes_connect_submission.rb
|
347
232
|
- lib/deliver/itunes_search_api.rb
|
348
233
|
- lib/deliver/itunes_transporter.rb
|
349
|
-
- lib/deliver/languages.rb
|
350
234
|
- lib/deliver/metadata_item.rb
|
351
235
|
- lib/deliver/pdf_generator.rb
|
352
236
|
- lib/deliver/testflight.rb
|
353
|
-
- lib/deliver/update_checker.rb
|
354
237
|
- lib/deliver/version.rb
|
355
238
|
homepage: http://fastlane.tools
|
356
239
|
licenses:
|
data/lib/deliver/helper.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'logger'
|
2
|
-
|
3
|
-
module Deliver
|
4
|
-
module Helper
|
5
|
-
|
6
|
-
# Logging happens using this method
|
7
|
-
def self.log
|
8
|
-
if is_test?
|
9
|
-
@@log ||= Logger.new(nil) # don't show any logs when running tests
|
10
|
-
else
|
11
|
-
@@log ||= Logger.new(STDOUT)
|
12
|
-
end
|
13
|
-
|
14
|
-
@@log.formatter = proc do |severity, datetime, progname, msg|
|
15
|
-
string = "#{severity} [#{datetime.strftime('%Y-%m-%d %H:%M:%S.%2N')}]: "
|
16
|
-
second = "#{msg}\n"
|
17
|
-
|
18
|
-
if severity == "DEBUG"
|
19
|
-
string = string.magenta
|
20
|
-
elsif severity == "INFO"
|
21
|
-
string = string.white
|
22
|
-
elsif severity == "WARN"
|
23
|
-
string = string.yellow
|
24
|
-
elsif severity == "ERROR"
|
25
|
-
string = string.red
|
26
|
-
elsif severity == "FATAL"
|
27
|
-
string = string.red.bold
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
[string, second].join("")
|
32
|
-
end
|
33
|
-
|
34
|
-
@@log
|
35
|
-
end
|
36
|
-
|
37
|
-
# @return true if the currently running program is a unit test
|
38
|
-
def self.is_test?
|
39
|
-
defined?SpecHelper
|
40
|
-
end
|
41
|
-
|
42
|
-
# @return the full path to the Xcode developer tools of the currently
|
43
|
-
# running system
|
44
|
-
def self.xcode_path
|
45
|
-
return "" if self.is_test? and not OS.mac?
|
46
|
-
`xcode-select -p`.gsub("\n", '') + "/"
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return the full path to the iTMSTransporter executable
|
50
|
-
def self.transporter_path
|
51
|
-
self.xcode_path + '../Applications/Application\ Loader.app/Contents/MacOS/itms/bin/iTMSTransporter'
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.fastlane_enabled?
|
55
|
-
# This is called from the root context on the first start
|
56
|
-
@@enabled ||= File.directory?"./fastlane"
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
module Deliver
|
2
|
-
class ItunesConnect
|
3
|
-
# All the private helpers
|
4
|
-
private
|
5
|
-
# Opens the app details page of the given app.
|
6
|
-
# @param app (Deliver::App) the app that should be opened
|
7
|
-
# @return (bool) true if everything worked fine
|
8
|
-
# @raise [ItunesConnectGeneralError] General error while executing
|
9
|
-
# this action
|
10
|
-
# @raise [ItunesConnectLoginError] Login data is wrong
|
11
|
-
def open_app_page(app)
|
12
|
-
verify_app(app)
|
13
|
-
|
14
|
-
Helper.log.info "Opening detail page for app #{app}"
|
15
|
-
|
16
|
-
visit APP_DETAILS_URL.gsub("[[app_id]]", app.apple_id.to_s)
|
17
|
-
|
18
|
-
wait_for_elements('.page-subnav')
|
19
|
-
sleep 5
|
20
|
-
|
21
|
-
if current_url.include?"wa/defaultError" # app could not be found
|
22
|
-
raise "Could not open app details for app '#{app}'. Make sure you're using the correct Apple ID and the correct Apple developer account (#{CredentialsManager::PasswordManager.shared_manager.username}).".red
|
23
|
-
end
|
24
|
-
|
25
|
-
true
|
26
|
-
rescue => ex
|
27
|
-
error_occured(ex)
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
def verify_app(app)
|
32
|
-
raise ItunesConnectGeneralError.new("No valid Deliver::App given") unless app.kind_of?Deliver::App
|
33
|
-
raise ItunesConnectGeneralError.new("App is missing information (apple_id not given)") unless (app.apple_id || '').to_s.length > 5
|
34
|
-
end
|
35
|
-
|
36
|
-
def error_occured(ex)
|
37
|
-
snap
|
38
|
-
raise ex # re-raise the error after saving the snapshot
|
39
|
-
end
|
40
|
-
|
41
|
-
def snap
|
42
|
-
path = "Error#{Time.now.to_i}.png"
|
43
|
-
save_screenshot(path, :full => true)
|
44
|
-
system("open '#{path}'")
|
45
|
-
end
|
46
|
-
|
47
|
-
# Since Apple takes for ages, after the upload is properly processed, we have to wait here
|
48
|
-
def wait_for_preprocessing
|
49
|
-
started = Time.now
|
50
|
-
|
51
|
-
# Wait, while iTunesConnect is processing the uploaded file
|
52
|
-
while (page.has_content?"Uploaded")
|
53
|
-
# iTunesConnect is super slow... so we have to wait...
|
54
|
-
Helper.log.info("Sorry, we have to wait for iTunesConnect, since it's still processing the uploaded ipa file\n" +
|
55
|
-
"If this takes longer than 45 minutes, you have to re-upload the ipa file again.\n" +
|
56
|
-
"You can always open the browser page yourself: '#{current_url}'\n" +
|
57
|
-
"Passed time: ~#{((Time.now - started) / 60.0).to_i} minute(s)")
|
58
|
-
sleep 60
|
59
|
-
visit current_url
|
60
|
-
sleep 10
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def wait_for_elements(name)
|
65
|
-
counter = 0
|
66
|
-
results = all(name)
|
67
|
-
while results.count == 0
|
68
|
-
# Helper.log.debug "Waiting for #{name}"
|
69
|
-
sleep 0.2
|
70
|
-
|
71
|
-
results = all(name)
|
72
|
-
|
73
|
-
counter += 1
|
74
|
-
if counter > 100
|
75
|
-
Helper.log.debug caller
|
76
|
-
raise ItunesConnectGeneralError.new("Couldn't find element '#{name}' after waiting for quite some time")
|
77
|
-
end
|
78
|
-
end
|
79
|
-
return results
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module Deliver
|
2
|
-
# Login code
|
3
|
-
class ItunesConnect
|
4
|
-
# Loggs in a user with the given login data on the iTC Frontend.
|
5
|
-
# You don't need to pass a username and password. It will
|
6
|
-
# Automatically be fetched using the {CredentialsManager::PasswordManager}.
|
7
|
-
# This method will also automatically be called when triggering other
|
8
|
-
# actions like {#open_app_page}
|
9
|
-
# @param user (String) (optional) The username/email address
|
10
|
-
# @param password (String) (optional) The password
|
11
|
-
# @return (bool) true if everything worked fine
|
12
|
-
# @raise [ItunesConnectGeneralError] General error while executing
|
13
|
-
# this action
|
14
|
-
# @raise [ItunesConnectLoginError] Login data is wrong
|
15
|
-
def login(user = nil, password = nil)
|
16
|
-
Helper.log.info "Logging into iTunesConnect"
|
17
|
-
|
18
|
-
user ||= CredentialsManager::PasswordManager.shared_manager.username
|
19
|
-
password ||= CredentialsManager::PasswordManager.shared_manager.password
|
20
|
-
|
21
|
-
result = visit ITUNESCONNECT_URL
|
22
|
-
raise "Could not open iTunesConnect" unless result['status'] == 'success'
|
23
|
-
|
24
|
-
sleep 3
|
25
|
-
|
26
|
-
if page.has_content?"My Apps"
|
27
|
-
# Already logged in
|
28
|
-
return true
|
29
|
-
end
|
30
|
-
|
31
|
-
begin
|
32
|
-
wait_for_elements('#accountpassword')
|
33
|
-
rescue => ex
|
34
|
-
# when the user is already logged in, this will raise an exception
|
35
|
-
end
|
36
|
-
|
37
|
-
fill_in "accountname", with: user
|
38
|
-
fill_in "accountpassword", with: password
|
39
|
-
|
40
|
-
begin
|
41
|
-
(wait_for_elements(".enabled").first.click rescue nil) # Login Button
|
42
|
-
wait_for_elements('.homepageWrapper.ng-scope')
|
43
|
-
|
44
|
-
if page.has_content?"My Apps"
|
45
|
-
# Everything looks good
|
46
|
-
else
|
47
|
-
raise ItunesConnectLoginError.new("Looks like your login data was correct, but you do not have access to the apps.")
|
48
|
-
end
|
49
|
-
rescue => ex
|
50
|
-
Helper.log.debug(ex)
|
51
|
-
raise ItunesConnectLoginError.new("Error logging in user #{user} with the given password. Make sure you entered them correctly.")
|
52
|
-
end
|
53
|
-
|
54
|
-
Helper.log.info "Successfully logged into iTunesConnect"
|
55
|
-
|
56
|
-
true
|
57
|
-
rescue => ex
|
58
|
-
error_occured(ex)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
data/lib/deliver/languages.rb
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
module Deliver
|
2
|
-
module Languages
|
3
|
-
# These are all the languages which are available to use to upload app metadata and screenshots
|
4
|
-
ALL_LANGUAGES = ["da-DK", "de-DE", "el-GR", "en-AU", "en-CA", "en-GB", "en-US", "es-ES", "es-MX", "fi-FI", "fr-CA", "fr-FR", "id-ID", "it-IT", "ja-JP", "ko-KR", "ms-MY", "nl-NL", "no-NO", "pt-BR", "pt-PT", "ru-RU", "sv-SE", "th-TH", "tr-TR", "vi-VI", "cmn-Hans", "zh_CN", "cmn-Hant"]
|
5
|
-
end
|
6
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
|
3
|
-
module Deliver
|
4
|
-
# Verifies, the user runs the latest version of this gem
|
5
|
-
class UpdateChecker
|
6
|
-
# This method will check if the latest version is installed and show a warning if that's not the case
|
7
|
-
def self.verify_latest_version
|
8
|
-
if self.update_available?
|
9
|
-
v = fetch_latest
|
10
|
-
puts '#######################################################################'.green
|
11
|
-
puts "# Deliver #{v} is available.".green
|
12
|
-
puts "# It is recommended to use the latest version.".green
|
13
|
-
puts "# Update using '(sudo) gem update deliver'.".green
|
14
|
-
puts "# To see what's new, open https://github.com/KrauseFx/deliver/releases.".green
|
15
|
-
puts '#######################################################################'.green
|
16
|
-
return true
|
17
|
-
end
|
18
|
-
false
|
19
|
-
end
|
20
|
-
|
21
|
-
# Is a new official release available (this does not include pre-releases)
|
22
|
-
def self.update_available?
|
23
|
-
begin
|
24
|
-
latest = fetch_latest
|
25
|
-
if latest and Gem::Version.new(latest) > Gem::Version.new(current_version)
|
26
|
-
return true
|
27
|
-
end
|
28
|
-
rescue => ex
|
29
|
-
Helper.log.error("Could not check if 'deliver' is up to date.")
|
30
|
-
end
|
31
|
-
return false
|
32
|
-
end
|
33
|
-
|
34
|
-
# The currently used version of this gem
|
35
|
-
def self.current_version
|
36
|
-
Deliver::VERSION
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
def self.fetch_latest
|
41
|
-
JSON.parse(open("http://rubygems.org/api/v1/gems/deliver.json").read)["version"]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|