fastlane 2.164.0 → 2.169.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -80
  3. data/cert/lib/cert/.options.rb.swp +0 -0
  4. data/cert/lib/cert/.runner.rb.swp +0 -0
  5. data/cert/lib/cert/options.rb +3 -3
  6. data/cert/lib/cert/runner.rb +2 -2
  7. data/deliver/lib/deliver/app_screenshot.rb +6 -2
  8. data/deliver/lib/deliver/loader.rb +136 -18
  9. data/deliver/lib/deliver/upload_metadata.rb +4 -10
  10. data/deliver/lib/deliver/upload_screenshots.rb +1 -64
  11. data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
  12. data/fastlane/lib/fastlane/actions/actions_helper.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/add_git_tag.rb +9 -2
  14. data/fastlane/lib/fastlane/actions/appledoc.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +4 -0
  16. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  17. data/fastlane/lib/fastlane/actions/slather.rb +2 -2
  18. data/fastlane/lib/fastlane/actions/spm.rb +6 -0
  19. data/fastlane/lib/fastlane/actions/update_fastlane.rb +29 -8
  20. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +3 -3
  21. data/fastlane/lib/fastlane/actions/xcode_install.rb +8 -5
  22. data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
  23. data/fastlane/lib/fastlane/features.rb +1 -1
  24. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
  25. data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
  26. data/fastlane/lib/fastlane/version.rb +1 -1
  27. data/fastlane/swift/Deliverfile.swift +1 -1
  28. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  29. data/fastlane/swift/Fastfile.swift +1 -1
  30. data/fastlane/swift/Fastlane.swift +56 -26
  31. data/fastlane/swift/Gymfile.swift +1 -1
  32. data/fastlane/swift/GymfileProtocol.swift +5 -1
  33. data/fastlane/swift/LaneFileProtocol.swift +2 -2
  34. data/fastlane/swift/MainProcess.swift +2 -0
  35. data/fastlane/swift/Matchfile.swift +1 -1
  36. data/fastlane/swift/MatchfileProtocol.swift +4 -4
  37. data/fastlane/swift/Precheckfile.swift +1 -1
  38. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  39. data/fastlane/swift/Runner.swift +1 -1
  40. data/fastlane/swift/Scanfile.swift +1 -1
  41. data/fastlane/swift/ScanfileProtocol.swift +9 -1
  42. data/fastlane/swift/Screengrabfile.swift +1 -1
  43. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  44. data/fastlane/swift/Snapshotfile.swift +1 -1
  45. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  46. data/fastlane/swift/SocketClient.swift +1 -1
  47. data/fastlane_core/lib/fastlane_core/cert_checker.rb +12 -7
  48. data/fastlane_core/lib/fastlane_core/helper.rb +10 -2
  49. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -3
  50. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +3 -1
  51. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +8 -0
  52. data/gym/lib/gym/code_signing_mapping.rb +1 -1
  53. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  54. data/gym/lib/gym/options.rb +7 -1
  55. data/match/lib/match/.options.rb.swp +0 -0
  56. data/match/lib/match/module.rb +1 -1
  57. data/match/lib/match/nuke.rb +9 -5
  58. data/match/lib/match/options.rb +2 -2
  59. data/pilot/lib/pilot/build_manager.rb +9 -3
  60. data/scan/lib/scan/detect_values.rb +3 -1
  61. data/scan/lib/scan/module.rb +4 -0
  62. data/scan/lib/scan/options.rb +16 -1
  63. data/scan/lib/scan/runner.rb +2 -2
  64. data/scan/lib/scan/test_command_generator.rb +1 -0
  65. data/{match/lib/match/.commands_generator.rb.swp → sigh/lib/sigh/.options.rb.swp} +0 -0
  66. data/sigh/lib/sigh/runner.rb +2 -2
  67. data/snapshot/lib/assets/SnapshotHelper.swift +5 -1
  68. data/snapshot/lib/snapshot/test_command_generator.rb +1 -1
  69. data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
  70. data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +1 -1
  71. data/spaceship/lib/spaceship/client.rb +14 -0
  72. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  73. data/spaceship/lib/spaceship/connect_api/client.rb +7 -4
  74. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +3 -2
  75. data/spaceship/lib/spaceship/connect_api/models/app.rb +139 -54
  76. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +16 -10
  77. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +8 -4
  78. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +15 -11
  79. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +13 -9
  80. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +9 -7
  81. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +15 -11
  82. data/spaceship/lib/spaceship/connect_api/models/app_store_review_attachment.rb +7 -5
  83. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +6 -4
  84. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +55 -36
  85. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +21 -14
  86. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +3 -2
  87. data/spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb +3 -2
  88. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +6 -4
  89. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +12 -2
  90. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +12 -8
  91. data/spaceship/lib/spaceship/connect_api/models/build.rb +24 -16
  92. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +3 -2
  93. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +9 -6
  94. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +6 -4
  95. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +12 -8
  96. data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
  97. data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
  98. data/spaceship/lib/spaceship/connect_api/models/device.rb +6 -4
  99. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +6 -4
  100. data/spaceship/lib/spaceship/connect_api/models/profile.rb +12 -8
  101. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +3 -2
  102. data/spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb +9 -6
  103. data/spaceship/lib/spaceship/connect_api/models/territory.rb +3 -2
  104. data/spaceship/lib/spaceship/connect_api/models/user.rb +6 -4
  105. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +9 -6
  106. data/spaceship/lib/spaceship/connect_api/spaceship.rb +7 -4
  107. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
  108. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +71 -0
  109. data/spaceship/lib/spaceship/errors.rb +19 -0
  110. data/spaceship/lib/spaceship/tunes/iap_detail.rb +1 -1
  111. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
  112. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +18 -6
  113. data/supply/lib/supply.rb +1 -1
  114. data/supply/lib/supply/options.rb +1 -1
  115. data/supply/lib/supply/uploader.rb +3 -2
  116. metadata +26 -22
  117. data/match/lib/match/.importer.rb.swp +0 -0
