fastlane 2.135.0 → 2.138.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +78 -78
  3. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  4. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +38 -4
  5. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +19 -0
  6. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +4 -2
  7. data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +3 -3
  8. data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -2
  9. data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +5 -1
  10. data/fastlane/lib/fastlane/actions/gradle.rb +11 -1
  11. data/fastlane/lib/fastlane/actions/increment_version_number.rb +6 -3
  12. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
  13. data/fastlane/lib/fastlane/actions/register_devices.rb +5 -1
  14. data/fastlane/lib/fastlane/actions/ruby_version.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/testfairy.rb +8 -1
  16. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
  18. data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
  19. data/fastlane/lib/fastlane/commands_generator.rb +1 -1
  20. data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
  21. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
  22. data/fastlane/lib/fastlane/swift_fastlane_function.rb +9 -0
  23. data/fastlane/lib/fastlane/version.rb +1 -1
  24. data/fastlane/swift/Deliverfile.swift +1 -1
  25. data/fastlane/swift/Fastlane.swift +47 -17
  26. data/fastlane/swift/Gymfile.swift +1 -1
  27. data/fastlane/swift/Matchfile.swift +1 -1
  28. data/fastlane/swift/MatchfileProtocol.swift +6 -2
  29. data/fastlane/swift/Precheckfile.swift +1 -1
  30. data/fastlane/swift/Scanfile.swift +1 -1
  31. data/fastlane/swift/Screengrabfile.swift +1 -1
  32. data/fastlane/swift/ScreengrabfileProtocol.swift +14 -2
  33. data/fastlane/swift/Snapshotfile.swift +1 -1
  34. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  35. data/match/lib/match/options.rb +8 -0
  36. data/match/lib/match/runner.rb +1 -0
  37. data/match/lib/match/storage/git_storage.rb +7 -2
  38. data/screengrab/lib/screengrab/module.rb +2 -0
  39. data/screengrab/lib/screengrab/options.rb +24 -11
  40. data/screengrab/lib/screengrab/runner.rb +79 -42
  41. data/spaceship/lib/spaceship/client.rb +9 -4
  42. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  43. data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
  44. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +71 -0
  45. data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
  46. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
  47. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -5
  48. data/supply/lib/supply/client.rb +1 -0
  49. data/supply/lib/supply/options.rb +9 -2
  50. data/supply/lib/supply/uploader.rb +63 -39
  51. metadata +22 -24
  52. data/gym/lib/gym/.module.rb.swp +0 -0
  53. data/supply/lib/supply/.client.rb.swp +0 -0
  54. data/supply/lib/supply/.options.rb.swp +0 -0
  55. data/supply/lib/supply/.uploader.rb.swp +0 -0
@@ -43,6 +43,9 @@ module Fastlane
43
43
  version_array = current_version.split(".").map(&:to_i)
44
44
 
45
45
  case params[:bump_type]
46
+ when "bump"
47
+ version_array[-1] = version_array[-1] + 1
48
+ next_version_number = version_array.join(".")
46
49
  when "patch"
47
50
  UI.user_error!(version_token_error) if version_array.count < 3
48
51
  version_array[2] = version_array[2] + 1
@@ -109,9 +112,9 @@ module Fastlane
109
112
  FastlaneCore::ConfigItem.new(key: :bump_type,
110
113
  env_name: "FL_VERSION_NUMBER_BUMP_TYPE",
111
114
  description: "The type of this version bump. Available: patch, minor, major",
112
- default_value: "patch",
115
+ default_value: "bump",
113
116
  verify_block: proc do |value|
114
- UI.user_error!("Available values are 'patch', 'minor' and 'major'") unless ['patch', 'minor', 'major'].include?(value)
117
+ UI.user_error!("Available values are 'patch', 'minor' and 'major'") unless ['bump', 'patch', 'minor', 'major'].include?(value)
115
118
  end),
