fastlane 2.237.0 → 2.239.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +107 -100
  3. data/bin/fastlane +2 -2
  4. data/deliver/lib/deliver/html_generator.rb +1 -1
  5. data/deliver/lib/deliver/options.rb +9 -1
  6. data/deliver/lib/deliver/upload_metadata.rb +22 -0
  7. data/deliver/lib/deliver/upload_screenshots.rb +12 -4
  8. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +7 -2
  9. data/fastlane/lib/fastlane/actions/deploygate.rb +3 -2
  10. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +6 -0
  11. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -2
  12. data/fastlane/lib/fastlane/actions/hockey.rb +3 -2
  13. data/fastlane/lib/fastlane/actions/installr.rb +3 -2
  14. data/fastlane/lib/fastlane/actions/mailgun.rb +1 -0
  15. data/fastlane/lib/fastlane/actions/notarize.rb +3 -18
  16. data/fastlane/lib/fastlane/actions/register_devices.rb +21 -5
  17. data/fastlane/lib/fastlane/actions/setup_ci.rb +7 -2
  18. data/fastlane/lib/fastlane/actions/spm.rb +6 -0
  19. data/fastlane/lib/fastlane/actions/testfairy.rb +5 -3
  20. data/fastlane/lib/fastlane/actions/tryouts.rb +3 -2
  21. data/fastlane/lib/fastlane/actions/update_project_team.rb +17 -9
  22. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +33 -7
  23. data/fastlane/lib/fastlane/helper/git_helper.rb +4 -2
  24. data/fastlane/lib/fastlane/helper/sh_helper.rb +9 -1
  25. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  26. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
  27. data/fastlane/lib/fastlane/version.rb +1 -1
  28. data/fastlane/swift/Deliverfile.swift +1 -1
  29. data/fastlane/swift/DeliverfileProtocol.swift +9 -2
  30. data/fastlane/swift/Fastlane.swift +66 -20
  31. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +1 -1
  32. data/fastlane/swift/Gymfile.swift +1 -1
  33. data/fastlane/swift/GymfileProtocol.swift +1 -1
  34. data/fastlane/swift/Matchfile.swift +1 -1
  35. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  36. data/fastlane/swift/Precheckfile.swift +1 -1
  37. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  38. data/fastlane/swift/Scanfile.swift +1 -1
  39. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  40. data/fastlane/swift/Screengrabfile.swift +1 -1
  41. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  42. data/fastlane/swift/Snapshotfile.swift +1 -1
  43. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  44. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +31 -5
  45. data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +24 -12
  46. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +22 -12
  47. data/fastlane_core/lib/fastlane_core/cert_checker.rb +22 -9
  48. data/fastlane_core/lib/fastlane_core/helper.rb +4 -3
  49. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +6 -2
  50. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +1 -1
  51. data/fastlane_core/lib/fastlane_core/print_table.rb +0 -16
  52. data/fastlane_core/lib/fastlane_core/queue_worker.rb +10 -1
  53. data/fastlane_core/lib/fastlane_core/video_utils.rb +4 -2
  54. data/gym/lib/gym/module.rb +20 -2
  55. data/match/lib/match/nuke.rb +2 -2
  56. data/match/lib/match/storage/git_storage.rb +1 -4
  57. data/match/lib/match/storage/google_cloud_storage.rb +6 -1
  58. data/pem/lib/pem/manager.rb +5 -1
  59. data/pem/lib/pem/options.rb +6 -0
  60. data/pilot/lib/pilot/build_manager.rb +34 -2
  61. data/pilot/lib/pilot/options.rb +10 -2
  62. data/pilot/lib/pilot/tester_manager.rb +2 -2
  63. data/precheck/lib/precheck/rules/copyright_date_rule.rb +1 -1
  64. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +2 -2
  65. data/sigh/lib/assets/resign.sh +21 -9
  66. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -1
  67. data/spaceship/lib/spaceship/client.rb +0 -1
  68. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +1 -1
  69. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +6 -0
  70. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +16 -0
  71. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
  72. data/spaceship/lib/spaceship/connect_api/models/routing_app_coverage.rb +75 -0
  73. data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
  74. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +45 -0
  75. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  76. data/spaceship/lib/spaceship/helper/plist_middleware.rb +37 -8
  77. data/supply/lib/supply/client.rb +6 -0
  78. data/supply/lib/supply/reader.rb +15 -0
  79. metadata +79 -53
