fastlane 2.175.0 → 2.180.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +95 -82
  4. data/cert/lib/cert/options.rb +1 -0
  5. data/cert/lib/cert/runner.rb +5 -1
  6. data/deliver/lib/deliver/app_screenshot.rb +6 -2
  7. data/deliver/lib/deliver/download_screenshots.rb +1 -2
  8. data/deliver/lib/deliver/options.rb +1 -0
  9. data/deliver/lib/deliver/runner.rb +12 -4
  10. data/deliver/lib/deliver/setup.rb +0 -1
  11. data/deliver/lib/deliver/upload_metadata.rb +5 -4
  12. data/deliver/lib/deliver/upload_screenshots.rb +10 -10
  13. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +6 -1
  14. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +8 -5
  15. data/fastlane/lib/fastlane/actions/appaloosa.rb +7 -2
  16. data/fastlane/lib/fastlane/actions/backup_file.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/build_app.rb +4 -0
  18. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +4 -0
  19. data/fastlane/lib/fastlane/actions/commit_github_file.rb +11 -1
  20. data/fastlane/lib/fastlane/actions/create_xcframework.rb +5 -0
  21. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
  22. data/fastlane/lib/fastlane/actions/get_github_release.rb +11 -1
  23. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +4 -0
  24. data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
  25. data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
  26. data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
  27. data/fastlane/lib/fastlane/actions/github_api.rb +2 -1
  28. data/fastlane/lib/fastlane/actions/increment_build_number.rb +8 -1
  29. data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
  30. data/fastlane/lib/fastlane/actions/jazzy.rb +10 -1
  31. data/fastlane/lib/fastlane/actions/jira.rb +61 -14
  32. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -0
  33. data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
  34. data/fastlane/lib/fastlane/actions/notarize.rb +98 -51
  35. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +0 -1
  36. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  37. data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
  38. data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
  39. data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
  40. data/fastlane/lib/fastlane/actions/sourcedocs.rb +164 -0
  41. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
  42. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -2
  43. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +4 -5
  44. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +5 -1
  45. data/fastlane/lib/fastlane/erb_template_helper.rb +7 -1
  46. data/fastlane/lib/fastlane/fast_file.rb +9 -5
  47. data/fastlane/lib/fastlane/helper/git_helper.rb +11 -7
  48. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
  49. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
  50. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -2
  51. data/fastlane/lib/fastlane/setup/setup.rb +23 -10
  52. data/fastlane/lib/fastlane/swift_fastlane_function.rb +4 -0
  53. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +2 -0
  54. data/fastlane/lib/fastlane/version.rb +1 -1
  55. data/fastlane/swift/Deliverfile.swift +1 -1
  56. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  57. data/fastlane/swift/Fastlane.swift +574 -332
  58. data/fastlane/swift/Gymfile.swift +1 -1
  59. data/fastlane/swift/GymfileProtocol.swift +1 -1
  60. data/fastlane/swift/LaneFileProtocol.swift +9 -3
  61. data/fastlane/swift/Matchfile.swift +1 -1
  62. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  63. data/fastlane/swift/Precheckfile.swift +1 -1
  64. data/fastlane/swift/PrecheckfileProtocol.swift +3 -3
  65. data/fastlane/swift/RubyCommand.swift +1 -1
  66. data/fastlane/swift/Scanfile.swift +1 -1
  67. data/fastlane/swift/ScanfileProtocol.swift +13 -1
  68. data/fastlane/swift/Screengrabfile.swift +1 -1
  69. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  70. data/fastlane/swift/Snapshotfile.swift +1 -1
  71. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  72. data/fastlane/swift/SocketClient.swift +2 -1
  73. data/fastlane/swift/SocketResponse.swift +4 -2
  74. data/fastlane/swift/formatting/Brewfile.lock.json +12 -12
  75. data/fastlane_core/lib/fastlane_core.rb +1 -0
  76. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +5 -3
  77. data/fastlane_core/lib/fastlane_core/helper.rb +24 -1
  78. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
  79. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +14 -8
  80. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +3 -2
  81. data/fastlane_core/lib/fastlane_core/project.rb +3 -14
  82. data/{deliver/lib/deliver → fastlane_core/lib/fastlane_core}/queue_worker.rb +4 -4
  83. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +12 -1
  84. data/fastlane_core/lib/fastlane_core/ui/interface.rb +1 -1
  85. data/gym/lib/gym/generators/.package_command_generator_xcode7.rb.swp +0 -0
  86. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  87. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +13 -8
  88. data/gym/lib/gym/runner.rb +11 -4
  89. data/match/lib/match/change_password.rb +3 -3
  90. data/match/lib/match/encryption/interface.rb +1 -1
  91. data/match/lib/match/encryption/openssl.rb +2 -2
  92. data/match/lib/match/importer.rb +1 -1
  93. data/match/lib/match/migrate.rb +1 -1
  94. data/match/lib/match/module.rb +1 -0
  95. data/match/lib/match/nuke.rb +1 -1
  96. data/match/lib/match/runner.rb +1 -1
  97. data/match/lib/match/storage/google_cloud_storage.rb +1 -1
  98. data/match/lib/match/storage/s3_storage.rb +1 -1
  99. data/pilot/lib/pilot/build_manager.rb +25 -8
  100. data/pilot/lib/pilot/manager.rb +5 -1
  101. data/pilot/lib/pilot/options.rb +4 -3
  102. data/precheck/lib/precheck/options.rb +1 -0
  103. data/precheck/lib/precheck/runner.rb +6 -2
  104. data/scan/lib/scan/detect_values.rb +4 -1
  105. data/scan/lib/scan/options.rb +20 -5
  106. data/scan/lib/scan/runner.rb +79 -1
  107. data/scan/lib/scan/test_command_generator.rb +8 -8
  108. data/screengrab/lib/screengrab/android_environment.rb +6 -4
  109. data/screengrab/lib/screengrab/runner.rb +2 -3
  110. data/sigh/lib/sigh/download_all.rb +1 -1
  111. data/sigh/lib/sigh/options.rb +1 -0
  112. data/sigh/lib/sigh/runner.rb +5 -1
  113. data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
  114. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
  115. data/spaceship/lib/spaceship/client.rb +18 -17
  116. data/spaceship/lib/spaceship/connect_api/api_client.rb +24 -6
  117. data/spaceship/lib/spaceship/connect_api/models/app.rb +1 -1
  118. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +5 -0
  119. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +1 -1
  120. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
  121. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +6 -0
  122. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
  123. data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
  124. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
  125. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +13 -0
  126. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +13 -0
  127. data/spaceship/lib/spaceship/connect_api/token.rb +8 -2
  128. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +15 -0
  129. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +41 -28
  130. metadata +26 -21
@@ -124,7 +124,7 @@ module Fastlane
124
124
  end
125
125
 
126
126
  def self.return_type
127
- :array
127
+ :array_of_strings
128
128
  end
129
129
 
130
130
  def self.author
@@ -21,9 +21,8 @@ module Fastlane
21
21
  # download certificate
22
22
  unless File.exist?(params[:certificate])
23
23
  UI.message("Downloading root certificate from (#{ROOT_CERTIFICATE_URL}) to path '#{params[:certificate]}'")
24
- require 'open-uri'
25
24
  File.open(params[:certificate], "w:ASCII-8BIT") do |file|
26
- file.write(open(ROOT_CERTIFICATE_URL, "rb").read)
25
+ file.write(FastlaneCore::Helper.open_uri(ROOT_CERTIFICATE_URL, "rb").read)
27
26
  end
28
27
  end
29
28
 
@@ -1,5 +1,3 @@
1
- require 'thread'
2
-
3
1
  module Fastlane
4
2
  module Actions
5
3
  class UploadSymbolsToCrashlyticsAction < Action
@@ -35,10 +33,11 @@ module Fastlane
35
33
  UI.message("Using #{max_worker_threads} threads for Crashlytics dSYM upload 🏎")
36
34
  end
37
35
 
38
- dsym_paths.each do |current_path|
39
- handle_dsym(params, current_path, max_worker_threads)
36
+ worker = FastlaneCore::QueueWorker.new(max_worker_threads) do |dsym_path|
37
+ handle_dsym(params, dsym_path, max_worker_threads)
40
38
  end
41
-
39
+ worker.batch_enqueue(dsym_paths)
40
+ worker.start
42
41
  UI.success("Successfully uploaded dSYM files to Crashlytics 💯")
43
42
  end
44
43
 
@@ -22,7 +22,11 @@ module Fastlane
22
22
  return values if Helper.test?
23
23
 
24
24
  if distribute_only
25
- Pilot::BuildManager.new.distribute(values) # we already have the finished config
25
+ build_manager = Pilot::BuildManager.new
26
+ build_manager.start(values, should_login: true)
27
+
28
+ build_manager.wait_for_build_processing_to_be_complete(false) unless values[:skip_waiting_for_build_processing]
29
+ build_manager.distribute(values) # we already have the finished config
26
30
  else
27
31
  Pilot::BuildManager.new.upload(values) # we already have the finished config
28
32
  end
@@ -24,7 +24,13 @@ module Fastlane
24
24
  end
25
25
 
26
26
  def render(template)
27
- ERB.new(template, nil, @trim_mode).result(binding)
27
+ # From Ruby 2.6, ERB.new takes keyword arguments and positional ones are deprecated
28
+ # https://bugs.ruby-lang.org/issues/14256
29
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.6.0")
30
+ ERB.new(template, trim_mode: @trim_mode).result(binding)
31
+ else
32
+ ERB.new(template, nil, @trim_mode).result(binding)
33
+ end
28
34
  end
29
35
  end
30
36
  end
@@ -201,13 +201,17 @@ module Fastlane
201
201
  # First accepts hash (or named keywords) like other actions
202
202
  # Otherwise uses sh method that doesn't have an interface like an action
203
203
  if args.count == 1 && args.first.kind_of?(Hash)
204
- hash = args.first
205
- command = hash.delete(:command)
204
+ options = args.first
205
+ command = options.delete(:command)
206
206
 
207
207
  raise ArgumentError, "sh requires :command keyword in argument" if command.nil?
208
-
209
- new_args = [*command, hash]
210
- FastFile.sh(*new_args, &b)
208
+ log = options[:log].nil? ? true : options[:log]
209
+ FastFile.sh(*command, step_name: options[:step_name], log: log, error_callback: options[:error_callback], &b)
210
+ elsif args.count != 1 && args.last.kind_of?(Hash)
211
+ new_args = args.dup
212
+ options = new_args.pop
213
+ log = options[:log].nil? ? true : options[:log]
214
+ FastFile.sh(*new_args, step_name: options[:step_name], log: log, error_callback: options[:error_callback], &b)
211
215
  else
212
216
  FastFile.sh(*args, &b)
213
217
  end
@@ -2,6 +2,13 @@ module Fastlane
2
2
  module Actions
3
3
  GIT_MERGE_COMMIT_FILTERING_OPTIONS = [:include_merges, :exclude_merges, :only_include_merges].freeze
4
4
 
5
+ module SharedValues
6
+ GIT_BRANCH_ENV_VARS = %w(GIT_BRANCH BRANCH_NAME TRAVIS_BRANCH BITRISE_GIT_BRANCH CI_BUILD_REF_NAME CI_COMMIT_REF_NAME WERCKER_GIT_BRANCH BUILDKITE_BRANCH APPCENTER_BRANCH CIRCLE_BRANCH).reject do |branch|
7
+ # Removing because tests break on CircleCI
8
+ Helper.test? && branch == "CIRCLE_BRANCH"
9
+ end.freeze
10
+ end
11
+
5
12
  def self.git_log_between(pretty_format, from, to, merge_commit_filtering, date_format = nil, ancestry_path)
6
13
  command = %w(git log)
7
14
  command << "--pretty=#{pretty_format}"
@@ -112,14 +119,11 @@ module Fastlane
112
119
  return nil
113
120
  end
114
121
 
115
- # Returns the current git branch - can be replaced using the environment variable `GIT_BRANCH`
122
+ # Returns the current git branch, or "HEAD" if it's not checked out to any branch
123
+ # Can be replaced using the environment variable `GIT_BRANCH`
116
124
  def self.git_branch