116
119
  FastlaneCore::ConfigItem.new(key: :version_number,
117
120
  env_name: "FL_VERSION_NUMBER_VERSION_NUMBER",
@@ -148,7 +151,7 @@ module Fastlane
148
151
 
149
152
  def self.example_code
150
153
  [
151
- 'increment_version_number # Automatically increment patch version number',
154
+ 'increment_version_number # Automatically increment version number',
152
155
  'increment_version_number(
153
156
  bump_type: "patch" # Automatically increment patch version number
154
157
  )',
@@ -64,7 +64,7 @@ module Fastlane
64
64
  is_string: true,
65
65
  default_value: "ios",
66
66
  verify_block: proc do |value|
67
- UI.user_error!("The platform can only be ios, or appletvos") unless %('ios', 'appletvos').include?(value)
67
+ UI.user_error!("The platform can only be ios, osx, or appletvos") unless %('osx', ios', 'appletvos').include?(value)
68
68
  end),
69
69
  FastlaneCore::ConfigItem.new(key: :initial_build_number,
70
70
  env_name: "INITIAL_BUILD_NUMBER",
@@ -110,7 +110,7 @@ module Fastlane
110
110
  end
111
111
 
112
112
  def self.is_supported?(platform)
113
- platform == :ios
113
+ [:ios, :mac].include?(platform)
114
114
  end
115
115
 
116
116
  def self.example_code
@@ -25,7 +25,11 @@ module Fastlane
25
25
  end
26
26
 
27
27
  new_devices = devices_file.drop(1).map do |row|
28
- UI.user_error!("Invalid device line, please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)") unless (2..3).cover?(row.count)
28
+ if row.count == 1
29
+ UI.user_error!("Invalid device line, ensure you are using tabs (NOT spaces). See Apple's sample/spec here: https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip")
30
+ elsif !(2..3).cover?(row.count)
31
+ UI.user_error!("Invalid device line, please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)")
32
+ end
29
33
  row
30
34
  end
31
35
  else
@@ -40,7 +40,7 @@ module Fastlane
40
40
  def self.details
41
41
  [
42
42
  "Add this to your `Fastfile` to require a certain version of _ruby_.",
43
- "Put it at the top of your `Fastfile to ensure that _fastlane_ is executed appropriately."
43
+ "Put it at the top of your `Fastfile` to ensure that _fastlane_ is executed appropriately."
44
44
  ].join("\n")
45
45
  end
46
46
 
@@ -92,6 +92,8 @@ module Fastlane
92
92
  [key, value]
93
93
  when :options
94
94
  [key, options_to_client.call(value).join(',')]
95
+ when :custom
96
+ [key, value]
95
97
  else
96
98
  UI.user_error!("Unknown parameter: #{key}")
97
99
  end
@@ -223,6 +225,11 @@ module Fastlane
223
225
  env_name: "FL_TESTFAIRY_OPTIONS",
224
226
  description: "Array of options (shake,video_only_wifi,anonymous)",
225
227
  default_value: []),
228
+ FastlaneCore::ConfigItem.new(key: :custom,
229
+ optional: true,
230
+ env_name: "FL_TESTFAIRY_CUSTOM",
231
+ description: "Array of custom options. Contact support@testfairy.com for more information",
232
+ default_value: ''),
226
233
  FastlaneCore::ConfigItem.new(key: :timeout,
227
234
  env_name: "FL_TESTFAIRY_TIMEOUT",
228
235
  description: "Request timeout in seconds",
@@ -252,7 +259,7 @@ module Fastlane
252
259
  end
253
260
 
254
261
  def self.authors
255
- ["taka0125", "tcurdt"]
262
+ ["taka0125", "tcurdt", "vijaysharm"]
256
263
  end
257
264
 
258
265
  def self.is_supported?(platform)
@@ -92,7 +92,7 @@ module Fastlane
92
92
 
93
93
  def self.evaulate(params, values)
94
94
  if params[:provisioning_type]
95
- UI.user_error!("Mismatched provisioning_type. Required: '#{params[:provisioning_type]}''; Found: '#{values['provisioning_type']}'") unless params[:provisioning_type] == values['provisioning_type']
95
+ UI.user_error!("Mismatched provisioning_type. Required: '#{params[:provisioning_type]}'; Found: '#{values['provisioning_type']}'") unless params[:provisioning_type] == values['provisioning_type']
96
96
  end
97
97
  if params[:provisioning_uuid]
98
98
  UI.user_error!("Mismatched provisioning_uuid. Required: '#{params[:provisioning_uuid]}'; Found: '#{values['provisioning_uuid']}'") unless params[:provisioning_uuid] == values['provisioning_uuid']
@@ -38,7 +38,12 @@ module Fastlane
38
38
  end
39
39
 
40
40
  def self.details
41
- "Select and build with the Xcode installed at the provided path. Use the `xcversion` action if you want to select an Xcode based on a version specifier or you don't have known, stable paths as may happen in a CI environment."
41
+ [
42
+ "Select and build with the Xcode installed at the provided path.",
43
+ "Use the `xcversion` action if you want to select an Xcode:",
44
+ "- Based on a version specifier or",
45
+ "- You don't have known, stable paths, as may happen in a CI environment."
46
+ ].join("\n")
42
47
  end
43
48
 
44
49
  def self.author
@@ -142,8 +142,8 @@ module Fastlane
142
142
  # Let's tell the user how to use `bundle exec`
143
143
  # We show this warning no matter if the command is slow or not
144
144
  UI.important("fastlane detected a Gemfile in the current directory")
145
- UI.important("however it seems like you don't use `bundle exec`")
146
- UI.important("to launch fastlane faster, please use")
145
+ UI.important("However, it seems like you didn't use `bundle exec`")
146
+ UI.important("To launch fastlane faster, please use")
147
147
  UI.message("")
148
148
  UI.command "bundle exec fastlane #{ARGV.join(' ')}"
149
149
  UI.message("")
@@ -17,7 +17,7 @@ module Fastlane
17
17
  end
18
18
  FastlaneCore::Swag.show_loader
19
19
 
20
- # has to be checked here - in case we wan't to troubleshoot plugin related issues
20
+ # has to be checked here - in case we want to troubleshoot plugin related issues
21
21
  if ARGV.include?("--troubleshoot")
22
22
  self.confirm_troubleshoot
23
23
  end
@@ -12,21 +12,30 @@ module Fastlane
12
12
  # Path to the adb binary
13
13
  attr_accessor :adb_path
14
14
 
15
+ # Path to the adb binary
16
+ attr_accessor :adb_host
17
+
15
18
  # All available devices
16
19
  attr_accessor :devices
17
20
 
18
- def initialize(adb_path: nil)
21
+ def initialize(adb_path: nil, adb_host: nil)
19
22
  android_home = ENV['ANDROID_HOME'] || ENV['ANDROID_SDK_ROOT'] || ENV['ANDROID_SDK']
20
23
  if (adb_path.nil? || adb_path == "adb") && android_home
21
24
  adb_path = File.join(android_home, "platform-tools", "adb")
22
25
  end
26
+
23
27
  self.adb_path = adb_path
28
+ self.adb_host = adb_host
29
+ end
30
+
31
+ def host_option
32
+ return self.adb_host ? "-H #{adb_host}" : nil
24
33
  end
25
34
 
26
35
  # Run a certain action
27
36
  def trigger(command: nil, serial: nil)
28
37
  android_serial = serial != "" ? "ANDROID_SERIAL=#{serial}" : nil
29
- command = [android_serial, adb_path.shellescape, command].join(" ").strip
38
+ command = [android_serial, adb_path.shellescape, host_option, command].compact.join(" ").strip
30
39
  Action.sh(command)
31
40
  end
32
41
 
@@ -43,10 +52,10 @@ module Fastlane
43
52
  def load_all_devices
44
53
  self.devices = []
45
54
 
46
- command = [adb_path.shellescape, "devices"].join(" ")
55
+ command = [adb_path.shellescape, host_option, "devices -l"].compact.join(" ")
47
56
  output = Actions.sh(command, log: false)
48
57
  output.split("\n").each do |line|
49
- if (result = line.match(/(.*)\tdevice$/))
58
+ if (result = line.match(/^(\S+)(\s+)(device )/))
50
59
  self.devices << AdbDevice.new(serial: result[1])
51
60
  end
52
61
  end
@@ -158,6 +158,7 @@ CrossPlatform/ForkUsage:
158
158
  Lint/IsStringUsage:
159
159
  Include:
160
160
  - gym/**/*
161
+ - screengrab/**/*
161
162
  - supply/**/*
162
163
  Style/MethodCallWithArgsParentheses:
163
164
  Enabled: true
@@ -147,6 +147,7 @@ module Fastlane
147
147
  unless default_value.nil?
148
148
  if type == "[String : Any]"
149
149
  # we can't handle default values for Hashes, yet
150
+ # see method swift_default_implementations for similar behavior
150
151
  default_value = "[:]"
151
152
  elsif type != "Bool" && type != "[String]" && type != "Int" && type != "((String) -> Void)"
152
153
  default_value = "\"#{default_value}\""
@@ -343,6 +344,10 @@ module Fastlane
343
344
  unless default_value.nil?
344
345
  if type == "Bool" || type == "[String]" || type == "Int" || default_value.kind_of?(Array)
345
346
  default_value = default_value.to_s
347
+ elsif default_value.kind_of?(Hash)
348
+ # we can't handle default values for Hashes, yet
349
+ # see method parameters for similar behavior
350
+ default_value = "[:]"
346
351
  else
347
352
  default_value = "\"#{default_value}\""
348
353
  end
@@ -366,6 +371,10 @@ module Fastlane
366
371
  default_value ||= "[]"
367
372
  end
368
373
 
374
+ if type == "[String : Any]"
375
+ default_value ||= "[:]"
376
+ end
377
+
369
378
  " var #{var_for_parameter_name}: #{type} { return #{default_value} }"
370
379
  end
371
380
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.135.0'.freeze
2
+ VERSION = '2.138.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
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.135.0
21
+ // Generated with fastlane 2.138.0
@@ -1210,12 +1210,15 @@ func bundleInstall(binstubs: String? = nil,
1210
1210
  - launchArguments: Additional launch arguments
1211
1211
  - testInstrumentationRunner: The fully qualified class name of your test instrumentation runner
1212
1212
  - endingLocale: Return the device to this locale after running tests
1213
+ - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
1213
1214
  - appApkPath: The path to the APK for the app under test
1214
1215
  - testsApkPath: The path to the APK for the the tests bundle
1215
1216
  - specificDevice: Use the device or emulator with the given serial number or qualifier
1216
1217
  - deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear)
1217
1218
  - exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary
1218
1219
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
1220
+ - useTimestampSuffix: Add timestamp suffix to screenshot filename
1221
+ - adbHost: Configure the host used by adb to connect, allows running on remote devices farm
1219
1222
  */
1220
1223
  func captureAndroidScreenshots(androidHome: String? = nil,
1221
1224
  buildToolsVersion: String? = nil,
@@ -1228,14 +1231,17 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1228
1231
  useTestsInPackages: [String]? = nil,
1229
1232
  useTestsInClasses: [String]? = nil,
1230
1233
  launchArguments: [String]? = nil,
1231
- testInstrumentationRunner: String = "android.support.test.runner.AndroidJUnitRunner",
1234
+ testInstrumentationRunner: String = "androidx.test.runner.AndroidJUnitRunner",
1232
1235
  endingLocale: String = "en-US",
1236
+ useAdbRoot: Bool = false,
1233
1237
  appApkPath: String? = nil,
1234
1238
  testsApkPath: String? = nil,
1235
1239
  specificDevice: String? = nil,
1236
1240
  deviceType: String = "phone",
1237
1241
  exitOnTestFailure: Bool = true,
1238
- reinstallApp: Bool = false) {
1242
+ reinstallApp: Bool = false,
1243
+ useTimestampSuffix: Bool = true,
1244
+ adbHost: String? = nil) {
1239
1245
  let command = RubyCommand(commandID: "", methodName: "capture_android_screenshots", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome),
1240
1246
  RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion),
1241
1247
  RubyCommand.Argument(name: "locales", value: locales),
@@ -1249,12 +1255,15 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1249
1255
  RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
1250
1256
  RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner),
1251
1257
  RubyCommand.Argument(name: "ending_locale", value: endingLocale),
1258
+ RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot),
1252
1259
  RubyCommand.Argument(name: "app_apk_path", value: appApkPath),