@@ -375,9 +375,7 @@ module Deliver
375
375
  # Check folder list (an empty folder signifies a language is required)
376
376
  ignore_validation = options[:ignore_language_directory_validation]
377
377
  Loader.language_folders(options[:metadata_path], ignore_validation).each do |lang_folder|
378
- next unless File.directory?(lang_folder) # We don't want to read txt as they are non localised
379
- language = File.basename(lang_folder)
380
- enabled_languages << language unless enabled_languages.include?(language)
378
+ enabled_languages << lang_folder.language unless enabled_languages.include?(lang_folder.language)
381
379
  end
382
380
 
383
381
  return unless enabled_languages.include?("default")
@@ -416,10 +414,7 @@ module Deliver
416
414
  # Check folder list (an empty folder signifies a language is required)
417
415
  ignore_validation = options[:ignore_language_directory_validation]
418
416
  Loader.language_folders(options[:metadata_path], ignore_validation).each do |lang_folder|
419
- next unless File.directory?(lang_folder) # We don't want to read txt as they are non localised
420
-
421
- language = File.basename(lang_folder)
422
- enabled_languages << language unless enabled_languages.include?(language)
417
+ enabled_languages << lang_folder.language unless enabled_languages.include?(lang_folder.language)
423
418
  end
424
419
 
425
420
  # Mapping to strings because :default symbol can be passed in
@@ -530,14 +525,13 @@ module Deliver
530
525
  # Load localised data
531
526
  ignore_validation = options[:ignore_language_directory_validation]
532
527
  Loader.language_folders(options[:metadata_path], ignore_validation).each do |lang_folder|
533
- language = File.basename(lang_folder)
534
528
  (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys).each do |key|
535
- path = File.join(lang_folder, "#{key}.txt")
529
+ path = File.join(lang_folder.path, "#{key}.txt")
536
530
  next unless File.exist?(path)
537
531
 
538
532
  UI.message("Loading '#{path}'...")
539
533
  options[key] ||= {}
540
- options[key][language] ||= File.read(path)
534
+ options[key][lang_folder.language] ||= File.read(path)
541
535
  end
542
536
  end
543
537
 
@@ -251,70 +251,7 @@ module Deliver
251
251
 
252
252
  def collect_screenshots(options)
253
253
  return [] if options[:skip_screenshots]
