fastlane 2.160.0 → 2.165.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +78 -78
  3. data/cert/lib/cert/options.rb +28 -1
  4. data/cert/lib/cert/runner.rb +51 -34
  5. data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -4
  6. data/deliver/lib/deliver/module.rb +2 -0
  7. data/deliver/lib/deliver/options.rb +5 -5
  8. data/deliver/lib/deliver/queue_worker.rb +14 -29
  9. data/deliver/lib/deliver/upload_metadata.rb +20 -5
  10. data/deliver/lib/deliver/upload_screenshots.rb +28 -13
  11. data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
  12. data/fastlane/lib/fastlane/actions/actions_helper.rb +20 -1
  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 +15 -1
  15. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +1 -0
  16. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +2 -2
  17. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +2 -2
  18. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -1
  19. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +2 -2
  20. data/fastlane/lib/fastlane/actions/docs/run_tests.md +2 -2
  21. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +12 -3
  22. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -2
  23. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  24. data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -0
  25. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +13 -2
  26. data/fastlane/lib/fastlane/actions/get_certificates.rb +1 -0
  27. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -0
  28. data/fastlane/lib/fastlane/actions/import_from_git.rb +9 -1
  29. data/fastlane/lib/fastlane/actions/is_ci.rb +1 -1
  30. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +15 -0
  31. data/fastlane/lib/fastlane/actions/register_device.rb +46 -5
  32. data/fastlane/lib/fastlane/actions/register_devices.rb +50 -16
  33. data/fastlane/lib/fastlane/actions/set_changelog.rb +31 -3
  34. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -0
  35. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +3 -2
  36. data/fastlane/lib/fastlane/fast_file.rb +74 -23
  37. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
  38. data/fastlane/lib/fastlane/version.rb +1 -1
  39. data/fastlane/swift/Deliverfile.swift +1 -1
  40. data/fastlane/swift/DeliverfileProtocol.swift +4 -4
  41. data/fastlane/swift/Fastlane.swift +120 -27
  42. data/fastlane/swift/Gymfile.swift +1 -1
  43. data/fastlane/swift/GymfileProtocol.swift +1 -1
  44. data/fastlane/swift/LaneFileProtocol.swift +28 -36
  45. data/fastlane/swift/MainProcess.swift +1 -1
  46. data/fastlane/swift/Matchfile.swift +1 -1
  47. data/fastlane/swift/MatchfileProtocol.swift +21 -5
  48. data/fastlane/swift/Precheckfile.swift +1 -1
  49. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  50. data/fastlane/swift/Scanfile.swift +1 -1
  51. data/fastlane/swift/ScanfileProtocol.swift +1 -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/main.swift +1 -1
  57. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +6 -7
  58. data/fastlane_core/lib/fastlane_core/device_manager.rb +8 -4
  59. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  60. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +3 -3
  61. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
  62. data/match/lib/match/generator.rb +6 -1
  63. data/match/lib/match/importer.rb +63 -18
  64. data/match/lib/match/migrate.rb +13 -2
  65. data/match/lib/match/nuke.rb +65 -22
  66. data/match/lib/match/options.rb +34 -3
  67. data/match/lib/match/runner.rb +38 -10
  68. data/match/lib/match/spaceship_ensure.rb +27 -21
  69. data/match/lib/match/storage/google_cloud_storage.rb +20 -3
  70. data/match/lib/match/storage/s3_storage.rb +19 -3
  71. data/scan/lib/scan/detect_values.rb +5 -8
  72. data/scan/lib/scan/runner.rb +2 -1
  73. data/sigh/lib/assets/resign.sh +1 -1
  74. data/sigh/lib/sigh/download_all.rb +16 -4
  75. data/sigh/lib/sigh/options.rb +21 -0
  76. data/sigh/lib/sigh/runner.rb +83 -41
  77. data/snapshot/lib/assets/SnapshotHelper.swift +4 -0
  78. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
  79. data/spaceship/README.md +1 -1
  80. data/spaceship/lib/spaceship/client.rb +9 -4
  81. data/spaceship/lib/spaceship/connect_api.rb +27 -0
  82. data/spaceship/lib/spaceship/connect_api/api_client.rb +12 -3
  83. data/spaceship/lib/spaceship/connect_api/client.rb +20 -7
  84. data/spaceship/lib/spaceship/connect_api/models/app.rb +51 -0
  85. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +3 -1
  86. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +2 -1
  87. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +42 -0
  88. data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
  89. data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
  90. data/spaceship/lib/spaceship/connect_api/models/device.rb +5 -0
  91. data/spaceship/lib/spaceship/connect_api/models/profile.rb +7 -1
  92. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +59 -0
  93. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +45 -2
  94. data/spaceship/lib/spaceship/connect_api/spaceship.rb +7 -4
  95. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +13 -0
  96. data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
  97. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +75 -1
  98. data/spaceship/lib/spaceship/connect_api/users/users.rb +40 -0
  99. data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +11 -5
  100. data/supply/lib/supply/uploader.rb +1 -1
  101. metadata +19 -15
