fastlane 2.162.0 → 2.167.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +78 -78
  3. data/cert/lib/cert/runner.rb +2 -2
  4. data/deliver/lib/deliver/app_screenshot.rb +6 -2
  5. data/deliver/lib/deliver/module.rb +2 -0
  6. data/deliver/lib/deliver/options.rb +3 -3
  7. data/deliver/lib/deliver/queue_worker.rb +14 -29
  8. data/deliver/lib/deliver/upload_metadata.rb +19 -5
  9. data/deliver/lib/deliver/upload_screenshots.rb +3 -5
  10. data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
  11. data/fastlane/lib/fastlane/actions/actions_helper.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/add_git_tag.rb +9 -2
  13. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +39 -3
  14. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +9 -0
  15. data/fastlane/lib/fastlane/actions/appledoc.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +1 -0
  17. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +5 -1
  18. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +9 -0
  19. data/fastlane/lib/fastlane/actions/get_certificates.rb +1 -0
  20. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -0
  21. data/fastlane/lib/fastlane/actions/import_from_git.rb +9 -1
  22. data/fastlane/lib/fastlane/actions/is_ci.rb +1 -1
  23. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +15 -0
  24. data/fastlane/lib/fastlane/actions/register_device.rb +46 -5
  25. data/fastlane/lib/fastlane/actions/register_devices.rb +50 -16
  26. data/fastlane/lib/fastlane/actions/set_changelog.rb +31 -3
  27. data/fastlane/lib/fastlane/actions/spm.rb +6 -0
  28. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -0
  29. data/fastlane/lib/fastlane/actions/update_fastlane.rb +29 -8
  30. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +3 -2
  31. data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
  32. data/fastlane/lib/fastlane/fast_file.rb +74 -23
  33. data/fastlane/lib/fastlane/features.rb +1 -1
  34. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
  35. data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
  36. data/fastlane/lib/fastlane/version.rb +1 -1
  37. data/fastlane/swift/Deliverfile.swift +1 -1
  38. data/fastlane/swift/DeliverfileProtocol.swift +4 -4
  39. data/fastlane/swift/Fastfile.swift +1 -1
  40. data/fastlane/swift/Fastlane.swift +73 -22
  41. data/fastlane/swift/Gymfile.swift +1 -1
  42. data/fastlane/swift/GymfileProtocol.swift +1 -1
  43. data/fastlane/swift/LaneFileProtocol.swift +15 -19
  44. data/fastlane/swift/MainProcess.swift +3 -1
  45. data/fastlane/swift/Matchfile.swift +1 -1
  46. data/fastlane/swift/MatchfileProtocol.swift +6 -2
  47. data/fastlane/swift/Precheckfile.swift +1 -1
  48. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  49. data/fastlane/swift/Runner.swift +1 -1
  50. data/fastlane/swift/Scanfile.swift +1 -1
  51. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  52. data/fastlane/swift/Screengrabfile.swift +1 -1
  53. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  54. data/fastlane/swift/Snapshotfile.swift +1 -1
  55. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  56. data/fastlane/swift/SocketClient.swift +1 -1
  57. data/fastlane/swift/main.swift +1 -1
  58. data/fastlane_core/lib/fastlane_core/cert_checker.rb +12 -7
  59. data/fastlane_core/lib/fastlane_core/device_manager.rb +8 -4
  60. data/fastlane_core/lib/fastlane_core/helper.rb +10 -2
  61. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -3
  62. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
  63. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +3 -1
  64. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +8 -0
  65. data/gym/lib/gym/code_signing_mapping.rb +1 -1
  66. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
  67. data/match/lib/match/importer.rb +33 -21
  68. data/match/lib/match/nuke.rb +9 -5
  69. data/match/lib/match/options.rb +7 -1
  70. data/pilot/lib/pilot/build_manager.rb +9 -3
  71. data/scan/lib/scan/detect_values.rb +8 -9
  72. data/scan/lib/scan/module.rb +4 -0
  73. data/scan/lib/scan/options.rb +9 -0
  74. data/scan/lib/scan/runner.rb +2 -1
  75. data/sigh/lib/assets/resign.sh +1 -1
  76. data/sigh/lib/sigh/download_all.rb +16 -4
  77. data/sigh/lib/sigh/runner.rb +4 -4
  78. data/snapshot/lib/assets/SnapshotHelper.swift +4 -0
  79. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
  80. data/snapshot/lib/snapshot/test_command_generator.rb +1 -1
  81. data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
  82. data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +1 -1
  83. data/spaceship/lib/spaceship/client.rb +7 -3
  84. data/spaceship/lib/spaceship/connect_api.rb +26 -0
  85. data/spaceship/lib/spaceship/connect_api/api_client.rb +9 -0
  86. data/spaceship/lib/spaceship/connect_api/client.rb +7 -4
  87. data/spaceship/lib/spaceship/connect_api/models/app.rb +51 -0
  88. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
  89. data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
  90. data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
  91. data/spaceship/lib/spaceship/connect_api/models/device.rb +5 -0
  92. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +17 -0
  93. data/spaceship/lib/spaceship/connect_api/spaceship.rb +7 -4
  94. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
  95. data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
  96. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +71 -0
  97. data/supply/lib/supply.rb +1 -1
  98. data/supply/lib/supply/uploader.rb +1 -1
  99. metadata +21 -18
@@ -6,9 +6,14 @@ module Fastlane
6
6
 
7
7
  # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
8
8
  # Prompts select team if multiple teams and none specified
9
- UI.message("Login to App Store Connect (#{params[:username]})")
10
- Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true)
11
- UI.message("Login successful")
9
+ if (token = self.api_token(params))
10
+ UI.message("Using App Store Connect API token...")
11
+ Spaceship::ConnectAPI.token = token
12
+ else
13
+ UI.message("Login to App Store Connect (#{params[:username]})")
14
+ Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true, tunes_team_id: params[:team_id], team_name: params[:team_name])
15
+ UI.message("Login successful")
16
+ end
12
17
 