254
- return collect_screenshots_for_languages(options[:screenshots_path], options[:ignore_language_directory_validation])
255
- end
256
-
257
- def collect_screenshots_for_languages(path, ignore_validation)
258
- screenshots = []
259
- extensions = '{png,jpg,jpeg}'
260
-
261
- available_languages = UploadScreenshots.available_languages.each_with_object({}) do |lang, lang_hash|
262
- lang_hash[lang.downcase] = lang
263
- end
264
-
265
- Loader.language_folders(path, ignore_validation).each do |lng_folder|
266
- language = File.basename(lng_folder)
267
-
268
- # Check to see if we need to traverse multiple platforms or just a single platform
269
- if language == Loader::APPLE_TV_DIR_NAME || language == Loader::IMESSAGE_DIR_NAME
270
- screenshots.concat(collect_screenshots_for_languages(File.join(path, language), ignore_validation))
271
- next
272
- end
273
-
274
- files = Dir.glob(File.join(lng_folder, "*.#{extensions}"), File::FNM_CASEFOLD).sort
275
- next if files.count == 0
276
-
277
- framed_screenshots_found = Dir.glob(File.join(lng_folder, "*_framed.#{extensions}"), File::FNM_CASEFOLD).count > 0
278
-
279
- UI.important("Framed screenshots are detected! 🖼 Non-framed screenshot files may be skipped. 🏃") if framed_screenshots_found
280
-
281
- language_dir_name = File.basename(lng_folder)
282
-
283
- if available_languages[language_dir_name.downcase].nil?
284
- UI.user_error!("#{language_dir_name} is not an available language. Please verify that your language codes are available in iTunesConnect. See https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/AppStoreTerritories.html for more information.")
285
- end
286
-
287
- language = available_languages[language_dir_name.downcase]
288
-
289
- files.each do |file_path|
290
- is_framed = file_path.downcase.include?("_framed.")
291
- is_watch = file_path.downcase.include?("watch")
292
-
293
- if framed_screenshots_found && !is_framed && !is_watch
294
- UI.important("🏃 Skipping screenshot file: #{file_path}")
295
- next
296
- end
297
-
298
- screenshots << AppScreenshot.new(file_path, language)
299
- end
300
- end
301
-
302
- # Checking if the device type exists in spaceship
303
- # Ex: iPhone 6.1 inch isn't supported in App Store Connect but need
304
- # to have it in there for frameit support
305
- unaccepted_device_shown = false
306
- screenshots.select! do |screenshot|
307
- exists = !screenshot.device_type.nil?
308
- unless exists
309
- UI.important("Unaccepted device screenshots are detected! 🚫 Screenshot file will be skipped. 🏃") unless unaccepted_device_shown
310
- unaccepted_device_shown = true
311
-
312
- UI.important("🏃 Skipping screenshot file: #{screenshot.path} - Not an accepted App Store Connect device...")
313
- end
314
- exists
315
- end
316
-
317
- return screenshots
254
+ return Loader.load_app_screenshots(options[:screenshots_path], options[:ignore_language_directory_validation])
318
255
  end
319
256
 
320
257
  # helper method so Spaceship::Tunes.client.available_languages is easier to test
@@ -5,7 +5,7 @@ module Fastlane
5
5
  PLATFORM_NAME = :PLATFORM_NAME
6
6
  ENVIRONMENT = :ENVIRONMENT
7
7
 
8
- # A slighly decorated hash that will store and fetch sensitive data
8
+ # A slightly decorated hash that will store and fetch sensitive data
9
9
  # but not display it while iterating keys and values
10
10
  class LaneContextValues < Hash
11
11
  def initialize
@@ -6,7 +6,13 @@ module Fastlane
6
6
  # lane name in lane_context could be nil because you can just call $fastlane add_git_tag which has no context
7
7
  lane_name = Actions.lane_context[Actions::SharedValues::LANE_NAME].to_s.delete(' ') # no spaces allowed
8
8
 
9
- tag = options[:tag] || "#{options[:grouping]}/#{lane_name}/#{options[:prefix]}#{options[:build_number]}#{options[:postfix]}"
9
+ if options[:tag]
10
+ tag = options[:tag]
11
+ elsif options[:build_number]
12
+ tag = "#{options[:grouping]}/#{lane_name}/#{options[:prefix]}#{options[:build_number]}#{options[:postfix]}"
13
+ else
14
+ UI.user_error!("No value found for 'tag' or 'build_number'. At least one of them must be provided. Note that if you do specify a tag, all other arguments are ignored.")
15
+ end
10
16
  message = options[:message] || "#{tag} (fastlane)"
11
17
 
12
18
  cmd = ['git tag']
@@ -64,7 +70,8 @@ module Fastlane
64
70
  description: "The build number. Defaults to the result of increment_build_number if you\'re using it",
65
71
  default_value: Actions.lane_context[Actions::SharedValues::BUILD_NUMBER],
66
72
  default_value_dynamic: true,
