fastlane 2.227.1 → 2.228.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/README.md +84 -84
- data/deliver/lib/deliver/runner.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +8 -6
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +11 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +10 -69
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +2 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +3 -3
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane_core/lib/assets/XMLTemplate.xml.erb +5 -1
- data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +4 -14
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +5 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +105 -98
- data/match/lib/match/options.rb +1 -0
- data/pilot/lib/pilot/build_manager.rb +7 -1
- data/scan/lib/scan/options.rb +2 -2
- data/sigh/lib/sigh/options.rb +1 -0
- data/sigh/lib/sigh/runner.rb +5 -2
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +2 -3
- metadata +18 -19
- data/fastlane/lib/fastlane/actions/hipchat.rb +0 -200
@@ -77,8 +77,10 @@ module FastlaneCore
|
|
77
77
|
|
78
78
|
# Exit status for build command, should be 0 if build succeeded
|
79
79
|
if status != 0
|
80
|
+
is_output_already_printed = print_all && !suppress_output
|
80
81
|
o = output.join("\n")
|
81
|
-
puts(o) unless
|
82
|
+
puts(o) unless is_output_already_printed
|
83
|
+
|
82
84
|
UI.error("Exit status: #{status}")
|
83
85
|
if error
|
84
86
|
error.call(o, status)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'open3'
|
2
|
+
require 'stringio'
|
2
3
|
require 'zip'
|
3
4
|
|
4
5
|
require_relative 'core_ext/cfpropertylist'
|
@@ -46,21 +47,10 @@ module FastlaneCore
|
|
46
47
|
end
|
47
48
|
return nil if plist_data.nil?
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
# The XML file has to be properly unpacked first
|
53
|
-
tmp_path = File.join(tmp, "Info.plist")
|
54
|
-
File.open(tmp_path, 'wb') do |output|
|
55
|
-
output.write(plist_data)
|
56
|
-
end
|
57
|
-
result = CFPropertyList.native_types(CFPropertyList::List.new(file: tmp_path).value)
|
58
|
-
|
59
|
-
if result['CFBundleIdentifier'] || result['CFBundleVersion']
|
60
|
-
return result
|
61
|
-
end
|
50
|
+
result = CFPropertyList.native_types(CFPropertyList::List.new(data: plist_data).value)
|
51
|
+
if result['CFBundleIdentifier'] || result['CFBundleVersion']
|
52
|
+
return result
|
62
53
|
end
|
63
|
-
|
64
54
|
return nil
|
65
55
|
end
|
66
56
|
|
@@ -12,7 +12,7 @@ module FastlaneCore
|
|
12
12
|
|
13
13
|
attr_accessor :package_path
|
14
14
|
|
15
|
-
def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil)
|
15
|
+
def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil, app_identifier: nil, short_version: nil, bundle_version: nil)
|
16
16
|
self.package_path = File.join(package_path, "#{app_id}-#{SecureRandom.uuid}.itmsp")
|
17
17
|
FileUtils.rm_rf(self.package_path) if File.directory?(self.package_path)
|
18
18
|
FileUtils.mkdir_p(self.package_path)
|
@@ -24,7 +24,10 @@ module FastlaneCore
|
|
24
24
|
ipa_path: File.basename(ipa_path), # this is only the base name as the ipa is inside the package
|
25
25
|
md5: Digest::MD5.file(ipa_path).hexdigest,
|
26
26
|
archive_type: "bundle",
|
27
|
-
platform: (platform || "ios") # pass "appletvos" for Apple TV's IPA
|
27
|
+
platform: (platform || "ios"), # pass "appletvos" for Apple TV's IPA
|
28
|
+
app_identifier: app_identifier,
|
29
|
+
short_version: short_version,
|
30
|
+
bundle_version: bundle_version
|
28
31
|
}
|
29
32
|
|
30
33
|
xml_path = File.join(FastlaneCore::ROOT, "lib/assets/XMLTemplate.xml.erb")
|
@@ -51,6 +51,45 @@ module FastlaneCore
|
|
51
51
|
not_implemented(__method__)
|
52
52
|
end
|
53
53
|
|
54
|
+
# Builds a string array of credentials parameters based on the provided authentication details.
|
55
|
+
#
|
56
|
+
# @param username [String, nil] The username for authentication (optional).
|
57
|
+
# @param password [String, nil] The password for authentication (optional).
|
58
|
+
# @param jwt [String, nil] A JSON Web Token for token-based authentication (optional).
|
59
|
+
# @param api_key [Hash, nil] An API key for authentication (optional).
|
60
|
+
#
|
61
|
+
# @return [String] A string containing the appropriate credentials for authentication.
|
62
|
+
def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
|
63
|
+
not_implemented(__method__)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Runs preparations before executing any command from the executor.
|
67
|
+
#
|
68
|
+
# @param original_api_key [Hash] api key containing the issuer id and private key
|
69
|
+
# @return [Hash] copy of `api_key` which includes an extra `key_dir` with the location of the .p8 file on disk
|
70
|
+
def prepare(original_api_key:)
|
71
|
+
return if original_api_key.nil?
|
72
|
+
# Create .p8 file from api_key and provide api key info which contains .p8 file path
|
73
|
+
api_key = original_api_key.dup
|
74
|
+
if self.kind_of?(ShellScriptTransporterExecutor)
|
75
|
+
# as of Transporter v3.3.0, the app is unable to detect the private keys under the 'private_keys' folder in current directory
|
76
|
+
# so we must rely on the other search paths in the Home dir:
|
77
|
+
# https://help.apple.com/itc/transporteruserguide/en.lproj/static.html#itc803b7be80
|
78
|
+
private_keys_dir = File.join(Dir.home, ".appstoreconnect/private_keys")
|
79
|
+
unless Dir.exist?(private_keys_dir)
|
80
|
+
FileUtils.mkdir_p(private_keys_dir)
|
81
|
+
end
|
82
|
+
api_key[:key_dir] = private_keys_dir
|
83
|
+
else
|
84
|
+
api_key[:key_dir] = Dir.mktmpdir("deliver-")
|
85
|
+
end
|
86
|
+
# Specified p8 needs to be generated to call altool or iTMSTransporter
|
87
|
+
File.open(File.join(api_key[:key_dir], "AuthKey_#{api_key[:key_id]}.p8"), "wb") do |p8|
|
88
|
+
p8.write(api_key[:key])
|
89
|
+
end
|
90
|
+
api_key
|
91
|
+
end
|
92
|
+
|
54
93
|
def execute(command, hide_output)
|
55
94
|
if Helper.test?
|
56
95
|
yield(nil) if block_given?
|
@@ -249,21 +288,7 @@ module FastlaneCore
|
|
249
288
|
@errors << "-1 indicates altool exited abnormally; try retrying (see https://github.com/fastlane/fastlane/issues/21535)" if exit_status == -1
|
250
289
|
|
251
290
|
unless @errors.empty? || @all_lines.empty?
|
252
|
-
|
253
|
-
# If error text is not detected, it will be 20 lines
|
254
|
-
# This is key for non-verbose mode
|
255
|
-
|
256
|
-
# The format of altool's result with error is like below
|
257
|
-
# > *** Error: Error uploading '...'.
|
258
|
-
# > *** Error: ...
|
259
|
-
# > {
|
260
|
-
# > NSLocalizedDescription = "...",
|
261
|
-
# > ...
|
262
|
-
# > }
|
263
|
-
# So this line tries to find the line which has "*** Error:" prefix from bottom of log
|
264
|
-
error_line_index = @all_lines.rindex { |line| ERROR_REGEX.match?(line) }
|
265
|
-
|
266
|
-
@all_lines[(error_line_index || -20)..-1].each do |line|
|
291
|
+
@all_lines.each do |line|
|
267
292
|
UI.important("[altool] #{line}")
|
268
293
|
end
|
269
294
|
UI.message("Application Loader output above ^")
|
@@ -274,16 +299,21 @@ module FastlaneCore
|
|
274
299
|
exit_status.zero?
|
275
300
|
end
|
276
301
|
|
302
|
+
def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
|
303
|
+
if !username.nil? && !password.nil? && api_key.nil?
|
304
|
+
"-u #{username.shellescape} -p #{password.shellescape}"
|
305
|
+
elsif !api_key.nil?
|
306
|
+
"--apiKey #{api_key[:key_id]} --apiIssuer #{api_key[:issuer_id]}"
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
277
310
|
def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil)
|
278
311
|
use_api_key = !api_key.nil?
|
279
312
|
[
|
280
313
|
("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
|
281
314
|
"xcrun altool",
|
282
315
|
"--upload-app",
|
283
|
-
(
|
284
|
-
("-p #{password.shellescape}" unless use_api_key),
|
285
|
-
("--apiKey #{api_key[:key_id]}" if use_api_key),
|
286
|
-
("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
|
316
|
+
build_credential_params(username, password, jwt, api_key),
|
287
317
|
("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?),
|
288
318
|
platform_option(platform),
|
289
319
|
file_upload_option(source),
|
@@ -298,10 +328,7 @@ module FastlaneCore
|
|
298
328
|
("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
|
299
329
|
"xcrun altool",
|
300
330
|
"--list-providers",
|
301
|
-
(
|
302
|
-
("-p #{password.shellescape}" unless use_api_key),
|
303
|
-
("--apiKey #{api_key[:key_id]}" if use_api_key),
|
304
|
-
("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
|
331
|
+
build_credential_params(username, password, jwt, api_key),
|
305
332
|
"--output-format json"
|
306
333
|
].compact.join(' ')
|
307
334
|
end
|
@@ -318,10 +345,7 @@ module FastlaneCore
|
|
318
345
|
("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
|
319
346
|
"xcrun altool",
|
320
347
|
"--validate-app",
|
321
|
-
(
|
322
|
-
("-p #{password.shellescape}" unless use_api_key),
|
323
|
-
("--apiKey #{api_key[:key_id]}" if use_api_key),
|
324
|
-
("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
|
348
|
+
build_credential_params(username, password, nil, api_key),
|
325
349
|
("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?),
|
326
350
|
platform_option(platform),
|
327
351
|
file_upload_option(source)
|
@@ -385,14 +409,21 @@ module FastlaneCore
|
|
385
409
|
|
386
410
|
# Generates commands and executes the iTMSTransporter through the shell script it provides by the same name
|
387
411
|
class ShellScriptTransporterExecutor < TransporterExecutor
|
412
|
+
def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
|
413
|
+
if !(username.nil? || password.nil?) && (jwt.nil? && api_key.nil?)
|
414
|
+
"-u #{username.shellescape} -p #{shell_escaped_password(password)}"
|
415
|
+
elsif !jwt.nil? && api_key.nil?
|
416
|
+
"-jwt #{jwt}"
|
417
|
+
elsif !api_key.nil?
|
418
|
+
"-apiIssuer #{api_key[:issuer_id]} -apiKey #{api_key[:key_id]}"
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
388
422
|
def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil)
|
389
|
-
use_jwt = !jwt.to_s.empty?
|
390
423
|
[
|
391
424
|
'"' + Helper.transporter_path + '"',
|
392
425
|
"-m upload",
|
393
|
-
(
|
394
|
-
("-p #{shell_escaped_password(password)}" unless use_jwt),
|
395
|
-
("-jwt #{jwt}" if use_jwt),
|
426
|
+
build_credential_params(username, password, jwt, api_key),
|
396
427
|
file_upload_option(source),
|
397
428
|
additional_upload_parameters, # that's here, because the user might overwrite the -t option
|
398
429
|
"-k 100000",
|
@@ -402,13 +433,10 @@ module FastlaneCore
|
|
402
433
|
end
|
403
434
|
|
404
435
|
def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil)
|
405
|
-
use_jwt = !jwt.to_s.empty?
|
406
436
|
[
|
407
437
|
'"' + Helper.transporter_path + '"',
|
408
438
|
"-m lookupMetadata",
|
409
|
-
(
|
410
|
-
("-p #{shell_escaped_password(password)}" unless use_jwt),
|
411
|
-
("-jwt #{jwt}" if use_jwt),
|
439
|
+
build_credential_params(username, password, jwt),
|
412
440
|
"-apple_id #{apple_id}",
|
413
441
|
"-destination '#{destination}'",
|
414
442
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?)
|
@@ -416,25 +444,19 @@ module FastlaneCore
|
|
416
444
|
end
|
417
445
|
|
418
446
|
def build_provider_ids_command(username, password, jwt = nil, api_key = nil)
|
419
|
-
use_jwt = !jwt.to_s.empty?
|
420
447
|
[
|
421
448
|
'"' + Helper.transporter_path + '"',
|
422
449
|
'-m provider',
|
423
|
-
(
|
424
|
-
("-p #{shell_escaped_password(password)}" unless use_jwt),
|
425
|
-
("-jwt #{jwt}" if use_jwt)
|
450
|
+
build_credential_params(username, password, jwt, api_key)
|
426
451
|
].compact.join(' ')
|
427
452
|
end
|
428
453
|
|
429
454
|
def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
|
430
455
|
jwt = kwargs[:jwt]
|
431
|
-
use_jwt = !jwt.to_s.empty?
|
432
456
|
[
|
433
457
|
'"' + Helper.transporter_path + '"',
|
434
458
|
'-m verify',
|
435
|
-
(
|
436
|
-
("-p #{shell_escaped_password(password)}" unless use_jwt),
|
437
|
-
("-jwt #{jwt}" if use_jwt),
|
459
|
+
build_credential_params(username, password, jwt),
|
438
460
|
"-f #{source.shellescape}",
|
439
461
|
("-WONoPause true" if Helper.windows?), # Windows only: process instantly returns instead of waiting for key press
|
440
462
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?)
|
@@ -482,16 +504,26 @@ module FastlaneCore
|
|
482
504
|
# Generates commands and executes the iTMSTransporter by invoking its Java app directly, to avoid the crazy parameter
|
483
505
|
# escaping problems in its accompanying shell script.
|
484
506
|
class JavaTransporterExecutor < TransporterExecutor
|
507
|
+
def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil, is_password_from_env = false)
|
508
|
+
if !username.nil? && jwt.to_s.empty?
|
509
|
+
if is_password_from_env
|
510
|
+
"-u #{username.shellescape} -p @env:ITMS_TRANSPORTER_PASSWORD"
|
511
|
+
elsif !password.nil?
|
512
|
+
"-u #{username.shellescape} -p #{password.shellescape}"
|
513
|
+
end
|
514
|
+
elsif !jwt.to_s.empty?
|
515
|
+
"-jwt #{jwt}"
|
516
|
+
end
|
517
|
+
end
|
518
|
+
|
485
519
|
def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil)
|
486
|
-
|
487
|
-
if
|
520
|
+
credential_params = build_credential_params(username, password, jwt, api_key, is_default_itms_on_xcode_11?)
|
521
|
+
if is_default_itms_on_xcode_11?
|
488
522
|
[
|
489
|
-
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}"
|
523
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
490
524
|
'xcrun iTMSTransporter',
|
491
525
|
'-m upload',
|
492
|
-
|
493
|
-
("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
|
494
|
-
("-jwt #{jwt}" if use_jwt),
|
526
|
+
credential_params,
|
495
527
|
file_upload_option(source),
|
496
528
|
additional_upload_parameters, # that's here, because the user might overwrite the -t option
|
497
529
|
'-k 100000',
|
@@ -510,9 +542,7 @@ module FastlaneCore
|
|
510
542
|
'-Dsun.net.http.retryPost=false',
|
511
543
|
java_code_option,
|
512
544
|
'-m upload',
|
513
|
-
|
514
|
-
("-p #{password.shellescape}" unless use_jwt),
|
515
|
-
("-jwt #{jwt}" if use_jwt),
|
545
|
+
credential_params,
|
516
546
|
file_upload_option(source),
|
517
547
|
additional_upload_parameters, # that's here, because the user might overwrite the -t option
|
518
548
|
'-k 100000',
|
@@ -524,15 +554,13 @@ module FastlaneCore
|
|
524
554
|
|
525
555
|
def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
|
526
556
|
jwt = kwargs[:jwt]
|
527
|
-
|
528
|
-
if
|
557
|
+
credential_params = build_credential_params(username, password, jwt, nil, is_default_itms_on_xcode_11?)
|
558
|
+
if is_default_itms_on_xcode_11?
|
529
559
|
[
|
530
|
-
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}"
|
560
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
531
561
|
'xcrun iTMSTransporter',
|
532
562
|
'-m verify',
|
533
|
-
|
534
|
-
("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
|
535
|
-
("-jwt #{jwt}" if use_jwt),
|
563
|
+
credential_params,
|
536
564
|
"-f #{source.shellescape}",
|
537
565
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
|
538
566
|
'2>&1' # cause stderr to be written to stdout
|
@@ -549,9 +577,7 @@ module FastlaneCore
|
|
549
577
|
'-Dsun.net.http.retryPost=false',
|
550
578
|
java_code_option,
|
551
579
|
'-m verify',
|
552
|
-
|
553
|
-
("-p #{password.shellescape}" unless use_jwt),
|
554
|
-
("-jwt #{jwt}" if use_jwt),
|
580
|
+
credential_params,
|
555
581
|
"-f #{source.shellescape}",
|
556
582
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
|
557
583
|
'2>&1' # cause stderr to be written to stdout
|
@@ -560,15 +586,13 @@ module FastlaneCore
|
|
560
586
|
end
|
561
587
|
|
562
588
|
def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil)
|
563
|
-
|
564
|
-
if
|
589
|
+
credential_params = build_credential_params(username, password, jwt, nil, is_default_itms_on_xcode_11?)
|
590
|
+
if is_default_itms_on_xcode_11?
|
565
591
|
[
|
566
|
-
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}"
|
592
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
567
593
|
'xcrun iTMSTransporter',
|
568
594
|
'-m lookupMetadata',
|
569
|
-
|
570
|
-
("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
|
571
|
-
("-jwt #{jwt}" if use_jwt),
|
595
|
+
credential_params,
|
572
596
|
"-apple_id #{apple_id.shellescape}",
|
573
597
|
"-destination #{destination.shellescape}",
|
574
598
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
|
@@ -586,9 +610,7 @@ module FastlaneCore
|
|
586
610
|
'-Dsun.net.http.retryPost=false',
|
587
611
|
java_code_option,
|
588
612
|
'-m lookupMetadata',
|
589
|
-
|
590
|
-
("-p #{password.shellescape}" unless use_jwt),
|
591
|
-
("-jwt #{jwt}" if use_jwt),
|
613
|
+
credential_params,
|
592
614
|
"-apple_id #{apple_id.shellescape}",
|
593
615
|
"-destination #{destination.shellescape}",
|
594
616
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
|
@@ -598,15 +620,13 @@ module FastlaneCore
|
|
598
620
|
end
|
599
621
|
|
600
622
|
def build_provider_ids_command(username, password, jwt = nil, api_key = nil)
|
601
|
-
|
602
|
-
if
|
623
|
+
credential_params = build_credential_params(username, password, jwt, api_key, is_default_itms_on_xcode_11?)
|
624
|
+
if is_default_itms_on_xcode_11?
|
603
625
|
[
|
604
|
-
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}"
|
626
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
605
627
|
'xcrun iTMSTransporter',
|
606
628
|
'-m provider',
|
607
|
-
|
608
|
-
("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
|
609
|
-
("-jwt #{jwt}" if use_jwt),
|
629
|
+
credential_params,
|
610
630
|
'2>&1' # cause stderr to be written to stdout
|
611
631
|
].compact.join(' ')
|
612
632
|
else
|
@@ -621,14 +641,16 @@ module FastlaneCore
|
|
621
641
|
'-Dsun.net.http.retryPost=false',
|
622
642
|
java_code_option,
|
623
643
|
'-m provider',
|
624
|
-
|
625
|
-
("-p #{password.shellescape}" unless use_jwt),
|
626
|
-
("-jwt #{jwt}" if use_jwt),
|
644
|
+
credential_params,
|
627
645
|
'2>&1' # cause stderr to be written to stdout
|
628
646
|
].compact.join(' ')
|
629
647
|
end
|
630
648
|
end
|
631
649
|
|
650
|
+
def is_default_itms_on_xcode_11?
|
651
|
+
!Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
|
652
|
+
end
|
653
|
+
|
632
654
|
def java_code_option
|
633
655
|
if Helper.mac? && Helper.xcode_at_least?(9)
|
634
656
|
return "-jar #{Helper.transporter_java_jar_path.shellescape}"
|
@@ -686,7 +708,7 @@ module FastlaneCore
|
|
686
708
|
use_shell_script ||= Helper.windows?
|
687
709
|
use_shell_script ||= Feature.enabled?('FASTLANE_ITUNES_TRANSPORTER_USE_SHELL_SCRIPT')
|
688
710
|
|
689
|
-
if jwt.to_s.empty?
|
711
|
+
if jwt.to_s.empty? && api_key.nil?
|
690
712
|
@user = user
|
691
713
|
@password = password || load_password_for_transporter
|
692
714
|
end
|
@@ -783,9 +805,7 @@ module FastlaneCore
|
|
783
805
|
# Handle AppStore Connect API
|
784
806
|
use_api_key = !@api_key.nil?
|
785
807
|
api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
|
786
|
-
|
787
|
-
api_key = nil
|
788
|
-
api_key = api_key_with_p8_file_path(@api_key) if use_api_key
|
808
|
+
api_key = @transporter_executor.prepare(original_api_key: @api_key)
|
789
809
|
|
790
810
|
command = @transporter_executor.build_upload_command(@user, @password, actual_dir, @provider_short_name, @jwt, platform, api_key)
|
791
811
|
UI.verbose(@transporter_executor.build_upload_command(@user, password_placeholder, actual_dir, @provider_short_name, jwt_placeholder, platform, api_key_placeholder))
|
@@ -846,8 +866,7 @@ module FastlaneCore
|
|
846
866
|
|
847
867
|
# Masking credentials for verbose outputs
|
848
868
|
api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
|
849
|
-
|
850
|
-
api_key = api_key_with_p8_file_path(@api_key) if use_api_key
|
869
|
+
api_key = @transporter_executor.prepare(original_api_key: @api_key)
|
851
870
|
|
852
871
|
command = @transporter_executor.build_verify_command(@user, @password, actual_dir, @provider_short_name, jwt: @jwt, platform: platform, api_key: api_key)
|
853
872
|
UI.verbose(@transporter_executor.build_verify_command(@user, password_placeholder, actual_dir, @provider_short_name, jwt: jwt_placeholder, platform: platform, api_key: api_key_placeholder))
|
@@ -882,8 +901,7 @@ module FastlaneCore
|
|
882
901
|
use_api_key = !@api_key.nil?
|
883
902
|
api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
|
884
903
|
|
885
|
-
api_key =
|
886
|
-
api_key = api_key_with_p8_file_path(@api_key) if use_api_key
|
904
|
+
api_key = @transporter_executor.prepare(original_api_key: @api_key)
|
887
905
|
|
888
906
|
command = @transporter_executor.build_provider_ids_command(@user, @password, @jwt, api_key)
|
889
907
|
UI.verbose(@transporter_executor.build_provider_ids_command(@user, password_placeholder, jwt_placeholder, api_key_placeholder))
|
@@ -908,17 +926,6 @@ module FastlaneCore
|
|
908
926
|
|
909
927
|
TWO_FACTOR_ENV_VARIABLE = "FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"
|
910
928
|
|
911
|
-
# Create .p8 file from api_key and provide api key info which contains .p8 file path
|
912
|
-
def api_key_with_p8_file_path(original_api_key)
|
913
|
-
api_key = original_api_key.dup
|
914
|
-
api_key[:key_dir] = Dir.mktmpdir("deliver-")
|
915
|
-
# Specified p8 needs to be generated to call altool
|
916
|
-
File.open(File.join(api_key[:key_dir], "AuthKey_#{api_key[:key_id]}.p8"), "wb") do |p8|
|
917
|
-
p8.write(api_key[:key])
|
918
|
-
end
|
919
|
-
api_key
|
920
|
-
end
|
921
|
-
|
922
929
|
# Returns whether altool should be used or ItunesTransporter should be used
|
923
930
|
def should_use_altool?(altool_compatible_command, use_shell_script)
|
924
931
|
# Xcode 14 no longer supports iTMSTransporter. Use altool instead
|
data/match/lib/match/options.rb
CHANGED
@@ -327,6 +327,7 @@ module Match
|
|
327
327
|
env_name: "MATCH_PROVISIONING_PROFILE_TEMPLATE_NAME",
|
328
328
|
description: "The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. \"Apple Pay Pass Suppression Development\")",
|
329
329
|
optional: true,
|
330
|
+
deprecated: "Removed since May 2025 on App Store Connect API OpenAPI v3.8.0 - Learn more: https://docs.fastlane.tools/actions/match/#managed-capabilities",
|
330
331
|
default_value: nil),
|
331
332
|
FastlaneCore::ConfigItem.new(key: :profile_name,
|
332
333
|
env_name: "MATCH_PROVISIONING_PROFILE_NAME",
|
@@ -33,10 +33,16 @@ module Pilot
|
|
33
33
|
ipa_path = options[:ipa]
|
34
34
|
if ipa_path && platform != 'osx'
|
35
35
|
asset_path = ipa_path
|
36
|
+
app_identifier = config[:app_identifier] || fetch_app_identifier
|
37
|
+
short_version = config[:app_version] || FastlaneCore::IpaFileAnalyser.fetch_app_version(ipa_path)
|
38
|
+
bundle_version = config[:build_number] || FastlaneCore::IpaFileAnalyser.fetch_app_build(ipa_path)
|
36
39
|
package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(app_id: fetch_app_id,
|
37
40
|
ipa_path: ipa_path,
|
38
41
|
package_path: dir,
|
39
|
-
platform: platform
|
42
|
+
platform: platform,
|
43
|
+
app_identifier: app_identifier,
|
44
|
+
short_version: short_version,
|
45
|
+
bundle_version: bundle_version)
|
40
46
|
else
|
41
47
|
pkg_path = options[:pkg]
|
42
48
|
asset_path = pkg_path
|
data/scan/lib/scan/options.rb
CHANGED
@@ -125,7 +125,7 @@ module Scan
|
|
125
125
|
# tests to run
|
126
126
|
FastlaneCore::ConfigItem.new(key: :only_testing,
|
127
127
|
env_name: "SCAN_ONLY_TESTING",
|
128
|
-
description: "Array of
|
128
|
+
description: "Array of test identifiers to run. Expected format: TestTarget[/TestSuite[/TestCase]]",
|
129
129
|
optional: true,
|
130
130
|
is_string: false,
|
131
131
|
verify_block: proc do |value|
|
@@ -133,7 +133,7 @@ module Scan
|
|
133
133
|
end),
|
134
134
|
FastlaneCore::ConfigItem.new(key: :skip_testing,
|
135
135
|
env_name: "SCAN_SKIP_TESTING",
|
136
|
-
description: "Array of
|
136
|
+
description: "Array of test identifiers to skip. Expected format: TestTarget[/TestSuite[/TestCase]]",
|
137
137
|
optional: true,
|
138
138
|
is_string: false,
|
139
139
|
verify_block: proc do |value|
|
data/sigh/lib/sigh/options.rb
CHANGED
@@ -190,6 +190,7 @@ module Sigh
|
|
190
190
|
env_name: "SIGH_PROVISIONING_PROFILE_TEMPLATE_NAME",
|
191
191
|
description: "The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. \"Apple Pay Pass Suppression Development\")",
|
192
192
|
optional: true,
|
193
|
+
deprecated: "Removed since May 2025 on App Store Connect API OpenAPI v3.8.0 - Learn more: https://docs.fastlane.tools/actions/match/#managed-capabilities",
|
193
194
|
default_value: nil),
|
194
195
|
FastlaneCore::ConfigItem.new(key: :fail_on_name_taken,
|
195
196
|
env_name: "SIGH_FAIL_ON_NAME_TAKEN",
|
data/sigh/lib/sigh/runner.rb
CHANGED
@@ -174,13 +174,16 @@ module Sigh
|
|
174
174
|
|
175
175
|
UI.important("Creating new provisioning profile for '#{Sigh.config[:app_identifier]}' with name '#{name}' for '#{Sigh.config[:platform]}' platform")
|
176
176
|
|
177
|
+
unless Sigh.config[:template_name].nil?
|
178
|
+
UI.important("Template name is set to '#{Sigh.config[:template_name]}', however, this is not supported by the App Store Connect API anymore, since May 2025. The template name will be ignored. For more information: https://docs.fastlane.tools/actions/match/#managed-capabilities")
|
179
|
+
end
|
180
|
+
|
177
181
|
profile = Spaceship::ConnectAPI::Profile.create(
|
178
182
|
name: name,
|
179
183
|
profile_type: profile_type,
|
180
184
|
bundle_id_id: bundle_id.id,
|
181
185
|
certificate_ids: certificates_to_use.map(&:id),
|
182
|
-
device_ids: devices_to_use.map(&:id)
|
183
|
-
template_name: Sigh.config[:template_name]
|
186
|
+
device_ids: devices_to_use.map(&:id)
|
184
187
|
)
|
185
188
|
|
186
189
|
profile
|
@@ -84,7 +84,7 @@ module Spaceship
|
|
84
84
|
return resps.flat_map(&:to_models)
|
85
85
|
end
|
86
86
|
|
87
|
-
def self.create(client: nil, name: nil, profile_type: nil, bundle_id_id: nil, certificate_ids: nil, device_ids: nil
|
87
|
+
def self.create(client: nil, name: nil, profile_type: nil, bundle_id_id: nil, certificate_ids: nil, device_ids: nil)
|
88
88
|
client ||= Spaceship::ConnectAPI
|
89
89
|
resp = client.post_profiles(
|
90
90
|
bundle_id_id: bundle_id_id,
|
@@ -92,8 +92,7 @@ module Spaceship
|
|
92
92
|
devices: device_ids,
|
93
93
|
attributes: {
|
94
94
|
name: name,
|
95
|
-
profileType: profile_type
|
96
|
-
templateName: template_name
|
95
|
+
profileType: profile_type
|
97
96
|
}
|
98
97
|
)
|
99
98
|
return resp.to_models.first
|
metadata
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.228.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Danielle Tomlinson
|
8
|
-
- Łukasz Grabowski
|
9
7
|
- Maksym Grebenets
|
8
|
+
- Jérôme Lacoste
|
10
9
|
- Jorge Revuelta H
|
11
|
-
-
|
12
|
-
- Roger Oba
|
10
|
+
- Andrew McBurney
|
13
11
|
- Fumiya Nakamura
|
12
|
+
- Satoshi Namai
|
13
|
+
- Jan Piotrowski
|
14
14
|
- Kohki Miki
|
15
15
|
- Luka Mirosevic
|
16
|
-
- Satoshi Namai
|
17
|
-
- Max Ott
|
18
|
-
- Daniel Jankowski
|
19
|
-
- Josh Holtz
|
20
|
-
- Olivier Halligon
|
21
|
-
- Jérôme Lacoste
|
22
16
|
- Joshua Liebowitz
|
23
|
-
-
|
17
|
+
- Josh Holtz
|
18
|
+
- Daniel Jankowski
|
19
|
+
- Felix Krause
|
20
|
+
- Danielle Tomlinson
|
24
21
|
- Aaron Brager
|
22
|
+
- Jimmy Dee
|
25
23
|
- Helmut Januschka
|
26
|
-
-
|
24
|
+
- Manish Rathi
|
25
|
+
- Manu Wallner
|
26
|
+
- Łukasz Grabowski
|
27
|
+
- Olivier Halligon
|
28
|
+
- Stefan Natchev
|
29
|
+
- Max Ott
|
27
30
|
- Iulian Onofrei
|
28
31
|
- Matthew Ellis
|
29
|
-
-
|
30
|
-
- Manu Wallner
|
31
|
-
- Jan Piotrowski
|
32
|
-
- Andrew McBurney
|
32
|
+
- Roger Oba
|
33
33
|
autorequire:
|
34
34
|
bindir: bin
|
35
35
|
cert_chain: []
|
36
|
-
date: 2025-
|
36
|
+
date: 2025-06-10 00:00:00.000000000 Z
|
37
37
|
dependencies:
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: addressable
|
@@ -928,7 +928,6 @@ files:
|
|
928
928
|
- fastlane/lib/fastlane/actions/hg_commit_version_bump.rb
|
929
929
|
- fastlane/lib/fastlane/actions/hg_ensure_clean_status.rb
|
930
930
|
- fastlane/lib/fastlane/actions/hg_push.rb
|
931
|
-
- fastlane/lib/fastlane/actions/hipchat.rb
|
932
931
|
- fastlane/lib/fastlane/actions/hockey.rb
|
933
932
|
- fastlane/lib/fastlane/actions/ifttt.rb
|
934
933
|
- fastlane/lib/fastlane/actions/import.rb
|