@@ -11,6 +11,10 @@ module Fastlane
11
11
  ['Device ID', 'Device Name', 'Device Platform']
12
12
  end
13
13
 
14
+ def self.ignored_line?(row)
15
+ row.all? { |value| value.to_s.strip.empty? } || row.first.to_s.strip.start_with?('#')
16
+ end
17
+
14
18
  def self.run(params)
15
19
  platform = Spaceship::ConnectAPI::BundleIdPlatform.map(params[:platform])
16
20
 
@@ -22,6 +26,7 @@ module Fastlane
22
26
  require 'csv'
23
27
 
24
28
  devices_file = CSV.read(File.expand_path(File.join(params[:devices_file])), col_sep: "\t")
29
+ devices_file = devices_file.reject { |row| ignored_line?(row) }
25
30
  unless devices_file.first == file_column_headers.first(2) || devices_file.first == file_column_headers
26
31
  UI.user_error!("Please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)")
27
32
  end
@@ -55,8 +60,14 @@ module Fastlane
55
60
  existing_devices = Spaceship::ConnectAPI::Device.all
56
61
 
57
62
  device_objs = new_devices.map do |device|
58
- if existing_devices.map(&:udid).map(&:downcase).include?(device[0].downcase)
59
- UI.verbose("UDID #{device[0]} already exists - Skipping...")
63
+ normalized_udid = device[0].tr("-", "")
64
+ existing_device = existing_devices.find do |ed|
65
+ ed.udid.tr("-", "").casecmp(normalized_udid).zero?
66
+ end
67
+
68
+ if existing_device
69
+ UI.verbose("UDID #{existing_device.udid} already exists - Skipping...")
70
+
60
71
  next
61
72
  end
62
73
 
@@ -74,8 +85,12 @@ module Fastlane
74
85
  try_create_device(name: device[1], platform: device_platform, udid: device[0])
75
86
  end
76
87
 
77
- UI.success("Successfully registered new devices.")
78
- return device_objs
88
+ if device_objs.compact.empty?
89
+ UI.success("No new devices to register")
90
+ else
91
+ UI.success("Successfully registered new devices.")
92
+ end
93
+ return device_objs.compact
79
94
  end
80
95
 
81
96
  def self.try_create_device(name: nil, platform: nil, udid: nil)
@@ -169,7 +184,8 @@ module Fastlane
169
184
  [
170
185
  "This will register iOS/Mac devices with the Developer Portal so that you can include them in your provisioning profiles.",
171
186
  "This is an optimistic action, in that it will only ever add new devices to the member center, and never remove devices. If a device which has already been registered within the member center is not passed to this action, it will be left alone in the member center and continue to work.",
172
- "The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `username` option, or by setting the env variable `ENV['DELIVER_USER']`."
187
+ "The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `username` option, or by setting the env variable `ENV['DELIVER_USER']`.",
188
+ "When using `devices_file`, blank lines and lines starting with `#` are ignored, so you can group devices, add notes, or comment out a device row without removing it."
173
189
  ].join("\n")
174
190
  end
175
191
 
@@ -41,7 +41,7 @@ module Fastlane
41
41
  UI.message("Creating temporary keychain: \"#{keychain_name}\".")