117
- return ENV['GIT_BRANCH'] if ENV['GIT_BRANCH'].to_s.length > 0 # set by Jenkins
118
- s = Actions.sh("git rev-parse --abbrev-ref HEAD", log: false).chomp
119
- return s.to_s.strip if s.to_s.length > 0
120
- nil
121
- rescue
122
- nil
125
+ env_name = SharedValues::GIT_BRANCH_ENV_VARS.find { |env_var| FastlaneCore::Env.truthy?(env_var) }
126
+ ENV.fetch(env_name.to_s) { Actions.sh("git rev-parse --abbrev-ref HEAD", log: false).chomp }
123
127
  end
124
128
 
125
129
  private_class_method
@@ -7,14 +7,13 @@ module Fastlane
7
7
  # Returns an array of FastlanePlugin objects
8
8
  def self.fetch_gems(search_query: nil)
9
9
  require 'json'
10
- require 'open-uri'
11
10
 
12
11
  page = 1
13
12
  plugins = []
14
13
  loop do
15
14
  url = "https://rubygems.org/api/v1/search.json?query=#{PluginManager.plugin_prefix}&page=#{page}"
16
15
  FastlaneCore::UI.verbose("RubyGems API Request: #{url}")
17
- results = JSON.parse(open(url).read)
16
+ results = JSON.parse(FastlaneCore::Helper.open_uri(url).read)
18
17
  break if results.count == 0
19
18
 
20
19
  plugins += results.collect do |current|
@@ -65,10 +65,9 @@ module Fastlane
65
65
 
66
66
  # Checks if the gem name is still free on RubyGems
67
67
  def gem_name_taken?(name)
68
- require 'open-uri'
69
68
  require 'json'
70
69
  url = "https://rubygems.org/api/v1/gems/#{name}.json"
71
- response = JSON.parse(open(url).read)
70
+ response = JSON.parse(FastlaneCore::Helper.open_uri(url).read)
72
71
  return !!response['version']
73
72
  rescue
74
73
  false
@@ -155,11 +155,10 @@ module Fastlane
155
155
  #####################################################
156
156
 
157
157
  def self.fetch_gem_info_from_rubygems(gem_name)
158
- require 'open-uri'
159
158
  require 'json'
160
159
  url = "https://rubygems.org/api/v1/gems/#{gem_name}.json"
161
160
  begin
162
- JSON.parse(URI.open(url).read)
161
+ JSON.parse(FastlaneCore::Helper.open_uri(url).read)
163
162
  rescue
164
163
  nil
165
164
  end
@@ -35,6 +35,10 @@ module Fastlane
35
35
  # rubocop:disable Metrics/BlockNesting
36
36
  def self.start(user: nil, is_swift_fastfile: false)
37
37
  if FastlaneCore::FastlaneFolder.setup? && !Helper.test?
38
+
39
+ # If Fastfile.swift exists, but the swift sources folder does not, rebuild it
40
+ setup_swift_support if is_swift_fastfile
41
+
38
42
  require 'fastlane/lane_list'
39
43
  Fastlane::LaneList.output(FastlaneCore::FastlaneFolder.fastfile_path)
40
44
  UI.important("------------------")
@@ -127,6 +131,24 @@ module Fastlane
127
131
  end
128
132
  # rubocop:enable Metrics/BlockNesting
129
133
 
134
+ def self.setup_swift_support
135
+ runner_source_resources = "#{Fastlane::ROOT}/swift/."
136
+ destination_path = File.expand_path('swift', FastlaneCore::FastlaneFolder.path)
137
+
138
+ # Return eearly if already setup
139
+ return if File.exist?(destination_path)
140
+
141
+ # Show message if Fastfile.swift exists but missing Swift classes and Xcode project
142
+ if FastlaneCore::FastlaneFolder.swift?
143
+ UI.important("Restoring Swift classes and FastlaneSwiftRunner.xcodeproj...")
144
+ end
145
+
146
+ FileUtils.cp_r(runner_source_resources, destination_path)
147
+ UI.success("Copied Swift fastlane runner project to '#{destination_path}'.")
148
+
149
+ Fastlane::SwiftLaneManager.first_time_setup
150
+ end
151
+
130
152
  def initialize(is_swift_fastfile: nil, user: nil, project_path: nil, had_multiple_projects_to_choose_from: nil, preferred_setup_method: nil)
131
153
  self.is_swift_fastfile = is_swift_fastfile
132
154
  self.user = user
@@ -260,21 +282,12 @@ module Fastlane
260
282
 
261
283
  def finish_up
262
284
  write_fastfile!
263
- setup_swift_support if is_swift_fastfile
285
+ self.class.setup_swift_support if is_swift_fastfile
264
286
  show_analytics_note
265
287
  explain_concepts
266
288
  suggest_next_steps
267
289
  end
268
290
 
269
- def setup_swift_support
270
- runner_source_resources = "#{Fastlane::ROOT}/swift/."
271
- destination_path = File.expand_path('swift', FastlaneCore::FastlaneFolder.path)
272
- FileUtils.cp_r(runner_source_resources, destination_path)
273
- UI.success("Copied Swift fastlane runner project to '#{destination_path}'.")
274
-
275
- Fastlane::SwiftLaneManager.first_time_setup
276
- end
277
-
278
291
  def fastfile_template_content
279
292
  if self.is_swift_fastfile
280
293
  path = "#{Fastlane::ROOT}/lib/assets/DefaultFastfileTemplate.swift"
@@ -116,6 +116,7 @@ module Fastlane
116
116
  end
117
117
 
118
118
  def get_type(param: nil, default_value: nil, optional: nil, param_type_override: nil, is_string: true)
119
+ require 'bigdecimal'
119
120
  unless param_type_override.nil?
120
121
  type = determine_type_from_override(type_override: param_type_override)
121
122
  end
@@ -168,6 +169,9 @@ module Fastlane
168
169
  default_value = "[:]"
169
170
  elsif type != "Bool" && type != "[String]" && type != "Int" && type != "@escaping ((String) -> Void)" && type != "Float" && type != "Double"
170
171
  default_value = "\"#{default_value}\""
172
+ elsif type == "Float" || type == "Double"
173
+ require 'bigdecimal'
174
+ default_value = BigDecimal(default_value).to_s
171
175
  end
172
176
  end
173
177
 
@@ -29,6 +29,8 @@ module Fastlane
29
29
  @source_swift_code_file_folder_path = File.expand_path(File.join(Fastlane::ROOT, "/swift"))
30
30
  @target_swift_code_file_folder_path = FastlaneCore::FastlaneFolder.swift_folder_path
31
31
 
32
+ Fastlane::Setup.setup_swift_support
33
+
32
34
  manifest_file = File.join(@source_swift_code_file_folder_path, "/upgrade_manifest.json")
33
35
  UI.success("loading manifest: #{manifest_file}")