13
18
  app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
14
19
  UI.user_error!("Couldn't find app with identifier #{params[:app_identifier]}") if app.nil?
@@ -73,6 +78,13 @@ module Fastlane
73
78
  UI.success("👼 Successfully pushed the new changelog to for #{edit_version.version_string}")
74
79
  end
75
80
 
81
+ def self.api_token(params)
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]
84
+ api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
85
+ return api_token
86
+ end
87
+
76
88
  def self.default_changelog_path
77
89
  File.join(FastlaneCore::FastlaneFolder.path.to_s, 'changelog.txt')
78
90
  end
@@ -98,6 +110,21 @@ module Fastlane
98
110
  user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
99
111
 
100
112
  [
113
+ FastlaneCore::ConfigItem.new(key: :api_key_path,
114
+ env_name: "FL_SET_CHANGELOG_API_KEY_PATH",
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
+ optional: true,
117
+ conflicting_options: [:api_key],
118
+ verify_block: proc do |value|
119
+ UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
120
+ end),
121
+ FastlaneCore::ConfigItem.new(key: :api_key,
122
+ env_name: "FL_SET_CHANGELOG_API_KEY",
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
+ type: Hash,
125
+ optional: true,
126
+ sensitive: true,
127
+ conflicting_options: [:api_key_path]),
101
128
  FastlaneCore::ConfigItem.new(key: :app_identifier,
102
129
  short_option: "-a",
103
130
  env_name: "FASTLANE_APP_IDENTIFIER",
@@ -109,6 +136,7 @@ module Fastlane
109
136
  short_option: "-u",
110
137
  env_name: "FASTLANE_USERNAME",
111
138
  description: "Your Apple ID Username",
139
+ optional: true,
112
140
  default_value: user,
113
141
  default_value_dynamic: true),
114
142
  FastlaneCore::ConfigItem.new(key: :version,
@@ -11,6 +11,7 @@ module Fastlane
11
11
  cmd << "--disable-sandbox" if params[:disable_sandbox]
12
12
  cmd << "--verbose" if params[:verbose]
13
13
  cmd << params[:command] if package_commands.include?(params[:command])
14
+ cmd << "--enable-code-coverage" if params[:enable_code_coverage] && params[:command] == 'generate-xcodeproj'
14
15
  if params[:xcconfig]
15
16
  cmd << "--xcconfig-overrides #{params[:xcconfig]}"
16
17
  end
@@ -44,6 +45,11 @@ module Fastlane
44
45
  verify_block: proc do |value|
45
46
  UI.user_error!("Please pass a valid command. Use one of the following: #{available_commands.join(', ')}") unless available_commands.include?(value)
46
47
  end),
48
+ FastlaneCore::ConfigItem.new(key: :enable_code_coverage,
49
+ env_name: "FL_SPM_ENABLE_CODE_COVERAGE",
50
+ description: "Enables code coverage for the generated Xcode project when using the generate-xcodeproj command",
51
+ is_string: false,
52
+ optional: true),
47
53
  FastlaneCore::ConfigItem.new(key: :build_path,
48
54
  env_name: "FL_SPM_BUILD_PATH",
49
55
  description: "Specify build/cache directory [default: ./.build]",
@@ -10,6 +10,7 @@ module Fastlane
10
10
  require 'match'
11
11
 
12
12
  params.load_configuration_file("Matchfile")
13
+ params[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
13
14
  Match::Runner.new.run(params)
14
15
 
15
16
  define_profile_type(params)
@@ -45,25 +45,36 @@ module Fastlane
45
45
  end
46
46
 
47
47
  # suppress updater output - very noisy
48
- Gem::DefaultUserInteraction.ui = Gem::SilentUI.new
48
+ Gem::DefaultUserInteraction.ui = Gem::SilentUI.new unless FastlaneCore::Globals.verbose?
49
49
 
50
50
  update_needed.each do |tool_info|
51
- tool = tool_info[0]
51
+ tool = self.get_gem_name(tool_info)
52
52
  local_version = Gem::Version.new(highest_versions[tool].version)
53
53
  latest_official_version = FastlaneCore::UpdateChecker.fetch_latest(tool)
54
54
 
55
55
  UI.message("Updating #{tool} from #{local_version.to_s.yellow} to #{latest_official_version.to_s.yellow}... 🚀")
56
56
 
57
- # Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
58
- requirement_version = local_version.approximate_recommendation
59
- updater.update_gem(tool, Gem::Requirement.new(requirement_version))
57
+ if Helper.homebrew?
58
+ Helper.backticks('brew upgrade fastlane')
59
+ else
60
+ # Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
61
+ requirement_version = local_version.approximate_recommendation
62
+ updater.update_gem(tool, Gem::Requirement.new(requirement_version))
63
+ end
60
64
 
61
65
  UI.success("Finished updating #{tool}")
62
66
  end
63
67
 
64
- UI.message("Cleaning up old versions...")
65
- cleaner.options[:args] = tools_to_update
66
- cleaner.execute
68
+ unless Helper.homebrew?
69
+ UI.message("Cleaning up old versions...")
70
+ cleaner.options[:args] = tools_to_update
71
+ cleaner.execute
72
+ end
73
+
74
+ if FastlaneCore::FastlaneFolder.swift?
75
+ upgrader = SwiftRunnerUpgrader.new
76
+ upgrader.upgrade_if_needed!
77
+ end
67
78
 
68
79
  UI.message("fastlane.tools successfully updated! I will now restart myself... 😴")
69
80
 
@@ -71,6 +82,16 @@ module Fastlane
71
82
  exec("FL_NO_UPDATE=true #{$PROGRAM_NAME} #{ARGV.join(' ')}")
72
83
  end
73
84
 
85
+ def self.get_gem_name(tool_info)
86
+ if tool_info.kind_of?(Array)
87
+ return tool_info[0]
88
+ elsif tool_info.respond_to?(:name) # Gem::NameTuple in RubyGems >= 3.1.0
89
+ return tool_info.name
90
+ else
91
+ UI.crash!("Unknown gem update information returned from RubyGems. Please file a new issue for this... 🤷")
92
+ end
93
+ end
94
+
74
95
  def self.description
75
96
  "Makes sure fastlane-tools are up-to-date when running fastlane"
76
97
  end
@@ -12,6 +12,7 @@ module Fastlane
12
12
  config[:screenshots_path] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] if Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
13
13
  config[:ipa] = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] if Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
14
14
  config[:pkg] = Actions.lane_context[SharedValues::PKG_OUTPUT_PATH] if Actions.lane_context[SharedValues::PKG_OUTPUT_PATH]
15
+ config[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
15
16
 
16
17
  return config if Helper.test?
17
18
  Deliver::Runner.new(config).run
@@ -26,7 +27,7 @@ module Fastlane
26
27
  [
27
28
  "Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.",
28
29
  "",
29
- "If you don't want a PDF report for App Store builds, use the `:force` option.",
30
+ "If you don't want to verify an HTML preview for App Store builds, use the `:force` option.",
30
31
  "This is useful when running _fastlane_ on your Continuous Integration server:",
31
32
  "`_upload_to_app_store_(force: true)`",
32
33
  "If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info."
@@ -50,7 +51,7 @@ module Fastlane
50
51
  def self.example_code
51
52
  [
52
53
  'upload_to_app_store(
53
- force: true, # Set to true to skip PDF verification
54
+ force: true, # Set to true to skip verification of HTML preview
54
55
  itc_provider: "abcde12345" # pass a specific value to the iTMSTransporter -itc_provider option
55
56
  )',
56
57
  'deliver # alias for "upload_to_app_store"',
@@ -123,9 +123,9 @@ module Fastlane
123
123
  end
124
124
 
125
125
  # Since loading dotenv should respect additional environments passed using
126
- # --env, we must extrat the arguments out of ARGV and process them before
126
+ # --env, we must extract the arguments out of ARGV and process them before
127
127
  # calling into commander. This is required since the ENV must be configured
128
- # before running any other commands in order to correclty respect variables
128
+ # before running any other commands in order to correctly respect variables
129
129
  # like FASTLANE_HIDE_CHANGELOG and FASTLANE_DISABLE_COLORS
130
130
  def load_dot_env
131
131
  env_cl_param = lambda do
@@ -259,11 +259,20 @@ module Fastlane
259
259
  return return_value
260
260
  end
261
261
 
262
+ def find_tag(folder: nil, version: nil, remote: false)
263
+ req = Gem::Requirement.new(version)
264
+ all_tags = get_tags(folder: folder, remote: remote)
265
+
266
+ return all_tags.select { |t| req =~ FastlaneCore::TagVersion.new(t) }.last
267
+ end
268
+
262
269
  # @param url [String] The git URL to clone the repository from
263
270
  # @param branch [String] The branch to checkout in the repository
264
271
  # @param path [String] The path to the Fastfile
265
272
  # @param version [String, Array] Version requirement for repo tags
266
- def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [])
273
+ # @param dependencies [Array] An optional array of additional Fastfiles in the repository
274
+ # @param cache_path [String] An optional path to a directory where the repository should be cloned into
275
+ def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [], cache_path: nil) # rubocop:disable Metrics/PerceivedComplexity
267
276
  UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
268
277
 
269
278
  Actions.execute_action('import_from_git') do
@@ -271,41 +280,75 @@ module Fastlane
271
280
 
272
281
  action_launched('import_from_git')
273
282
 
283
+ is_eligible_for_caching = !version.nil? && !cache_path.nil?
284
+
285
+ UI.message("Eligible for caching") if is_eligible_for_caching
286
+
274
287
  # Checkout the repo
275
288
  repo_name = url.split("/").last
276
289
  checkout_param = branch
277
290
 
278
- Dir.mktmpdir("fl_clone") do |tmp_path|
279
- clone_folder = File.join(tmp_path, repo_name)
291
+ import_block = proc do |target_path|
292
+ clone_folder = File.join(target_path, repo_name)
280
293
 
281
294
  branch_option = "--branch #{branch}" if branch != 'HEAD'
282
295
 
283
296
  checkout_dependencies = dependencies.map(&:shellescape).join(" ")
284
297
 
285
- checkout_path = "#{path.shellescape} #{checkout_dependencies}"
286
-
287
- UI.message("Cloning remote git repo...")
288
- Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
289
- Actions.sh("git clone #{url.shellescape} #{clone_folder.shellescape} --depth 1 -n #{branch_option}")
298
+ # If the current call is eligible for caching, we check out all the
299
+ # files and directories. If not, we only check out the specified
300
+ # `path` and `dependencies`.
301
+ checkout_path = is_eligible_for_caching ? "" : "#{path.shellescape} #{checkout_dependencies}"
302
+
303
+ if Dir[clone_folder].empty?
304
+ UI.message("Cloning remote git repo...")
305
+ Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
306
+ # When using cached clones, we need the entire repository history
307
+ # so we can switch between tags or branches instantly, or else,
308
+ # it would defeat the caching's purpose.
309
+ depth = is_eligible_for_caching ? "" : "--depth 1"
310
+
311
+ Actions.sh("git clone #{url.shellescape} #{clone_folder.shellescape} #{depth} --no-checkout #{branch_option}")
312
+ end
290
313
  end
291
314
 
292
315
  unless version.nil?
293
- req = Gem::Requirement.new(version)
294
- all_tags = fetch_remote_tags(folder: clone_folder)
295
- checkout_param = all_tags.select { |t| req =~ FastlaneCore::TagVersion.new(t) }.last
316
+ if is_eligible_for_caching
317
+ checkout_param = find_tag(folder: clone_folder, version: version, remote: false)
318
+
319
+ if checkout_param.nil?
320
+ # Update the repo and try again before failing
321
+ UI.message("Updating git repo...")
322
+ Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
323
+ Actions.sh("cd #{clone_folder.shellescape} && git checkout #{branch} && git reset --hard && git pull --all")
324
+ end
325
+
326
+ checkout_param = find_tag(folder: clone_folder, version: version, remote: false)
327
+ else
328
+ UI.message("Found tag #{checkout_param}. No git repo update needed.")
329
+ end
330
+ else
331
+ checkout_param = find_tag(folder: clone_folder, version: version, remote: true)
332
+ end
333
+
296
334
  UI.user_error!("No tag found matching #{version.inspect}") if checkout_param.nil?
297
335
  end
298
336
 
299
337
  Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
300
338
 
301
- # We also want to check out all the local actions of this fastlane setup
302
- containing = path.split(File::SEPARATOR)[0..-2]
303
- containing = "." if containing.count == 0
304
- actions_folder = File.join(containing, "actions")
305
- begin
306
- Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{actions_folder.shellescape}")
307
- rescue
308
- # We don't care about a failure here, as local actions are optional
339
+ # Knowing that we check out all the files and directories when the
340
+ # current call is eligible for caching, we don't need to also
341
+ # explicitly check out the "actions" directory.
342
+ unless is_eligible_for_caching
343
+ # We also want to check out all the local actions of this fastlane setup
344
+ containing = path.split(File::SEPARATOR)[0..-2]
345
+ containing = "." if containing.count == 0
346
+ actions_folder = File.join(containing, "actions")
347
+ begin
348
+ Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{actions_folder.shellescape}")
349
+ rescue
350
+ # We don't care about a failure here, as local actions are optional
351
+ end
309
352
  end
310
353
 
311
354
  return_value = nil
@@ -320,6 +363,12 @@ module Fastlane
320
363
 
321
364
  return return_value
322
365
  end
366
+
367
+ if is_eligible_for_caching
368
+ import_block.call(File.expand_path(cache_path))
369
+ else
370
+ Dir.mktmpdir("fl_clone", &import_block)
371
+ end
323
372
  end
324
373
  end
325
374
 
@@ -327,10 +376,12 @@ module Fastlane
327
376
  # @!group Versioning helpers
328
377
  #####################################################
329
378
 
330
- def fetch_remote_tags(folder: nil)
331
- UI.message("Fetching remote git tags...")
332
- Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
333
- Actions.sh("cd #{folder.shellescape} && git fetch --all --tags -q")
379
+ def get_tags(folder: nil, remote: false)
380
+ if remote
381
+ UI.message("Fetching remote git tags...")
382
+ Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
383
+ Actions.sh("cd #{folder.shellescape} && git fetch --all --tags -q")
384
+ end
334
385
  end
335
386
 
336
387
  # Fetch all possible tags
@@ -1,4 +1,4 @@
1
- # Use this file as the place to register Feature switches for the fastlan_core project
1
+ # Use this file as the place to register Feature switches for the fastlane_core project
2
2
 
3
3
  # FastlaneCore::Feature.register(env_var: 'YOUR_FEATURE_SWITCH_ENV_VAR',
4
4
  # description: 'Describe what this feature switch controls')
@@ -41,6 +41,7 @@ Require/MissingRequireStatement:
41
41
  - "**/spec/**/*.rb"
42
42
  - "**/spec_helper.rb"
43
43
  - spaceship/lib/spaceship/babosa_fix.rb
44
+ - fastlane_core/lib/fastlane_core/ui/disable_colors.rb
44
45
  - "**/Fastfile"
45
46
  - "**/*.gemspec"
46
47
  - rakelib/**/*
@@ -179,6 +180,7 @@ Style/MethodCallWithArgsParentheses:
179
180
  - private_lane
180
181
  - platform
181
182
  - to
183
+ - not_to
182
184
  - describe
183
185
  - it
184
186
  - be
@@ -136,7 +136,7 @@ module Fastlane
136
136
  type = "[String]"
137
137
  elsif default_value.kind_of?(Hash)
138
138
  type = "[String : Any]"
139
- # Altough we can have a default value of Integer type, if param_type_override overridden that value, respect it.
139
+ # Although we can have a default value of Integer type, if param_type_override overridden that value, respect it.
140
140
  elsif default_value.kind_of?(Integer)
141
141
  if type == "Double" || type == "Float"
142
142
  begin
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.162.0'.freeze
2
+ VERSION = '2.167.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.162.0
20
+ // Generated with fastlane 2.167.0
@@ -53,7 +53,7 @@ public protocol DeliverfileProtocol: class {
53
53
  /// Don’t create or update the app version that is being prepared for submission
54
54
  var skipAppVersionUpdate: Bool { get }
55
55
 
56
- /// Skip the HTML report file verification
56
+ /// Skip verification of HTML preview file
57
57
  var force: Bool { get }
58
58
 
59
59
  /// Clear all previously uploaded screenshots before uploading the new ones
@@ -66,7 +66,7 @@ public protocol DeliverfileProtocol: class {
66
66
  var rejectIfPossible: Bool { get }
67
67
 
68
68
  /// Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`)
69
- var automaticRelease: Bool { get }
69
+ var automaticRelease: Bool? { get }
70
70
 
71
71
  /// Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`)
72
72
  var autoReleaseDate: Int? { get }
@@ -211,7 +211,7 @@ public extension DeliverfileProtocol {
211
211
  var overwriteScreenshots: Bool { return false }
212
212
  var submitForReview: Bool { return false }
213
213
  var rejectIfPossible: Bool { return false }
214
- var automaticRelease: Bool { return false }
214
+ var automaticRelease: Bool? { return nil }
215
215
  var autoReleaseDate: Int? { return nil }
216
216
  var phasedRelease: Bool { return false }
217
217
  var resetRatings: Bool { return false }
@@ -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.45]
259
+ // FastlaneRunnerAPIVersion [0.9.50]
@@ -5,7 +5,7 @@
5
5
 
6
6
  import Foundation
7
7
 
8
- open class Fastfile: LaneFile {
8
+ open class Fastfile: LaneFile {
9
9
  override public init() {
10
10
  super.init()
11
11
  }
@@ -76,7 +76,7 @@ public func addGitTag(tag: String? = nil,
76
76
  grouping: String = "builds",
77
77
  prefix: String = "",
78
78
  postfix: String = "",
79
- buildNumber: Any,
79
+ buildNumber: Any? = nil,
80
80
  message: String? = nil,
81
81
  commit: String? = nil,
82
82
  force: Bool = false,
@@ -98,6 +98,8 @@ public func addGitTag(tag: String? = nil,
98
98
  Returns the current build_number of either live or edit version
99
99
 
100
100
  - parameters:
101
+ - 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)
102
+ - 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)
101
103
  - initialBuildNumber: sets the build number to given value if no build is in current train
102
104
  - appIdentifier: The bundle identifier of your app
103
105
  - username: Your Apple ID Username
@@ -110,7 +112,9 @@ public func addGitTag(tag: String? = nil,
110
112
  Returns the current build number of either the live or testflight version - it is useful for getting the build_number of the current or ready-for-sale app version, and it also works on non-live testflight version.
111
113
  If you need to handle more build-trains please see `latest_testflight_build_number`.
112
114
  */
113
- public func appStoreBuildNumber(initialBuildNumber: Any,
115
+ public func appStoreBuildNumber(apiKeyPath: String? = nil,
116
+ apiKey: [String: Any]? = nil,
117
+ initialBuildNumber: Any,
114
118
  appIdentifier: String,
115
119
  username: String,
116
120
  teamId: Any? = nil,
@@ -119,7 +123,9 @@ public func appStoreBuildNumber(initialBuildNumber: Any,
119
123
  platform: String = "ios",
120
124
  teamName: String? = nil)
121
125
  {
122
- let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: [RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber),
126
+ let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
127
+ RubyCommand.Argument(name: "api_key", value: apiKey),
128
+ RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber),
123
129
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
124
130
  RubyCommand.Argument(name: "username", value: username),
125
131
  RubyCommand.Argument(name: "team_id", value: teamId),
@@ -138,6 +144,7 @@ public func appStoreBuildNumber(initialBuildNumber: Any,
138
144
  - issuerId: The issuer ID
139
145
  - keyFilepath: The path to the key p8 file
140
146
  - keyContent: The content of the key p8 file
147
+ - isKeyContentBase64: Whether :key_content is Base64 encoded or not
141
148
  - duration: The token session duration
142
149
  - inHouse: Is App Store or Enterprise (in house) team? App Store Connect API cannot not determine this on its own (yet)
143
150
 
@@ -147,6 +154,7 @@ public func appStoreConnectApiKey(keyId: String,
147
154
  issuerId: String,
148
155
  keyFilepath: String? = nil,
149
156
  keyContent: String? = nil,
157
+ isKeyContentBase64: Bool = false,
150
158
  duration: Int? = nil,
151
159
  inHouse: Bool? = nil)
152
160
  {
@@ -154,6 +162,7 @@ public func appStoreConnectApiKey(keyId: String,
154
162
  RubyCommand.Argument(name: "issuer_id", value: issuerId),
155
163
  RubyCommand.Argument(name: "key_filepath", value: keyFilepath),
156
164
  RubyCommand.Argument(name: "key_content", value: keyContent),
165
+ RubyCommand.Argument(name: "is_key_content_base64", value: isKeyContentBase64),
157
166
  RubyCommand.Argument(name: "duration", value: duration),
158
167
  RubyCommand.Argument(name: "in_house", value: inHouse)])
159
168
  _ = runner.executeCommand(command)
@@ -479,7 +488,7 @@ public func appledoc(input: Any,
479
488
  - skipScreenshots: Don't upload the screenshots
480
489
  - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
481
490
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
482
- - force: Skip the HTML report file verification
491
+ - force: Skip verification of HTML preview file
483
492
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
484
493
  - submitForReview: Submit the new version for Review after uploading everything
485
494
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
@@ -527,7 +536,7 @@ public func appledoc(input: Any,
527
536
 
528
537
  Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
529
538
 
530
- If you don't want a PDF report for App Store builds, use the `:force` option.
539
+ If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
531
540
  This is useful when running _fastlane_ on your Continuous Integration server:
532
541
  `_upload_to_app_store_(force: true)`
533
542
  If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info.
@@ -553,7 +562,7 @@ public func appstore(apiKeyPath: String? = nil,
553
562
  overwriteScreenshots: Bool = false,
554
563
  submitForReview: Bool = false,
555
564
  rejectIfPossible: Bool = false,
556
- automaticRelease: Bool = false,
565
+ automaticRelease: Bool? = nil,
557
566
  autoReleaseDate: Int? = nil,
558
567
  phasedRelease: Bool = false,
559
568
  resetRatings: Bool = false,
@@ -2600,7 +2609,7 @@ public func deleteKeychain(name: String? = nil,
2600
2609
  - skipScreenshots: Don't upload the screenshots
2601
2610
  - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
2602
2611
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
2603
- - force: Skip the HTML report file verification
2612
+ - force: Skip verification of HTML preview file
2604
2613
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
2605
2614
  - submitForReview: Submit the new version for Review after uploading everything
2606
2615
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
@@ -2648,7 +2657,7 @@ public func deleteKeychain(name: String? = nil,
2648
2657
 
2649
2658
  Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
2650
2659
 
2651
- If you don't want a PDF report for App Store builds, use the `:force` option.
2660
+ If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
2652
2661
  This is useful when running _fastlane_ on your Continuous Integration server:
2653
2662
  `_upload_to_app_store_(force: true)`
2654
2663
  If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info.
@@ -2674,7 +2683,7 @@ public func deliver(apiKeyPath: Any? = deliverfile.apiKeyPath,
2674
2683
  overwriteScreenshots: Bool = deliverfile.overwriteScreenshots,
2675
2684
  submitForReview: Bool = deliverfile.submitForReview,
2676
2685
  rejectIfPossible: Bool = deliverfile.rejectIfPossible,
2677
- automaticRelease: Bool = deliverfile.automaticRelease,
2686
+ automaticRelease: Bool? = deliverfile.automaticRelease,
2678
2687
  autoReleaseDate: Int? = deliverfile.autoReleaseDate,
2679
2688
  phasedRelease: Bool = deliverfile.phasedRelease,
2680
2689
  resetRatings: Bool = deliverfile.resetRatings,
@@ -4595,6 +4604,8 @@ public func jira(url: String,
4595
4604
  Fetches most recent build number from TestFlight
4596
4605
 
4597
4606
  - parameters:
4607
+ - 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)
4608
+ - 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)
4598
4609
  - live: Query the live version (ready-for-sale)
4599
4610
  - appIdentifier: The bundle identifier of your app
4600
4611
  - username: Your Apple ID Username
@@ -4609,7 +4620,9 @@ public func jira(url: String,
4609
4620
  Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
4610
4621
  Fetches the most recent build number from TestFlight based on the version number. Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
4611
4622
  */
4612
- @discardableResult public func latestTestflightBuildNumber(live: Bool = false,
4623
+ @discardableResult public func latestTestflightBuildNumber(apiKeyPath: String? = nil,
4624
+ apiKey: [String: Any]? = nil,
4625
+ live: Bool = false,
4613
4626
  appIdentifier: String,
4614
4627
  username: String,
4615
4628
  version: String? = nil,
@@ -4618,7 +4631,9 @@ public func jira(url: String,
4618
4631
  teamId: Any? = nil,
4619
4632
  teamName: String? = nil) -> Int
4620
4633
  {
4621
- let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: [RubyCommand.Argument(name: "live", value: live),
4634
+ let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
4635
+ RubyCommand.Argument(name: "api_key", value: apiKey),
4636
+ RubyCommand.Argument(name: "live", value: live),
4622
4637
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
4623
4638
  RubyCommand.Argument(name: "username", value: username),
4624
4639
  RubyCommand.Argument(name: "version", value: version),
@@ -4733,7 +4748,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4733
4748
  - readonly: Only fetch existing certificates and profiles, don't generate new ones
4734
4749
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
4735
4750
  - skipProvisioningProfiles: Skip syncing provisioning profiles
4736
- - appIdentifier: The bundle identifier(s) of your app (comma-separated)
4751
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
4737
4752
  - 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)
4738
4753
  - 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)
4739
4754
  - username: Your Apple ID Username
@@ -4768,6 +4783,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4768
4783
  - 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")
4769
4784
  - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
4770
4785
  - 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
4786
+ - 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
4771
4787
  - outputPath: Path in which to export certificates, key and profile
4772
4788
  - 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
4773
4789
  - verbose: Print out extra information and all commands
@@ -4814,6 +4830,7 @@ public func match(type: Any = matchfile.type,
4814
4830
  templateName: Any? = matchfile.templateName,
4815
4831
  profileName: Any? = matchfile.profileName,
4816
4832
  failOnNameTaken: Bool = matchfile.failOnNameTaken,
4833
+ skipCertificateMatching: Bool = matchfile.skipCertificateMatching,
4817
4834
  outputPath: Any? = matchfile.outputPath,
4818
4835
  skipSetPartitionList: Bool = matchfile.skipSetPartitionList,
4819
4836
  verbose: Bool = matchfile.verbose)
@@ -4858,6 +4875,7 @@ public func match(type: Any = matchfile.type,
4858
4875
  RubyCommand.Argument(name: "template_name", value: templateName),
4859
4876
  RubyCommand.Argument(name: "profile_name", value: profileName),
4860
4877
  RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
4878
+ RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
4861
4879
  RubyCommand.Argument(name: "output_path", value: outputPath),
4862
4880
  RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
4863
4881
  RubyCommand.Argument(name: "verbose", value: verbose)])
@@ -5772,7 +5790,10 @@ public func recreateSchemes(project: String) {
5772
5790
 
5773
5791
  - parameters:
5774
5792
  - name: Provide the name of the device to register as
5793
+ - platform: Provide the platform of the device to register as (ios, mac)
5775
5794
  - udid: Provide the UDID of the device to register as
5795
+ - 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)
5796
+ - 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)
5776
5797
  - teamId: The ID of your Developer Portal team if you're in multiple teams
5777
5798
  - teamName: The name of your Developer Portal team if you're in multiple teams
5778
5799
  - username: Optional: Your Apple ID
@@ -5782,13 +5803,19 @@ public func recreateSchemes(project: String) {
5782
5803
  The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `:username` option.
5783
5804
  */
5784
5805
  @discardableResult public func registerDevice(name: String,
5806
+ platform: String = "ios",
5785
5807
  udid: String,
5808
+ apiKeyPath: String? = nil,
5809
+ apiKey: [String: Any]? = nil,
5786
5810
  teamId: String? = nil,
5787
5811
  teamName: String? = nil,
5788
- username: String) -> String
5812
+ username: String? = nil) -> String
5789
5813
  {
5790
5814
  let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
5815
+ RubyCommand.Argument(name: "platform", value: platform),
5791
5816
  RubyCommand.Argument(name: "udid", value: udid),
5817
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
5818
+ RubyCommand.Argument(name: "api_key", value: apiKey),
5792
5819
  RubyCommand.Argument(name: "team_id", value: teamId),
5793
5820
  RubyCommand.Argument(name: "team_name", value: teamName),
5794
5821
  RubyCommand.Argument(name: "username", value: username)])
@@ -5801,6 +5828,8 @@ public func recreateSchemes(project: String) {
5801
5828
  - parameters:
5802
5829
  - devices: A hash of devices, with the name as key and the UDID as value
5803
5830
  - devicesFile: Provide a path to a file with the devices to register. For the format of the file see the examples
5831
+ - 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)
5832
+ - 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)
5804
5833
  - teamId: The ID of your Developer Portal team if you're in multiple teams
5805
5834
  - teamName: The name of your Developer Portal team if you're in multiple teams
5806
5835
  - username: Optional: Your Apple ID
@@ -5812,6 +5841,8 @@ public func recreateSchemes(project: String) {
5812
5841
  */
5813
5842
  public func registerDevices(devices: [String: Any]? = nil,
5814
5843
  devicesFile: String? = nil,
5844
+ apiKeyPath: String? = nil,
5845
+ apiKey: [String: Any]? = nil,
5815
5846
  teamId: String? = nil,
5816
5847
  teamName: String? = nil,
5817
5848
  username: String,
@@ -5819,6 +5850,8 @@ public func registerDevices(devices: [String: Any]? = nil,
5819
5850
  {
5820
5851
  let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: [RubyCommand.Argument(name: "devices", value: devices),
5821
5852
  RubyCommand.Argument(name: "devices_file", value: devicesFile),
5853
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
5854
+ RubyCommand.Argument(name: "api_key", value: apiKey),
5822
5855
  RubyCommand.Argument(name: "team_id", value: teamId),
5823
5856
  RubyCommand.Argument(name: "team_name", value: teamName),
5824
5857
  RubyCommand.Argument(name: "username", value: username),
@@ -6044,6 +6077,7 @@ public func rubyVersion() {
6044
6077
  - skipSlack: Don't publish to slack, even when an URL is given
6045
6078
  - slackOnlyOnFailure: Only post on Slack if the tests fail
6046
6079
  - destination: Use only if you're a pro, use the other options instead
6080
+ - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
6047
6081
  - customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
6048
6082
  - xcodebuildCommand: Allows for override of the default `xcodebuild` command
6049
6083
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
@@ -6110,6 +6144,7 @@ public func runTests(workspace: String? = nil,
6110
6144
  skipSlack: Bool = false,
6111
6145
  slackOnlyOnFailure: Bool = false,
6112
6146
  destination: Any? = nil,
6147
+ catalystPlatform: String? = nil,
6113
6148
  customReportFileName: String? = nil,
6114
6149
  xcodebuildCommand: String = "env NSUnbufferedIO=YES xcodebuild",
6115
6150
  clonedSourcePackagesPath: String? = nil,
@@ -6174,6 +6209,7 @@ public func runTests(workspace: String? = nil,
6174
6209
  RubyCommand.Argument(name: "skip_slack", value: skipSlack),
6175
6210
  RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
6176
6211
  RubyCommand.Argument(name: "destination", value: destination),
6212
+ RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
6177
6213
  RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
6178
6214
  RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
6179
6215
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
@@ -6320,6 +6356,7 @@ public func say(text: Any,
6320
6356
  - skipSlack: Don't publish to slack, even when an URL is given
6321
6357
  - slackOnlyOnFailure: Only post on Slack if the tests fail
6322
6358
  - destination: Use only if you're a pro, use the other options instead
6359
+ - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
6323
6360
  - customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
6324
6361
  - xcodebuildCommand: Allows for override of the default `xcodebuild` command
6325
6362
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
@@ -6386,6 +6423,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6386
6423
  skipSlack: Bool = scanfile.skipSlack,
6387
6424
  slackOnlyOnFailure: Bool = scanfile.slackOnlyOnFailure,
6388
6425
  destination: Any? = scanfile.destination,
6426
+ catalystPlatform: Any? = scanfile.catalystPlatform,
6389
6427
  customReportFileName: Any? = scanfile.customReportFileName,
6390
6428
  xcodebuildCommand: Any = scanfile.xcodebuildCommand,
6391
6429
  clonedSourcePackagesPath: Any? = scanfile.clonedSourcePackagesPath,
@@ -6450,6 +6488,7 @@ public func scan(workspace: Any? = scanfile.workspace,
6450
6488
  RubyCommand.Argument(name: "skip_slack", value: skipSlack),
6451
6489
  RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
6452
6490
  RubyCommand.Argument(name: "destination", value: destination),
6491
+ RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
6453
6492
  RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
6454
6493
  RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
6455
6494
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
@@ -6582,6 +6621,8 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
6582
6621
  Set the changelog for all languages on App Store Connect
6583
6622
 
6584
6623
  - parameters:
6624
+ - 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)
6625
+ - 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)
6585
6626
  - appIdentifier: The bundle identifier of your app
6586
6627
  - username: Your Apple ID Username
6587
6628
  - version: The version number to create/update
@@ -6594,15 +6635,19 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
6594
6635
  You can store the changelog in `./changelog.txt` and it will automatically get loaded from there. This integration is useful if you support e.g. 10 languages and want to use the same "What's new"-text for all languages.
6595
6636
  Defining the version is optional. _fastlane_ will try to automatically detect it if you don't provide one.
6596
6637
  */
6597
- public func setChangelog(appIdentifier: String,
6598
- username: String,
6638
+ public func setChangelog(apiKeyPath: String? = nil,
6639
+ apiKey: [String: Any]? = nil,
6640
+ appIdentifier: String,
6641
+ username: String? = nil,
6599
6642
  version: String? = nil,
6600
6643
  changelog: String? = nil,
6601
6644
  teamId: Any? = nil,
6602
6645
  teamName: String? = nil,
6603
6646
  platform: String = "ios")
6604
6647
  {
6605
- let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
6648
+ let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
6649
+ RubyCommand.Argument(name: "api_key", value: apiKey),
6650
+ RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
6606
6651
  RubyCommand.Argument(name: "username", value: username),
6607
6652
  RubyCommand.Argument(name: "version", value: version),
6608
6653
  RubyCommand.Argument(name: "changelog", value: changelog),
@@ -7400,6 +7445,7 @@ public func splunkmint(dsym: String? = nil,
7400
7445
 
7401
7446
  - parameters:
7402
7447
  - command: The swift command (one of: build, test, clean, reset, update, resolve, generate-xcodeproj, init)
7448
+ - enableCodeCoverage: Enables code coverage for the generated Xcode project when using the generate-xcodeproj command
7403
7449
  - buildPath: Specify build/cache directory [default: ./.build]
7404
7450
  - packagePath: Change working directory before any other operation
7405
7451
  - xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
@@ -7410,6 +7456,7 @@ public func splunkmint(dsym: String? = nil,
7410
7456
  - verbose: Increase verbosity of informational output
7411
7457
  */
7412
7458
  public func spm(command: String = "build",
7459
+ enableCodeCoverage: Any? = nil,
7413
7460
  buildPath: String? = nil,
7414
7461
  packagePath: String? = nil,
7415
7462
  xcconfig: String? = nil,
@@ -7420,6 +7467,7 @@ public func spm(command: String = "build",
7420
7467
  verbose: Bool = false)
7421
7468
  {
7422
7469
  let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
7470
+ RubyCommand.Argument(name: "enable_code_coverage", value: enableCodeCoverage),
7423
7471
  RubyCommand.Argument(name: "build_path", value: buildPath),
7424
7472
  RubyCommand.Argument(name: "package_path", value: packagePath),
7425
7473
  RubyCommand.Argument(name: "xcconfig", value: xcconfig),
@@ -7639,7 +7687,7 @@ public func swiftlint(mode: Any = "lint",
7639
7687
  - readonly: Only fetch existing certificates and profiles, don't generate new ones
7640
7688
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
7641
7689
  - skipProvisioningProfiles: Skip syncing provisioning profiles
7642
- - appIdentifier: The bundle identifier(s) of your app (comma-separated)
7690
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
7643
7691
  - 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)
7644
7692
  - 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)
7645
7693
  - username: Your Apple ID Username
@@ -7674,6 +7722,7 @@ public func swiftlint(mode: Any = "lint",
7674
7722
  - 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")
7675
7723
  - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
7676
7724
  - 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
7725
+ - 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
7677
7726
  - outputPath: Path in which to export certificates, key and profile
7678
7727
  - 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
7679
7728
  - verbose: Print out extra information and all commands
@@ -7720,6 +7769,7 @@ public func syncCodeSigning(type: String = "development",
7720
7769
  templateName: String? = nil,
7721
7770
  profileName: String? = nil,
7722
7771
  failOnNameTaken: Bool = false,
7772
+ skipCertificateMatching: Bool = false,
7723
7773
  outputPath: String? = nil,
7724
7774
  skipSetPartitionList: Bool = false,
7725
7775
  verbose: Bool = false)
@@ -7764,6 +7814,7 @@ public func syncCodeSigning(type: String = "development",
7764
7814
  RubyCommand.Argument(name: "template_name", value: templateName),
7765
7815
  RubyCommand.Argument(name: "profile_name", value: profileName),
7766
7816
  RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
7817
+ RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
7767
7818
  RubyCommand.Argument(name: "output_path", value: outputPath),
7768
7819
  RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
7769
7820
  RubyCommand.Argument(name: "verbose", value: verbose)])
@@ -8451,7 +8502,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
8451
8502
  - skipScreenshots: Don't upload the screenshots
8452
8503
  - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
8453
8504
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
8454
- - force: Skip the HTML report file verification
8505
+ - force: Skip verification of HTML preview file
8455
8506
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
8456
8507
  - submitForReview: Submit the new version for Review after uploading everything
8457
8508
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
@@ -8499,7 +8550,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
8499
8550
 
8500
8551
  Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
8501
8552
 
8502
- If you don't want a PDF report for App Store builds, use the `:force` option.
8553
+ If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
8503
8554
  This is useful when running _fastlane_ on your Continuous Integration server:
8504
8555
  `_upload_to_app_store_(force: true)`
8505
8556
  If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info.
@@ -8525,7 +8576,7 @@ public func uploadToAppStore(apiKeyPath: String? = nil,
8525
8576
  overwriteScreenshots: Bool = false,
8526
8577
  submitForReview: Bool = false,
8527
8578
  rejectIfPossible: Bool = false,
8528
- automaticRelease: Bool = false,
8579
+ automaticRelease: Bool? = nil,
8529
8580
  autoReleaseDate: Int? = nil,
8530
8581
  phasedRelease: Bool = false,
8531
8582
  resetRatings: Bool = false,
@@ -9211,7 +9262,7 @@ public func xcov(workspace: String? = nil,
9211
9262
  coverallsServiceJobId: String? = nil,
9212
9263
  coverallsRepoToken: String? = nil,
9213
9264
  xcconfig: String? = nil,
9214
- ideFoundationPath: String = "/Applications/Xcode-11.5.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9265
+ ideFoundationPath: String = "/Applications/Xcode-11.7.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9215
9266
  legacySupport: Bool = false)
9216
9267
  {
9217
9268
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -9357,4 +9408,4 @@ public let snapshotfile = Snapshotfile()
9357
9408
 
9358
9409
  // Please don't remove the lines below
9359
9410
  // They are used to detect outdated files
9360
- // FastlaneRunnerAPIVersion [0.9.98]
9411
+ // FastlaneRunnerAPIVersion [0.9.103]