@@ -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,
@@ -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)
@@ -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"',
@@ -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
@@ -179,6 +179,7 @@ Style/MethodCallWithArgsParentheses:
179
179
  - private_lane
180
180
  - platform
181
181
  - to
182
+ - not_to
182
183
  - describe
183
184
  - it
184
185
  - be
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.160.0'.freeze
2
+ VERSION = '2.165.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.160.0
20
+ // Generated with fastlane 2.165.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.43]
259
+ // FastlaneRunnerAPIVersion [0.9.48]
@@ -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,
@@ -1844,6 +1853,8 @@ public func carthage(command: String = "bootstrap",
1844
1853
  - type: Create specific certificate type (takes precedence over :development)
1845
1854
  - force: Create a certificate even if an existing certificate exists
1846
1855
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
1856
+ - 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)
1857
+ - 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)
1847
1858
  - username: Your Apple ID Username
1848
1859
  - teamId: The ID of your Developer Portal team if you're in multiple teams
1849
1860
  - teamName: The name of your Developer Portal team if you're in multiple teams
@@ -1851,6 +1862,7 @@ public func carthage(command: String = "bootstrap",
1851
1862
  - outputPath: The path to a directory in which all certificates and private keys should be stored
1852
1863
  - keychainPath: Path to a custom keychain
1853
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
1865
+ - 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
1854
1866
  - platform: Set the provisioning profile's platform (ios, macos)
1855
1867
 
1856
1868
  **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.
@@ -1860,6 +1872,8 @@ public func cert(development: Bool = false,
1860
1872
  type: String? = nil,
1861
1873
  force: Bool = false,
1862
1874
  generateAppleCerts: Bool = true,
1875
+ apiKeyPath: String? = nil,
1876
+ apiKey: [String: Any]? = nil,
1863
1877
  username: String,
1864
1878
  teamId: String? = nil,
1865
1879
  teamName: String? = nil,
@@ -1867,12 +1881,15 @@ public func cert(development: Bool = false,
1867
1881
  outputPath: String = ".",
1868
1882
  keychainPath: String,
1869
1883
  keychainPassword: String? = nil,
1884
+ skipSetPartitionList: Bool = false,
1870
1885
  platform: String = "ios")
1871
1886
  {
1872
1887
  let command = RubyCommand(commandID: "", methodName: "cert", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
1873
1888
  RubyCommand.Argument(name: "type", value: type),
1874
1889
  RubyCommand.Argument(name: "force", value: force),
1875
1890
  RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
1891
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
1892
+ RubyCommand.Argument(name: "api_key", value: apiKey),
1876
1893
  RubyCommand.Argument(name: "username", value: username),
1877
1894
  RubyCommand.Argument(name: "team_id", value: teamId),
1878
1895
  RubyCommand.Argument(name: "team_name", value: teamName),
@@ -1880,6 +1897,7 @@ public func cert(development: Bool = false,
1880
1897
  RubyCommand.Argument(name: "output_path", value: outputPath),
1881
1898
  RubyCommand.Argument(name: "keychain_path", value: keychainPath),
1882
1899
  RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
1900
+ RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
1883
1901
  RubyCommand.Argument(name: "platform", value: platform)])
1884
1902
  _ = runner.executeCommand(command)
1885
1903
  }
@@ -2591,7 +2609,7 @@ public func deleteKeychain(name: String? = nil,
2591
2609
  - skipScreenshots: Don't upload the screenshots
2592
2610
  - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
2593
2611
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
2594
- - force: Skip the HTML report file verification
2612
+ - force: Skip verification of HTML preview file
2595
2613
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
2596
2614
  - submitForReview: Submit the new version for Review after uploading everything
2597
2615
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
@@ -2639,7 +2657,7 @@ public func deleteKeychain(name: String? = nil,
2639
2657
 
2640
2658
  Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
2641
2659
 
2642
- 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.
2643
2661
  This is useful when running _fastlane_ on your Continuous Integration server:
2644
2662
  `_upload_to_app_store_(force: true)`
2645
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.
@@ -2665,7 +2683,7 @@ public func deliver(apiKeyPath: Any? = deliverfile.apiKeyPath,
2665
2683
  overwriteScreenshots: Bool = deliverfile.overwriteScreenshots,
2666
2684
  submitForReview: Bool = deliverfile.submitForReview,
2667
2685
  rejectIfPossible: Bool = deliverfile.rejectIfPossible,
2668
- automaticRelease: Bool = deliverfile.automaticRelease,
2686
+ automaticRelease: Bool? = deliverfile.automaticRelease,
2669
2687
  autoReleaseDate: Int? = deliverfile.autoReleaseDate,
2670
2688
  phasedRelease: Bool = deliverfile.phasedRelease,
2671
2689
  resetRatings: Bool = deliverfile.resetRatings,
@@ -3006,16 +3024,19 @@ public func ensureGitBranch(branch: String = "master") {
3006
3024
  - parameters:
3007
3025
  - showUncommittedChanges: The flag whether to show uncommitted changes if the repo is dirty
3008
3026
  - showDiff: The flag whether to show the git diff if the repo is dirty
3027
+ - ignored: The flag whether to ignore file the git status if the repo is dirty
3009
3028
 
3010
3029
  A sanity check to make sure you are working in a repo that is clean.
3011
3030
  Especially useful to put at the beginning of your Fastfile in the `before_all` block, if some of your other actions will touch your filesystem, do things to your git repo, or just as a general reminder to save your work.
3012
3031
  Also needed as a prerequisite for some other actions like `reset_git_repo`.
3013
3032
  */
3014
3033
  public func ensureGitStatusClean(showUncommittedChanges: Bool = false,
3015
- showDiff: Bool = false)
3034
+ showDiff: Bool = false,
3035
+ ignored: String? = nil)
3016
3036
  {
3017
3037
  let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: [RubyCommand.Argument(name: "show_uncommitted_changes", value: showUncommittedChanges),
3018
- RubyCommand.Argument(name: "show_diff", value: showDiff)])
3038
+ RubyCommand.Argument(name: "show_diff", value: showDiff),
3039
+ RubyCommand.Argument(name: "ignored", value: ignored)])
3019
3040
  _ = runner.executeCommand(command)
3020
3041
  }
3021
3042
 
@@ -3320,6 +3341,8 @@ public func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
3320
3341
  - type: Create specific certificate type (takes precedence over :development)
3321
3342
  - force: Create a certificate even if an existing certificate exists
3322
3343
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
3344
+ - 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)
3345
+ - 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)
3323
3346
  - username: Your Apple ID Username