42
42
  Actions::CreateKeychainAction.run(
43
43
  name: keychain_name,
44
- default_keychain: true,
44
+ default_keychain: params[:set_default_keychain],
45
45
  unlock: true,
46
46
  timeout: params[:timeout],
47
47
  lock_when_sleeps: true,
@@ -113,7 +113,12 @@ module Fastlane
113
113
  env_name: "FL_SETUP_CI_KEYCHAIN_NAME",
114
114
  description: "Set a custom keychain name",
115
115
  type: String,
116
- default_value: "fastlane_tmp_keychain")
116
+ default_value: "fastlane_tmp_keychain"),
117
+ FastlaneCore::ConfigItem.new(key: :set_default_keychain,
118
+ env_name: "FL_SETUP_CI_SET_DEFAULT_KEYCHAIN",
119
+ description: "Set the temporary keychain as the system default",
120
+ type: Boolean,
121
+ default_value: true)
117
122
  ]
118
123
  end
119
124
 
@@ -10,6 +10,7 @@ module Fastlane
10
10
  cmd << "--package-path #{params[:package_path]}" if params[:package_path]
11
11
  cmd << "--configuration #{params[:configuration]}" if params[:configuration]
12
12
  cmd << "--disable-sandbox" if params[:disable_sandbox]
13
+ cmd << "--skip-update" if params[:skip_update]
13
14
  cmd << "--verbose" if params[:verbose]
14
15
  cmd << "--very-verbose" if params[:very_verbose]
15
16
  if params[:simulator]
@@ -113,6 +114,11 @@ module Fastlane
113
114
  description: "Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also",
114
115
  type: String,
115
116
  optional: true),
117
+ FastlaneCore::ConfigItem.new(key: :skip_update,
118
+ env_name: "FL_SPM_SKIP_UPDATE",
119
+ description: "Skip updating dependencies from their remote during a resolution",
120
+ type: Boolean,
121
+ default_value: false),
116
122
  FastlaneCore::ConfigItem.new(key: :verbose,
117
123
  short_option: "-v",
118
124
  env_name: "FL_SPM_VERBOSE",
@@ -9,16 +9,18 @@ module Fastlane
9
9
  class TestfairyAction < Action
10
10
  def self.upload_build(upload_url, ipa, options, timeout)
11
11
  require 'faraday'
12
- require 'faraday_middleware'
12
+ require 'faraday/multipart'
13
+ require 'faraday/retry'
14
+ require 'faraday/follow_redirects'
13
15
 
14
16
  UI.success("Uploading to #{upload_url}...")
15
17
 
16
18
  connection = Faraday.new(url: upload_url) do |builder|
17
19
  builder.request(:multipart)
18
20
  builder.request(:url_encoded)
19
- builder.request(:retry, max: 3, interval: 5)
21
+ builder.request(:retry, { max: 3, interval: 5 })
20
22
  builder.response(:json, content_type: /\bjson$/)
21
- builder.use(FaradayMiddleware::FollowRedirects)
23
+ builder.response(:follow_redirects)
22
24
  builder.adapter(:net_http)
23
25
  end
24
26
 
@@ -24,14 +24,15 @@ module Fastlane
24
24
 
25
25
  def self.upload_build(params)
26
26
  require 'faraday'
27
- require 'faraday_middleware'
27
+ require 'faraday/multipart'
28
+ require 'faraday/follow_redirects'
28
29
 
29
30
  url = TRYOUTS_API_BUILD_RELEASE_TEMPLATE % params[:app_id]
30
31
  connection = Faraday.new(url) do |builder|
31
32
  builder.request(:multipart)
32
33
  builder.request(:url_encoded)
33
34
  builder.response(:json, content_type: /\bjson$/)
34
- builder.use(FaradayMiddleware::FollowRedirects)
35
+ builder.response(:follow_redirects)
35
36
  builder.adapter(:net_http)
36
37
  end
37
38
 
@@ -8,10 +8,8 @@ module Fastlane
8
8
  project_path = params[:path]
9
9
  selected_targets = params[:targets]
10
10
 
11
- UI.user_error!("Could not find path to xcodeproj '#{project_path}'. Pass the path to your project (not workspace)!") unless File.exist?(project_path)
12
-
13
11
  # Load .xcodeproj
14
- project = Xcodeproj::Project.open(project_path)
12
+ project = Fastlane::Helper::XcodeprojHelper.get_project!(project_path)
15
13
 
16
14
  # Fetch target
17
15
  targets = project.native_targets
@@ -25,10 +23,20 @@ module Fastlane
25
23
 
26
24
  # Set teamid in target
27
25
  targets.each do |target|
28
- UI.message("Updating development team (#{params[:teamid]}) for target `#{target.name}` in the project '#{project_path}'")
29
- # Update the build settings
30
26
  target.build_configurations.each do |configuration|
31
- configuration.build_settings['DEVELOPMENT_TEAM'] = params[:teamid]
27
+ # Iterate over any keys that start with DEVELOPMENT_TEAM
28
+ # This will also set keys that have filtering like [sdk=iphoneos*]
29
+ keys = configuration.build_settings.keys.select { |key| key.to_s.start_with?("DEVELOPMENT_TEAM") }
30
+ keys.each do |key|
31
+ configuration.build_settings[key] = params[:teamid]
32
+ UI.message("Updated build setting '#{key}' to '#{params[:teamid]}' for configuration '#{configuration.name}'")
33
+ end
34
+
35
+ # Explicitly set the key with value if keys don't exist
36
+ unless keys.include?('DEVELOPMENT_TEAM')
37
+ configuration.build_settings['DEVELOPMENT_TEAM'] = params[:teamid]
38
+ UI.message("Added build setting 'DEVELOPMENT_TEAM' with value '#{params[:teamid]}' for configuration '#{configuration.name}'")
39
+ end
32
40
  end
33
41
 
34
42
  project.save
@@ -42,7 +50,7 @@ module Fastlane
42
50
  end
43
51
 
44
52
  def self.details
45
- "This action updates the Developer Team ID of your Xcode project."
53
+ "This action updates (or adds) the Developer Team ID of your Xcode project."
46
54
  end
47
55
 
48
56
  def self.available_options
@@ -69,8 +77,8 @@ module Fastlane
69
77
  ]