67
- is_string: false),
73
+ is_string: false,
74
+ optional: true),
68
75
  FastlaneCore::ConfigItem.new(key: :message,
69
76
  env_name: "FL_GIT_TAG_MESSAGE",
70
77
  description: "The tag message. Defaults to the tag's name",
@@ -55,7 +55,7 @@ module Fastlane
55
55
 
56
56
  def self.run(params)
57
57
  unless Helper.test?
58
- UI.message("Install using `brew install homebrew/boneyard/appledoc`")
58
+ UI.message("Install using `brew install appledoc`")
59
59
  UI.user_error!("appledoc not installed") if `which appledoc`.length == 0
60
60
  end
61
61
 
@@ -282,6 +282,10 @@ launch_arguments([
282
282
  ])
283
283
  ```
284
284
 
285
+ ## Xcode Environment Variables
286
+
287
+ _snapshot_ includes `FASTLANE_SNAPSHOT=YES` and `FASTLANE_LANGUAGE=<language>` as arguments when executing `xcodebuild`. This means you may use these environment variables in a custom build phase run script to do any additional configuration.
288
+
285
289
  # How does it work?
286
290
 
287
291
  The easiest solution would be to just render the UIWindow into a file. That's not possible because UI Tests don't run on a main thread. So _snapshot_ uses a different approach:
@@ -237,7 +237,7 @@ The `keyword.strings` and `title.strings` are standard `.strings` file you alrea
237
237
  **Notes**
238
238
 
239
239
  - These `.strings` files **MUST** be utf-8 (UTF-8) or utf-16 encoded (UTF-16 BE with BOM). They also must begin with an empty line. If you are having trouble see [issue #1740](https://github.com/fastlane/fastlane/issues/1740)
240
- - You **MUST** provide a background if you want titles. _frameit_ will not add the tiles if a background is not specified.
240
+ - You **MUST** provide a background if you want titles. _frameit_ will not add the titles if a background is not specified.
241
241
 
242
242
  ### Screenshot orientation
243
243
 
@@ -272,8 +272,8 @@ module Fastlane
272
272
  FastlaneCore::ConfigItem.new(key: :binary_basename,
273
273
  env_name: "FL_SLATHER_BINARY_BASENAME",
274
274
  description: "Basename of the binary file, this should match the name of your bundle excluding its extension (i.e. YourApp [for YourApp.app bundle])",
275
- is_string: false,
276
- default_value: false),
275
+ type: Array,
276
+ optional: true),
277
277
  FastlaneCore::ConfigItem.new(key: :binary_file,
278
278
  env_name: "FL_SLATHER_BINARY_FILE",
279
279
  description: "Binary file name to be used for code coverage",
@@ -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]",
@@ -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
@@ -9,9 +9,9 @@ module Fastlane
9
9
 
10
10
  begin
11
11
  config.load_configuration_file("Deliverfile")
12
- config[:screenshots_path] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] if Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
13
- config[:ipa] = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] if Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
14
- config[:pkg] = Actions.lane_context[SharedValues::PKG_OUTPUT_PATH] if Actions.lane_context[SharedValues::PKG_OUTPUT_PATH]
12
+ config[:screenshots_path] ||= Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] if Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
13
+ config[:ipa] ||= Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] if Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
14
+ config[:pkg] ||= Actions.lane_context[SharedValues::PKG_OUTPUT_PATH] if Actions.lane_context[SharedValues::PKG_OUTPUT_PATH]
15
15
  config[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
16
16
 
17
17
  return config if Helper.test?
@@ -17,7 +17,7 @@ module Fastlane
17
17
  if installer.installed?(params[:version])
18
18
  UI.success("Xcode #{params[:version]} is already installed ✨")
19
19
  else
20
- installer.install_version(params[:version], true, true, true, true)
20
+ installer.install_version(params[:version], true, true, true, true, nil, true, nil, params[:download_retry_attempts])
21
21
  end
22
22
 
23
23
  xcode = installer.installed_versions.find { |x| x.version == params[:version] }
@@ -49,9 +49,7 @@ module Fastlane
49
49
  [
50
50
  FastlaneCore::ConfigItem.new(key: :version,
51
51
  env_name: "FL_XCODE_VERSION",
52
- description: "The version number of the version of Xcode to install",
53
- verify_block: proc do |value|
54
- end),
52
+ description: "The version number of the version of Xcode to install"),
55
53
  FastlaneCore::ConfigItem.new(key: :username,
56
54
  short_option: "-u",
57
55
  env_name: "XCODE_INSTALL_USER",
@@ -65,7 +63,12 @@ module Fastlane
65
63
  optional: true,
66
64
  code_gen_sensitive: true,
67
65
  default_value: CredentialsManager::AppfileConfig.try_fetch_value(:team_id),
68
- default_value_dynamic: true)
66
+ default_value_dynamic: true),
67
+ FastlaneCore::ConfigItem.new(key: :download_retry_attempts,
68
+ env_name: "XCODE_INSTALL_DOWNLOAD_RETRY_ATTEMPTS",
69
+ description: "Number of times the download will be retried in case of failure",
70
+ type: Integer,
71
+ default_value: 3)
69
72
  ]
70
73
  end
71
74
 
@@ -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
@@ -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/**/*
@@ -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.164.0'.freeze
2
+ VERSION = '2.169.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.164.0
20
+ // Generated with fastlane 2.169.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.47]
259
+ // FastlaneRunnerAPIVersion [0.9.52]
@@ -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,
@@ -981,6 +981,7 @@ public func buildAndroidApp(task: String? = nil,
981
981
  - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
982
982
  - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
983
983
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
984
+ - useSystemScm: Lets xcodebuild use system's scm configuration
984
985
 
985
986
  - returns: The absolute path to the generated ipa file
986
987
 
@@ -1029,7 +1030,8 @@ public func buildApp(workspace: String? = nil,
1029
1030
  analyzeBuildTime: Bool? = nil,
1030
1031
  xcprettyUtf: Bool? = nil,
1031
1032
  skipProfileDetection: Bool = false,
1032
- clonedSourcePackagesPath: String? = nil)
1033
+ clonedSourcePackagesPath: String? = nil,
1034
+ useSystemScm: Bool = false)
1033
1035
  {
1034
1036
  let command = RubyCommand(commandID: "", methodName: "build_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1035
1037
  RubyCommand.Argument(name: "project", value: project),
@@ -1074,7 +1076,8 @@ public func buildApp(workspace: String? = nil,
1074
1076
  RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
1075
1077
  RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
1076
1078
  RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
1077
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
1079
+ RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
1080
+ RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
1078
1081
  _ = runner.executeCommand(command)
1079
1082
  }
1080
1083
 
@@ -1123,6 +1126,7 @@ public func buildApp(workspace: String? = nil,
1123
1126
  - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
1124
1127
  - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
1125
1128
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
1129
+ - useSystemScm: Lets xcodebuild use system's scm configuration
1126
1130
 
1127
1131
  - returns: The absolute path to the generated ipa file
1128
1132
 
@@ -1168,7 +1172,8 @@ public func buildIosApp(workspace: String? = nil,
1168
1172
  analyzeBuildTime: Bool? = nil,
1169
1173
  xcprettyUtf: Bool? = nil,
1170
1174
  skipProfileDetection: Bool = false,
1171
- clonedSourcePackagesPath: String? = nil)
1175
+ clonedSourcePackagesPath: String? = nil,
1176
+ useSystemScm: Bool = false)
1172
1177
  {
1173
1178
  let command = RubyCommand(commandID: "", methodName: "build_ios_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1174
1179
  RubyCommand.Argument(name: "project", value: project),
@@ -1210,7 +1215,8 @@ public func buildIosApp(workspace: String? = nil,
1210
1215
  RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
1211
1216
  RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
1212
1217
  RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
1213
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
1218
+ RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
1219
+ RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
1214
1220
  _ = runner.executeCommand(command)
1215
1221
  }
1216
1222
 
@@ -1260,6 +1266,7 @@ public func buildIosApp(workspace: String? = nil,
1260
1266
  - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
1261
1267
  - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
1262
1268
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
1269
+ - useSystemScm: Lets xcodebuild use system's scm configuration
1263
1270
 
1264
1271
  - returns: The absolute path to the generated ipa file
1265
1272
 
@@ -1306,7 +1313,8 @@ public func buildMacApp(workspace: String? = nil,
1306
1313
  analyzeBuildTime: Bool? = nil,
1307
1314
  xcprettyUtf: Bool? = nil,
1308
1315
  skipProfileDetection: Bool = false,
1309
- clonedSourcePackagesPath: String? = nil)
1316
+ clonedSourcePackagesPath: String? = nil,
1317
+ useSystemScm: Bool = false)
1310
1318
  {
1311
1319
  let command = RubyCommand(commandID: "", methodName: "build_mac_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1312
1320
  RubyCommand.Argument(name: "project", value: project),
@@ -1349,7 +1357,8 @@ public func buildMacApp(workspace: String? = nil,
1349
1357
  RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
1350
1358
  RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
1351
1359
  RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
1352
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
1360
+ RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
1361
+ RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
1353
1362
  _ = runner.executeCommand(command)
1354
1363
  }
1355
1364
 
@@ -1861,9 +1870,9 @@ public func carthage(command: String = "bootstrap",
1861
1870
  - filename: The filename of certificate to store
1862
1871
  - outputPath: The path to a directory in which all certificates and private keys should be stored
1863
1872
  - keychainPath: Path to a custom keychain
1864
- - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
1873
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
1865
1874
  - 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
1866
- - platform: Set the provisioning profile's platform (ios, macos)
1875
+ - platform: Set the provisioning profile's platform (ios, macos, tvos)
1867
1876
 
1868
1877
  **Important**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
1869
1878
  Use this action to download the latest code signing identity.
@@ -3349,9 +3358,9 @@ public func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
3349
3358
  - filename: The filename of certificate to store
3350
3359
  - outputPath: The path to a directory in which all certificates and private keys should be stored
3351
3360
  - keychainPath: Path to a custom keychain
3352
- - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
3361
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
3353
3362
  - 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
3354
- - platform: Set the provisioning profile's platform (ios, macos)
3363
+ - platform: Set the provisioning profile's platform (ios, macos, tvos)
3355
3364
 
3356
3365
  **Important**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
3357
3366
  Use this action to download the latest code signing identity.
@@ -3992,6 +4001,7 @@ public func gradle(task: String? = nil,
3992
4001
  - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
3993
4002
  - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
3994
4003
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
4004
+ - useSystemScm: Lets xcodebuild use system's scm configuration
3995
4005
 
3996
4006
  - returns: The absolute path to the generated ipa file
3997
4007
 
@@ -4040,7 +4050,8 @@ public func gym(workspace: Any? = gymfile.workspace,
4040
4050
  analyzeBuildTime: Bool? = gymfile.analyzeBuildTime,
4041
4051
  xcprettyUtf: Bool? = gymfile.xcprettyUtf,
4042
4052
  skipProfileDetection: Bool = gymfile.skipProfileDetection,
4043
- clonedSourcePackagesPath: Any? = gymfile.clonedSourcePackagesPath)
4053
+ clonedSourcePackagesPath: Any? = gymfile.clonedSourcePackagesPath,
4054
+ useSystemScm: Bool = gymfile.useSystemScm)
4044
4055
  {
4045
4056
  let command = RubyCommand(commandID: "", methodName: "gym", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
4046
4057
  RubyCommand.Argument(name: "project", value: project),
@@ -4085,7 +4096,8 @@ public func gym(workspace: Any? = gymfile.workspace,
4085
4096
  RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
4086
4097
  RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
4087
4098
  RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
4088
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
4099
+ RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
4100
+ RubyCommand.Argument(name: "use_system_scm", value: useSystemScm)])
4089
4101
  _ = runner.executeCommand(command)
4090
4102
  }
4091
4103
 
@@ -4743,12 +4755,12 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4743
4755
  Alias for the `sync_code_signing` action
4744
4756
 
4745
4757
  - parameters:
4746
- - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id
4758
+ - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
4747
4759
  - additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
4748
4760
  - readonly: Only fetch existing certificates and profiles, don't generate new ones
4749
4761
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
4750
4762
  - skipProvisioningProfiles: Skip syncing provisioning profiles
4751
- - appIdentifier: The bundle identifier(s) of your app (comma-separated)
4763
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
4752
4764
  - 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)
4753
4765
  - 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)
4754
4766
  - username: Your Apple ID Username
@@ -4773,7 +4785,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4773
4785
  - s3Bucket: Name of the S3 bucket
4774
4786
  - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
4775
4787
  - keychainName: Keychain the items should be imported to
4776
- - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
4788
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
4777
4789
  - force: Renew the provisioning profiles every time you run match
4778
4790
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
4779
4791
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
@@ -6077,9 +6089,11 @@ public func rubyVersion() {
6077
6089
  - skipSlack: Don't publish to slack, even when an URL is given
6078
6090
  - slackOnlyOnFailure: Only post on Slack if the tests fail
6079
6091
  - destination: Use only if you're a pro, use the other options instead
6092
+ - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
6080
6093
  - customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
6081
6094
  - xcodebuildCommand: Allows for override of the default `xcodebuild` command
6082
6095
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
6096
+ - useSystemScm: Lets xcodebuild use system's scm configuration
6083
6097
  - failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer
6084
6098
 
6085
6099
  More information: https://docs.fastlane.tools/actions/scan/
@@ -6143,9 +6157,11 @@ public func runTests(workspace: String? = nil,
6143
6157
  skipSlack: Bool = false,
6144
6158
  slackOnlyOnFailure: Bool = false,
6145
6159
  destination: Any? = nil,
6160
+ catalystPlatform: String? = nil,
6146
6161
  customReportFileName: String? = nil,
6147
6162
  xcodebuildCommand: String = "env NSUnbufferedIO=YES xcodebuild",
6148
6163
  clonedSourcePackagesPath: String? = nil,
6164
+ useSystemScm: Bool = false,
6149
6165
  failBuild: Bool = true)
6150
6166
  {
6151
6167
  let command = RubyCommand(commandID: "", methodName: "run_tests", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -6207,9 +6223,11 @@ public func runTests(workspace: String? = nil,
6207
6223
  RubyCommand.Argument(name: "skip_slack", value: skipSlack),
6208
6224
  RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
6209
6225
  RubyCommand.Argument(name: "destination", value: destination),
6226
+ RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
6210
6227
  RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
6211
6228
  RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
6212
6229
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
6230
+ RubyCommand.Argument(name: "use_system_scm", value: useSystemScm),
6213
6231
  RubyCommand.Argument(name: "fail_build", value: failBuild)])
6214
6232
  _ = runner.executeCommand(command)
6215
6233
  }
@@ -6353,9 +6371,11 @@ public func say(text: Any,
6353
6371
  - skipSlack: Don't publish to slack, even when an URL is given
6354
6372
  - slackOnlyOnFailure: Only post on Slack if the tests fail
6355
6373
  - destination: Use only if you're a pro, use the other options instead
6374
+ - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
6356
6375
  - customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
6357
6376
  - xcodebuildCommand: Allows for override of the default `xcodebuild` command
6358
6377
  - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
6378
+ - useSystemScm: Lets xcodebuild use system's scm configuration
6359
6379
  - failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer
6360
6380
 
6361
6381
  More information: https://docs.fastlane.tools/actions/scan/
@@ -6419,9 +6439,11 @@ public func scan(workspace: Any? = scanfile.workspace,
6419
6439
  skipSlack: Bool = scanfile.skipSlack,
6420
6440
  slackOnlyOnFailure: Bool = scanfile.slackOnlyOnFailure,
6421
6441
  destination: Any? = scanfile.destination,
6442
+ catalystPlatform: Any? = scanfile.catalystPlatform,
6422
6443
  customReportFileName: Any? = scanfile.customReportFileName,
6423
6444
  xcodebuildCommand: Any = scanfile.xcodebuildCommand,
6424
6445
  clonedSourcePackagesPath: Any? = scanfile.clonedSourcePackagesPath,
6446
+ useSystemScm: Bool = scanfile.useSystemScm,
6425
6447
  failBuild: Bool = scanfile.failBuild)
6426
6448
  {
6427
6449
  let command = RubyCommand(commandID: "", methodName: "scan", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -6483,9 +6505,11 @@ public func scan(workspace: Any? = scanfile.workspace,
6483
6505
  RubyCommand.Argument(name: "skip_slack", value: skipSlack),
6484
6506
  RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
6485
6507
  RubyCommand.Argument(name: "destination", value: destination),
6508
+ RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
6486
6509
  RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
6487
6510
  RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
6488
6511
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
6512
+ RubyCommand.Argument(name: "use_system_scm", value: useSystemScm),
6489
6513
  RubyCommand.Argument(name: "fail_build", value: failBuild)])
6490
6514
  _ = runner.executeCommand(command)
6491
6515
  }
@@ -7119,7 +7143,7 @@ public func slather(buildDirectory: String? = nil,
7119
7143
  ignore: [String]? = nil,
7120
7144
  verbose: Bool? = nil,
7121
7145
  useBundleExec: Bool = false,
7122
- binaryBasename: Bool = false,
7146
+ binaryBasename: [String]? = nil,
7123
7147
  binaryFile: [String]? = nil,
7124
7148
  arch: String? = nil,
7125
7149
  sourceFiles: Bool = false,
@@ -7439,6 +7463,7 @@ public func splunkmint(dsym: String? = nil,
7439
7463
 
7440
7464
  - parameters:
7441
7465
  - command: The swift command (one of: build, test, clean, reset, update, resolve, generate-xcodeproj, init)
7466
+ - enableCodeCoverage: Enables code coverage for the generated Xcode project when using the generate-xcodeproj command
7442
7467
  - buildPath: Specify build/cache directory [default: ./.build]
7443
7468
  - packagePath: Change working directory before any other operation
7444
7469
  - xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
@@ -7449,6 +7474,7 @@ public func splunkmint(dsym: String? = nil,
7449
7474
  - verbose: Increase verbosity of informational output
7450
7475
  */
7451
7476
  public func spm(command: String = "build",
7477
+ enableCodeCoverage: Any? = nil,
7452
7478
  buildPath: String? = nil,
7453
7479
  packagePath: String? = nil,
7454
7480
  xcconfig: String? = nil,
@@ -7459,6 +7485,7 @@ public func spm(command: String = "build",
7459
7485
  verbose: Bool = false)
7460
7486
  {
7461
7487
  let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
7488
+ RubyCommand.Argument(name: "enable_code_coverage", value: enableCodeCoverage),
7462
7489
  RubyCommand.Argument(name: "build_path", value: buildPath),
7463
7490
  RubyCommand.Argument(name: "package_path", value: packagePath),
7464
7491
  RubyCommand.Argument(name: "xcconfig", value: xcconfig),
@@ -7508,7 +7535,7 @@ public func ssh(username: String,
7508
7535
  - versionCode: Version code (used when updating rollout or promoting specific versions)
7509
7536
  - releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress
7510
7537
  - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
7511
- - rollout: The percentage of the user fraction when uploading to the rollout track
7538
+ - rollout: The percentage of the user fraction when uploading to the rollout track (setting to 1 will complete the rollout)
7512
7539
  - metadataPath: Path to the directory containing the metadata files
7513
7540
  - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google
7514
7541
  - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account)
@@ -7673,12 +7700,12 @@ public func swiftlint(mode: Any = "lint",
7673
7700
  Easily sync your certificates and profiles across your team (via _match_)
7674
7701
 
7675
7702
  - parameters:
7676
- - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id
7703
+ - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
7677
7704
  - additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
7678
7705
  - readonly: Only fetch existing certificates and profiles, don't generate new ones
7679
7706
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
7680
7707
  - skipProvisioningProfiles: Skip syncing provisioning profiles
7681
- - appIdentifier: The bundle identifier(s) of your app (comma-separated)
7708
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
7682
7709
  - 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)
7683
7710
  - 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)
7684
7711
  - username: Your Apple ID Username
@@ -7703,7 +7730,7 @@ public func swiftlint(mode: Any = "lint",
7703
7730
  - s3Bucket: Name of the S3 bucket
7704
7731
  - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
7705
7732
  - keychainName: Keychain the items should be imported to
7706
- - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
7733
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
7707
7734
  - force: Renew the provisioning profiles every time you run match
7708
7735
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
7709
7736
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
@@ -8683,7 +8710,7 @@ public func uploadToAppStore(apiKeyPath: String? = nil,
8683
8710
  - versionCode: Version code (used when updating rollout or promoting specific versions)
8684
8711
  - releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress
8685
8712
  - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
8686
- - rollout: The percentage of the user fraction when uploading to the rollout track
8713
+ - rollout: The percentage of the user fraction when uploading to the rollout track (setting to 1 will complete the rollout)
8687
8714
  - metadataPath: Path to the directory containing the metadata files
8688
8715
  - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google
8689
8716
  - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account)
@@ -9116,6 +9143,7 @@ public func xcexport() {
9116
9143
  - version: The version number of the version of Xcode to install
9117
9144
  - username: Your Apple ID Username
9118
9145
  - teamId: The ID of your team if you're in multiple teams
9146
+ - downloadRetryAttempts: Number of times the download will be retried in case of failure
9119
9147
 
9120
9148
  - returns: The path to the newly installed Xcode version
9121
9149
 
@@ -9123,11 +9151,13 @@ public func xcexport() {
9123
9151
  */
9124
9152
  @discardableResult public func xcodeInstall(version: String,
9125
9153
  username: String,
9126
- teamId: String? = nil) -> String
9154
+ teamId: String? = nil,
9155
+ downloadRetryAttempts: Int = 3) -> String
9127
9156
  {
9128
9157
  let command = RubyCommand(commandID: "", methodName: "xcode_install", className: nil, args: [RubyCommand.Argument(name: "version", value: version),
9129
9158
  RubyCommand.Argument(name: "username", value: username),
9130
- RubyCommand.Argument(name: "team_id", value: teamId)])
9159
+ RubyCommand.Argument(name: "team_id", value: teamId),
9160
+ RubyCommand.Argument(name: "download_retry_attempts", value: downloadRetryAttempts)])
9131
9161
  return runner.executeCommand(command)
9132
9162
  }
9133
9163
 
@@ -9253,7 +9283,7 @@ public func xcov(workspace: String? = nil,
9253
9283
  coverallsServiceJobId: String? = nil,
9254
9284
  coverallsRepoToken: String? = nil,
9255
9285
  xcconfig: String? = nil,
9256
- ideFoundationPath: String = "/Applications/Xcode-11.7.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9286
+ ideFoundationPath: String = "/Applications/Xcode-12.2.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9257
9287
  legacySupport: Bool = false)
9258
9288
  {
9259
9289
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -9399,4 +9429,4 @@ public let snapshotfile = Snapshotfile()
9399
9429
 
9400
9430
  // Please don't remove the lines below
9401
9431
  // They are used to detect outdated files
9402
- // FastlaneRunnerAPIVersion [0.9.100]
9432
+ // FastlaneRunnerAPIVersion [0.9.105]