fastlane 2.160.0 → 2.165.0

Sign up to get free protection for your applications and to get access to all the features.
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]