70
78
  end
71
79
 
72
- def self.author
73
- "lgaches"
80
+ def self.authors
81
+ ["lgaches", "iBotPeaches"]
74
82
  end
75
83
 
76
84
  def self.is_supported?(platform)
@@ -36,20 +36,29 @@ module Fastlane
36
36
  end
37
37
 
38
38
  worker = FastlaneCore::QueueWorker.new(max_worker_threads) do |dsym_path|
39
- handle_dsym(params, dsym_path, max_worker_threads)
39
+ handle_dsym(params, dsym_path)
40
40
  end
41
41
  worker.batch_enqueue(dsym_paths)
42
- worker.start
43
- UI.success("Successfully uploaded dSYM files to Crashlytics 💯")
42
+ results = worker.start
43
+
44
+ if results.all?
45
+ UI.success("Successfully uploaded dSYM files to Crashlytics 💯")
46
+ elsif results.any?
47
+ UI.success("Successfully uploaded some dSYM files to Crashlytics 💯")
48
+ UI.important("Some dSYM files failed to upload, see the errors above")
49
+ else
50
+ UI.user_error!("Service failed to upload any dSYM files to Crashlytics")
51
+ end
44
52
  end
45
53
 
46
54
  # @param current_path this is a path to either a dSYM or a zipped dSYM
47
55
  # this might also be either nested or not, we're flexible
48
- def self.handle_dsym(params, current_path, max_worker_threads)
56
+ def self.handle_dsym(params, current_path)
49
57
  if current_path.end_with?(".dSYM", ".zip")
50
- upload_dsym(params, current_path)
58
+ return upload_dsym(params, current_path)
51
59
  else
