fastlane 2.173.0 → 2.178.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -82
  3. data/cert/lib/cert/options.rb +2 -2
  4. data/cert/lib/cert/runner.rb +1 -1
  5. data/deliver/lib/deliver/app_screenshot.rb +6 -2
  6. data/deliver/lib/deliver/options.rb +2 -2
  7. data/deliver/lib/deliver/runner.rb +8 -4
  8. data/deliver/lib/deliver/upload_metadata.rb +3 -3
  9. data/deliver/lib/deliver/upload_screenshots.rb +12 -11
  10. data/fastlane/lib/fastlane/actions/adb.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +3 -3
  12. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +6 -2
  13. data/fastlane/lib/fastlane/actions/appaloosa.rb +7 -2
  14. data/fastlane/lib/fastlane/actions/appetize.rb +13 -1
  15. data/fastlane/lib/fastlane/actions/backup_file.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +10 -2
  17. data/fastlane/lib/fastlane/actions/carthage.rb +22 -0
  18. data/fastlane/lib/fastlane/actions/cocoapods.rb +15 -1
  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/capture_android_screenshots.md +1 -1
  22. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  23. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +8 -2
  24. data/fastlane/lib/fastlane/actions/download_dsyms.rb +5 -15
  25. data/fastlane/lib/fastlane/actions/get_github_release.rb +11 -1
  26. data/fastlane/lib/fastlane/actions/git_commit.rb +1 -1
  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/jazzy.rb +10 -1
  30. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
  31. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +1 -2
  32. data/fastlane/lib/fastlane/actions/register_device.rb +3 -3
  33. data/fastlane/lib/fastlane/actions/register_devices.rb +3 -3
  34. data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
  35. data/fastlane/lib/fastlane/actions/set_changelog.rb +3 -3
  36. data/fastlane/lib/fastlane/actions/swiftlint.rb +1 -1
  37. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +1 -1
  38. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +4 -5
  39. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +5 -1
  40. data/fastlane/lib/fastlane/documentation/actions_list.rb +2 -2
  41. data/fastlane/lib/fastlane/erb_template_helper.rb +7 -1
  42. data/fastlane/lib/fastlane/fast_file.rb +9 -5
  43. data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
  44. data/fastlane/lib/fastlane/helper/gem_helper.rb +2 -2
  45. data/fastlane/lib/fastlane/version.rb +1 -1
  46. data/fastlane/swift/Actions.swift +1 -1
  47. data/fastlane/swift/Appfile.swift +1 -1
  48. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  49. data/fastlane/swift/ControlCommand.swift +1 -1
  50. data/fastlane/swift/Deliverfile.swift +1 -1
  51. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  52. data/fastlane/swift/Fastlane.swift +71 -27
  53. data/fastlane/swift/Gymfile.swift +1 -1
  54. data/fastlane/swift/GymfileProtocol.swift +1 -1
  55. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  56. data/fastlane/swift/MainProcess.swift +1 -1
  57. data/fastlane/swift/Matchfile.swift +1 -1
  58. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  59. data/fastlane/swift/Plugins.swift +1 -1
  60. data/fastlane/swift/Precheckfile.swift +1 -1
  61. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  62. data/fastlane/swift/RubyCommand.swift +1 -1
  63. data/fastlane/swift/RubyCommandable.swift +1 -1
  64. data/fastlane/swift/Runner.swift +2 -2
  65. data/fastlane/swift/RunnerArgument.swift +1 -1
  66. data/fastlane/swift/Scanfile.swift +1 -1
  67. data/fastlane/swift/ScanfileProtocol.swift +9 -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 +1 -1
  73. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  74. data/fastlane/swift/SocketResponse.swift +1 -1
  75. data/fastlane/swift/formatting/Brewfile.lock.json +20 -14
  76. data/fastlane/swift/main.swift +1 -1
  77. data/fastlane_core/lib/fastlane_core.rb +1 -0
  78. data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -9
  79. data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +1 -1
  80. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +23 -0
  81. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +9 -5
  82. data/fastlane_core/lib/fastlane_core/helper.rb +26 -5
  83. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
  84. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +14 -8
  85. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
  86. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +3 -2
  87. data/fastlane_core/lib/fastlane_core/project.rb +23 -20
  88. data/{deliver/lib/deliver → fastlane_core/lib/fastlane_core}/queue_worker.rb +2 -2
  89. data/fastlane_core/lib/fastlane_core/ui/interface.rb +1 -1
  90. data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +2 -2
  91. data/gym/lib/gym/.runner.rb.swp +0 -0
  92. data/gym/lib/gym/generators/.package_command_generator_xcode7.rb.swp +0 -0
  93. data/match/lib/match/importer.rb +1 -1
  94. data/match/lib/match/migrate.rb +1 -1
  95. data/match/lib/match/nuke.rb +6 -1
  96. data/match/lib/match/options.rb +2 -2
  97. data/match/lib/match/runner.rb +1 -1
  98. data/match/lib/match/storage/google_cloud_storage.rb +1 -1
  99. data/match/lib/match/storage/s3_storage.rb +1 -1
  100. data/pilot/lib/pilot/build_manager.rb +25 -8
  101. data/pilot/lib/pilot/manager.rb +1 -1
  102. data/pilot/lib/pilot/options.rb +5 -5
  103. data/precheck/lib/precheck/options.rb +2 -2
  104. data/precheck/lib/precheck/runner.rb +2 -2
  105. data/scan/lib/scan/detect_values.rb +4 -1
  106. data/scan/lib/scan/options.rb +10 -0
  107. data/scan/lib/scan/runner.rb +27 -0
  108. data/screengrab/lib/screengrab/android_environment.rb +2 -2
  109. data/screengrab/lib/screengrab/runner.rb +1 -2
  110. data/sigh/lib/sigh/download_all.rb +1 -1
  111. data/sigh/lib/sigh/options.rb +2 -2
  112. data/sigh/lib/sigh/runner.rb +1 -1
  113. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
  114. data/spaceship/README.md +2 -2
  115. data/spaceship/lib/spaceship/client.rb +18 -17
  116. data/spaceship/lib/spaceship/connect_api/api_client.rb +40 -7
  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_set.rb +5 -0
  120. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +6 -0
  121. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
  122. data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
  123. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
  124. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +24 -0
  125. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +26 -4
  126. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +13 -0
  127. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +53 -0
  128. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +13 -0
  129. data/spaceship/lib/spaceship/connect_api/token.rb +2 -2
  130. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +15 -0
  131. data/spaceship/lib/spaceship/playground.rb +2 -2
  132. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
  133. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +42 -29
  134. metadata +38 -22
