fastlane_core 0.42.1 → 0.43.0
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/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
|