52
60
  UI.error("Don't know how to handle '#{current_path}'")
61
+ return false
53
62
  end
54
63
  end
55
64
 
@@ -69,12 +78,21 @@ module Fastlane
69
78
  end
70
79
  command << "-p #{params[:platform] == 'appletvos' ? 'tvos' : params[:platform]}"
71
80
  command << File.expand_path(path).shellescape
81
+
72
82
  begin
73
83
  command_to_execute = command.join(" ")
74
84
  UI.verbose("upload_dsym using command: #{command_to_execute}")
75
85
  Actions.sh(command_to_execute, log: params[:debug])
86
+ return true
76
87
  rescue => ex
77
- UI.error(ex.to_s) # it fails, however we don't want to fail everything just for this
88
+ # If it fails - emit the warning, then continue (or crash) depending on "fail_on_error"
89
+ UI.error(ex.to_s)
90
+
91
+ if params[:fail_on_error] == true
92
+ raise
93
+ end
94
+
95
+ return false
78
96
  end
79
97
  end
80
98
 
@@ -118,7 +136,10 @@ module Fastlane
118
136
  end
119
137
 
120
138
  def self.details
121
- "This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed. The reason for that is that sometimes some of dSYM files are invalid, and we don't want them to fail the complete build."
139
+ [
140
+ "This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed by default.",
141
+ "The reason for that is that sometimes some of dSYM files are invalid, and we don't want them to fail the complete build. However, fail_on_build parameter can be used to prevent this behavior."
142
+ ].join("\n")
122
143
  end
123
144
 
124
145
  def self.available_options
@@ -195,6 +216,11 @@ module Fastlane
195
216
  min_threads = 1
196
217
  UI.user_error!("Too few threads (#{value}) minimum number of threads: #{min_threads}") unless value >= min_threads
197
218
  end),