@@ -38,7 +38,7 @@ module Fastlane
38
38
 
39
39
  [
40
40
  FastlaneCore::ConfigItem.new(key: :api_key_path,
41
- env_name: "APPSTORE_BUILD_NUMBER_API_KEY_PATH",
41
+ env_names: ["APPSTORE_BUILD_NUMBER_API_KEY_PATH", "APP_STORE_CONNECT_API_KEY_PATH"],
42
42
  description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
43
43
  optional: true,
44
44
  conflicting_options: [:api_key],
@@ -46,7 +46,7 @@ module Fastlane
46
46
  UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
47
47
  end),
48
48
  FastlaneCore::ConfigItem.new(key: :api_key,
49
- env_name: "APPSTORE_BUILD_NUMBER_API_KEY",
49
+ env_names: ["APPSTORE_BUILD_NUMBER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
50
50
  description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
51
51
  type: Hash,
52
52
  optional: true,
@@ -33,10 +33,9 @@ module Fastlane
33
33
  command << '--set-upstream' if params[:set_upstream]
34
34
 
35
35
  # optionally add the --push_options components
36
- params[:push_options].each { |push_option| command << "--push-option=#{push_option}" }
36
+ params[:push_options].each { |push_option| command << "--push-option=#{push_option}" } if params[:push_options]
37
37
 
38
38
  # execute our command
39
- Actions.sh('pwd')
40
39
  return command.join(' ') if Helper.test?
41
40
 
42
41
  Actions.sh(command.join(' '))
@@ -39,7 +39,7 @@ module Fastlane
39
39
 
40
40
  def self.api_token(params)
41
41
  params[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
42
- api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
42
+ api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
43
43
  api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
44
44
  return api_token
45
45
  end
@@ -69,7 +69,7 @@ module Fastlane
69
69
  env_name: "FL_REGISTER_DEVICE_UDID",
70
70
  description: "Provide the UDID of the device to register as"),
71
71
  FastlaneCore::ConfigItem.new(key: :api_key_path,
72
- env_name: "FL_REGISTER_DEVICE_API_KEY_PATH",
72
+ env_names: ["FL_REGISTER_DEVICE_API_KEY_PATH", "APP_STORE_CONNECT_API_KEY_PATH"],
73
73
  description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
74
74
  optional: true,
75
75
  conflicting_options: [:api_key],
@@ -77,7 +77,7 @@ module Fastlane
77
77
  UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
78
78
  end),
79
79
  FastlaneCore::ConfigItem.new(key: :api_key,
80
- env_name: "FL_REGISTER_DEVICE_API_KEY",
80
+ env_names: ["FL_REGISTER_DEVICE_API_KEY", "APP_STORE_CONNECT_API_KEY"],
81
81
  description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
82
82
  type: Hash,
83
83
  optional: true,
@@ -85,7 +85,7 @@ module Fastlane
85
85
 
86
86
  def self.api_token(params)
87
87
  params[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
88
- api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
88
+ api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
89
89
  api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
90
90
  return api_token
91
91
  end
@@ -118,7 +118,7 @@ module Fastlane
118
118
  UI.user_error!("Could not find file '#{value}'") unless File.exist?(value)
119
119
  end),
120
120
  FastlaneCore::ConfigItem.new(key: :api_key_path,
121
- env_name: "FL_REGISTER_DEVICES_API_KEY_PATH",
121
+ env_names: ["FL_REGISTER_DEVICES_API_KEY_PATH", "APP_STORE_CONNECT_API_KEY_PATH"],
122
122
  description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
123
123
  optional: true,
124
124
  conflicting_options: [:api_key],
@@ -126,7 +126,7 @@ module Fastlane
126
126
  UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
127
127
  end),
128
128
  FastlaneCore::ConfigItem.new(key: :api_key,
129
- env_name: "FL_REGISTER_DEVICES_API_KEY",
129
+ env_names: ["FL_REGISTER_DEVICES_API_KEY", "APP_STORE_CONNECT_API_KEY"],
130
130
  description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
131
131
  type: Hash,
132
132
  optional: true,
@@ -5,7 +5,7 @@ module Fastlane
5
5
  path = params[:path]
6
6
  backup_path = "#{path}.back"
7
7
  UI.user_error!("Could not find file '#{backup_path}'") unless File.exist?(backup_path)
8
- FileUtils.cp(backup_path, path, { preserve: true })
8
+ FileUtils.cp(backup_path, path, preserve: true)
9
9
  FileUtils.rm(backup_path)
10
10
  UI.message("Successfully restored backup 📤")
11
11
  end
@@ -80,7 +80,7 @@ module Fastlane
80
80
 
81
81
  def self.api_token(params)
82
82
  params[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
83
- api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
83
+ api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
84
84
  api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
85
85
  return api_token
86
86
  end
@@ -111,7 +111,7 @@ module Fastlane
111
111
 
112
112
  [
113
113
  FastlaneCore::ConfigItem.new(key: :api_key_path,
114
- env_name: "FL_SET_CHANGELOG_API_KEY_PATH",
114
+ env_names: ["FL_SET_CHANGELOG_API_KEY_PATH", "APP_STORE_CONNECT_API_KEY_PATH"],
115
115
  description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
116
116
  optional: true,
117
117
  conflicting_options: [:api_key],
@@ -119,7 +119,7 @@ module Fastlane
119
119
  UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
120
120
  end),
121
121
  FastlaneCore::ConfigItem.new(key: :api_key,
122
- env_name: "FL_SET_CHANGELOG_API_KEY",
122
+ env_names: ["FL_SET_CHANGELOG_API_KEY", "APP_STORE_CONNECT_API_KEY"],
123
123
  description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
124
124
  type: Hash,
125
125
  optional: true,
@@ -145,7 +145,7 @@ module Fastlane
145
145
  optional: true,
146
146
  verify_block: proc do |value|
147
147
  available = ['xcode', 'json', 'csv', 'checkstyle', 'codeclimate', 'junit', 'html', 'emoji', 'sonarqube', 'markdown', 'github-actions-logging']
148
- UI.warning("Known 'reporter' values are '#{available.join("', '")}'. If you're receiving errors from swiftlint related to the reporter, make sure the reporter identifier you're using is correct and it's supported by your version of swiftlint.") unless available.include?(value)
148
+ UI.important("Known 'reporter' values are '#{available.join("', '")}'. If you're receiving errors from swiftlint related to the reporter, make sure the reporter identifier you're using is correct and it's supported by your version of swiftlint.") unless available.include?(value)
149
149
  end),
150
150
  FastlaneCore::ConfigItem.new(key: :quiet,
151
151
  env_name: "FL_SWIFTLINT_QUIET",
@@ -140,7 +140,7 @@ module Fastlane
140
140
  env_name: "FL_PROJECT_SIGNING_BUILD_CONFIGURATIONS",
141
141
  optional: true,
142
142
  type: Array,
143
- description: "Specify build_configurations you want to toggle the signing mech. (default to all targets)",
143
+ description: "Specify build_configurations you want to toggle the signing mech. (default to all configurations)",
144
144
  is_string: false),
145
145
  FastlaneCore::ConfigItem.new(key: :code_sign_identity,
146
146
  env_name: "FL_CODE_SIGN_IDENTITY",
@@ -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
@@ -135,7 +135,7 @@ module Fastlane
135
135
  if options
136
136
  puts(Terminal::Table.new(
137
137
  title: "#{name} Options".green,
138
- headings: ['Key', 'Description', 'Env Var', 'Default'],
138
+ headings: ['Key', 'Description', 'Env Var(s)', 'Default'],
139
139
  rows: FastlaneCore::PrintTable.transform_output(options)
140
140
  ))
141
141
  else
@@ -197,7 +197,7 @@ module Fastlane
197
197
  if options.kind_of?(Array)
198
198
  options.each do |current|
199
199
  if current.kind_of?(FastlaneCore::ConfigItem)
200
- rows << [current.key.to_s.yellow, current.deprecated ? current.description.red : current.description, current.env_name, current.help_default_value]
200
+ rows << [current.key.to_s.yellow, current.deprecated ? current.description.red : current.description, current.env_names.join(", "), current.help_default_value]
201
201
  elsif current.kind_of?(Array)
202
202
  # Legacy actions that don't use the new config manager
203
203
  UI.user_error!("Invalid number of elements in this row: #{current}. Must be 2 or 3") unless [2, 3].include?(current.count)
@@ -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
@@ -24,7 +24,7 @@ module Fastlane
24
24
  adb_path = File.join(android_home, "platform-tools", "adb")
25
25
  end
26
26
 
27
- self.adb_path = File.expand_path(adb_path)
27
+ self.adb_path = Helper.get_executable_path(File.expand_path(adb_path))
28
28
  self.adb_host = adb_host
29
29
  end
30
30
 
@@ -10,8 +10,8 @@ module Fastlane
10
10
  rescue Gem::LoadError
11
11
  UI.error("Could not find gem '#{gem_name}'")
12
12
  UI.error("")
13
- UI.error("If you installed fastlane using `sudo gem install fastlane` run")
14
- UI.command("sudo gem install #{gem_name}")
13
+ UI.error("If you installed fastlane using `gem install fastlane` run")
14
+ UI.command("gem install #{gem_name}")
15
15
  UI.error("to install the missing gem")
16
16
  UI.error("")
17
17
  UI.error("If you use a Gemfile add this to your Gemfile:")
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.173.0'.freeze
2
+ VERSION = '2.178.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
@@ -1,5 +1,5 @@
1
1
  // Actions.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This autogenerated file will be overwritten or replaced when running "fastlane generate_swift"
5
5
  //
@@ -1,5 +1,5 @@
1
1
  // Appfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  var appIdentifier: String { return "" } // The bundle identifier of your app
5
5
  var appleID: String { return "" } // Your Apple email address
@@ -1,5 +1,5 @@
1
1
  // ArgumentProcessor.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // ControlCommand.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -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.173.0
20
+ // Generated with fastlane 2.178.0
@@ -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.56]
259
+ // FastlaneRunnerAPIVersion [0.9.61]
@@ -8,7 +8,7 @@ import Foundation
8
8
  - parameters:
9
9
  - serial: Android serial of the device to use for this command
10
10
  - command: All commands you want to pass to the adb command, e.g. `kill-server`
11
- - adbPath: The path to your `adb` binary (can be left blank if the ANDROID_SDK_ROOT environment variable is set)
11
+ - adbPath: The path to your `adb` binary (can be left blank if the ANDROID_SDK_ROOT, ANDROID_HOME or ANDROID_SDK environment variable is set)
12
12
 
13
13
  - returns: The output of the adb command
14
14
 
@@ -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
  */
@@ -158,7 +158,7 @@ public func appStoreConnectApiKey(keyId: String,
158
158
  keyFilepath: String? = nil,
159
159
  keyContent: String? = nil,
160
160
  isKeyContentBase64: Bool = false,
161
- duration: Int? = nil,
161
+ duration: Int = 1200,
162
162
  inHouse: Bool? = nil)
163
163
  {
164
164
  let command = RubyCommand(commandID: "", methodName: "app_store_connect_api_key", className: nil, args: [RubyCommand.Argument(name: "key_id", value: keyId),
@@ -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
 
@@ -219,6 +222,7 @@ public func appaloosa(binary: String,
219
222
  - path: Path to zipped build on the local filesystem. Either this or `url` must be specified
220
223
  - publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten
221
224
  - note: Notes you wish to add to the uploaded app
225
+ - timeout: The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120
222
226
 
223
227
  If you provide a `public_key`, this will overwrite an existing application. If you want to have this build as a new app version, you shouldn't provide this value.
224
228
 
@@ -230,7 +234,8 @@ public func appetize(apiHost: String = "api.appetize.io",
230
234
  platform: String = "ios",
231
235
  path: String? = nil,
232
236
  publicKey: String? = nil,
233
- note: String? = nil)
237
+ note: String? = nil,
238
+ timeout: Int? = nil)
234
239
  {
235
240
  let command = RubyCommand(commandID: "", methodName: "appetize", className: nil, args: [RubyCommand.Argument(name: "api_host", value: apiHost),
236
241
  RubyCommand.Argument(name: "api_token", value: apiToken),
@@ -238,7 +243,8 @@ public func appetize(apiHost: String = "api.appetize.io",
238
243
  RubyCommand.Argument(name: "platform", value: platform),
239
244
  RubyCommand.Argument(name: "path", value: path),
240
245
  RubyCommand.Argument(name: "public_key", value: publicKey),
241
- RubyCommand.Argument(name: "note", value: note)])
246
+ RubyCommand.Argument(name: "note", value: note),
247
+ RubyCommand.Argument(name: "timeout", value: timeout)])
242
248
  _ = runner.executeCommand(command)
243
249
  }
244
250
 
@@ -874,6 +880,7 @@ public func badge(dark: Any? = nil,
874
880
  - apiToken: Appetize.io API Token
875
881
  - publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten
876
882
  - note: Notes you wish to add to the uploaded app
883
+ - timeout: The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120
877
884
 
878
885
  This should be called from danger.
879
886
  More information in the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md).
@@ -882,13 +889,15 @@ public func buildAndUploadToAppetize(xcodebuild: [String: Any] = [:],
882
889
  scheme: String? = nil,
883
890
  apiToken: String,
884
891
  publicKey: String? = nil,
885
- note: String? = nil)
892
+ note: String? = nil,
893
+ timeout: Int? = nil)
886
894
  {
887
895
  let command = RubyCommand(commandID: "", methodName: "build_and_upload_to_appetize", className: nil, args: [RubyCommand.Argument(name: "xcodebuild", value: xcodebuild),
888
896
  RubyCommand.Argument(name: "scheme", value: scheme),
889
897
  RubyCommand.Argument(name: "api_token", value: apiToken),
890
898
  RubyCommand.Argument(name: "public_key", value: publicKey),
891
- RubyCommand.Argument(name: "note", value: note)])
899
+ RubyCommand.Argument(name: "note", value: note),
900
+ RubyCommand.Argument(name: "timeout", value: timeout)])
892
901
  _ = runner.executeCommand(command)
893
902
  }
894
903
 
@@ -1850,6 +1859,8 @@ public func captureScreenshots(workspace: String? = nil,
1850
1859
  - projectDirectory: Define the directory containing the Carthage project
1851
1860
  - newResolver: Use new resolver when resolving dependency graph
1852
1861
  - logPath: Path to the xcode build output
1862
+ - useXcframeworks: Create xcframework bundles instead of one framework per platform (requires Xcode 12+)
1863
+ - archive: Archive built frameworks from the current project
1853
1864
  - executable: Path to the `carthage` executable on your machine
1854
1865
  */
1855
1866
  public func carthage(command: String = "bootstrap",
@@ -1872,6 +1883,8 @@ public func carthage(command: String = "bootstrap",
1872
1883
  projectDirectory: String? = nil,
1873
1884
  newResolver: Bool? = nil,
1874
1885
  logPath: String? = nil,
1886
+ useXcframeworks: Bool = false,
1887
+ archive: Bool = false,
1875
1888
  executable: String = "carthage")
1876
1889
  {
1877
1890
  let command = RubyCommand(commandID: "", methodName: "carthage", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
@@ -1894,6 +1907,8 @@ public func carthage(command: String = "bootstrap",
1894
1907
  RubyCommand.Argument(name: "project_directory", value: projectDirectory),
1895
1908
  RubyCommand.Argument(name: "new_resolver", value: newResolver),
1896
1909
  RubyCommand.Argument(name: "log_path", value: logPath),
1910
+ RubyCommand.Argument(name: "use_xcframeworks", value: useXcframeworks),
1911
+ RubyCommand.Argument(name: "archive", value: archive),
1897
1912
  RubyCommand.Argument(name: "executable", value: executable)])
1898
1913
  _ = runner.executeCommand(command)
1899
1914
  }
@@ -2192,6 +2207,7 @@ public func clubmate() {
2192
2207
  - errorCallback: A callback invoked with the command output if there is a non-zero exit status
2193
2208
  - tryRepoUpdateOnError: Retry with --repo-update if action was finished with error
2194
2209
  - deployment: Disallow any changes to the Podfile or the Podfile.lock during installation
2210
+ - allowRoot: Allows CocoaPods to run as root
2195
2211
  - clean: **DEPRECATED!** (Option renamed as clean_install) Remove SCM directories
2196
2212
  - integrate: **DEPRECATED!** (Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s)
2197
2213
 
@@ -2207,6 +2223,7 @@ public func cocoapods(repoUpdate: Bool = false,
2207
2223
  errorCallback: ((String) -> Void)? = nil,
2208
2224
  tryRepoUpdateOnError: Bool = false,
2209
2225
  deployment: Bool = false,
2226
+ allowRoot: Bool = false,
2210
2227
  clean: Bool = true,
2211
2228
  integrate: Bool = true)
2212
2229
  {
@@ -2220,6 +2237,7 @@ public func cocoapods(repoUpdate: Bool = false,
2220
2237
  RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure),
2221
2238
  RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
2222
2239
  RubyCommand.Argument(name: "deployment", value: deployment),
2240
+ RubyCommand.Argument(name: "allow_root", value: allowRoot),
2223
2241
  RubyCommand.Argument(name: "clean", value: clean),
2224
2242
  RubyCommand.Argument(name: "integrate", value: integrate)])
2225
2243
  _ = runner.executeCommand(command)
@@ -2232,6 +2250,7 @@ public func cocoapods(repoUpdate: Bool = false,
2232
2250
  - repositoryName: The path to your repo, e.g. 'fastlane/fastlane'
2233
2251
  - serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com')
2234
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
2235
2254
  - branch: The branch that the file should be committed on (default: master)
2236
2255
  - path: The relative path to your file from project root e.g. assets/my_app.xcarchive
2237
2256
  - message: The commit message. Defaults to the file name
@@ -2246,7 +2265,8 @@ public func cocoapods(repoUpdate: Bool = false,
2246
2265
  */
2247
2266
  @discardableResult public func commitGithubFile(repositoryName: String,
2248
2267
  serverUrl: String = "https://api.github.com",
2249
- apiToken: String,
2268
+ apiToken: String? = nil,
2269
+ apiBearer: String? = nil,
2250
2270
  branch: String = "master",
2251
2271
  path: String,
2252
2272
  message: String? = nil,
@@ -2255,6 +2275,7 @@ public func cocoapods(repoUpdate: Bool = false,
2255
2275
  let command = RubyCommand(commandID: "", methodName: "commit_github_file", className: nil, args: [RubyCommand.Argument(name: "repository_name", value: repositoryName),
2256
2276
  RubyCommand.Argument(name: "server_url", value: serverUrl),
2257
2277
  RubyCommand.Argument(name: "api_token", value: apiToken),
2278
+ RubyCommand.Argument(name: "api_bearer", value: apiBearer),
2258
2279
  RubyCommand.Argument(name: "branch", value: branch),
2259
2280
  RubyCommand.Argument(name: "path", value: path),
2260
2281
  RubyCommand.Argument(name: "message", value: message),
@@ -3519,6 +3540,7 @@ public func getCertificates(development: Bool = false,
3519
3540
  - serverUrl: The server url. e.g. 'https://your.github.server/api/v3' (Default: 'https://api.github.com')
3520
3541
  - version: The version tag of the release to check
3521
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
3522
3544
 
3523
3545
  This will return all information about a release. For example:|
3524
3546
  |
@@ -3566,12 +3588,14 @@ public func getCertificates(development: Bool = false,
3566
3588
  public func getGithubRelease(url: String,
3567
3589
  serverUrl: String = "https://api.github.com",
3568
3590
  version: String,
3569
- apiToken: String? = nil)
3591
+ apiToken: String? = nil,
3592
+ apiBearer: String? = nil)
3570
3593
  {
3571
3594
  let command = RubyCommand(commandID: "", methodName: "get_github_release", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
3572
3595
  RubyCommand.Argument(name: "server_url", value: serverUrl),
3573
3596
  RubyCommand.Argument(name: "version", value: version),
3574
- RubyCommand.Argument(name: "api_token", value: apiToken)])
3597
+ RubyCommand.Argument(name: "api_token", value: apiToken),
3598
+ RubyCommand.Argument(name: "api_bearer", value: apiBearer)])
3575
3599
  _ = runner.executeCommand(command)
3576
3600
  }
3577
3601
 
@@ -3830,7 +3854,7 @@ public func gitAdd(path: Any? = nil,
3830
3854
  Directly commit the given file with the given message
3831
3855
 
3832
3856
  - parameters:
3833
- - path: The file you want to commit
3857
+ - path: The file(s) or directory(ies) you want to commit. You can pass an array of multiple file-paths or fileglobs "*.txt" to commit all matching files. The files already staged but not specified and untracked files won't be committed
3834
3858
  - message: The commit message that should be used
3835
3859
  - skipGitHooks: Set to true to pass --no-verify to git
3836
3860
  - allowNothingToCommit: Set to true to allow commit without any git changes in the files you want to commit
@@ -4493,14 +4517,17 @@ public func importCertificate(certificatePath: String,
4493
4517
 
4494
4518
  - parameters:
4495
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
4496
4521
  - xcodeproj: optional, you must specify the path to your main Xcode project if it is not in the project root directory
4497
4522
 
4498
4523
  - returns: The new build number
4499
4524
  */
4500
4525
  @discardableResult public func incrementBuildNumber(buildNumber: Any? = nil,
4526
+ skipInfoPlist: Bool = false,
4501
4527
  xcodeproj: String? = nil) -> String
4502
4528
  {
4503
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),
4504
4531
  RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)])
4505
4532
  return runner.executeCommand(command)
4506
4533
  }
@@ -4665,10 +4692,15 @@ public func ipa(workspace: String? = nil,
4665
4692
  /**
4666
4693
  Generate docs using Jazzy
4667
4694
 
4668
- - 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
4669
4698
  */
4670
- public func jazzy(config: String? = nil) {
4671
- 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)])
4672
4704
  _ = runner.executeCommand(command)
4673
4705
  }
4674
4706
 
@@ -5415,7 +5447,7 @@ public func pem(development: Bool = false,
5415
5447
  - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
5416
5448
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
5417
5449
  - distributeExternal: Should the build be distributed to external testers?
5418
- - notifyExternalTesters: Should notify external testers?
5450
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
5419
5451
  - 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
5420
5452
  - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
5421
5453
  - expirePreviousBuilds: Should expire previous builds?
@@ -5442,7 +5474,7 @@ public func pilot(apiKeyPath: String? = nil,
5442
5474
  appPlatform: String = "ios",
5443
5475
  appleId: String? = nil,
5444
5476
  ipa: String? = nil,
5445
- demoAccountRequired: Bool = false,
5477
+ demoAccountRequired: Bool? = nil,
5446
5478
  betaAppReviewInfo: [String: Any]? = nil,
5447
5479
  localizedAppInfo: [String: Any]? = nil,
5448
5480
  betaAppDescription: String? = nil,
@@ -5455,7 +5487,7 @@ public func pilot(apiKeyPath: String? = nil,
5455
5487
  distributeOnly: Bool = false,
5456
5488
  usesNonExemptEncryption: Bool = false,
5457
5489
  distributeExternal: Bool = false,
5458
- notifyExternalTesters: Bool = true,
5490
+ notifyExternalTesters: Any? = nil,
5459
5491
  appVersion: String? = nil,
5460
5492
  buildNumber: String? = nil,
5461
5493
  expirePreviousBuilds: Bool = false,
@@ -6169,6 +6201,7 @@ public func rubyVersion() {
6169
6201
  - device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6')
6170
6202
  - devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air'])
6171
6203
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
6204
+ - ensureDevicesFound: Should fail if devices not found
6172
6205
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
6173
6206
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
6174
6207
  - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
@@ -6199,6 +6232,7 @@ public func rubyVersion() {
6199
6232
  - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf')
6200
6233
  - derivedDataPath: The directory where build products and other derived data will go
6201
6234
  - shouldZipBuildProducts: Should zip the derived data build products and place in output path?
6235
+ - outputXctestrun: Should provide additional copy of .xctestrun file (settings.xctestrun) and place in output path?
6202
6236
  - resultBundle: Should an Xcode result bundle be generated in the output directory
6203
6237
  - useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
6204
6238
  - concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
@@ -6240,6 +6274,7 @@ public func runTests(workspace: String? = nil,
6240
6274
  device: String? = nil,
6241
6275
  devices: [String]? = nil,
6242
6276
  skipDetectDevices: Bool = false,
6277
+ ensureDevicesFound: Bool = false,
6243
6278
  forceQuitSimulator: Bool = false,
6244
6279
  resetSimulator: Bool = false,
6245
6280
  disableSlideToType: Bool = true,
@@ -6270,6 +6305,7 @@ public func runTests(workspace: String? = nil,
6270
6305
  xcprettyArgs: String? = nil,
6271
6306
  derivedDataPath: String? = nil,
6272
6307
  shouldZipBuildProducts: Bool = false,
6308
+ outputXctestrun: Bool = false,
6273
6309
  resultBundle: Bool = false,
6274
6310
  useClangReportName: Bool = false,
6275
6311
  concurrentWorkers: Int? = nil,
@@ -6309,6 +6345,7 @@ public func runTests(workspace: String? = nil,
6309
6345
  RubyCommand.Argument(name: "device", value: device),
6310
6346
  RubyCommand.Argument(name: "devices", value: devices),
6311
6347
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
6348
+ RubyCommand.Argument(name: "ensure_devices_found", value: ensureDevicesFound),
6312
6349
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
6313
6350
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
6314
6351
  RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
@@ -6339,6 +6376,7 @@ public func runTests(workspace: String? = nil,
6339
6376
  RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
6340
6377
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
6341
6378
  RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
6379
+ RubyCommand.Argument(name: "output_xctestrun", value: outputXctestrun),
6342
6380
  RubyCommand.Argument(name: "result_bundle", value: resultBundle),
6343
6381
  RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
6344
6382
  RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
@@ -6460,6 +6498,7 @@ public func say(text: Any,
6460
6498
  - device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6')
6461
6499
  - devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air'])
6462
6500
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
6501
+ - ensureDevicesFound: Should fail if devices not found
6463
6502
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
6464
6503
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
6465
6504
  - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
@@ -6490,6 +6529,7 @@ public func say(text: Any,
6490
6529
  - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf')
6491
6530
  - derivedDataPath: The directory where build products and other derived data will go
6492
6531
  - shouldZipBuildProducts: Should zip the derived data build products and place in output path?
6532
+ - outputXctestrun: Should provide additional copy of .xctestrun file (settings.xctestrun) and place in output path?
6493
6533
  - resultBundle: Should an Xcode result bundle be generated in the output directory
6494
6534
  - useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
6495
6535
  - concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
@@ -6531,6 +6571,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6531
6571
  device: Any? = scanfile.device,
6532
6572
  devices: [String]? = scanfile.devices,
6533
6573
  skipDetectDevices: Bool = scanfile.skipDetectDevices,
6574
+ ensureDevicesFound: Bool = scanfile.ensureDevicesFound,
6534
6575
  forceQuitSimulator: Bool = scanfile.forceQuitSimulator,
6535
6576
  resetSimulator: Bool = scanfile.resetSimulator,
6536
6577
  disableSlideToType: Bool = scanfile.disableSlideToType,
@@ -6561,6 +6602,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6561
6602
  xcprettyArgs: Any? = scanfile.xcprettyArgs,
6562
6603
  derivedDataPath: Any? = scanfile.derivedDataPath,
6563
6604
  shouldZipBuildProducts: Bool = scanfile.shouldZipBuildProducts,
6605
+ outputXctestrun: Bool = scanfile.outputXctestrun,
6564
6606
  resultBundle: Bool = scanfile.resultBundle,
6565
6607
  useClangReportName: Bool = scanfile.useClangReportName,
6566
6608
  concurrentWorkers: Int? = scanfile.concurrentWorkers,
@@ -6600,6 +6642,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6600
6642
  RubyCommand.Argument(name: "device", value: device),
6601
6643
  RubyCommand.Argument(name: "devices", value: devices),
6602
6644
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
6645
+ RubyCommand.Argument(name: "ensure_devices_found", value: ensureDevicesFound),
6603
6646
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
6604
6647
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
6605
6648
  RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
@@ -6630,6 +6673,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6630
6673
  RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
6631
6674
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
6632
6675
  RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
6676
+ RubyCommand.Argument(name: "output_xctestrun", value: outputXctestrun),
6633
6677
  RubyCommand.Argument(name: "result_bundle", value: resultBundle),
6634
6678
  RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
6635
6679
  RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
@@ -8092,7 +8136,7 @@ public func testfairy(apiKey: String,
8092
8136
  - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
8093
8137
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
8094
8138
  - distributeExternal: Should the build be distributed to external testers?
8095
- - notifyExternalTesters: Should notify external testers?
8139
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
8096
8140
  - 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
8097
8141
  - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
8098
8142
  - expirePreviousBuilds: Should expire previous builds?
@@ -8119,7 +8163,7 @@ public func testflight(apiKeyPath: String? = nil,
8119
8163
  appPlatform: String = "ios",
8120
8164
  appleId: String? = nil,
8121
8165
  ipa: String? = nil,
8122
- demoAccountRequired: Bool = false,
8166
+ demoAccountRequired: Bool? = nil,
8123
8167
  betaAppReviewInfo: [String: Any]? = nil,
8124
8168
  localizedAppInfo: [String: Any]? = nil,
8125
8169
  betaAppDescription: String? = nil,
@@ -8132,7 +8176,7 @@ public func testflight(apiKeyPath: String? = nil,
8132
8176
  distributeOnly: Bool = false,
8133
8177
  usesNonExemptEncryption: Bool = false,
8134
8178
  distributeExternal: Bool = false,
8135
- notifyExternalTesters: Bool = true,
8179
+ notifyExternalTesters: Any? = nil,
8136
8180
  appVersion: String? = nil,
8137
8181
  buildNumber: String? = nil,
8138
8182
  expirePreviousBuilds: Bool = false,
@@ -8323,7 +8367,7 @@ public func updateAppIdentifier(xcodeproj: String,
8323
8367
  - useAutomaticSigning: Defines if project should use automatic signing
8324
8368
  - teamId: Team ID, is used when upgrading project
8325
8369
  - targets: Specify targets you want to toggle the signing mech. (default to all targets)
8326
- - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all targets)
8370
+ - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all configurations)
8327
8371
  - codeSignIdentity: Code signing identity type (iPhone Developer, iPhone Distribution)
8328
8372
  - profileName: Provisioning profile name to use for code signing
8329
8373
  - profileUuid: Provisioning profile UUID to use for code signing
@@ -9085,7 +9129,7 @@ public func uploadToPlayStoreInternalAppSharing(packageName: String,
9085
9129
  - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
9086
9130
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
9087
9131
  - distributeExternal: Should the build be distributed to external testers?
9088
- - notifyExternalTesters: Should notify external testers?
9132
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
9089
9133
  - 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
9090
9134
  - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
9091
9135
  - expirePreviousBuilds: Should expire previous builds?
@@ -9112,7 +9156,7 @@ public func uploadToTestflight(apiKeyPath: String? = nil,
9112
9156
  appPlatform: String = "ios",
9113
9157
  appleId: String? = nil,
9114
9158
  ipa: String? = nil,
9115
- demoAccountRequired: Bool = false,
9159
+ demoAccountRequired: Bool? = nil,
9116
9160
  betaAppReviewInfo: [String: Any]? = nil,
9117
9161
  localizedAppInfo: [String: Any]? = nil,
9118
9162
  betaAppDescription: String? = nil,
@@ -9125,7 +9169,7 @@ public func uploadToTestflight(apiKeyPath: String? = nil,
9125
9169
  distributeOnly: Bool = false,
9126
9170
  usesNonExemptEncryption: Bool = false,
9127
9171
  distributeExternal: Bool = false,
9128
- notifyExternalTesters: Bool = true,
9172
+ notifyExternalTesters: Any? = nil,
9129
9173
  appVersion: String? = nil,
9130
9174
  buildNumber: String? = nil,
9131
9175
  expirePreviousBuilds: Bool = false,
@@ -9630,4 +9674,4 @@ public let snapshotfile = Snapshotfile()
9630
9674
 
9631
9675
  // Please don't remove the lines below
9632
9676
  // They are used to detect outdated files
9633
- // FastlaneRunnerAPIVersion [0.9.109]
9677
+ // FastlaneRunnerAPIVersion [0.9.114]