fastlane_core 0.42.1 → 0.43.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fastlane_core/cert_checker.rb +1 -1
- data/lib/fastlane_core/itunes_transporter.rb +61 -10
- data/lib/fastlane_core/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: 3e1f8f4483072a22729df956093d77ccb7038a42
|
4
|
+
data.tar.gz: c7f140b5b470fb9cdc552fb51f4403073fbb2178
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 222d88fa8160bb9ec77d991c772007862e0959066a14fbf18bdd1f46f6f2ddbbcf76356d46e6c533fdbf4868cb83f81980167d94be539f08d1e565befaa1fe7d
|
7
|
+
data.tar.gz: 50d7d27a770fa0dce3c36a5841079afcb00ea5c6e914439406606950edb62a95ed963bca7f65f435112728e5a22ce628f2daa271ec005235d54f945246d4e01f
|
@@ -73,7 +73,7 @@ module FastlaneCore
|
|
73
73
|
keychains = Helper.backticks(command, print: $verbose).split("\n")
|
74
74
|
unless keychains.empty?
|
75
75
|
# Select first keychain name from returned keychains list
|
76
|
-
return keychains[0].strip.tr('"', '')
|
76
|
+
return keychains[0].strip.tr('"', '')
|
77
77
|
end
|
78
78
|
end
|
79
79
|
return ""
|
@@ -12,6 +12,10 @@ module FastlaneCore
|
|
12
12
|
class TransporterTransferError < StandardError
|
13
13
|
end
|
14
14
|
|
15
|
+
# Used internally
|
16
|
+
class TransporterRequiresApplicationSpecificPasswordError < StandardError
|
17
|
+
end
|
18
|
+
|
15
19
|
# Base class for executing the iTMSTransporter
|
16
20
|
class TransporterExecutor
|
17
21
|
ERROR_REGEX = />\s*ERROR:\s+(.+)/
|
@@ -61,6 +65,10 @@ module FastlaneCore
|
|
61
65
|
UI.important(@warnings.join("\n"))
|
62
66
|
end
|
63
67
|
|
68
|
+
if @errors.join("").include?("Sign in with the app-specific")
|
69
|
+
raise TransporterRequiresApplicationSpecificPasswordError
|
70
|
+
end
|
71
|
+
|
64
72
|
if @errors.count > 0
|
65
73
|
UI.error(@errors.join("\n"))
|
66
74
|
end
|
@@ -85,7 +93,7 @@ module FastlaneCore
|
|
85
93
|
|
86
94
|
# Check if it's a login error
|
87
95
|
if $1.include? "Your Apple ID or password was entered incorrectly" or
|
88
|
-
$1.include? "This Apple ID has been
|
96
|
+
$1.include? "This Apple ID has been locked for security reasons"
|
89
97
|
|
90
98
|
unless Helper.is_test?
|
91
99
|
CredentialsManager::AccountManager.new(user: @user).invalid_credentials
|
@@ -245,6 +253,8 @@ module FastlaneCore
|
|
245
253
|
end
|
246
254
|
|
247
255
|
class ItunesTransporter
|
256
|
+
TWO_STEP_HOST_PREFIX = "deliver.appspecific"
|
257
|
+
|
248
258
|
# This will be called from the Deliverfile, and disables the logging of the transporter output
|
249
259
|
def self.hide_transporter_output
|
250
260
|
@hide_transporter_output = !$verbose
|
@@ -265,10 +275,22 @@ module FastlaneCore
|
|
265
275
|
# we can't default to using the better direct Java invocation strategy for those versions.
|
266
276
|
use_shell_script ||= Helper.xcode_version.start_with?('6.')
|
267
277
|
use_shell_script ||= !ENV['FASTLANE_ITUNES_TRANSPORTER_USE_SHELL_SCRIPT'].nil?
|
268
|
-
data = CredentialsManager::AccountManager.new(user: user, password: password)
|
269
278
|
|
279
|
+
# First, see if we have an application specific password
|
280
|
+
data = CredentialsManager::AccountManager.new(user: user,
|
281
|
+
prefix: TWO_STEP_HOST_PREFIX)
|
270
282
|
@user = data.user
|
271
|
-
@password
|
283
|
+
@password ||= data.password(ask_if_missing: false)
|
284
|
+
|
285
|
+
if @password.to_s.length == 0
|
286
|
+
# No specific password found, just using the iTC/Dev Portal one
|
287
|
+
# default to the given password here
|
288
|
+
data = CredentialsManager::AccountManager.new(user: user,
|
289
|
+
password: password)
|
290
|
+
@user = data.user
|
291
|
+
@password ||= data.password
|
292
|
+
end
|
293
|
+
|
272
294
|
@transporter_executor = use_shell_script ? ShellScriptTransporterExecutor.new : JavaTransporterExecutor.new
|
273
295
|
end
|
274
296
|
|
@@ -285,7 +307,13 @@ module FastlaneCore
|
|
285
307
|
command = @transporter_executor.build_download_command(@user, @password, app_id, dir)
|
286
308
|
UI.verbose(@transporter_executor.build_download_command(@user, 'YourPassword', app_id, dir))
|
287
309
|
|
288
|
-
|
310
|
+
begin
|
311
|
+
result = @transporter_executor.execute(command, ItunesTransporter.hide_transporter_output?)
|
312
|
+
rescue TransporterRequiresApplicationSpecificPasswordError => ex
|
313
|
+
handle_two_step_failure(ex)
|
314
|
+
return download(app_id, dir)
|
315
|
+
end
|
316
|
+
|
289
317
|
return result if Helper.is_test?
|
290
318
|
|
291
319
|
itmsp_path = File.join(dir, "#{app_id}.itmsp")
|
@@ -307,23 +335,27 @@ module FastlaneCore
|
|
307
335
|
# @raise [Deliver::TransporterTransferError] when something went wrong
|
308
336
|
# when transfering
|
309
337
|
def upload(app_id, dir)
|
310
|
-
|
338
|
+
actual_dir = File.join(dir, "#{app_id}.itmsp")
|
311
339
|
|
312
340
|
UI.message("Going to upload updated app to iTunes Connect")
|
313
341
|
UI.success("This might take a few minutes, please don't interrupt the script")
|
314
342
|
|
315
|
-
command = @transporter_executor.build_upload_command(@user, @password,
|
316
|
-
|
317
|
-
UI.verbose(@transporter_executor.build_upload_command(@user, 'YourPassword', dir))
|
343
|
+
command = @transporter_executor.build_upload_command(@user, @password, actual_dir)
|
344
|
+
UI.verbose(@transporter_executor.build_upload_command(@user, 'YourPassword', actual_dir))
|
318
345
|
|
319
|
-
|
346
|
+
begin
|
347
|
+
result = @transporter_executor.execute(command, ItunesTransporter.hide_transporter_output?)
|
348
|
+
rescue TransporterRequiresApplicationSpecificPasswordError => ex
|
349
|
+
handle_two_step_failure(ex)
|
350
|
+
return upload(app_id, dir)
|
351
|
+
end
|
320
352
|
|
321
353
|
if result
|
322
354
|
UI.success("-" * 102)
|
323
355
|
UI.success("Successfully uploaded package to iTunes Connect. It might take a few minutes until it's visible online.")
|
324
356
|
UI.success("-" * 102)
|
325
357
|
|
326
|
-
FileUtils.rm_rf(
|
358
|
+
FileUtils.rm_rf(actual_dir) unless Helper.is_test? # we don't need the package any more, since the upload was successful
|
327
359
|
else
|
328
360
|
handle_error(@password)
|
329
361
|
end
|
@@ -333,6 +365,25 @@ module FastlaneCore
|
|
333
365
|
|
334
366
|
private
|
335
367
|
|
368
|
+
# Tells the user how to get an application specific password
|
369
|
+
def handle_two_step_failure(ex)
|
370
|
+
a = CredentialsManager::AccountManager.new(user: @user,
|
371
|
+
prefix: TWO_STEP_HOST_PREFIX)
|
372
|
+
if a.password(ask_if_missing: false).to_s.length > 0
|
373
|
+
# user already entered one.. delete the old one
|
374
|
+
UI.error("Application specific password seems wrong")
|
375
|
+
UI.error("Please make sure to follow the instructions")
|
376
|
+
a.remove_from_keychain
|
377
|
+
end
|
378
|
+
UI.error("Your account has 2 step verification enabled")
|
379
|
+
UI.error("Please go to https://appleid.apple.com/account/manage")
|
380
|
+
UI.error("and generate an application specific password for")
|
381
|
+
UI.error("the iTunes Transporter, which is used to upload builds")
|
382
|
+
@password = a.password # to ask the user for the missing value
|
383
|
+
|
384
|
+
return true
|
385
|
+
end
|
386
|
+
|
336
387
|
def handle_error(password)
|
337
388
|
@transporter_executor.handle_error(password)
|
338
389
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.43.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -170,7 +170,7 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.
|
173
|
+
version: 0.16.0
|
174
174
|
- - "<"
|
175
175
|
- !ruby/object:Gem::Version
|
176
176
|
version: 1.0.0
|
@@ -180,7 +180,7 @@ dependencies:
|
|
180
180
|
requirements:
|
181
181
|
- - ">="
|
182
182
|
- !ruby/object:Gem::Version
|
183
|
-
version: 0.
|
183
|
+
version: 0.16.0
|
184
184
|
- - "<"
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: 1.0.0
|
@@ -399,7 +399,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
399
399
|
version: '0'
|
400
400
|
requirements: []
|
401
401
|
rubyforge_project:
|
402
|
-
rubygems_version: 2.4.
|
402
|
+
rubygems_version: 2.4.0
|
403
403
|
signing_key:
|
404
404
|
specification_version: 4
|
405
405
|
summary: Contains all shared code/dependencies of the fastlane.tools
|