219
+ FastlaneCore::ConfigItem.new(key: :fail_on_error,
220
+ env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_FAIL_ON_ERROR",
221
+ description: "Should the action fail when an upload fails?",
222
+ type: Boolean,
223
+ default_value: false),
198
224
  FastlaneCore::ConfigItem.new(key: :debug,
199
225
  env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_DEBUG",
200
226
  description: "Enable debug mode for upload-symbols",
@@ -9,9 +9,10 @@ module Fastlane
9
9
  end.freeze
10
10
  end
11
11
 
12
- def self.git_log_between(pretty_format, from, to, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
12
+ def self.git_log_between(pretty_format, from, to, matching_pattern, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
13
13
  command = %w(git log)
14
14
  command << "--pretty=#{pretty_format}"
15
+ command << "--grep=#{matching_pattern}" if matching_pattern
15
16
  command << "--date=#{date_format}" if date_format
16
17
  command << '--ancestry-path' if ancestry_path
17
18
  command << "#{from}...#{to}"
@@ -24,9 +25,10 @@ module Fastlane
24
25
  nil
25
26
  end
26
27
 
27
- def self.git_log_last_commits(pretty_format, commit_count, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
28
+ def self.git_log_last_commits(pretty_format, commit_count, matching_pattern, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
28
29
  command = %w(git log)
29
30
  command << "--pretty=#{pretty_format}"
31
+ command << "--grep=#{matching_pattern}" if matching_pattern
30
32
  command << "--date=#{date_format}" if date_format
31
33
  command << '--ancestry-path' if ancestry_path
32
34
  command << '-n' << commit_count.to_s
@@ -51,15 +51,23 @@ module Fastlane
51
51
  # sh "ls -la /Applications/Xcode\ 7.3.1.app"
52
52
  # sh "ls", "-la", "/Applications/Xcode 7.3.1.app"
53
53
  # sh({ "FOO" => "Hello" }, "echo $FOO")
54
+ sanitized_output = false
54
55
  Open3.popen2e(*command) do |stdin, io, thread|
55
56
  io.sync = true
56
57
  io.each do |line|
57
- UI.command_output(line.strip) if print_command_output
58
+ if print_command_output
59
+ # Ensure the string being stripped is in valid UTF-8 format; Otherwise warn at the end
60
+ text = line.encode('UTF-8', invalid: :replace)
61
+ UI.command_output(text.strip)
62
+ sanitized_output = true if text != line
63
+ end
58
64
  result << line
59
65
  end
60
66
  exit_status = thread.value
61
67
  end
62
68
 
69
+ UI.important("Command output wasn't valid UTF-8 and was sanitized. Please report the issue.") if sanitized_output
70
+
63
71
  # Checking Process::Status#exitstatus instead of #success? makes for more
64
72
  # testable code. (Tests mock exitstatus only.) This is also consistent
65
73
  # with previous implementations of sh and... probably portable to all
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.files = Dir["lib/**/*"] + %w(README.md LICENSE)
16
16
  spec.require_paths = ['lib']
17
17
  spec.metadata['rubygems_mfa_required'] = 'true'
18
- spec.required_ruby_version = '>= 3.0'
18
+ spec.required_ruby_version = '>= 3.1'
19
19
 
20
20
  # Don't add a dependency to fastlane or fastlane_re
21
21
  # since this would cause a circular dependency
@@ -3,7 +3,7 @@ require:
3
3
  - rubocop/require_tools
4
4
  - rubocop-performance
5
5
  AllCops:
6
- TargetRubyVersion: 3.0
6
+ TargetRubyVersion: 3.1
7
7
  SuggestExtensions: false
8
8
  NewCops: enable
9
9
  Include:
@@ -21,6 +21,10 @@ AllCops:
21
21
  - "**/*.provisionprofile"
22
22
  Lint/ErbNewArguments:
23
23
  Enabled: false
24
+ Style/HashSyntax:
25
+ EnforcedShorthandSyntax: either
26
+ Naming/BlockForwarding:
27
+ EnforcedStyle: explicit
24
28
  Style/SlicingWithRange:
25
29
  Enabled: false
26
30
  Style/MultipleComparison:
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.237.0'.freeze
2
+ VERSION = '2.239.0'.freeze
3
3
  SUMMARY = "The easiest way to build and release mobile apps.".freeze
4
4
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
5
5
  MINIMUM_XCODE_RELEASE = "7.0".freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.237.0
20
+ // Generated with fastlane 2.239.0
@@ -125,7 +125,7 @@ public protocol DeliverfileProtocol: AnyObject {
125
125
  /// The name of your Developer Portal team if you're in multiple teams
126
126
  var devPortalTeamName: String? { get }
127
127
 
128
- /// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
128
+ /// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
129
129
  var itcProvider: String? { get }
130
130
 
131
131
  /// The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
@@ -179,6 +179,9 @@ public protocol DeliverfileProtocol: AnyObject {
179
179
  /// Metadata: Path to the app review attachment file
180
180
  var appReviewAttachmentFile: String? { get }
181
181
 
182
+ /// Metadata: Path to the routing app coverage file (`.geojson`) that is required for routing apps
183
+ var routingAppCoverageFile: String? { get }
184
+
182
185
  /// Metadata: The localised app description
183
186
  var description: [String: Any]? { get }
184
187
 
@@ -465,6 +468,10 @@ public extension DeliverfileProtocol {
465
468
  return nil
466
469
  }
467
470
 
471
+ var routingAppCoverageFile: String? {
472
+ return nil
473
+ }
474
+
468
475
  var description: [String: Any]? {
469
476
  return nil
470
477
  }
@@ -532,4 +539,4 @@ public extension DeliverfileProtocol {
532
539
 
533
540
  // Please don't remove the lines below
534
541
  // They are used to detect outdated files
535
- // FastlaneRunnerAPIVersion [0.9.151]
542
+ // FastlaneRunnerAPIVersion [0.9.153]