1253
1260
  RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath),
1254
1261
  RubyCommand.Argument(name: "specific_device", value: specificDevice),
1255
1262
  RubyCommand.Argument(name: "device_type", value: deviceType),
1256
1263
  RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure),
1257
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp)])
1264
+ RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
1265
+ RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix),
1266
+ RubyCommand.Argument(name: "adb_host", value: adbHost)])
1258
1267
  _ = runner.executeCommand(command)
1259
1268
  }
1260
1269
 
@@ -1567,7 +1576,7 @@ func carthage(command: String = "bootstrap",
1567
1576
  */
1568
1577
  func cert(development: Bool = false,
1569
1578
  force: Bool = false,
1570
- generateAppleCerts: Bool = false,
1579
+ generateAppleCerts: Bool = true,
1571
1580
  username: String,
1572
1581
  teamId: String? = nil,
1573
1582
  teamName: String? = nil,
@@ -2620,8 +2629,8 @@ func echo(message: String? = nil) {
2620
2629
  /**
2621
2630
  Raises an exception if not using `bundle exec` to run fastlane
2622
2631
 
2623
- This action will check if you are using bundle exec to run fastlane.
2624
- You can put it into `before_all` and make sure that fastlane is run using `bundle exec fastlane` command.
2632
+ This action will check if you are using `bundle exec` to run fastlane.
2633
+ You can put it into `before_all` to make sure that fastlane is ran using the `bundle exec fastlane` command.
2625
2634
  */
2626
2635
  func ensureBundleExec() {
2627
2636
  let command = RubyCommand(commandID: "", methodName: "ensure_bundle_exec", className: nil, args: [])
@@ -2939,7 +2948,7 @@ func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
2939
2948
  */
2940
2949
  func getCertificates(development: Bool = false,
2941
2950
  force: Bool = false,
2942
- generateAppleCerts: Bool = false,
2951
+ generateAppleCerts: Bool = true,
2943
2952
  username: String,
2944
2953
  teamId: String? = nil,
2945
2954
  teamName: String? = nil,
@@ -3869,7 +3878,7 @@ func importCertificate(certificatePath: String,
3869
3878
  This action will increment the version number.
3870
3879
  You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html).
3871
3880
  */
3872
- @discardableResult func incrementVersionNumber(bumpType: String = "patch",
3881
+ @discardableResult func incrementVersionNumber(bumpType: String = "bump",
3873
3882
  versionNumber: String? = nil,
3874
3883
  xcodeproj: String? = nil) -> String {
3875
3884
  let command = RubyCommand(commandID: "", methodName: "increment_version_number", className: nil, args: [RubyCommand.Argument(name: "bump_type", value: bumpType),
@@ -4224,6 +4233,7 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
4224
4233
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
4225
4234
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
4226
4235
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
4236
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
4227
4237
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
4228
4238
  - googleCloudKeysFile: Path to the gc_keys.json file
4229
4239
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
@@ -4256,6 +4266,7 @@ func match(type: Any = matchfile.type,
4256
4266
  shallowClone: Bool = matchfile.shallowClone,
4257
4267
  cloneBranchDirectly: Bool = matchfile.cloneBranchDirectly,
4258
4268
  gitBasicAuthorization: Any? = matchfile.gitBasicAuthorization,
4269
+ gitBearerAuthorization: Any? = matchfile.gitBearerAuthorization,
4259
4270
  googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
4260
4271
  googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
4261
4272
  googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
@@ -4285,6 +4296,7 @@ func match(type: Any = matchfile.type,
4285
4296
  RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
4286
4297
  RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
4287
4298
  RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
4299
+ RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
4288
4300
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
4289
4301
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
4290
4302
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
@@ -5323,7 +5335,7 @@ func rubocop() {
5323
5335
  Verifies the minimum ruby version required
5324
5336
 
5325
5337
  Add this to your `Fastfile` to require a certain version of _ruby_.
5326
- Put it at the top of your `Fastfile to ensure that _fastlane_ is executed appropriately.
5338
+ Put it at the top of your `Fastfile` to ensure that _fastlane_ is executed appropriately.
5327
5339
  */
5328
5340
  func rubyVersion() {
5329
5341
  let command = RubyCommand(commandID: "", methodName: "ruby_version", className: nil, args: [])
@@ -5791,12 +5803,15 @@ func scp(username: String,
5791
5803
  - launchArguments: Additional launch arguments
5792
5804
  - testInstrumentationRunner: The fully qualified class name of your test instrumentation runner
5793
5805
  - endingLocale: Return the device to this locale after running tests
5806
+ - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
5794
5807
  - appApkPath: The path to the APK for the app under test
5795
5808
  - testsApkPath: The path to the APK for the the tests bundle
5796
5809
  - specificDevice: Use the device or emulator with the given serial number or qualifier
5797
5810
  - deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear)
5798
5811
  - exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary
5799
5812
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
5813
+ - useTimestampSuffix: Add timestamp suffix to screenshot filename
5814
+ - adbHost: Configure the host used by adb to connect, allows running on remote devices farm
5800
5815
  */
5801
5816
  func screengrab(androidHome: Any? = screengrabfile.androidHome,
5802
5817
  buildToolsVersion: Any? = screengrabfile.buildToolsVersion,
@@ -5811,12 +5826,15 @@ func screengrab(androidHome: Any? = screengrabfile.androidHome,
5811
5826
  launchArguments: [String]? = screengrabfile.launchArguments,
5812
5827
  testInstrumentationRunner: Any = screengrabfile.testInstrumentationRunner,
5813
5828
  endingLocale: Any = screengrabfile.endingLocale,
5829
+ useAdbRoot: Bool = screengrabfile.useAdbRoot,
5814
5830
  appApkPath: Any? = screengrabfile.appApkPath,
5815
5831
  testsApkPath: Any? = screengrabfile.testsApkPath,
5816
5832
  specificDevice: Any? = screengrabfile.specificDevice,
5817
5833
  deviceType: Any = screengrabfile.deviceType,
5818
5834
  exitOnTestFailure: Bool = screengrabfile.exitOnTestFailure,
5819
- reinstallApp: Bool = screengrabfile.reinstallApp) {
5835
+ reinstallApp: Bool = screengrabfile.reinstallApp,
5836
+ useTimestampSuffix: Bool = screengrabfile.useTimestampSuffix,
5837
+ adbHost: Any? = screengrabfile.adbHost) {
5820
5838
  let command = RubyCommand(commandID: "", methodName: "screengrab", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome),
5821
5839
  RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion),
5822
5840
  RubyCommand.Argument(name: "locales", value: locales),
@@ -5830,12 +5848,15 @@ func screengrab(androidHome: Any? = screengrabfile.androidHome,
5830
5848
  RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
5831
5849
  RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner),
5832
5850
  RubyCommand.Argument(name: "ending_locale", value: endingLocale),
5851
+ RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot),
5833
5852
  RubyCommand.Argument(name: "app_apk_path", value: appApkPath),
5834
5853
  RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath),
5835
5854
  RubyCommand.Argument(name: "specific_device", value: specificDevice),
5836
5855
  RubyCommand.Argument(name: "device_type", value: deviceType),
5837
5856
  RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure),
5838
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp)])
5857
+ RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
5858
+ RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix),
5859
+ RubyCommand.Argument(name: "adb_host", value: adbHost)])
5839
5860
  _ = runner.executeCommand(command)
5840
5861
  }
5841
5862
 
@@ -6698,7 +6719,7 @@ func ssh(username: String,
6698
6719
  */
6699
6720
  func supply(packageName: String,
6700
6721
  versionName: String? = nil,
6701
- versionCode: String? = nil,
6722
+ versionCode: Int? = nil,
6702
6723
  releaseStatus: String = "completed",
6703
6724
  track: String = "production",
6704
6725
  rollout: String? = nil,
@@ -6831,6 +6852,7 @@ func swiftlint(mode: Any = "lint",
6831
6852
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
6832
6853
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
6833
6854
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
6855
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
6834
6856
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
6835
6857
  - googleCloudKeysFile: Path to the gc_keys.json file
6836
6858
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
@@ -6849,7 +6871,7 @@ func swiftlint(mode: Any = "lint",
6849
6871
  */
6850
6872
  func syncCodeSigning(type: String = "development",
6851
6873
  readonly: Bool = false,
6852
- generateAppleCerts: Bool = false,
6874
+ generateAppleCerts: Bool = true,
6853
6875
  skipProvisioningProfiles: Bool = false,
6854
6876
  appIdentifier: [String],
6855
6877
  username: String,
@@ -6863,6 +6885,7 @@ func syncCodeSigning(type: String = "development",
6863
6885
  shallowClone: Bool = false,
6864
6886
  cloneBranchDirectly: Bool = false,
6865
6887
  gitBasicAuthorization: String? = nil,
6888
+ gitBearerAuthorization: String? = nil,
6866
6889
  googleCloudBucketName: String? = nil,
6867
6890
  googleCloudKeysFile: String? = nil,
6868
6891
  googleCloudProjectId: String? = nil,
@@ -6892,6 +6915,7 @@ func syncCodeSigning(type: String = "development",
6892
6915
  RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
6893
6916
  RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
6894
6917
  RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
6918
+ RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
6895
6919
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
6896
6920
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
6897
6921
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
@@ -6939,6 +6963,7 @@ func teamName() {
6939
6963
  - autoUpdate: Allows an easy upgrade of all users to the current version. To enable set to 'on'
6940
6964
  - notify: Send email to testers
6941
6965
  - options: Array of options (shake,video_only_wifi,anonymous)
6966
+ - custom: Array of custom options. Contact support@testfairy.com for more information
6942
6967
  - timeout: Request timeout in seconds
6943
6968
 
6944
6969
  You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)
@@ -6954,6 +6979,7 @@ func testfairy(apiKey: String,
6954
6979
  autoUpdate: String = "off",
6955
6980
  notify: String = "off",
6956
6981
  options: [String] = [],
6982
+ custom: String = "",
6957
6983
  timeout: Int? = nil) {
6958
6984
  let command = RubyCommand(commandID: "", methodName: "testfairy", className: nil, args: [RubyCommand.Argument(name: "api_key", value: apiKey),
6959
6985
  RubyCommand.Argument(name: "ipa", value: ipa),
@@ -6966,6 +6992,7 @@ func testfairy(apiKey: String,
6966
6992
  RubyCommand.Argument(name: "auto_update", value: autoUpdate),
6967
6993
  RubyCommand.Argument(name: "notify", value: notify),
6968
6994
  RubyCommand.Argument(name: "options", value: options),
6995
+ RubyCommand.Argument(name: "custom", value: custom),
6969
6996
  RubyCommand.Argument(name: "timeout", value: timeout)])
6970
6997
  _ = runner.executeCommand(command)
6971
6998
  }
@@ -7720,7 +7747,7 @@ func uploadToAppStore(username: String,
7720
7747
  */
7721
7748
  func uploadToPlayStore(packageName: String,
7722
7749
  versionName: String? = nil,
7723
- versionCode: String? = nil,
7750
+ versionCode: Int? = nil,
7724
7751
  releaseStatus: String = "completed",
7725
7752
  track: String = "production",
7726
7753
  rollout: String? = nil,
@@ -8066,7 +8093,10 @@ func xcexport() {
8066
8093
  /**
8067
8094
  Change the xcode-path to use. Useful for beta versions of Xcode
8068
8095
 
8069
- Select and build with the Xcode installed at the provided path. Use the `xcversion` action if you want to select an Xcode based on a version specifier or you don't have known, stable paths as may happen in a CI environment.
8096
+ Select and build with the Xcode installed at the provided path.
8097
+ Use the `xcversion` action if you want to select an Xcode:
8098
+ - Based on a version specifier or
8099
+ - You don't have known, stable paths, as may happen in a CI environment.
8070
8100
  */
8071
8101
  func xcodeSelect() {
8072
8102
  let command = RubyCommand(commandID: "", methodName: "xcode_select", className: nil, args: [])
@@ -8181,7 +8211,7 @@ func xcov(workspace: String? = nil,
8181
8211
  coverallsServiceJobId: String? = nil,
8182
8212
  coverallsRepoToken: String? = nil,
8183
8213
  xcconfig: String? = nil,
8184
- ideFoundationPath: String = "/Applications/Xcode-10.3.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8214
+ ideFoundationPath: String = "/Applications/Xcode-11.2.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8185
8215
  legacySupport: Bool = false) {
8186
8216
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
8187
8217
  RubyCommand.Argument(name: "project", value: project),
@@ -8326,4 +8356,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8326
8356
 
8327
8357
  // Please don't remove the lines below
8328
8358
  // They are used to detect outdated files
8329
- // FastlaneRunnerAPIVersion [0.9.62]
8359
+ // FastlaneRunnerAPIVersion [0.9.66]