34
36
  @manifest_hash = JSON.parse(File.read(manifest_file))
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.175.0'.freeze
2
+ VERSION = '2.180.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.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.175.0
20
+ // Generated with fastlane 2.180.0
@@ -9,7 +9,7 @@ public protocol DeliverfileProtocol: class {
9
9
  var apiKey: [String: Any]? { get }
10
10
 
11
11
  /// Your Apple ID Username
12
- var username: String { get }
12
+ var username: String? { get }
13
13
 
14
14
  /// The bundle identifier of your app
15
15
  var appIdentifier: String? { get }
@@ -192,7 +192,7 @@ public protocol DeliverfileProtocol: class {
192
192
  public extension DeliverfileProtocol {
193
193
  var apiKeyPath: String? { return nil }
194
194
  var apiKey: [String: Any]? { return nil }
195
- var username: String { return "" }
195
+ var username: String? { return nil }
196
196
  var appIdentifier: String? { return nil }
197
197
  var appVersion: String? { return nil }
198
198
  var ipa: String? { return nil }
@@ -256,4 +256,4 @@ public extension DeliverfileProtocol {
256
256
 
257
257
  // Please don't remove the lines below
258
258
  // They are used to detect outdated files
259
- // FastlaneRunnerAPIVersion [0.9.58]
259
+ // FastlaneRunnerAPIVersion [0.9.63]
@@ -119,7 +119,7 @@ public func appStoreBuildNumber(apiKeyPath: String? = nil,
119
119
  apiKey: [String: Any]? = nil,
120
120
  initialBuildNumber: Any,
121
121
  appIdentifier: String,
122
- username: String,
122
+ username: String? = nil,
123
123
  teamId: Any? = nil,
124
124
  live: Bool = true,
125
125
  version: String? = nil,
@@ -149,7 +149,7 @@ public func appStoreBuildNumber(apiKeyPath: String? = nil,
149
149
  - keyContent: The content of the key p8 file
150
150
  - isKeyContentBase64: Whether :key_content is Base64 encoded or not
151
151
  - duration: The token session duration
152
- - inHouse: Is App Store or Enterprise (in house) team? App Store Connect API cannot not determine this on its own (yet)
152
+ - inHouse: Is App Store or Enterprise (in house) team? App Store Connect API cannot determine this on its own (yet)
153
153
 
154
154
  Load the App Store Connect API token to use in other fastlane tools and actions
155
155
  */
@@ -183,6 +183,7 @@ public func appStoreConnectApiKey(keyId: String,
183
183
  - locale: Select the folder locale for your screenshots
184
184
  - device: Select the device format for your screenshots
185
185
  - description: Your app description
186
+ - changelog: Your app changelog
186
187
 
187
188
  Appaloosa is a private mobile application store. This action offers a quick deployment on the platform.
188
189
  You can create an account, push to your existing account, or manage your user groups.
@@ -195,7 +196,8 @@ public func appaloosa(binary: String,
195
196
  screenshots: String,
196
197
  locale: String = "en-US",
197
198
  device: String? = nil,
198
- description: String? = nil)
199
+ description: String? = nil,
200
+ changelog: String? = nil)
199
201
  {
200
202
  let command = RubyCommand(commandID: "", methodName: "appaloosa", className: nil, args: [RubyCommand.Argument(name: "binary", value: binary),
201
203
  RubyCommand.Argument(name: "api_token", value: apiToken),
@@ -204,7 +206,8 @@ public func appaloosa(binary: String,
204
206
  RubyCommand.Argument(name: "screenshots", value: screenshots),
205
207
  RubyCommand.Argument(name: "locale", value: locale),
206
208
  RubyCommand.Argument(name: "device", value: device),
207
- RubyCommand.Argument(name: "description", value: description)])
209
+ RubyCommand.Argument(name: "description", value: description),
210
+ RubyCommand.Argument(name: "changelog", value: changelog)])
208
211
  _ = runner.executeCommand(command)
209
212
  }
210
213
 
@@ -549,7 +552,7 @@ public func appledoc(input: Any,
549
552
  */
550
553
  public func appstore(apiKeyPath: String? = nil,
551
554
  apiKey: [String: Any]? = nil,
552
- username: String,
555
+ username: String? = nil,
553
556
  appIdentifier: String? = nil,
554
557
  appVersion: String? = nil,
555
558
  ipa: String? = nil,
@@ -1003,53 +1006,53 @@ public func buildAndroidApp(task: String? = nil,
1003
1006
 
1004
1007
  More information: https://fastlane.tools/gym
1005
1008
  */
1006
- public func buildApp(workspace: String? = nil,
1007
- project: String? = nil,
1008
- scheme: String? = nil,
1009
- clean: Bool = false,
1010
- outputDirectory: String = ".",
1011
- outputName: String? = nil,
1012
- configuration: String? = nil,
1013
- silent: Bool = false,
1014
- codesigningIdentity: String? = nil,
1015
- skipPackageIpa: Bool = false,
1016
- skipPackagePkg: Bool = false,
1017
- includeSymbols: Bool? = nil,
1018
- includeBitcode: Bool? = nil,
1019
- exportMethod: String? = nil,
1020
- exportOptions: [String: Any]? = nil,
1021
- exportXcargs: String? = nil,
1022
- skipBuildArchive: Bool? = nil,
1023
- skipArchive: Bool? = nil,
1024
- skipCodesigning: Bool? = nil,
1025
- catalystPlatform: String? = nil,
1026
- installerCertName: String? = nil,
1027
- buildPath: String? = nil,
1028
- archivePath: String? = nil,
1029
- derivedDataPath: String? = nil,
1030
- resultBundle: Bool = false,
1031
- resultBundlePath: String? = nil,
1032
- buildlogPath: String = "~/Library/Logs/gym",
1033
- sdk: String? = nil,
1034
- toolchain: String? = nil,
1035
- destination: String? = nil,
1036
- exportTeamId: String? = nil,
1037
- xcargs: String? = nil,
1038
- xcconfig: String? = nil,
1039
- suppressXcodeOutput: Bool? = nil,
1040
- disableXcpretty: Bool? = nil,
1041
- xcprettyTestFormat: Bool? = nil,
1042
- xcprettyFormatter: String? = nil,
1043
- xcprettyReportJunit: String? = nil,
1044
- xcprettyReportHtml: String? = nil,
1045
- xcprettyReportJson: String? = nil,
1046
- analyzeBuildTime: Bool? = nil,
1047
- xcprettyUtf: Bool? = nil,
1048
- skipProfileDetection: Bool = false,
1049
- clonedSourcePackagesPath: String? = nil,
1050
- skipPackageDependenciesResolution: Bool = false,
1051
- disablePackageAutomaticUpdates: Bool = false,
1052
- useSystemScm: Bool = false)
1009
+ @discardableResult public func buildApp(workspace: String? = nil,
1010
+ project: String? = nil,
1011
+ scheme: String? = nil,
1012
+ clean: Bool = false,
1013
+ outputDirectory: String = ".",
1014
+ outputName: String? = nil,
1015
+ configuration: String? = nil,
1016
+ silent: Bool = false,
1017
+ codesigningIdentity: String? = nil,
1018
+ skipPackageIpa: Bool = false,
1019
+ skipPackagePkg: Bool = false,
1020
+ includeSymbols: Bool? = nil,
1021
+ includeBitcode: Bool? = nil,
1022
+ exportMethod: String? = nil,
1023
+ exportOptions: [String: Any]? = nil,
1024
+ exportXcargs: String? = nil,
1025
+ skipBuildArchive: Bool? = nil,
1026
+ skipArchive: Bool? = nil,
1027
+ skipCodesigning: Bool? = nil,
1028
+ catalystPlatform: String? = nil,
1029
+ installerCertName: String? = nil,
1030
+ buildPath: String? = nil,
1031
+ archivePath: String? = nil,
1032
+ derivedDataPath: String? = nil,
1033
+ resultBundle: Bool = false,
1034
+ resultBundlePath: String? = nil,
1035
+ buildlogPath: String = "~/Library/Logs/gym",
1036
+ sdk: String? = nil,
1037
+ toolchain: String? = nil,
1038
+ destination: String? = nil,
1039
+ exportTeamId: String? = nil,
1040
+ xcargs: String? = nil,
1041
+ xcconfig: String? = nil,
1042
+ suppressXcodeOutput: Bool? = nil,
1043
+ disableXcpretty: Bool? = nil,
1044
+ xcprettyTestFormat: Bool? = nil,
1045
+ xcprettyFormatter: String? = nil,
1046
+ xcprettyReportJunit: String? = nil,
1047
+ xcprettyReportHtml: String? = nil,
1048
+ xcprettyReportJson: String? = nil,
1049
+ analyzeBuildTime: Bool? = nil,
1050
+ xcprettyUtf: Bool? = nil,
1051
+ skipProfileDetection: Bool = false,
1052
+ clonedSourcePackagesPath: String? = nil,
1053
+ skipPackageDependenciesResolution: Bool = false,
1054
+ disablePackageAutomaticUpdates: Bool = false,
1055
+ useSystemScm: Bool = false) -> String
1053
1056
  {
1054
1057
  let command = RubyCommand(commandID: "", methodName: "build_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1055
1058
  RubyCommand.Argument(name: "project", value: project),
@@ -1098,7 +1101,7 @@ public func buildApp(workspace: String? = nil,
1098
1101
  RubyCommand.Argument(name: "skip_package_dependencies_resolution", value: skipPackageDependenciesResolution),
1099
1102
  RubyCommand.Argument(name: "disable_package_automatic_updates", value: disablePackageAutomaticUpdates),
1100
1103
  RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
1101
- _ = runner.executeCommand(command)
1104
+ return runner.executeCommand(command)
1102
1105
  }
1103
1106
 
1104
1107
  /**
@@ -1154,50 +1157,50 @@ public func buildApp(workspace: String? = nil,
1154
1157
 
1155
1158
  More information: https://fastlane.tools/gym
1156
1159
  */
1157
- public func buildIosApp(workspace: String? = nil,
1158
- project: String? = nil,
1159
- scheme: String? = nil,
1160
- clean: Bool = false,
1161
- outputDirectory: String = ".",
1162
- outputName: String? = nil,
1163
- configuration: String? = nil,
1164
- silent: Bool = false,
1165
- codesigningIdentity: String? = nil,
1166
- skipPackageIpa: Bool = false,
1167
- includeSymbols: Bool? = nil,
1168
- includeBitcode: Bool? = nil,
1169
- exportMethod: String? = nil,
1170
- exportOptions: [String: Any]? = nil,
1171
- exportXcargs: String? = nil,
1172
- skipBuildArchive: Bool? = nil,
1173
- skipArchive: Bool? = nil,
1174
- skipCodesigning: Bool? = nil,
1175
- buildPath: String? = nil,
1176
- archivePath: String? = nil,
1177
- derivedDataPath: String? = nil,
1178
- resultBundle: Bool = false,
1179
- resultBundlePath: String? = nil,
1180
- buildlogPath: String = "~/Library/Logs/gym",
1181
- sdk: String? = nil,
1182
- toolchain: String? = nil,
1183
- destination: String? = nil,
1184
- exportTeamId: String? = nil,
1185
- xcargs: String? = nil,
1186
- xcconfig: String? = nil,
1187
- suppressXcodeOutput: Bool? = nil,
1188
- disableXcpretty: Bool? = nil,
1189
- xcprettyTestFormat: Bool? = nil,
1190
- xcprettyFormatter: String? = nil,
1191
- xcprettyReportJunit: String? = nil,
1192
- xcprettyReportHtml: String? = nil,
1193
- xcprettyReportJson: String? = nil,
1194
- analyzeBuildTime: Bool? = nil,
1195
- xcprettyUtf: Bool? = nil,
1196
- skipProfileDetection: Bool = false,
1197
- clonedSourcePackagesPath: String? = nil,
1198
- skipPackageDependenciesResolution: Bool = false,
1199
- disablePackageAutomaticUpdates: Bool = false,
1200
- useSystemScm: Bool = false)
1160
+ @discardableResult public func buildIosApp(workspace: String? = nil,
1161
+ project: String? = nil,
1162
+ scheme: String? = nil,
1163
+ clean: Bool = false,
1164
+ outputDirectory: String = ".",
1165
+ outputName: String? = nil,
1166
+ configuration: String? = nil,
1167
+ silent: Bool = false,
1168
+ codesigningIdentity: String? = nil,
1169
+ skipPackageIpa: Bool = false,
1170
+ includeSymbols: Bool? = nil,
1171
+ includeBitcode: Bool? = nil,
1172
+ exportMethod: String? = nil,
1173
+ exportOptions: [String: Any]? = nil,
1174
+ exportXcargs: String? = nil,
1175
+ skipBuildArchive: Bool? = nil,
1176
+ skipArchive: Bool? = nil,
1177
+ skipCodesigning: Bool? = nil,
1178
+ buildPath: String? = nil,
1179
+ archivePath: String? = nil,
1180
+ derivedDataPath: String? = nil,
1181
+ resultBundle: Bool = false,
1182
+ resultBundlePath: String? = nil,
1183
+ buildlogPath: String = "~/Library/Logs/gym",
1184
+ sdk: String? = nil,
1185
+ toolchain: String? = nil,
1186
+ destination: String? = nil,
1187
+ exportTeamId: String? = nil,
1188
+ xcargs: String? = nil,
1189
+ xcconfig: String? = nil,
1190
+ suppressXcodeOutput: Bool? = nil,
1191
+ disableXcpretty: Bool? = nil,
1192
+ xcprettyTestFormat: Bool? = nil,
1193
+ xcprettyFormatter: String? = nil,
1194
+ xcprettyReportJunit: String? = nil,
1195
+ xcprettyReportHtml: String? = nil,
1196
+ xcprettyReportJson: String? = nil,
1197
+ analyzeBuildTime: Bool? = nil,
1198
+ xcprettyUtf: Bool? = nil,
1199
+ skipProfileDetection: Bool = false,
1200
+ clonedSourcePackagesPath: String? = nil,
1201
+ skipPackageDependenciesResolution: Bool = false,
1202
+ disablePackageAutomaticUpdates: Bool = false,
1203
+ useSystemScm: Bool = false) -> String
1201
1204
  {
1202
1205
  let command = RubyCommand(commandID: "", methodName: "build_ios_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1203
1206
  RubyCommand.Argument(name: "project", value: project),
@@ -1243,7 +1246,7 @@ public func buildIosApp(workspace: String? = nil,
1243
1246
  RubyCommand.Argument(name: "skip_package_dependencies_resolution", value: skipPackageDependenciesResolution),
1244
1247
  RubyCommand.Argument(name: "disable_package_automatic_updates", value: disablePackageAutomaticUpdates),
1245
1248
  RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
1246
- _ = runner.executeCommand(command)
1249
+ return runner.executeCommand(command)
1247
1250
  }
1248
1251
 
1249
1252
  /**
@@ -1300,51 +1303,51 @@ public func buildIosApp(workspace: String? = nil,
1300
1303
 
1301
1304
  More information: https://fastlane.tools/gym
1302
1305
  */
1303
- public func buildMacApp(workspace: String? = nil,
1304
- project: String? = nil,
1305
- scheme: String? = nil,
1306
- clean: Bool = false,
1307
- outputDirectory: String = ".",
1308
- outputName: String? = nil,
1309
- configuration: String? = nil,
1310
- silent: Bool = false,
1311
- codesigningIdentity: String? = nil,
1312
- skipPackagePkg: Bool = false,
1313
- includeSymbols: Bool? = nil,
1314
- includeBitcode: Bool? = nil,
1315
- exportMethod: String? = nil,
1316
- exportOptions: [String: Any]? = nil,
1317
- exportXcargs: String? = nil,
1318
- skipBuildArchive: Bool? = nil,
1319
- skipArchive: Bool? = nil,
1320
- skipCodesigning: Bool? = nil,
1321
- installerCertName: String? = nil,
1322
- buildPath: String? = nil,
1323
- archivePath: String? = nil,
1324
- derivedDataPath: String? = nil,
1325
- resultBundle: Bool = false,
1326
- resultBundlePath: String? = nil,
1327
- buildlogPath: String = "~/Library/Logs/gym",
1328
- sdk: String? = nil,
1329
- toolchain: String? = nil,
1330
- destination: String? = nil,
1331
- exportTeamId: String? = nil,
1332
- xcargs: String? = nil,
1333
- xcconfig: String? = nil,
1334
- suppressXcodeOutput: Bool? = nil,
1335
- disableXcpretty: Bool? = nil,
1336
- xcprettyTestFormat: Bool? = nil,
1337
- xcprettyFormatter: String? = nil,
1338
- xcprettyReportJunit: String? = nil,
1339
- xcprettyReportHtml: String? = nil,
1340
- xcprettyReportJson: String? = nil,
1341
- analyzeBuildTime: Bool? = nil,
1342
- xcprettyUtf: Bool? = nil,
1343
- skipProfileDetection: Bool = false,
1344
- clonedSourcePackagesPath: String? = nil,
1345
- skipPackageDependenciesResolution: Bool = false,
1346
- disablePackageAutomaticUpdates: Bool = false,
1347
- useSystemScm: Bool = false)
1306
+ @discardableResult public func buildMacApp(workspace: String? = nil,
1307
+ project: String? = nil,
1308
+ scheme: String? = nil,
1309
+ clean: Bool = false,
1310
+ outputDirectory: String = ".",
1311
+ outputName: String? = nil,
1312
+ configuration: String? = nil,
1313
+ silent: Bool = false,
1314
+ codesigningIdentity: String? = nil,
1315
+ skipPackagePkg: Bool = false,
1316
+ includeSymbols: Bool? = nil,
1317
+ includeBitcode: Bool? = nil,
1318
+ exportMethod: String? = nil,
1319
+ exportOptions: [String: Any]? = nil,
1320
+ exportXcargs: String? = nil,
1321
+ skipBuildArchive: Bool? = nil,
1322
+ skipArchive: Bool? = nil,
1323
+ skipCodesigning: Bool? = nil,
1324
+ installerCertName: String? = nil,
1325
+ buildPath: String? = nil,
1326
+ archivePath: String? = nil,
1327
+ derivedDataPath: String? = nil,
1328
+ resultBundle: Bool = false,
1329
+ resultBundlePath: String? = nil,
1330
+ buildlogPath: String = "~/Library/Logs/gym",
1331
+ sdk: String? = nil,
1332
+ toolchain: String? = nil,
1333
+ destination: String? = nil,
1334
+ exportTeamId: String? = nil,
1335
+ xcargs: String? = nil,
1336
+ xcconfig: String? = nil,
1337
+ suppressXcodeOutput: Bool? = nil,
1338
+ disableXcpretty: Bool? = nil,
1339
+ xcprettyTestFormat: Bool? = nil,
1340
+ xcprettyFormatter: String? = nil,
1341
+ xcprettyReportJunit: String? = nil,
1342
+ xcprettyReportHtml: String? = nil,
1343
+ xcprettyReportJson: String? = nil,
1344
+ analyzeBuildTime: Bool? = nil,
1345
+ xcprettyUtf: Bool? = nil,
1346
+ skipProfileDetection: Bool = false,
1347
+ clonedSourcePackagesPath: String? = nil,
1348
+ skipPackageDependenciesResolution: Bool = false,
1349
+ disablePackageAutomaticUpdates: Bool = false,
1350
+ useSystemScm: Bool = false) -> String
1348
1351
  {
1349
1352
  let command = RubyCommand(commandID: "", methodName: "build_mac_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1350
1353
  RubyCommand.Argument(name: "project", value: project),
@@ -1391,7 +1394,7 @@ public func buildMacApp(workspace: String? = nil,
1391
1394
  RubyCommand.Argument(name: "skip_package_dependencies_resolution", value: skipPackageDependenciesResolution),
1392
1395
  RubyCommand.Argument(name: "disable_package_automatic_updates", value: disablePackageAutomaticUpdates),
1393
1396
  RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
1394
- _ = runner.executeCommand(command)
1397
+ return runner.executeCommand(command)
1395
1398
  }
1396
1399
 
1397
1400
  /**
@@ -1939,7 +1942,7 @@ public func cert(development: Bool = false,
1939
1942
  generateAppleCerts: Bool = true,
1940
1943
  apiKeyPath: String? = nil,
1941
1944
  apiKey: [String: Any]? = nil,
1942
- username: String,
1945
+ username: String? = nil,
1943
1946
  teamId: String? = nil,
1944
1947
  teamName: String? = nil,
1945
1948
  filename: String? = nil,
@@ -2065,26 +2068,26 @@ public func chatwork(apiToken: String,
2065
2068
 
2066
2069
  More information: https://fastlane.tools/precheck
2067
2070
  */
2068
- public func checkAppStoreMetadata(apiKeyPath: String? = nil,
2069
- apiKey: [String: Any]? = nil,
2070
- appIdentifier: String,
2071
- username: String,
2072
- teamId: String? = nil,
2073
- teamName: String? = nil,
2074
- platform: String = "ios",
2075
- defaultRuleLevel: Any = "error",
2076
- includeInAppPurchases: Bool = true,
2077
- useLive: Bool = false,
2078
- negativeAppleSentiment: Any? = nil,
2079
- placeholderText: Any? = nil,
2080
- otherPlatforms: Any? = nil,
2081
- futureFunctionality: Any? = nil,
2082
- testWords: Any? = nil,
2083
- curseWords: Any? = nil,
2084
- freeStuffInIap: Any? = nil,
2085
- customText: Any? = nil,
2086
- copyrightDate: Any? = nil,
2087
- unreachableUrls: Any? = nil)
2071
+ @discardableResult public func checkAppStoreMetadata(apiKeyPath: String? = nil,
2072
+ apiKey: [String: Any]? = nil,
2073
+ appIdentifier: String,
2074
+ username: String? = nil,
2075
+ teamId: String? = nil,
2076
+ teamName: String? = nil,
2077
+ platform: String = "ios",
2078
+ defaultRuleLevel: Any = "error",
2079
+ includeInAppPurchases: Bool = true,
2080
+ useLive: Bool = false,
2081
+ negativeAppleSentiment: Any? = nil,
2082
+ placeholderText: Any? = nil,
2083
+ otherPlatforms: Any? = nil,
2084
+ futureFunctionality: Any? = nil,
2085
+ testWords: Any? = nil,
2086
+ curseWords: Any? = nil,
2087
+ freeStuffInIap: Any? = nil,
2088
+ customText: Any? = nil,
2089
+ copyrightDate: Any? = nil,
2090
+ unreachableUrls: Any? = nil) -> Bool
2088
2091
  {
2089
2092
  let command = RubyCommand(commandID: "", methodName: "check_app_store_metadata", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
2090
2093
  RubyCommand.Argument(name: "api_key", value: apiKey),
@@ -2106,7 +2109,7 @@ public func checkAppStoreMetadata(apiKeyPath: String? = nil,
2106
2109
  RubyCommand.Argument(name: "custom_text", value: customText),
2107
2110
  RubyCommand.Argument(name: "copyright_date", value: copyrightDate),
2108
2111
  RubyCommand.Argument(name: "unreachable_urls", value: unreachableUrls)])
2109
- _ = runner.executeCommand(command)
2112
+ return parseBool(fromString: runner.executeCommand(command))
2110
2113
  }
2111
2114
 
2112
2115
  /**
@@ -2247,6 +2250,7 @@ public func cocoapods(repoUpdate: Bool = false,
2247
2250
  - repositoryName: The path to your repo, e.g. 'fastlane/fastlane'
2248
2251
  - serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com')
2249
2252
  - apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens
2253
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
2250
2254
  - branch: The branch that the file should be committed on (default: master)
2251
2255
  - path: The relative path to your file from project root e.g. assets/my_app.xcarchive
2252
2256
  - message: The commit message. Defaults to the file name
@@ -2261,7 +2265,8 @@ public func cocoapods(repoUpdate: Bool = false,
2261
2265
  */
2262
2266
  @discardableResult public func commitGithubFile(repositoryName: String,
2263
2267
  serverUrl: String = "https://api.github.com",
2264
- apiToken: String,
2268
+ apiToken: String? = nil,
2269
+ apiBearer: String? = nil,
2265
2270
  branch: String = "master",
2266
2271
  path: String,
2267
2272
  message: String? = nil,
@@ -2270,6 +2275,7 @@ public func cocoapods(repoUpdate: Bool = false,
2270
2275
  let command = RubyCommand(commandID: "", methodName: "commit_github_file", className: nil, args: [RubyCommand.Argument(name: "repository_name", value: repositoryName),
2271
2276
  RubyCommand.Argument(name: "server_url", value: serverUrl),
2272
2277
  RubyCommand.Argument(name: "api_token", value: apiToken),
2278
+ RubyCommand.Argument(name: "api_bearer", value: apiBearer),
2273
2279
  RubyCommand.Argument(name: "branch", value: branch),
2274
2280
  RubyCommand.Argument(name: "path", value: path),
2275
2281
  RubyCommand.Argument(name: "message", value: message),
@@ -2774,7 +2780,7 @@ public func deleteKeychain(name: String? = nil,
2774
2780
  */
2775
2781
  public func deliver(apiKeyPath: Any? = deliverfile.apiKeyPath,
2776
2782
  apiKey: [String: Any]? = deliverfile.apiKey,
2777
- username: Any = deliverfile.username,
2783
+ username: Any? = deliverfile.username,
2778
2784
  appIdentifier: Any? = deliverfile.appIdentifier,
2779
2785
  appVersion: Any? = deliverfile.appVersion,
2780
2786
  ipa: Any? = deliverfile.ipa,
@@ -3498,7 +3504,7 @@ public func getCertificates(development: Bool = false,
3498
3504
  generateAppleCerts: Bool = true,
3499
3505
  apiKeyPath: String? = nil,
3500
3506
  apiKey: [String: Any]? = nil,
3501
- username: String,
3507
+ username: String? = nil,
3502
3508
  teamId: String? = nil,
3503
3509
  teamName: String? = nil,
3504
3510
  filename: String? = nil,
@@ -3534,6 +3540,7 @@ public func getCertificates(development: Bool = false,
3534
3540
  - serverUrl: The server url. e.g. 'https://your.github.server/api/v3' (Default: 'https://api.github.com')
3535
3541
  - version: The version tag of the release to check
3536
3542
  - apiToken: GitHub Personal Token (required for private repositories)
3543
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
3537
3544
 
3538
3545
  This will return all information about a release. For example:|
3539
3546
  |
@@ -3581,12 +3588,14 @@ public func getCertificates(development: Bool = false,
3581
3588
  public func getGithubRelease(url: String,
3582
3589
  serverUrl: String = "https://api.github.com",
3583
3590
  version: String,
3584
- apiToken: String? = nil)
3591
+ apiToken: String? = nil,
3592
+ apiBearer: String? = nil)
3585
3593
  {
3586
3594
  let command = RubyCommand(commandID: "", methodName: "get_github_release", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
3587
3595
  RubyCommand.Argument(name: "server_url", value: serverUrl),
3588
3596
  RubyCommand.Argument(name: "version", value: version),
3589
- RubyCommand.Argument(name: "api_token", value: apiToken)])
3597
+ RubyCommand.Argument(name: "api_token", value: apiToken),
3598
+ RubyCommand.Argument(name: "api_bearer", value: apiBearer)])
3590
3599
  _ = runner.executeCommand(command)
3591
3600
  }
3592
3601
 
@@ -3680,29 +3689,29 @@ public func getManagedPlayStorePublishingRights(jsonKey: String? = nil,
3680
3689
 
3681
3690
  **Note**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning.
3682
3691
  */
3683
- public func getProvisioningProfile(adhoc: Bool = false,
3684
- developerId: Bool = false,
3685
- development: Bool = false,
3686
- skipInstall: Bool = false,
3687
- force: Bool = false,
3688
- appIdentifier: String,
3689
- apiKeyPath: String? = nil,
3690
- apiKey: [String: Any]? = nil,
3691
- username: String,
3692
- teamId: String? = nil,
3693
- teamName: String? = nil,
3694
- provisioningName: String? = nil,
3695
- ignoreProfilesWithDifferentName: Bool = false,
3696
- outputPath: String = ".",
3697
- certId: String? = nil,
3698
- certOwnerName: String? = nil,
3699
- filename: String? = nil,
3700
- skipFetchProfiles: Bool = false,
3701
- skipCertificateVerification: Bool = false,
3702
- platform: Any = "ios",
3703
- readonly: Bool = false,
3704
- templateName: String? = nil,
3705
- failOnNameTaken: Bool = false)
3692
+ @discardableResult public func getProvisioningProfile(adhoc: Bool = false,
3693
+ developerId: Bool = false,
3694
+ development: Bool = false,
3695
+ skipInstall: Bool = false,
3696
+ force: Bool = false,
3697
+ appIdentifier: String,
3698
+ apiKeyPath: String? = nil,
3699
+ apiKey: [String: Any]? = nil,
3700
+ username: String? = nil,
3701
+ teamId: String? = nil,
3702
+ teamName: String? = nil,
3703
+ provisioningName: String? = nil,
3704
+ ignoreProfilesWithDifferentName: Bool = false,
3705
+ outputPath: String = ".",
3706
+ certId: String? = nil,
3707
+ certOwnerName: String? = nil,
3708
+ filename: String? = nil,
3709
+ skipFetchProfiles: Bool = false,
3710
+ skipCertificateVerification: Bool = false,
3711
+ platform: Any = "ios",
3712
+ readonly: Bool = false,
3713
+ templateName: String? = nil,
3714
+ failOnNameTaken: Bool = false) -> String
3706
3715
  {
3707
3716
  let command = RubyCommand(commandID: "", methodName: "get_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc),
3708
3717
  RubyCommand.Argument(name: "developer_id", value: developerId),
@@ -3727,7 +3736,7 @@ public func getProvisioningProfile(adhoc: Bool = false,
3727
3736
  RubyCommand.Argument(name: "readonly", value: readonly),
3728
3737
  RubyCommand.Argument(name: "template_name", value: templateName),
3729
3738
  RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken)])
3730
- _ = runner.executeCommand(command)
3739
+ return runner.executeCommand(command)
3731
3740
  }
3732
3741
 
3733
3742
  /**
@@ -3797,7 +3806,7 @@ public func getPushCertificate(development: Bool = false,
3797
3806
  Get the version number of your project
3798
3807
 
3799
3808
  - parameters:
3800
- - xcodeproj: Path to the main Xcode project to read version number from, optional. By default will use the first Xcode project found within the project root directory
3809
+ - xcodeproj: Path to the Xcode project to read version number from, or its containing directory, optional. If ommitted, or if a directory is passed instead, it will use the first Xcode project found within the given directory, or the project root directory if none is passed
3801
3810
  - target: Target name, optional. Will be needed if you have more than one non-test target to avoid being prompted to select one
3802
3811
  - configuration: Configuration name, optional. Will be needed if you have altered the configurations from the default or your version number depends on the configuration selected
3803
3812
 
@@ -3834,7 +3843,7 @@ public func gitAdd(path: Any? = nil,
3834
3843
  /**
3835
3844
  Returns the name of the current git branch, possibly as managed by CI ENV vars
3836
3845
 
3837
- If no branch could be found, this action will return an empty string
3846
+ If no branch could be found, this action will return an empty string. This is a wrapper for the internal action Actions.git_branch
3838
3847
  */
3839
3848
  @discardableResult public func gitBranch() -> String {
3840
3849
  let command = RubyCommand(commandID: "", methodName: "git_branch", className: nil, args: [])
@@ -3902,14 +3911,14 @@ public func gitSubmoduleUpdate(recursive: Bool = false,
3902
3911
 
3903
3912
  - returns: Boolean value whether the tag exists or not
3904
3913
  */
3905
- public func gitTagExists(tag: String,
3906
- remote: Bool = false,
3907
- remoteName: String = "origin")
3914
+ @discardableResult public func gitTagExists(tag: String,
3915
+ remote: Bool = false,
3916
+ remoteName: String = "origin") -> Bool
3908
3917
  {
3909
3918
  let command = RubyCommand(commandID: "", methodName: "git_tag_exists", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag),
3910
3919
  RubyCommand.Argument(name: "remote", value: remote),
3911
3920
  RubyCommand.Argument(name: "remote_name", value: remoteName)])
3912
- _ = runner.executeCommand(command)
3921
+ return parseBool(fromString: runner.executeCommand(command))
3913
3922
  }
3914
3923
 
3915
3924
  /**
@@ -4139,53 +4148,53 @@ public func gradle(task: String? = nil,
4139
4148
 
4140
4149
  More information: https://fastlane.tools/gym
4141
4150
  */
4142
- public func gym(workspace: Any? = gymfile.workspace,
4143
- project: Any? = gymfile.project,
4144
- scheme: Any? = gymfile.scheme,
4145
- clean: Bool = gymfile.clean,
4146
- outputDirectory: Any = gymfile.outputDirectory,
4147
- outputName: Any? = gymfile.outputName,
4148
- configuration: Any? = gymfile.configuration,
4149
- silent: Bool = gymfile.silent,
4150
- codesigningIdentity: Any? = gymfile.codesigningIdentity,
4151
- skipPackageIpa: Bool = gymfile.skipPackageIpa,
4152
- skipPackagePkg: Bool = gymfile.skipPackagePkg,
4153
- includeSymbols: Bool? = gymfile.includeSymbols,
4154
- includeBitcode: Bool? = gymfile.includeBitcode,
4155
- exportMethod: Any? = gymfile.exportMethod,
4156
- exportOptions: [String: Any]? = gymfile.exportOptions,
4157
- exportXcargs: Any? = gymfile.exportXcargs,
4158
- skipBuildArchive: Bool? = gymfile.skipBuildArchive,
4159
- skipArchive: Bool? = gymfile.skipArchive,
4160
- skipCodesigning: Bool? = gymfile.skipCodesigning,
4161
- catalystPlatform: Any? = gymfile.catalystPlatform,
4162
- installerCertName: Any? = gymfile.installerCertName,
4163
- buildPath: Any? = gymfile.buildPath,
4164
- archivePath: Any? = gymfile.archivePath,
4165
- derivedDataPath: Any? = gymfile.derivedDataPath,
4166
- resultBundle: Bool = gymfile.resultBundle,
4167
- resultBundlePath: Any? = gymfile.resultBundlePath,
4168
- buildlogPath: Any = gymfile.buildlogPath,
4169
- sdk: Any? = gymfile.sdk,
4170
- toolchain: Any? = gymfile.toolchain,
4171
- destination: Any? = gymfile.destination,
4172
- exportTeamId: Any? = gymfile.exportTeamId,
4173
- xcargs: Any? = gymfile.xcargs,
4174
- xcconfig: Any? = gymfile.xcconfig,
4175
- suppressXcodeOutput: Bool? = gymfile.suppressXcodeOutput,
4176
- disableXcpretty: Bool? = gymfile.disableXcpretty,
4177
- xcprettyTestFormat: Bool? = gymfile.xcprettyTestFormat,
4178
- xcprettyFormatter: Any? = gymfile.xcprettyFormatter,
4179
- xcprettyReportJunit: Any? = gymfile.xcprettyReportJunit,
4180
- xcprettyReportHtml: Any? = gymfile.xcprettyReportHtml,
4181
- xcprettyReportJson: Any? = gymfile.xcprettyReportJson,
4182
- analyzeBuildTime: Bool? = gymfile.analyzeBuildTime,
4183
- xcprettyUtf: Bool? = gymfile.xcprettyUtf,
4184
- skipProfileDetection: Bool = gymfile.skipProfileDetection,
4185
- clonedSourcePackagesPath: Any? = gymfile.clonedSourcePackagesPath,
4186
- skipPackageDependenciesResolution: Bool = gymfile.skipPackageDependenciesResolution,
4187
- disablePackageAutomaticUpdates: Bool = gymfile.disablePackageAutomaticUpdates,
4188
- useSystemScm: Bool = gymfile.useSystemScm)
4151
+ @discardableResult public func gym(workspace: Any? = gymfile.workspace,
4152
+ project: Any? = gymfile.project,
4153
+ scheme: Any? = gymfile.scheme,
4154
+ clean: Bool = gymfile.clean,
4155
+ outputDirectory: Any = gymfile.outputDirectory,
4156
+ outputName: Any? = gymfile.outputName,
4157
+ configuration: Any? = gymfile.configuration,
4158
+ silent: Bool = gymfile.silent,
4159
+ codesigningIdentity: Any? = gymfile.codesigningIdentity,
4160
+ skipPackageIpa: Bool = gymfile.skipPackageIpa,
4161
+ skipPackagePkg: Bool = gymfile.skipPackagePkg,
4162
+ includeSymbols: Bool? = gymfile.includeSymbols,
4163
+ includeBitcode: Bool? = gymfile.includeBitcode,
4164
+ exportMethod: Any? = gymfile.exportMethod,
4165
+ exportOptions: [String: Any]? = gymfile.exportOptions,
4166
+ exportXcargs: Any? = gymfile.exportXcargs,
4167
+ skipBuildArchive: Bool? = gymfile.skipBuildArchive,
4168
+ skipArchive: Bool? = gymfile.skipArchive,
4169
+ skipCodesigning: Bool? = gymfile.skipCodesigning,
4170
+ catalystPlatform: Any? = gymfile.catalystPlatform,
4171
+ installerCertName: Any? = gymfile.installerCertName,
4172
+ buildPath: Any? = gymfile.buildPath,
4173
+ archivePath: Any? = gymfile.archivePath,
4174
+ derivedDataPath: Any? = gymfile.derivedDataPath,
4175
+ resultBundle: Bool = gymfile.resultBundle,
4176
+ resultBundlePath: Any? = gymfile.resultBundlePath,
4177
+ buildlogPath: Any = gymfile.buildlogPath,
4178
+ sdk: Any? = gymfile.sdk,
4179
+ toolchain: Any? = gymfile.toolchain,
4180
+ destination: Any? = gymfile.destination,
4181
+ exportTeamId: Any? = gymfile.exportTeamId,
4182
+ xcargs: Any? = gymfile.xcargs,
4183
+ xcconfig: Any? = gymfile.xcconfig,
4184
+ suppressXcodeOutput: Bool? = gymfile.suppressXcodeOutput,
4185
+ disableXcpretty: Bool? = gymfile.disableXcpretty,
4186
+ xcprettyTestFormat: Bool? = gymfile.xcprettyTestFormat,
4187
+ xcprettyFormatter: Any? = gymfile.xcprettyFormatter,
4188
+ xcprettyReportJunit: Any? = gymfile.xcprettyReportJunit,
4189
+ xcprettyReportHtml: Any? = gymfile.xcprettyReportHtml,
4190
+ xcprettyReportJson: Any? = gymfile.xcprettyReportJson,
4191
+ analyzeBuildTime: Bool? = gymfile.analyzeBuildTime,
4192
+ xcprettyUtf: Bool? = gymfile.xcprettyUtf,
4193
+ skipProfileDetection: Bool = gymfile.skipProfileDetection,
4194
+ clonedSourcePackagesPath: Any? = gymfile.clonedSourcePackagesPath,
4195
+ skipPackageDependenciesResolution: Bool = gymfile.skipPackageDependenciesResolution,
4196
+ disablePackageAutomaticUpdates: Bool = gymfile.disablePackageAutomaticUpdates,
4197
+ useSystemScm: Bool = gymfile.useSystemScm) -> String
4189
4198
  {
4190
4199
  let command = RubyCommand(commandID: "", methodName: "gym", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
4191
4200
  RubyCommand.Argument(name: "project", value: project),
@@ -4234,7 +4243,7 @@ public func gym(workspace: Any? = gymfile.workspace,
4234
4243
  RubyCommand.Argument(name: "skip_package_dependencies_resolution", value: skipPackageDependenciesResolution),
4235
4244
  RubyCommand.Argument(name: "disable_package_automatic_updates", value: disablePackageAutomaticUpdates),
4236
4245
  RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
4237
- _ = runner.executeCommand(command)
4246
+ return runner.executeCommand(command)
4238
4247
  }
4239
4248
 
4240
4249
  /**
@@ -4508,14 +4517,17 @@ public func importCertificate(certificatePath: String,
4508
4517
 
4509
4518
  - parameters:
4510
4519
  - buildNumber: Change to a specific version. When you provide this parameter, Apple Generic Versioning does not have to be enabled
4520
+ - skipInfoPlist: Don't update Info.plist files when updating the build version
4511
4521
  - xcodeproj: optional, you must specify the path to your main Xcode project if it is not in the project root directory
4512
4522
 
4513
4523
  - returns: The new build number
4514
4524
  */
4515
4525
  @discardableResult public func incrementBuildNumber(buildNumber: Any? = nil,
4526
+ skipInfoPlist: Bool = false,
4516
4527
  xcodeproj: String? = nil) -> String
4517
4528
  {
4518
4529
  let command = RubyCommand(commandID: "", methodName: "increment_build_number", className: nil, args: [RubyCommand.Argument(name: "build_number", value: buildNumber),
4530
+ RubyCommand.Argument(name: "skip_info_plist", value: skipInfoPlist),
4519
4531
  RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)])
4520
4532
  return runner.executeCommand(command)
4521
4533
  }
@@ -4575,9 +4587,9 @@ public func installOnDevice(extra: String? = nil,
4575
4587
 
4576
4588
  Install provisioning profile from path for current user
4577
4589
  */
4578
- public func installProvisioningProfile(path: String) {
4590
+ @discardableResult public func installProvisioningProfile(path: String) -> String {
4579
4591
  let command = RubyCommand(commandID: "", methodName: "install_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "path", value: path)])
4580
- _ = runner.executeCommand(command)
4592
+ return runner.executeCommand(command)
4581
4593
  }
4582
4594
 
4583
4595
  /**
@@ -4680,38 +4692,49 @@ public func ipa(workspace: String? = nil,
4680
4692
  /**
4681
4693
  Generate docs using Jazzy
4682
4694
 
4683
- - parameter config: Path to jazzy config file
4695
+ - parameters:
4696
+ - config: Path to jazzy config file
4697
+ - moduleVersion: Version string to use as part of the the default docs title and inside the docset
4684
4698
  */
4685
- public func jazzy(config: String? = nil) {
4686
- let command = RubyCommand(commandID: "", methodName: "jazzy", className: nil, args: [RubyCommand.Argument(name: "config", value: config)])
4699
+ public func jazzy(config: String? = nil,
4700
+ moduleVersion: String? = nil)
4701
+ {
4702
+ let command = RubyCommand(commandID: "", methodName: "jazzy", className: nil, args: [RubyCommand.Argument(name: "config", value: config),
4703
+ RubyCommand.Argument(name: "module_version", value: moduleVersion)])
4687
4704
  _ = runner.executeCommand(command)
4688
4705
  }
4689
4706
 
4690
4707
  /**
4691
- Leave a comment on JIRA tickets
4708
+ Leave a comment on a Jira ticket
4692
4709
 
4693
- - parameters:
4694
- - url: URL for Jira instance
4695
- - contextPath: Appends to the url (ex: "/jira")
4696
- - username: Username for JIRA instance
4697
- - password: Password for Jira
4698
- - ticketId: Ticket ID for Jira, i.e. IOS-123
4699
- - commentText: Text to add to the ticket as a comment
4700
- */
4701
- public func jira(url: String,
4702
- contextPath: String = "",
4703
- username: String,
4704
- password: String,
4705
- ticketId: String,
4706
- commentText: String)
4710
+ - parameters:
4711
+ - url: URL for Jira instance
4712
+ - contextPath: Appends to the url (ex: "/jira")
4713
+ - username: Username for Jira instance
4714
+ - password: Password or API token for Jira
4715
+ - ticketId: Ticket ID for Jira, i.e. IOS-123
4716
+ - commentText: Text to add to the ticket as a comment
4717
+ - failOnError: Should an error adding the Jira comment cause a failure?
4718
+
4719
+ - returns: A hash containing all relevant information of the Jira comment
4720
+ Access Jira comment 'id', 'author', 'body', and more
4721
+ */
4722
+ @discardableResult public func jira(url: String,
4723
+ contextPath: String = "",
4724
+ username: String,
4725
+ password: String,
4726
+ ticketId: String,
4727
+ commentText: String,
4728
+ failOnError: Bool = true) -> [String: Any]
4707
4729
  {
4708
4730
  let command = RubyCommand(commandID: "", methodName: "jira", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
4709
4731
  RubyCommand.Argument(name: "context_path", value: contextPath),
4710
4732
  RubyCommand.Argument(name: "username", value: username),
4711
4733
  RubyCommand.Argument(name: "password", value: password),
4712
4734
  RubyCommand.Argument(name: "ticket_id", value: ticketId),
4713
- RubyCommand.Argument(name: "comment_text", value: commentText)])
4714
- _ = runner.executeCommand(command)
4735
+ RubyCommand.Argument(name: "comment_text", value: commentText),
4736
+ RubyCommand.Argument(name: "fail_on_error", value: failOnError)])
4737
+ return parseDictionary(fromString: runner.executeCommand(command))
4715
4738
  }
4716
4739
 
4717
4740
  /**
@@ -4772,7 +4795,7 @@ public func jira(url: String,
4772
4795
  apiKey: [String: Any]? = nil,
4773
4796
  live: Bool = false,
4774
4797
  appIdentifier: String,
4775
- username: String,
4798
+ username: String? = nil,
4776
4799
  version: String? = nil,
4777
4800
  platform: String = "ios",
4778
4801
  initialBuildNumber: Int = 1,
@@ -5030,6 +5053,153 @@ public func match(type: Any = matchfile.type,
5030
5053
  _ = runner.executeCommand(command)
5031
5054
  }
5032
5055
 
5056
+ /**
5057
+ Easily nuke your certificate and provisioning profiles (via _match_)
5058
+
5059
+ - parameters:
5060
+ - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
5061
+ - additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
5062
+ - readonly: Only fetch existing certificates and profiles, don't generate new ones
5063
+ - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
5064
+ - skipProvisioningProfiles: Skip syncing provisioning profiles
5065
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
5066
+ - apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
5067
+ - apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
5068
+ - username: Your Apple ID Username
5069
+ - teamId: The ID of your Developer Portal team if you're in multiple teams
5070
+ - teamName: The name of your Developer Portal team if you're in multiple teams
5071
+ - storageMode: Define where you want to store your certificates
5072
+ - gitUrl: URL to the git repo containing all the certificates
5073
+ - gitBranch: Specific git branch to use
5074
+ - gitFullName: git user full name to commit
5075
+ - gitUserEmail: git user email to commit
5076
+ - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
5077
+ - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
5078
+ - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
5079
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
5080
+ - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
5081
+ - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
5082
+ - googleCloudKeysFile: Path to the gc_keys.json file
5083
+ - googleCloudProjectId: ID of the Google Cloud project to use for authentication
5084
+ - s3Region: Name of the S3 region
5085
+ - s3AccessKey: S3 access key
5086
+ - s3SecretAccessKey: S3 secret access key
5087
+ - s3Bucket: Name of the S3 bucket
5088
+ - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
5089
+ - keychainName: Keychain the items should be imported to
5090
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
5091
+ - force: Renew the provisioning profiles every time you run match
5092
+ - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
5093
+ - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
5094
+ - skipDocs: Skip generation of a README.md for the created git repository
5095
+ - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
5096
+ - deriveCatalystAppIdentifier: Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping
5097
+ - templateName: 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")
5098
+ - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
5099
+ - failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first
5100
+ - skipCertificateMatching: Set to true if there is no access to Apple developer portal but there are certificates, keys and profiles provided. Only works with match import action
5101
+ - outputPath: Path in which to export certificates, key and profile
5102
+ - skipSetPartitionList: Skips setting the partition list (which can sometimes take a long time). Setting the partition list is usually needed to prevent Xcode from prompting to allow a cert to be used for signing
5103
+ - verbose: Print out extra information and all commands
5104
+
5105
+ Use the match_nuke action to revoke your certificates and provisioning profiles.
5106
+ Don't worry, apps that are already available in the App Store / TestFlight will still work.
5107
+ Builds distributed via Ad Hoc or Enterprise will be disabled after nuking your account, so you'll have to re-upload a new build.
5108
+ After clearing your account you'll start from a clean state, and you can run match to generate your certificates and profiles again.
5109
+ More information: https://docs.fastlane.tools/actions/match/
5110
+ */
5111
+ public func matchNuke(type: String = "development",
5112
+ additionalCertTypes: [String]? = nil,
5113
+ readonly: Bool = false,
5114
+ generateAppleCerts: Bool = true,
5115
+ skipProvisioningProfiles: Bool = false,
5116
+ appIdentifier: [String],
5117
+ apiKeyPath: String? = nil,
5118
+ apiKey: [String: Any]? = nil,
5119
+ username: String? = nil,
5120
+ teamId: String? = nil,
5121
+ teamName: String? = nil,
5122
+ storageMode: String = "git",
5123
+ gitUrl: String,
5124
+ gitBranch: String = "master",
5125
+ gitFullName: String? = nil,
5126
+ gitUserEmail: String? = nil,
5127
+ shallowClone: Bool = false,
5128
+ cloneBranchDirectly: Bool = false,
5129
+ gitBasicAuthorization: String? = nil,
5130
+ gitBearerAuthorization: String? = nil,
5131
+ gitPrivateKey: String? = nil,
5132
+ googleCloudBucketName: String? = nil,
5133
+ googleCloudKeysFile: String? = nil,
5134
+ googleCloudProjectId: String? = nil,
5135
+ s3Region: String? = nil,
5136
+ s3AccessKey: String? = nil,
5137
+ s3SecretAccessKey: String? = nil,
5138
+ s3Bucket: String? = nil,
5139
+ s3ObjectPrefix: String? = nil,
5140
+ keychainName: String = "login.keychain",
5141
+ keychainPassword: String? = nil,
5142
+ force: Bool = false,
5143
+ forceForNewDevices: Bool = false,
5144
+ skipConfirmation: Bool = false,
5145
+ skipDocs: Bool = false,
5146
+ platform: String = "ios",
5147
+ deriveCatalystAppIdentifier: Bool = false,
5148
+ templateName: String? = nil,
5149
+ profileName: String? = nil,
5150
+ failOnNameTaken: Bool = false,
5151
+ skipCertificateMatching: Bool = false,
5152
+ outputPath: String? = nil,
5153
+ skipSetPartitionList: Bool = false,
5154
+ verbose: Bool = false)
5155
+ {
5156
+ let command = RubyCommand(commandID: "", methodName: "match_nuke", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
5157
+ RubyCommand.Argument(name: "additional_cert_types", value: additionalCertTypes),
5158
+ RubyCommand.Argument(name: "readonly", value: readonly),
5159
+ RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
5160
+ RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
5161
+ RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
5162
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
5163
+ RubyCommand.Argument(name: "api_key", value: apiKey),
5164
+ RubyCommand.Argument(name: "username", value: username),
5165
+ RubyCommand.Argument(name: "team_id", value: teamId),
5166
+ RubyCommand.Argument(name: "team_name", value: teamName),
5167
+ RubyCommand.Argument(name: "storage_mode", value: storageMode),
5168
+ RubyCommand.Argument(name: "git_url", value: gitUrl),
5169
+ RubyCommand.Argument(name: "git_branch", value: gitBranch),
5170
+ RubyCommand.Argument(name: "git_full_name", value: gitFullName),
5171
+ RubyCommand.Argument(name: "git_user_email", value: gitUserEmail),
5172
+ RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
5173
+ RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
5174
+ RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
5175
+ RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
5176
+ RubyCommand.Argument(name: "git_private_key", value: gitPrivateKey),
5177
+ RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
5178
+ RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
5179
+ RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
5180
+ RubyCommand.Argument(name: "s3_region", value: s3Region),
5181
+ RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
5182
+ RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
5183
+ RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
5184
+ RubyCommand.Argument(name: "s3_object_prefix", value: s3ObjectPrefix),
5185
+ RubyCommand.Argument(name: "keychain_name", value: keychainName),
5186
+ RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
5187
+ RubyCommand.Argument(name: "force", value: force),
5188
+ RubyCommand.Argument(name: "force_for_new_devices", value: forceForNewDevices),
5189
+ RubyCommand.Argument(name: "skip_confirmation", value: skipConfirmation),
5190
+ RubyCommand.Argument(name: "skip_docs", value: skipDocs),
5191
+ RubyCommand.Argument(name: "platform", value: platform),
5192
+ RubyCommand.Argument(name: "derive_catalyst_app_identifier", value: deriveCatalystAppIdentifier),
5193
+ RubyCommand.Argument(name: "template_name", value: templateName),
5194
+ RubyCommand.Argument(name: "profile_name", value: profileName),
5195
+ RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
5196
+ RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
5197
+ RubyCommand.Argument(name: "output_path", value: outputPath),
5198
+ RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
5199
+ RubyCommand.Argument(name: "verbose", value: verbose)])
5200
+ _ = runner.executeCommand(command)
5201
+ }
5202
+
5033
5203
  /**
5034
5204
  Verifies the minimum fastlane version required
5035
5205
 
@@ -5138,14 +5308,16 @@ public func nexusUpload(file: String,
5138
5308
  - ascProvider: Provider short name for accounts associated with multiple providers
5139
5309
  - printLog: Whether to print notarization log file, listing issues on failure and warnings on success
5140
5310
  - verbose: Whether to log requests
5311
+ - apiKeyPath: Path to AppStore Connect API key
5141
5312
  */
5142
5313
  public func notarize(package: String,
5143
5314
  tryEarlyStapling: Bool = false,
5144
5315
  bundleId: String? = nil,
5145
- username: String,
5316
+ username: String? = nil,
5146
5317
  ascProvider: String? = nil,
5147
5318
  printLog: Bool = false,
5148
- verbose: Bool = false)
5319
+ verbose: Bool = false,
5320
+ apiKeyPath: String? = nil)
5149
5321
  {
5150
5322
  let command = RubyCommand(commandID: "", methodName: "notarize", className: nil, args: [RubyCommand.Argument(name: "package", value: package),
5151
5323
  RubyCommand.Argument(name: "try_early_stapling", value: tryEarlyStapling),
@@ -5153,7 +5325,8 @@ public func notarize(package: String,
5153
5325
  RubyCommand.Argument(name: "username", value: username),
5154
5326
  RubyCommand.Argument(name: "asc_provider", value: ascProvider),
5155
5327
  RubyCommand.Argument(name: "print_log", value: printLog),
5156
- RubyCommand.Argument(name: "verbose", value: verbose)])
5328
+ RubyCommand.Argument(name: "verbose", value: verbose),
5329
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath)])
5157
5330
  _ = runner.executeCommand(command)
5158
5331
  }
5159
5332
 
@@ -5430,7 +5603,7 @@ public func pem(development: Bool = false,
5430
5603
  - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
5431
5604
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
5432
5605
  - distributeExternal: Should the build be distributed to external testers?
5433
- - notifyExternalTesters: Should notify external testers?
5606
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
5434
5607
  - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
5435
5608
  - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
5436
5609
  - expirePreviousBuilds: Should expire previous builds?
@@ -5452,12 +5625,12 @@ public func pem(development: Bool = false,
5452
5625
  */
5453
5626
  public func pilot(apiKeyPath: String? = nil,
5454
5627
  apiKey: [String: Any]? = nil,
5455
- username: String,
5628
+ username: String? = nil,
5456
5629
  appIdentifier: String? = nil,
5457
5630
  appPlatform: String = "ios",
5458
5631
  appleId: String? = nil,
5459
5632
  ipa: String? = nil,
5460
- demoAccountRequired: Bool = false,
5633
+ demoAccountRequired: Bool? = nil,
5461
5634
  betaAppReviewInfo: [String: Any]? = nil,
5462
5635
  localizedAppInfo: [String: Any]? = nil,
5463
5636
  betaAppDescription: String? = nil,
@@ -5470,7 +5643,7 @@ public func pilot(apiKeyPath: String? = nil,
5470
5643
  distributeOnly: Bool = false,
5471
5644
  usesNonExemptEncryption: Bool = false,
5472
5645
  distributeExternal: Bool = false,
5473
- notifyExternalTesters: Bool = true,
5646
+ notifyExternalTesters: Any? = nil,
5474
5647
  appVersion: String? = nil,
5475
5648
  buildNumber: String? = nil,
5476
5649
  expirePreviousBuilds: Bool = false,
@@ -5717,17 +5890,17 @@ public func podioItem(clientId: String,
5717
5890
 
5718
5891
  More information: https://fastlane.tools/precheck
5719
5892
  */
5720
- public func precheck(apiKeyPath: Any? = precheckfile.apiKeyPath,
5721
- apiKey: [String: Any]? = precheckfile.apiKey,
5722
- appIdentifier: Any = precheckfile.appIdentifier,
5723
- username: Any = precheckfile.username,
5724
- teamId: Any? = precheckfile.teamId,
5725
- teamName: Any? = precheckfile.teamName,
5726
- platform: Any = precheckfile.platform,
5727
- defaultRuleLevel: Any = precheckfile.defaultRuleLevel,
5728
- includeInAppPurchases: Bool = precheckfile.includeInAppPurchases,
5729
- useLive: Bool = precheckfile.useLive,
5730
- freeStuffInIap: Any? = precheckfile.freeStuffInIap)
5893
+ @discardableResult public func precheck(apiKeyPath: Any? = precheckfile.apiKeyPath,
5894
+ apiKey: [String: Any]? = precheckfile.apiKey,
5895
+ appIdentifier: Any = precheckfile.appIdentifier,
5896
+ username: Any? = precheckfile.username,
5897
+ teamId: Any? = precheckfile.teamId,
5898
+ teamName: Any? = precheckfile.teamName,
5899
+ platform: Any = precheckfile.platform,
5900
+ defaultRuleLevel: Any = precheckfile.defaultRuleLevel,
5901
+ includeInAppPurchases: Bool = precheckfile.includeInAppPurchases,
5902
+ useLive: Bool = precheckfile.useLive,
5903
+ freeStuffInIap: Any? = precheckfile.freeStuffInIap) -> Bool
5731
5904
  {
5732
5905
  let command = RubyCommand(commandID: "", methodName: "precheck", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
5733
5906
  RubyCommand.Argument(name: "api_key", value: apiKey),
@@ -5740,7 +5913,7 @@ public func precheck(apiKeyPath: Any? = precheckfile.apiKeyPath,
5740
5913
  RubyCommand.Argument(name: "include_in_app_purchases", value: includeInAppPurchases),
5741
5914
  RubyCommand.Argument(name: "use_live", value: useLive),
5742
5915
  RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap)])
5743
- _ = runner.executeCommand(command)
5916
+ return parseBool(fromString: runner.executeCommand(command))
5744
5917
  }
5745
5918
 
5746
5919
  /**
@@ -6184,6 +6357,7 @@ public func rubyVersion() {
6184
6357
  - device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6')
6185
6358
  - devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air'])
6186
6359
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
6360
+ - ensureDevicesFound: Should fail if devices not found
6187
6361
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
6188
6362
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
6189
6363
  - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
@@ -6214,6 +6388,7 @@ public func rubyVersion() {
6214
6388
  - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf')
6215
6389
  - derivedDataPath: The directory where build products and other derived data will go
6216
6390
  - shouldZipBuildProducts: Should zip the derived data build products and place in output path?
6391
+ - outputXctestrun: Should provide additional copy of .xctestrun file (settings.xctestrun) and place in output path?
6217
6392
  - resultBundle: Should an Xcode result bundle be generated in the output directory
6218
6393
  - useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
6219
6394
  - concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
@@ -6245,6 +6420,7 @@ public func rubyVersion() {
6245
6420
  - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
6246
6421
  - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
6247
6422
  - useSystemScm: Lets xcodebuild use system's scm configuration
6423
+ - numberOfRetries: The number of times a test can fail before scan should stop retrying
6248
6424
  - failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer
6249
6425
 
6250
6426
  More information: https://docs.fastlane.tools/actions/scan/
@@ -6255,6 +6431,7 @@ public func runTests(workspace: String? = nil,
6255
6431
  device: String? = nil,
6256
6432
  devices: [String]? = nil,
6257
6433
  skipDetectDevices: Bool = false,
6434
+ ensureDevicesFound: Bool = false,
6258
6435
  forceQuitSimulator: Bool = false,
6259
6436
  resetSimulator: Bool = false,
6260
6437
  disableSlideToType: Bool = true,
@@ -6285,6 +6462,7 @@ public func runTests(workspace: String? = nil,
6285
6462
  xcprettyArgs: String? = nil,
6286
6463
  derivedDataPath: String? = nil,
6287
6464
  shouldZipBuildProducts: Bool = false,
6465
+ outputXctestrun: Bool = false,
6288
6466
  resultBundle: Bool = false,
6289
6467
  useClangReportName: Bool = false,
6290
6468
  concurrentWorkers: Int? = nil,
@@ -6316,6 +6494,7 @@ public func runTests(workspace: String? = nil,
6316
6494
  skipPackageDependenciesResolution: Bool = false,
6317
6495
  disablePackageAutomaticUpdates: Bool = false,
6318
6496
  useSystemScm: Bool = false,
6497
+ numberOfRetries: Int = 0,
6319
6498
  failBuild: Bool = true)
6320
6499
  {
6321
6500
  let command = RubyCommand(commandID: "", methodName: "run_tests", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -6324,6 +6503,7 @@ public func runTests(workspace: String? = nil,
6324
6503
  RubyCommand.Argument(name: "device", value: device),
6325
6504
  RubyCommand.Argument(name: "devices", value: devices),
6326
6505
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
6506
+ RubyCommand.Argument(name: "ensure_devices_found", value: ensureDevicesFound),
6327
6507
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
6328
6508
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
6329
6509
  RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
@@ -6354,6 +6534,7 @@ public func runTests(workspace: String? = nil,
6354
6534
  RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
6355
6535
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
6356
6536
  RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
6537
+ RubyCommand.Argument(name: "output_xctestrun", value: outputXctestrun),
6357
6538
  RubyCommand.Argument(name: "result_bundle", value: resultBundle),
6358
6539
  RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
6359
6540
  RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
@@ -6385,6 +6566,7 @@ public func runTests(workspace: String? = nil,
6385
6566
  RubyCommand.Argument(name: "skip_package_dependencies_resolution", value: skipPackageDependenciesResolution),
6386
6567
  RubyCommand.Argument(name: "disable_package_automatic_updates", value: disablePackageAutomaticUpdates),
6387
6568
  RubyCommand.Argument(name: "use_system_scm", value: useSystemScm),
6569
+ RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
6388
6570
  RubyCommand.Argument(name: "fail_build", value: failBuild)])
6389
6571
  _ = runner.executeCommand(command)
6390
6572
  }
@@ -6475,6 +6657,7 @@ public func say(text: Any,
6475
6657
  - device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6')
6476
6658
  - devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air'])
6477
6659
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
6660
+ - ensureDevicesFound: Should fail if devices not found
6478
6661
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
6479
6662
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
6480
6663
  - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
@@ -6505,6 +6688,7 @@ public func say(text: Any,
6505
6688
  - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf')
6506
6689
  - derivedDataPath: The directory where build products and other derived data will go
6507
6690
  - shouldZipBuildProducts: Should zip the derived data build products and place in output path?
6691
+ - outputXctestrun: Should provide additional copy of .xctestrun file (settings.xctestrun) and place in output path?
6508
6692
  - resultBundle: Should an Xcode result bundle be generated in the output directory
6509
6693
  - useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
6510
6694
  - concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
@@ -6536,6 +6720,7 @@ public func say(text: Any,
6536
6720
  - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
6537
6721
  - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
6538
6722
  - useSystemScm: Lets xcodebuild use system's scm configuration
6723
+ - numberOfRetries: The number of times a test can fail before scan should stop retrying
6539
6724
  - failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer
6540
6725
 
6541
6726
  More information: https://docs.fastlane.tools/actions/scan/
@@ -6546,6 +6731,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6546
6731
  device: Any? = scanfile.device,
6547
6732
  devices: [String]? = scanfile.devices,
6548
6733
  skipDetectDevices: Bool = scanfile.skipDetectDevices,
6734
+ ensureDevicesFound: Bool = scanfile.ensureDevicesFound,
6549
6735
  forceQuitSimulator: Bool = scanfile.forceQuitSimulator,
6550
6736
  resetSimulator: Bool = scanfile.resetSimulator,
6551
6737
  disableSlideToType: Bool = scanfile.disableSlideToType,
@@ -6576,6 +6762,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6576
6762
  xcprettyArgs: Any? = scanfile.xcprettyArgs,
6577
6763
  derivedDataPath: Any? = scanfile.derivedDataPath,
6578
6764
  shouldZipBuildProducts: Bool = scanfile.shouldZipBuildProducts,
6765
+ outputXctestrun: Bool = scanfile.outputXctestrun,
6579
6766
  resultBundle: Bool = scanfile.resultBundle,
6580
6767
  useClangReportName: Bool = scanfile.useClangReportName,
6581
6768
  concurrentWorkers: Int? = scanfile.concurrentWorkers,
@@ -6607,6 +6794,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6607
6794
  skipPackageDependenciesResolution: Bool = scanfile.skipPackageDependenciesResolution,
6608
6795
  disablePackageAutomaticUpdates: Bool = scanfile.disablePackageAutomaticUpdates,
6609
6796
  useSystemScm: Bool = scanfile.useSystemScm,
6797
+ numberOfRetries: Int = scanfile.numberOfRetries,
6610
6798
  failBuild: Bool = scanfile.failBuild)
6611
6799
  {
6612
6800
  let command = RubyCommand(commandID: "", methodName: "scan", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -6615,6 +6803,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6615
6803
  RubyCommand.Argument(name: "device", value: device),
6616
6804
  RubyCommand.Argument(name: "devices", value: devices),
6617
6805
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
6806
+ RubyCommand.Argument(name: "ensure_devices_found", value: ensureDevicesFound),
6618
6807
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
6619
6808
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
6620
6809
  RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
@@ -6645,6 +6834,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6645
6834
  RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
6646
6835
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
6647
6836
  RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
6837
+ RubyCommand.Argument(name: "output_xctestrun", value: outputXctestrun),
6648
6838
  RubyCommand.Argument(name: "result_bundle", value: resultBundle),
6649
6839
  RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
6650
6840
  RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
@@ -6676,6 +6866,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6676
6866
  RubyCommand.Argument(name: "skip_package_dependencies_resolution", value: skipPackageDependenciesResolution),
6677
6867
  RubyCommand.Argument(name: "disable_package_automatic_updates", value: disablePackageAutomaticUpdates),
6678
6868
  RubyCommand.Argument(name: "use_system_scm", value: useSystemScm),
6869
+ RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
6679
6870
  RubyCommand.Argument(name: "fail_build", value: failBuild)])
6680
6871
  _ = runner.executeCommand(command)
6681
6872
  }
@@ -7098,29 +7289,29 @@ public func setupTravis(force: Bool = false) {
7098
7289
 
7099
7290
  **Note**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning.
7100
7291
  */
7101
- public func sigh(adhoc: Bool = false,
7102
- developerId: Bool = false,
7103
- development: Bool = false,
7104
- skipInstall: Bool = false,
7105
- force: Bool = false,
7106
- appIdentifier: String,
7107
- apiKeyPath: String? = nil,
7108
- apiKey: [String: Any]? = nil,
7109
- username: String,
7110
- teamId: String? = nil,
7111
- teamName: String? = nil,
7112
- provisioningName: String? = nil,
7113
- ignoreProfilesWithDifferentName: Bool = false,
7114
- outputPath: String = ".",
7115
- certId: String? = nil,
7116
- certOwnerName: String? = nil,
7117
- filename: String? = nil,
7118
- skipFetchProfiles: Bool = false,
7119
- skipCertificateVerification: Bool = false,
7120
- platform: Any = "ios",
7121
- readonly: Bool = false,
7122
- templateName: String? = nil,
7123
- failOnNameTaken: Bool = false)
7292
+ @discardableResult public func sigh(adhoc: Bool = false,
7293
+ developerId: Bool = false,
7294
+ development: Bool = false,
7295
+ skipInstall: Bool = false,
7296
+ force: Bool = false,
7297
+ appIdentifier: String,
7298
+ apiKeyPath: String? = nil,
7299
+ apiKey: [String: Any]? = nil,
7300
+ username: String? = nil,
7301
+ teamId: String? = nil,
7302
+ teamName: String? = nil,
7303
+ provisioningName: String? = nil,
7304
+ ignoreProfilesWithDifferentName: Bool = false,
7305
+ outputPath: String = ".",
7306
+ certId: String? = nil,
7307
+ certOwnerName: String? = nil,
7308
+ filename: String? = nil,
7309
+ skipFetchProfiles: Bool = false,
7310
+ skipCertificateVerification: Bool = false,
7311
+ platform: Any = "ios",
7312
+ readonly: Bool = false,
7313
+ templateName: String? = nil,
7314
+ failOnNameTaken: Bool = false) -> String
7124
7315
  {
7125
7316
  let command = RubyCommand(commandID: "", methodName: "sigh", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc),
7126
7317
  RubyCommand.Argument(name: "developer_id", value: developerId),
@@ -7145,7 +7336,7 @@ public func sigh(adhoc: Bool = false,
7145
7336
  RubyCommand.Argument(name: "readonly", value: readonly),
7146
7337
  RubyCommand.Argument(name: "template_name", value: templateName),
7147
7338
  RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken)])
7148
- _ = runner.executeCommand(command)
7339
+ return runner.executeCommand(command)
7149
7340
  }
7150
7341
 
7151
7342
  /**
@@ -7564,6 +7755,57 @@ public func sonar(projectConfigurationPath: String? = nil,
7564
7755
  _ = runner.executeCommand(command)
7565
7756
  }
7566
7757
 
7758
+ /**
7759
+ Generate docs using SourceDocs
7760
+
7761
+ - parameters:
7762
+ - allModules: Generate documentation for all modules in a Swift package
7763
+ - spmModule: Generate documentation for Swift Package Manager module
7764
+ - moduleName: Generate documentation for a Swift module
7765
+ - linkBeginning: The text to begin links with
7766
+ - linkEnding: The text to end links with (default: .md)
7767
+ - outputFolder: Output directory to clean (default: Documentation/Reference)
7768
+ - minAcl: Access level to include in documentation [private, fileprivate, internal, public, open] (default: public)
7769
+ - moduleNamePath: Include the module name as part of the output folder path
7770
+ - clean: Delete output folder before generating documentation
7771
+ - collapsible: Put methods, properties and enum cases inside collapsible blocks
7772
+ - tableOfContents: Generate a table of contents with properties and methods for each type
7773
+ - reproducible: Generate documentation that is reproducible: only depends on the sources
7774
+ - scheme: Create documentation for specific scheme
7775
+ - sdkPlatform: Create documentation for specific sdk platform
7776
+ */
7777
+ public func sourcedocs(allModules: Bool? = nil,
7778
+ spmModule: String? = nil,
7779
+ moduleName: String? = nil,
7780
+ linkBeginning: String? = nil,
7781
+ linkEnding: String? = nil,
7782
+ outputFolder: String,
7783
+ minAcl: String? = nil,
7784
+ moduleNamePath: Bool? = nil,
7785
+ clean: Bool? = nil,
7786
+ collapsible: Bool? = nil,
7787
+ tableOfContents: Bool? = nil,
7788
+ reproducible: Bool? = nil,
7789
+ scheme: String? = nil,
7790
+ sdkPlatform: String? = nil)
7791
+ {
7792
+ let command = RubyCommand(commandID: "", methodName: "sourcedocs", className: nil, args: [RubyCommand.Argument(name: "all_modules", value: allModules),
7793
+ RubyCommand.Argument(name: "spm_module", value: spmModule),
7794
+ RubyCommand.Argument(name: "module_name", value: moduleName),
7795
+ RubyCommand.Argument(name: "link_beginning", value: linkBeginning),
7796
+ RubyCommand.Argument(name: "link_ending", value: linkEnding),
7797
+ RubyCommand.Argument(name: "output_folder", value: outputFolder),
7798
+ RubyCommand.Argument(name: "min_acl", value: minAcl),
7799
+ RubyCommand.Argument(name: "module_name_path", value: moduleNamePath),
7800
+ RubyCommand.Argument(name: "clean", value: clean),
7801
+ RubyCommand.Argument(name: "collapsible", value: collapsible),
7802
+ RubyCommand.Argument(name: "table_of_contents", value: tableOfContents),
7803
+ RubyCommand.Argument(name: "reproducible", value: reproducible),
7804
+ RubyCommand.Argument(name: "scheme", value: scheme),
7805
+ RubyCommand.Argument(name: "sdk_platform", value: sdkPlatform)])
7806
+ _ = runner.executeCommand(command)
7807
+ }
7808
+
7567
7809
  /**
7568
7810
  Find, print, and copy Spaceship logs
7569
7811
 
@@ -7576,18 +7818,18 @@ public func sonar(projectConfigurationPath: String? = nil,
7576
7818
 
7577
7819
  - returns: The array of Spaceship logs
7578
7820
  */
7579
- public func spaceshipLogs(latest: Bool = true,
7580
- printContents: Bool = false,
7581
- printPaths: Bool = false,
7582
- copyToPath: String? = nil,
7583
- copyToClipboard: Bool = false)
7821
+ @discardableResult public func spaceshipLogs(latest: Bool = true,
7822
+ printContents: Bool = false,
7823
+ printPaths: Bool = false,
7824
+ copyToPath: String? = nil,
7825
+ copyToClipboard: Bool = false) -> [String]
7584
7826
  {
7585
7827
  let command = RubyCommand(commandID: "", methodName: "spaceship_logs", className: nil, args: [RubyCommand.Argument(name: "latest", value: latest),
7586
7828
  RubyCommand.Argument(name: "print_contents", value: printContents),
7587
7829
  RubyCommand.Argument(name: "print_paths", value: printPaths),
7588
7830
  RubyCommand.Argument(name: "copy_to_path", value: copyToPath),
7589
7831
  RubyCommand.Argument(name: "copy_to_clipboard", value: copyToClipboard)])
7590
- _ = runner.executeCommand(command)
7832
+ return parseArray(fromString: runner.executeCommand(command))
7591
7833
  }
7592
7834
 
7593
7835
  /**
@@ -8107,7 +8349,7 @@ public func testfairy(apiKey: String,
8107
8349
  - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
8108
8350
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
8109
8351
  - distributeExternal: Should the build be distributed to external testers?
8110
- - notifyExternalTesters: Should notify external testers?
8352
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
8111
8353
  - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
8112
8354
  - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
8113
8355
  - expirePreviousBuilds: Should expire previous builds?
@@ -8129,12 +8371,12 @@ public func testfairy(apiKey: String,
8129
8371
  */
8130
8372
  public func testflight(apiKeyPath: String? = nil,
8131
8373
  apiKey: [String: Any]? = nil,
8132
- username: String,
8374
+ username: String? = nil,
8133
8375
  appIdentifier: String? = nil,
8134
8376
  appPlatform: String = "ios",
8135
8377
  appleId: String? = nil,
8136
8378
  ipa: String? = nil,
8137
- demoAccountRequired: Bool = false,
8379
+ demoAccountRequired: Bool? = nil,
8138
8380
  betaAppReviewInfo: [String: Any]? = nil,
8139
8381
  localizedAppInfo: [String: Any]? = nil,
8140
8382
  betaAppDescription: String? = nil,
@@ -8147,7 +8389,7 @@ public func testflight(apiKeyPath: String? = nil,
8147
8389
  distributeOnly: Bool = false,
8148
8390
  usesNonExemptEncryption: Bool = false,
8149
8391
  distributeExternal: Bool = false,
8150
- notifyExternalTesters: Bool = true,
8392
+ notifyExternalTesters: Any? = nil,
8151
8393
  appVersion: String? = nil,
8152
8394
  buildNumber: String? = nil,
8153
8395
  expirePreviousBuilds: Bool = false,
@@ -8791,7 +9033,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
8791
9033
  */
8792
9034
  public func uploadToAppStore(apiKeyPath: String? = nil,
8793
9035
  apiKey: [String: Any]? = nil,
8794
- username: String,
9036
+ username: String? = nil,
8795
9037
  appIdentifier: String? = nil,
8796
9038
  appVersion: String? = nil,
8797
9039
  ipa: String? = nil,
@@ -9100,7 +9342,7 @@ public func uploadToPlayStoreInternalAppSharing(packageName: String,
9100
9342
  - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
9101
9343
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
9102
9344
  - distributeExternal: Should the build be distributed to external testers?
9103
- - notifyExternalTesters: Should notify external testers?
9345
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
9104
9346
  - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
9105
9347
  - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
9106
9348
  - expirePreviousBuilds: Should expire previous builds?
@@ -9122,12 +9364,12 @@ public func uploadToPlayStoreInternalAppSharing(packageName: String,
9122
9364
  */
9123
9365
  public func uploadToTestflight(apiKeyPath: String? = nil,
9124
9366
  apiKey: [String: Any]? = nil,
9125
- username: String,
9367
+ username: String? = nil,
9126
9368
  appIdentifier: String? = nil,
9127
9369
  appPlatform: String = "ios",
9128
9370
  appleId: String? = nil,
9129
9371
  ipa: String? = nil,
9130
- demoAccountRequired: Bool = false,
9372
+ demoAccountRequired: Bool? = nil,
9131
9373
  betaAppReviewInfo: [String: Any]? = nil,
9132
9374
  localizedAppInfo: [String: Any]? = nil,
9133
9375
  betaAppDescription: String? = nil,
@@ -9140,7 +9382,7 @@ public func uploadToTestflight(apiKeyPath: String? = nil,
9140
9382
  distributeOnly: Bool = false,
9141
9383
  usesNonExemptEncryption: Bool = false,
9142
9384
  distributeExternal: Bool = false,
9143
- notifyExternalTesters: Bool = true,
9385
+ notifyExternalTesters: Any? = nil,
9144
9386
  appVersion: String? = nil,
9145
9387
  buildNumber: String? = nil,
9146
9388
  expirePreviousBuilds: Bool = false,
@@ -9483,7 +9725,7 @@ public func xcov(workspace: String? = nil,
9483
9725
  htmlReport: Bool = true,
9484
9726
  markdownReport: Bool = false,
9485
9727
  jsonReport: Bool = false,
9486
- minimumCoveragePercentage: Float = 0,
9728
+ minimumCoveragePercentage: Float = 0.0,
9487
9729
  slackUrl: String? = nil,
9488
9730
  slackChannel: String? = nil,
9489
9731
  skipSlack: Bool = false,
@@ -9645,4 +9887,4 @@ public let snapshotfile = Snapshotfile()
9645
9887
 
9646
9888
  // Please don't remove the lines below
9647
9889
  // They are used to detect outdated files
9648
- // FastlaneRunnerAPIVersion [0.9.111]
9890
+ // FastlaneRunnerAPIVersion [0.9.116]