fastlane 2.135.0 → 2.138.0

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