3324
3347
  - teamId: The ID of your Developer Portal team if you're in multiple teams
3325
3348
  - teamName: The name of your Developer Portal team if you're in multiple teams
@@ -3327,6 +3350,7 @@ public func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
3327
3350
  - outputPath: The path to a directory in which all certificates and private keys should be stored
3328
3351
  - keychainPath: Path to a custom keychain
3329
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
3353
+ - 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
3330
3354
  - platform: Set the provisioning profile's platform (ios, macos)
3331
3355
 
3332
3356
  **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.
@@ -3336,6 +3360,8 @@ public func getCertificates(development: Bool = false,
3336
3360
  type: String? = nil,
3337
3361
  force: Bool = false,
3338
3362
  generateAppleCerts: Bool = true,
3363
+ apiKeyPath: String? = nil,
3364
+ apiKey: [String: Any]? = nil,
3339
3365
  username: String,
3340
3366
  teamId: String? = nil,
3341
3367
  teamName: String? = nil,
@@ -3343,12 +3369,15 @@ public func getCertificates(development: Bool = false,
3343
3369
  outputPath: String = ".",
3344
3370
  keychainPath: String,
3345
3371
  keychainPassword: String? = nil,
3372
+ skipSetPartitionList: Bool = false,
3346
3373
  platform: String = "ios")
3347
3374
  {
3348
3375
  let command = RubyCommand(commandID: "", methodName: "get_certificates", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
3349
3376
  RubyCommand.Argument(name: "type", value: type),
3350
3377
  RubyCommand.Argument(name: "force", value: force),
3351
3378
  RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
3379
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
3380
+ RubyCommand.Argument(name: "api_key", value: apiKey),
3352
3381
  RubyCommand.Argument(name: "username", value: username),
3353
3382
  RubyCommand.Argument(name: "team_id", value: teamId),
3354
3383
  RubyCommand.Argument(name: "team_name", value: teamName),
@@ -3356,6 +3385,7 @@ public func getCertificates(development: Bool = false,
3356
3385
  RubyCommand.Argument(name: "output_path", value: outputPath),
3357
3386
  RubyCommand.Argument(name: "keychain_path", value: keychainPath),
3358
3387
  RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
3388
+ RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
3359
3389
  RubyCommand.Argument(name: "platform", value: platform)])
3360
3390
  _ = runner.executeCommand(command)
3361
3391
  }
@@ -3492,6 +3522,8 @@ public func getManagedPlayStorePublishingRights(jsonKey: String? = nil,
3492
3522
  - skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action
3493
3523
  - force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles
3494
3524
  - appIdentifier: The bundle identifier of your app
3525
+ - 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)
3526
+ - 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)
3495
3527
  - username: Your Apple ID Username
3496
3528
  - teamId: The ID of your Developer Portal team if you're in multiple teams
3497
3529
  - teamName: The name of your Developer Portal team if you're in multiple teams
@@ -3518,6 +3550,8 @@ public func getProvisioningProfile(adhoc: Bool = false,
3518
3550
  skipInstall: Bool = false,
3519
3551
  force: Bool = false,
3520
3552
  appIdentifier: String,
3553
+ apiKeyPath: String? = nil,
3554
+ apiKey: [String: Any]? = nil,
3521
3555
  username: String,
3522
3556
  teamId: String? = nil,
3523
3557
  teamName: String? = nil,
@@ -3540,6 +3574,8 @@ public func getProvisioningProfile(adhoc: Bool = false,
3540
3574
  RubyCommand.Argument(name: "skip_install", value: skipInstall),
3541
3575
  RubyCommand.Argument(name: "force", value: force),
3542
3576
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
3577
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
3578
+ RubyCommand.Argument(name: "api_key", value: apiKey),
3543
3579
  RubyCommand.Argument(name: "username", value: username),
3544
3580
  RubyCommand.Argument(name: "team_id", value: teamId),
3545
3581
  RubyCommand.Argument(name: "team_name", value: teamName),
@@ -4568,6 +4604,8 @@ public func jira(url: String,
4568
4604
  Fetches most recent build number from TestFlight
4569
4605
 
4570
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)
4571
4609
  - live: Query the live version (ready-for-sale)
4572
4610
  - appIdentifier: The bundle identifier of your app
4573
4611
  - username: Your Apple ID Username
@@ -4582,7 +4620,9 @@ public func jira(url: String,
4582
4620
  Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
4583
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.
4584
4622
  */
4585
- @discardableResult public func latestTestflightBuildNumber(live: Bool = false,
4623
+ @discardableResult public func latestTestflightBuildNumber(apiKeyPath: String? = nil,
4624
+ apiKey: [String: Any]? = nil,
4625
+ live: Bool = false,
4586
4626
  appIdentifier: String,
4587
4627
  username: String,
4588
4628
  version: String? = nil,
@@ -4591,7 +4631,9 @@ public func jira(url: String,
4591
4631
  teamId: Any? = nil,
4592
4632
  teamName: String? = nil) -> Int
4593
4633
  {
4594
- 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),
4595
4637
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
4596
4638
  RubyCommand.Argument(name: "username", value: username),
4597
4639
  RubyCommand.Argument(name: "version", value: version),
@@ -4706,7 +4748,9 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4706
4748
  - readonly: Only fetch existing certificates and profiles, don't generate new ones
4707
4749
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
4708
4750
  - skipProvisioningProfiles: Skip syncing provisioning profiles
4709
- - 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)
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)
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)
4710
4754
  - username: Your Apple ID Username
4711
4755
  - teamId: The ID of your Developer Portal team if you're in multiple teams
4712
4756
  - teamName: The name of your Developer Portal team if you're in multiple teams
@@ -4718,7 +4762,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4718
4762
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
4719
4763
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
4720
4764
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
4721
- - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
4765
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
4722
4766
  - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
4723
4767
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
4724
4768
  - googleCloudKeysFile: Path to the gc_keys.json file
@@ -4739,7 +4783,9 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4739
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")
4740
4784
  - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
4741
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
4742
4787
  - outputPath: Path in which to export certificates, key and profile
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
4743
4789
  - verbose: Print out extra information and all commands
4744
4790
 
4745
4791
  More information: https://docs.fastlane.tools/actions/match/
@@ -4750,7 +4796,9 @@ public func match(type: Any = matchfile.type,
4750
4796
  generateAppleCerts: Bool = matchfile.generateAppleCerts,
4751
4797
  skipProvisioningProfiles: Bool = matchfile.skipProvisioningProfiles,
4752
4798
  appIdentifier: [String] = matchfile.appIdentifier,
4753
- username: Any = matchfile.username,
4799
+ apiKeyPath: Any? = matchfile.apiKeyPath,
4800
+ apiKey: [String: Any]? = matchfile.apiKey,
4801
+ username: Any? = matchfile.username,
4754
4802
  teamId: Any? = matchfile.teamId,
4755
4803
  teamName: Any? = matchfile.teamName,
4756
4804
  storageMode: Any = matchfile.storageMode,
@@ -4782,7 +4830,9 @@ public func match(type: Any = matchfile.type,
4782
4830
  templateName: Any? = matchfile.templateName,
4783
4831
  profileName: Any? = matchfile.profileName,
4784
4832
  failOnNameTaken: Bool = matchfile.failOnNameTaken,
4833
+ skipCertificateMatching: Bool = matchfile.skipCertificateMatching,
4785
4834
  outputPath: Any? = matchfile.outputPath,
4835
+ skipSetPartitionList: Bool = matchfile.skipSetPartitionList,
4786
4836
  verbose: Bool = matchfile.verbose)
4787
4837
  {
4788
4838
  let command = RubyCommand(commandID: "", methodName: "match", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
@@ -4791,6 +4841,8 @@ public func match(type: Any = matchfile.type,
4791
4841
  RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
4792
4842
  RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
4793
4843
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
4844
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
4845
+ RubyCommand.Argument(name: "api_key", value: apiKey),
4794
4846
  RubyCommand.Argument(name: "username", value: username),
4795
4847
  RubyCommand.Argument(name: "team_id", value: teamId),
4796
4848
  RubyCommand.Argument(name: "team_name", value: teamName),
@@ -4823,7 +4875,9 @@ public func match(type: Any = matchfile.type,
4823
4875
  RubyCommand.Argument(name: "template_name", value: templateName),
4824
4876
  RubyCommand.Argument(name: "profile_name", value: profileName),
4825
4877
  RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
4878
+ RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
4826
4879
  RubyCommand.Argument(name: "output_path", value: outputPath),
4880
+ RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
4827
4881
  RubyCommand.Argument(name: "verbose", value: verbose)])
4828
4882
  _ = runner.executeCommand(command)
4829
4883
  }
@@ -5736,7 +5790,10 @@ public func recreateSchemes(project: String) {
5736
5790
 
5737
5791
  - parameters:
5738
5792
  - name: Provide the name of the device to register as
5793
+ - platform: Provide the platform of the device to register as (ios, mac)
5739
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)
5740
5797
  - teamId: The ID of your Developer Portal team if you're in multiple teams
5741
5798
  - teamName: The name of your Developer Portal team if you're in multiple teams
5742
5799
  - username: Optional: Your Apple ID
@@ -5746,13 +5803,19 @@ public func recreateSchemes(project: String) {
5746
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.
5747
5804
  */
5748
5805
  @discardableResult public func registerDevice(name: String,
5806
+ platform: String = "ios",
5749
5807
  udid: String,
5808
+ apiKeyPath: String? = nil,
5809
+ apiKey: [String: Any]? = nil,
5750
5810
  teamId: String? = nil,
5751
5811
  teamName: String? = nil,
5752
- username: String) -> String
5812
+ username: String? = nil) -> String
5753
5813
  {
5754
5814
  let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
5815
+ RubyCommand.Argument(name: "platform", value: platform),
5755
5816
  RubyCommand.Argument(name: "udid", value: udid),
5817
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
5818
+ RubyCommand.Argument(name: "api_key", value: apiKey),
5756
5819
  RubyCommand.Argument(name: "team_id", value: teamId),
5757
5820
  RubyCommand.Argument(name: "team_name", value: teamName),
5758
5821
  RubyCommand.Argument(name: "username", value: username)])
@@ -5765,6 +5828,8 @@ public func recreateSchemes(project: String) {
5765
5828
  - parameters:
5766
5829
  - devices: A hash of devices, with the name as key and the UDID as value
5767
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)
5768
5833
  - teamId: The ID of your Developer Portal team if you're in multiple teams
5769
5834
  - teamName: The name of your Developer Portal team if you're in multiple teams
5770
5835
  - username: Optional: Your Apple ID
@@ -5776,6 +5841,8 @@ public func recreateSchemes(project: String) {
5776
5841
  */
5777
5842
  public func registerDevices(devices: [String: Any]? = nil,
5778
5843
  devicesFile: String? = nil,
5844
+ apiKeyPath: String? = nil,
5845
+ apiKey: [String: Any]? = nil,
5779
5846
  teamId: String? = nil,
5780
5847
  teamName: String? = nil,
5781
5848
  username: String,
@@ -5783,6 +5850,8 @@ public func registerDevices(devices: [String: Any]? = nil,
5783
5850
  {
5784
5851
  let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: [RubyCommand.Argument(name: "devices", value: devices),
5785
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),
5786
5855
  RubyCommand.Argument(name: "team_id", value: teamId),
5787
5856
  RubyCommand.Argument(name: "team_name", value: teamName),
5788
5857
  RubyCommand.Argument(name: "username", value: username),
@@ -6546,6 +6615,8 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
6546
6615
  Set the changelog for all languages on App Store Connect
6547
6616
 
6548
6617
  - parameters:
6618
+ - 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)
6619
+ - 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)
6549
6620
  - appIdentifier: The bundle identifier of your app
6550
6621
  - username: Your Apple ID Username
6551
6622
  - version: The version number to create/update
@@ -6558,15 +6629,19 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
6558
6629
  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.
6559
6630
  Defining the version is optional. _fastlane_ will try to automatically detect it if you don't provide one.
6560
6631
  */
6561
- public func setChangelog(appIdentifier: String,
6562
- username: String,
6632
+ public func setChangelog(apiKeyPath: String? = nil,
6633
+ apiKey: [String: Any]? = nil,
6634
+ appIdentifier: String,
6635
+ username: String? = nil,
6563
6636
  version: String? = nil,
6564
6637
  changelog: String? = nil,
6565
6638
  teamId: Any? = nil,
6566
6639
  teamName: String? = nil,
6567
6640
  platform: String = "ios")
6568
6641
  {
6569
- let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
6642
+ let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
6643
+ RubyCommand.Argument(name: "api_key", value: apiKey),
6644
+ RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
6570
6645
  RubyCommand.Argument(name: "username", value: username),
6571
6646
  RubyCommand.Argument(name: "version", value: version),
6572
6647
  RubyCommand.Argument(name: "changelog", value: changelog),
@@ -6808,6 +6883,8 @@ public func setupTravis(force: Bool = false) {
6808
6883
  - skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action
6809
6884
  - force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles
6810
6885
  - appIdentifier: The bundle identifier of your app
6886
+ - 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)
6887
+ - 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)
6811
6888
  - username: Your Apple ID Username
6812
6889
  - teamId: The ID of your Developer Portal team if you're in multiple teams
6813
6890
  - teamName: The name of your Developer Portal team if you're in multiple teams
@@ -6834,6 +6911,8 @@ public func sigh(adhoc: Bool = false,
6834
6911
  skipInstall: Bool = false,
6835
6912
  force: Bool = false,
6836
6913
  appIdentifier: String,
6914
+ apiKeyPath: String? = nil,
6915
+ apiKey: [String: Any]? = nil,
6837
6916
  username: String,
6838
6917
  teamId: String? = nil,
6839
6918
  teamName: String? = nil,
@@ -6856,6 +6935,8 @@ public func sigh(adhoc: Bool = false,
6856
6935
  RubyCommand.Argument(name: "skip_install", value: skipInstall),
6857
6936
  RubyCommand.Argument(name: "force", value: force),
6858
6937
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
6938
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
6939
+ RubyCommand.Argument(name: "api_key", value: apiKey),
6859
6940
  RubyCommand.Argument(name: "username", value: username),
6860
6941
  RubyCommand.Argument(name: "team_id", value: teamId),
6861
6942
  RubyCommand.Argument(name: "team_name", value: teamName),
@@ -7597,7 +7678,9 @@ public func swiftlint(mode: Any = "lint",
7597
7678
  - readonly: Only fetch existing certificates and profiles, don't generate new ones
7598
7679
  - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
7599
7680
  - skipProvisioningProfiles: Skip syncing provisioning profiles
7600
- - appIdentifier: The bundle identifier(s) of your app (comma-separated)
7681
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
7682
+ - 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
+ - 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)
7601
7684
  - username: Your Apple ID Username
7602
7685
  - teamId: The ID of your Developer Portal team if you're in multiple teams
7603
7686
  - teamName: The name of your Developer Portal team if you're in multiple teams
@@ -7609,7 +7692,7 @@ public func swiftlint(mode: Any = "lint",
7609
7692
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
7610
7693
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
7611
7694
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
7612
- - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
7695
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
7613
7696
  - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
7614
7697
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
7615
7698
  - googleCloudKeysFile: Path to the gc_keys.json file
@@ -7630,7 +7713,9 @@ public func swiftlint(mode: Any = "lint",
7630
7713
  - 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")
7631
7714
  - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
7632
7715
  - 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
7716
+ - 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
7633
7717
  - outputPath: Path in which to export certificates, key and profile
7718
+ - 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
7634
7719
  - verbose: Print out extra information and all commands
7635
7720
 
7636
7721
  More information: https://docs.fastlane.tools/actions/match/
@@ -7641,7 +7726,9 @@ public func syncCodeSigning(type: String = "development",
7641
7726
  generateAppleCerts: Bool = true,
7642
7727
  skipProvisioningProfiles: Bool = false,
7643
7728
  appIdentifier: [String],
7644
- username: String,
7729
+ apiKeyPath: String? = nil,
7730
+ apiKey: [String: Any]? = nil,
7731
+ username: String? = nil,
7645
7732
  teamId: String? = nil,
7646
7733
  teamName: String? = nil,
7647
7734
  storageMode: String = "git",
@@ -7673,7 +7760,9 @@ public func syncCodeSigning(type: String = "development",
7673
7760
  templateName: String? = nil,
7674
7761
  profileName: String? = nil,
7675
7762
  failOnNameTaken: Bool = false,
7763
+ skipCertificateMatching: Bool = false,
7676
7764
  outputPath: String? = nil,
7765
+ skipSetPartitionList: Bool = false,
7677
7766
  verbose: Bool = false)
7678
7767
  {
7679
7768
  let command = RubyCommand(commandID: "", methodName: "sync_code_signing", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
@@ -7682,6 +7771,8 @@ public func syncCodeSigning(type: String = "development",
7682
7771
  RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
7683
7772
  RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
7684
7773
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
7774
+ RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
7775
+ RubyCommand.Argument(name: "api_key", value: apiKey),
7685
7776
  RubyCommand.Argument(name: "username", value: username),
7686
7777
  RubyCommand.Argument(name: "team_id", value: teamId),
7687
7778
  RubyCommand.Argument(name: "team_name", value: teamName),
@@ -7714,7 +7805,9 @@ public func syncCodeSigning(type: String = "development",
7714
7805
  RubyCommand.Argument(name: "template_name", value: templateName),
7715
7806
  RubyCommand.Argument(name: "profile_name", value: profileName),
7716
7807
  RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
7808
+ RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
7717
7809
  RubyCommand.Argument(name: "output_path", value: outputPath),
7810
+ RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
7718
7811
  RubyCommand.Argument(name: "verbose", value: verbose)])
7719
7812
  _ = runner.executeCommand(command)
7720
7813
  }
@@ -8400,7 +8493,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
8400
8493
  - skipScreenshots: Don't upload the screenshots
8401
8494
  - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
8402
8495
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
8403
- - force: Skip the HTML report file verification
8496
+ - force: Skip verification of HTML preview file
8404
8497
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
8405
8498
  - submitForReview: Submit the new version for Review after uploading everything
8406
8499
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
@@ -8448,7 +8541,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
8448
8541
 
8449
8542
  Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
8450
8543
 
8451
- If you don't want a PDF report for App Store builds, use the `:force` option.
8544
+ If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
8452
8545
  This is useful when running _fastlane_ on your Continuous Integration server:
8453
8546
  `_upload_to_app_store_(force: true)`
8454
8547
  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.
@@ -8474,7 +8567,7 @@ public func uploadToAppStore(apiKeyPath: String? = nil,
8474
8567
  overwriteScreenshots: Bool = false,
8475
8568
  submitForReview: Bool = false,
8476
8569
  rejectIfPossible: Bool = false,
8477
- automaticRelease: Bool = false,
8570
+ automaticRelease: Bool? = nil,
8478
8571
  autoReleaseDate: Int? = nil,
8479
8572
  phasedRelease: Bool = false,
8480
8573
  resetRatings: Bool = false,
@@ -9160,7 +9253,7 @@ public func xcov(workspace: String? = nil,
9160
9253
  coverallsServiceJobId: String? = nil,
9161
9254
  coverallsRepoToken: String? = nil,
9162
9255
  xcconfig: String? = nil,
9163
- ideFoundationPath: String = "/Applications/Xcode-11.5.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9256
+ ideFoundationPath: String = "/Applications/Xcode-12.0.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9164
9257
  legacySupport: Bool = false)
9165
9258
  {
9166
9259
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -9306,4 +9399,4 @@ public let snapshotfile = Snapshotfile()
9306
9399
 
9307
9400
  // Please don't remove the lines below
9308
9401
  // They are used to detect outdated files
9309
- // FastlaneRunnerAPIVersion [0.9.96]
9402
+ // FastlaneRunnerAPIVersion [0.9.101]