fastlane 2.149.0 → 2.150.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -82
  3. data/deliver/lib/deliver.rb +0 -1
  4. data/deliver/lib/deliver/app_screenshot.rb +26 -25
  5. data/deliver/lib/deliver/options.rb +6 -11
  6. data/deliver/lib/deliver/runner.rb +7 -21
  7. data/deliver/lib/deliver/setup.rb +5 -30
  8. data/deliver/lib/deliver/submit_for_review.rb +155 -90
  9. data/deliver/lib/deliver/upload_metadata.rb +355 -143
  10. data/deliver/lib/deliver/upload_price_tier.rb +22 -8
  11. data/deliver/lib/deliver/upload_screenshots.rb +134 -39
  12. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  13. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +77 -96
  14. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +3 -2
  15. data/fastlane/lib/fastlane/actions/download_dsyms.rb +7 -1
  16. data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
  17. data/fastlane/lib/fastlane/actions/set_changelog.rb +23 -20
  18. data/fastlane/lib/fastlane/actions/slack.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/spm.rb +7 -0
  20. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -32
  21. data/fastlane/lib/fastlane/lane.rb +3 -3
  22. data/fastlane/lib/fastlane/swift_fastlane_function.rb +8 -4
  23. data/fastlane/lib/fastlane/version.rb +1 -1
  24. data/fastlane/swift/ControlCommand.swift +1 -0
  25. data/fastlane/swift/Deliverfile.swift +1 -1
  26. data/fastlane/swift/Fastlane.swift +48 -12
  27. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +3 -9
  28. data/fastlane/swift/Gymfile.swift +1 -1
  29. data/fastlane/swift/LaneFileProtocol.swift +2 -5
  30. data/fastlane/swift/Matchfile.swift +1 -1
  31. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  32. data/fastlane/swift/Precheckfile.swift +1 -1
  33. data/fastlane/swift/RubyCommand.swift +29 -6
  34. data/fastlane/swift/RubyCommandable.swift +1 -0
  35. data/fastlane/swift/Runner.swift +85 -13
  36. data/fastlane/swift/Scanfile.swift +1 -1
  37. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  38. data/fastlane/swift/Screengrabfile.swift +1 -1
  39. data/fastlane/swift/Snapshotfile.swift +1 -1
  40. data/fastlane/swift/SnapshotfileProtocol.swift +3 -3
  41. data/fastlane/swift/SocketClient.swift +76 -45
  42. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  43. data/fastlane/swift/SocketResponse.swift +1 -0
  44. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -3
  45. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +89 -52
  46. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +7 -0
  47. data/fastlane_core/lib/fastlane_core/project.rb +0 -1
  48. data/frameit/lib/frameit/device_types.rb +100 -100
  49. data/produce/lib/produce/itunes_connect.rb +32 -21
  50. data/produce/lib/produce/options.rb +3 -3
  51. data/sigh/lib/assets/resign.sh +7 -7
  52. data/snapshot/lib/assets/SnapshotHelper.swift +5 -5
  53. data/snapshot/lib/assets/SnapshotHelperXcode8.swift +3 -3
  54. data/snapshot/lib/snapshot/options.rb +0 -1
  55. data/snapshot/lib/snapshot/reports_generator.rb +8 -1
  56. data/spaceship/lib/spaceship/.DS_Store +0 -0
  57. data/spaceship/lib/spaceship/client.rb +4 -3
  58. data/spaceship/lib/spaceship/connect_api.rb +25 -2
  59. data/spaceship/lib/spaceship/connect_api/client.rb +97 -31
  60. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +98 -0
  61. data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
  62. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +113 -0
  63. data/spaceship/lib/spaceship/connect_api/models/app.rb +120 -3
  64. data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
  65. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +67 -0
  66. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +38 -0
  67. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +129 -0
  68. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +71 -0
  69. data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
  70. data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
  71. data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +71 -0
  72. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +93 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +101 -0
  74. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +183 -0
  76. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +86 -0
  77. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +36 -0
  78. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
  79. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  80. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +40 -0
  81. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
  82. data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
  83. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +10 -3
  84. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +33 -0
  85. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +841 -0
  86. data/spaceship/lib/spaceship/spaceauth_runner.rb +2 -2
  87. data/supply/lib/supply/client.rb +19 -0
  88. data/supply/lib/supply/reader.rb +16 -0
  89. metadata +44 -39
  90. data/deliver/lib/deliver/upload_assets.rb +0 -27
  91. data/fastlane/lib/assets/.s3_html_template.erb.swp +0 -0
  92. data/fastlane/lib/fastlane/actions/.hipchat.rb.swp +0 -0
  93. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  94. data/scan/lib/scan/.options.rb.swp +0 -0
@@ -171,9 +171,10 @@ A common Play publishing scenario might involve uploading an APK version to a te
171
171
 
172
172
  This can be done using the `--track_promote_to` parameter. The `--track_promote_to` parameter works with the `--track` parameter to command the Play API to promote existing Play track APK version(s) (those active on the track identified by the `--track` param value) to a new track (`--track_promote_to` value).
173
173
 
174
- ## Retrieve Track Version Codes
174
+ ## Retrieve Track Release Names & Version Codes
175
175
 
176
- Before performing a new APK upload you may want to check existing track version codes, or you may simply want to provide an informational lane that displays the currently promoted version codes for the production track. You can use the `google_play_track_version_codes` action to retrieve existing version codes for a package and track. For more information, see `fastlane action google_play_track_version_codes` help output.
176
+ Before performing a new APK upload you may want to check existing track version codes or release names, or you may simply want to provide an informational lane that displays the currently promoted version codes or release name for the production track. You can use the `google_play_track_version_codes` action to retrieve existing version codes for a package and track. You can use the `google_play_track_release_names` action to retrieve existing release names for a package and track.
177
+ For more information, see the `fastlane action google_play_track_version_codes` and `fastlane action google_play_track_release_names` help output.
177
178
 
178
179
  ## Migration from AndroidPublisherV2 to AndroidPublisherV3 in _fastlane_ 2.135.0
179
180
 
@@ -164,7 +164,13 @@ module Fastlane
164
164
 
165
165
  def self.download_file(url)
166
166
  uri = URI.parse(url)
167
- http = Net::HTTP.new(uri.host, uri.port)
167
+ if ENV['http_proxy']
168
+ UI.verbose("Found 'http_proxy' environment variable so connect via proxy")
169
+ proxy_uri = URI.parse(ENV['http_proxy'])
170
+ http = Net::HTTP.new(uri.host, uri.port, proxy_uri.host, proxy_uri.port)
171
+ else
172
+ http = Net::HTTP.new(uri.host, uri.port)
173
+ end
168
174
  http.use_ssl = (uri.scheme == "https")
169
175
  res = http.get(uri.request_uri)
170
176
  res.body
@@ -0,0 +1,74 @@
1
+ module Fastlane
2
+ module Actions
3
+ class GooglePlayTrackReleaseNamesAction < Action
4
+ # Supply::Options.available_options keys that apply to this action.
5
+ OPTIONS = [
6
+ :package_name,
7
+ :track,
8
+ :key,
9
+ :issuer,
10
+ :json_key,
11
+ :json_key_data,
12
+ :root_url,
13
+ :timeout
14
+ ]
15
+
16
+ def self.run(params)
17
+ require 'supply'
18
+ require 'supply/options'
19
+ require 'supply/reader'
20
+
21
+ Supply.config = params
22
+
23
+ release_names = Supply::Reader.new.track_release_names || []
24
+ return release_names.compact
25
+ end
26
+
27
+ #####################################################
28
+ # @!group Documentation
29
+ #####################################################
30
+
31
+ def self.description
32
+ "Retrieves release names for a Google Play track"
33
+ end
34
+
35
+ def self.details
36
+ "More information: [https://docs.fastlane.tools/actions/supply/](https://docs.fastlane.tools/actions/supply/)"
37
+ end
38
+
39
+ def self.available_options
40
+ require 'supply'
41
+ require 'supply/options'
42
+
43
+ Supply::Options.available_options.select do |option|
44
+ OPTIONS.include?(option.key)
45
+ end
46
+ end
47
+
48
+ def self.output
49
+ end
50
+
51
+ def self.return_value
52
+ "Array of strings representing the release names for the given Google Play track"
53
+ end
54
+
55
+ def self.authors
56
+ ["raldred"]
57
+ end
58
+
59
+ def self.is_supported?(platform)
60
+ platform == :android
61
+ end
62
+
63
+ def self.example_code
64
+ [
65
+ 'google_play_track_release_names'
66
+ ]
67
+ end
68
+
69
+ def self.category
70
+ :misc
71
+ end
72
+ end
73
+ end
74
+ end
@@ -9,16 +9,18 @@ module Fastlane
9
9
  Spaceship::Tunes.select_team
10
10
  UI.message("Login successful")
11
11
 
12
- app = Spaceship::Application.find(params[:app_identifier]) || Spaceship::Application.find(params[:app_identifier], mac: true)
12
+ app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
13
13
  UI.user_error!("Couldn't find app with identifier #{params[:app_identifier]}") if app.nil?
14
14
 
15
15
  version_number = params[:version]
16
- platform = params[:platform]
16
+ platform = Spaceship::ConnectAPI::Platform.map(params[:platform])
17
+
17
18
  unless version_number
18
19
  # Automatically fetch the latest version
19
20
  UI.message("Fetching the latest version for this app")
20
- if app.edit_version(platform: platform) && app.edit_version(platform: platform).version
21
- version_number = app.edit_version(platform: platform).version
21
+ edit_version = app.get_edit_app_store_version(platform: platform)
22
+ if edit_version
23
+ version_number = edit_version.version_string
22
24
  else
23
25
  UI.message("You have to specify a new version number: ")
24
26
  version_number = STDIN.gets.strip
@@ -42,31 +44,32 @@ module Fastlane
42
44
 
43
45
  UI.important("Going to update the changelog to:\n\n#{changelog}\n\n")
44
46
 
45
- if (v = app.edit_version(platform: platform))
46
- if v.version != version_number
47
+ edit_version = app.get_edit_app_store_version(platform: platform)
48
+ if edit_version
49
+ if edit_version.version_string != version_number
47
50
  # Version is already there, make sure it matches the one we want to create
48
- UI.message("Changing existing version number from '#{v.version}' to '#{version_number}'")
49
- v.version = version_number
50
- v.save!
51
+ UI.message("Changing existing version number from '#{edit_version.version_string}' to '#{version_number}'")
52
+ edit_version = edit_version.update(attributes: {
53
+ versionString: version_number
54
+ })
51
55
  else
52
- UI.message("Updating changelog for existing version #{v.version}")
56
+ UI.message("Updating changelog for existing version #{edit_version.version_string}")
53
57
  end
54
58
  else
55
59
  UI.message("Creating the new version: #{version_number}")
56
- app.create_version!(version_number)
57
- app = Spaceship::Application.find(params[:app_identifier]) # Replace with .reload method once available
58
- v = app.edit_version(platform: platform)
60
+ attributes = { versionString: version_number, platform: platform }
61
+ edit_version = Spaceship::ConnectAPI.post_app_store_version(app_id: app.id, attributes: attributes).first
59
62
  end
60
63
 
61
- v.release_notes.languages.each do |lang|
62
- v.release_notes[lang] = changelog
64
+ localizations = edit_version.get_app_store_version_localizations
65
+ localizations.each do |localization|
66
+ UI.message("Updating changelog for the '#{localization.locale}'")
67
+ localization.update(attributes: {
68
+ whatsNew: changelog
69
+ })
63
70
  end
64
71
 
65
- UI.message("Found and updated changelog for the following languages: #{v.release_notes.languages.join(', ')}")
66
- UI.message("Uploading changes to App Store Connect...")
67
- v.save!
68
-
69
- UI.success("👼 Successfully pushed the new changelog to #{v.url}")
72
+ UI.success("👼 Successfully pushed the new changelog to for #{edit_version.version_string}")
70
73
  end
71
74
 
72
75
  def self.default_changelog_path
@@ -159,7 +159,7 @@ module Fastlane
159
159
  "Build Date" => Time.new.to_s,
160
160
  "Built by" => "Jenkins",
161
161
  },
162
- default_payloads: [:git_branch, :git_author], # Optional, lets you specify a whitelist of default payloads to include. Pass an empty array to suppress all the default payloads.
162
+ default_payloads: [:git_branch, :git_author], # Optional, lets you specify an allowlist of default payloads to include. Pass an empty array to suppress all the default payloads.
163
163
  # Don\'t add this key, or pass nil, if you want all the default payloads. The available default payloads are: `lane`, `test_result`, `git_branch`, `git_author`, `last_git_commit`, `last_git_commit_hash`.
164
164
  attachment_properties: { # Optional, lets you specify any other properties available for attachments in the slack API (see https://api.slack.com/docs/attachments).
165
165
  # This hash is deep merged with the existing properties set using the other properties above. This allows your own fields properties to be appended to the existing fields that were created using the `payload` property for instance.
@@ -8,6 +8,7 @@ module Fastlane
8
8
  cmd << "--build-path #{params[:build_path]}" if params[:build_path]
9
9
  cmd << "--package-path #{params[:package_path]}" if params[:package_path]
10
10
  cmd << "--configuration #{params[:configuration]}" if params[:configuration]
11
+ cmd << "--disable-sandbox" if params[:disable_sandbox]
11
12
  cmd << "--verbose" if params[:verbose]
12
13
  cmd << params[:command] if package_commands.include?(params[:command])
13
14
  if params[:xcconfig]
@@ -63,6 +64,12 @@ module Fastlane
63
64
  verify_block: proc do |value|
64
65
  UI.user_error!("Please pass a valid configuration: (debug|release)") unless valid_configurations.include?(value)
65
66
  end),
67
+ FastlaneCore::ConfigItem.new(key: :disable_sandbox,
68
+ env_name: "FL_SPM_DISABLE_SANDBOX",
69
+ description: "Disable using the sandbox when executing subprocesses",
70
+ optional: true,
71
+ is_string: false,
72
+ default_value: false),
66
73
  FastlaneCore::ConfigItem.new(key: :xcpretty_output,
67
74
  env_name: "FL_SPM_XCPRETTY_OUTPUT",
68
75
  description: "Specifies the output type for xcpretty. eg. 'test', or 'simple'",
@@ -45,44 +45,13 @@ module Fastlane
45
45
  # @param current_path this is a path to either a dSYM or a zipped dSYM
46
46
  # this might also be either nested or not, we're flexible
47
47
  def self.handle_dsym(params, current_path, max_worker_threads)
48
- if current_path.end_with?(".dSYM")
48
+ if current_path.end_with?(".dSYM", ".zip")
49
49
  upload_dsym(params, current_path)
50
- elsif current_path.end_with?(".zip")
51
- UI.message("Extracting '#{current_path}'...")
52
-
53
- current_path = File.expand_path(current_path)
54
- Dir.mktmpdir do |dir|
55
- Dir.chdir(dir) do
56
- Actions.sh("unzip -qo #{current_path.shellescape}")
57
- work_q = Queue.new
58
- Dir["*.dSYM"].each do |sub|
59
- work_q.push(sub)
60
- end
61
- execute_uploads(params, max_worker_threads, work_q)
62
- end
63
- end
64
50
  else
65
51
  UI.error("Don't know how to handle '#{current_path}'")
66
52
  end
67
53
  end
68
54
 
69
- def self.execute_uploads(params, max_worker_threads, work_q)
70
- number_of_threads = [max_worker_threads, work_q.size].min
71
- workers = (0...number_of_threads).map do
72
- Thread.new do
73
- begin
74
- while work_q.size > 0
75
- current_path = work_q.pop(true)
76
- upload_dsym(params, current_path)
77
- end
78
- rescue => ex
79
- UI.error(ex.to_s)
80
- end
81
- end
82
- end
83
- workers.map(&:join)
84
- end
85
-
86
55
  def self.upload_dsym(params, path)
87
56
  UI.message("Uploading '#{path}'...")
88
57
  command = []
@@ -41,8 +41,8 @@ module Fastlane
41
41
  class << self
42
42
  # Makes sure the lane name is valid
43
43
  def verify_lane_name(name)
44
- if self.black_list.include?(name.to_s)
45
- UI.error("Lane name '#{name}' is invalid! Invalid names are #{self.black_list.join(', ')}.")
44
+ if self.deny_list.include?(name.to_s)
45
+ UI.error("Lane name '#{name}' is invalid! Invalid names are #{self.deny_list.join(', ')}.")
46
46
  UI.user_error!("Lane name '#{name}' is invalid")
47
47
  end
48
48
 
@@ -59,7 +59,7 @@ module Fastlane
59
59
  self.ensure_name_not_conflicts(name.to_s)
60
60
  end
61
61
 
62
- def black_list
62
+ def deny_list
63
63
  %w(
64
64
  run
65
65
  init
@@ -98,7 +98,11 @@ module Fastlane
98
98
  elsif type_override == Float
99
99
  return "Float"
100
100
  elsif type_override == :string_callback
101
- return "((String) -> Void)"
101
+ # David Hart:
102
+ # It doesn't make sense to add escaping annotations to optional closures because they aren't function types:
103
+ # they are basically an enum (Optional) containing a function, the same way you would store a closure in any type:
104
+ # it's implicitly escaping because it's owned by another type.
105
+ return "((String) -> Void)?"
102
106
  else
103
107
  return default_type
104
108
  end
@@ -106,7 +110,7 @@ module Fastlane
106
110
 
107
111
  def override_default_value_if_not_correct_type(param_name: nil, param_type: nil, default_value: nil)
108
112
  return "[]" if param_type == "[String]" && default_value == ""
109
- return "{_ in }" if param_type == "((String) -> Void)"
113
+ return "nil" if param_type == "((String) -> Void)?"
110
114
 
111
115
  return default_value
112
116
  end
@@ -121,7 +125,7 @@ module Fastlane
121
125
 
122
126
  optional_specifier = ""
123
127
  # if we are optional and don't have a default value, we'll need to use ?
124
- optional_specifier = "?" if (optional && default_value.nil?) && type != "((String) -> Void)"
128
+ optional_specifier = "?" if (optional && default_value.nil?) && type != "((String) -> Void)?"
125
129
 
126
130
  # If we have a default value of true or false, we can infer it is a Bool
127
131
  if default_value.class == FalseClass
@@ -162,7 +166,7 @@ module Fastlane
162
166
  # we can't handle default values for Hashes, yet
163
167
  # see method swift_default_implementations for similar behavior
164
168
  default_value = "[:]"
165
- elsif type != "Bool" && type != "[String]" && type != "Int" && type != "((String) -> Void)" && type != "Float" && type != "Double"
169
+ elsif type != "Bool" && type != "[String]" && type != "Int" && type != "@escaping ((String) -> Void)" && type != "Float" && type != "Double"
166
170
  default_value = "\"#{default_value}\""
167
171
  end
168
172
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.149.0'.freeze
2
+ VERSION = '2.150.0.rc4'.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
@@ -49,6 +49,7 @@ struct ControlCommand: RubyCommandable {
49
49
  }
50
50
 
51
51
  let message: String?
52
+ let id: String = UUID().uuidString
52
53
  let shutdownCommandType: ShutdownCommandType
53
54
  var commandJson: String {
54
55
  var jsonDictionary: [String: Any] = [ControlCommand.commandKey : self.shutdownCommandType.token]
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.0
21
+ // Generated with fastlane 2.149.1
@@ -1491,7 +1491,7 @@ func captureIosScreenshots(workspace: String? = nil,
1491
1491
  appIdentifier: String? = nil,
1492
1492
  addPhotos: [String]? = nil,
1493
1493
  addVideos: [String]? = nil,
1494
- htmlTemplate: String = "/Users/josh/Projects/fastlane/fastlane/snapshot/lib/snapshot/page.html.erb",
1494
+ htmlTemplate: String? = nil,
1495
1495
  buildlogPath: String = "~/Library/Logs/snapshot",
1496
1496
  clean: Bool = false,
1497
1497
  testWithoutBuilding: Bool? = nil,
@@ -1625,7 +1625,7 @@ func captureScreenshots(workspace: String? = nil,
1625
1625
  appIdentifier: String? = nil,
1626
1626
  addPhotos: [String]? = nil,
1627
1627
  addVideos: [String]? = nil,
1628
- htmlTemplate: String = "/Users/josh/Projects/fastlane/fastlane/snapshot/lib/snapshot/page.html.erb",
1628
+ htmlTemplate: String? = nil,
1629
1629
  buildlogPath: String = "~/Library/Logs/snapshot",
1630
1630
  clean: Bool = false,
1631
1631
  testWithoutBuilding: Bool? = nil,
@@ -2039,7 +2039,7 @@ func cocoapods(repoUpdate: Bool = false,
2039
2039
  ansi: Bool = true,
2040
2040
  useBundleExec: Bool = true,
2041
2041
  podfile: String? = nil,
2042
- errorCallback: Any? = nil,
2042
+ errorCallback: ((String) -> Void)? = nil,
2043
2043
  tryRepoUpdateOnError: Bool = false,
2044
2044
  deployment: Bool = false,
2045
2045
  clean: Bool = true,
@@ -2051,7 +2051,7 @@ func cocoapods(repoUpdate: Bool = false,
2051
2051
  RubyCommand.Argument(name: "ansi", value: ansi),
2052
2052
  RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
2053
2053
  RubyCommand.Argument(name: "podfile", value: podfile),
2054
- RubyCommand.Argument(name: "error_callback", value: errorCallback),
2054
+ RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure),
2055
2055
  RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
2056
2056
  RubyCommand.Argument(name: "deployment", value: deployment),
2057
2057
  RubyCommand.Argument(name: "clean", value: clean),
@@ -3054,7 +3054,7 @@ func frameScreenshots(white: Bool? = nil,
3054
3054
  useLegacyIphonexr: Bool = false,
3055
3055
  useLegacyIphonexs: Bool = false,
3056
3056
  useLegacyIphonexsmax: Bool = false,
3057
- forceOrientationBlock: String? = nil,
3057
+ forceOrientationBlock: ((String) -> Void)? = nil,
3058
3058
  debugMode: Bool = false,
3059
3059
  resume: Bool = false,
3060
3060
  usePlatform: String = "IOS",
@@ -3071,7 +3071,7 @@ func frameScreenshots(white: Bool? = nil,
3071
3071
  RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
3072
3072
  RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
3073
3073
  RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
3074
- RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
3074
+ RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure),
3075
3075
  RubyCommand.Argument(name: "debug_mode", value: debugMode),
3076
3076
  RubyCommand.Argument(name: "resume", value: resume),
3077
3077
  RubyCommand.Argument(name: "use_platform", value: usePlatform),
@@ -3116,7 +3116,7 @@ func frameit(white: Bool? = nil,
3116
3116
  useLegacyIphonexr: Bool = false,
3117
3117
  useLegacyIphonexs: Bool = false,
3118
3118
  useLegacyIphonexsmax: Bool = false,
3119
- forceOrientationBlock: String? = nil,
3119
+ forceOrientationBlock: ((String) -> Void)? = nil,
3120
3120
  debugMode: Bool = false,
3121
3121
  resume: Bool = false,
3122
3122
  usePlatform: String = "IOS",
@@ -3133,7 +3133,7 @@ func frameit(white: Bool? = nil,
3133
3133
  RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
3134
3134
  RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
3135
3135
  RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
3136
- RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
3136
+ RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure),
3137
3137
  RubyCommand.Argument(name: "debug_mode", value: debugMode),
3138
3138
  RubyCommand.Argument(name: "resume", value: resume),
3139
3139
  RubyCommand.Argument(name: "use_platform", value: usePlatform),
@@ -3639,6 +3639,42 @@ func githubApi(serverUrl: String = "https://api.github.com",
3639
3639
  _ = runner.executeCommand(command)
3640
3640
  }
3641
3641
 
3642
+ /**
3643
+ Retrieves release names for a Google Play track
3644
+
3645
+ - parameters:
3646
+ - packageName: The package name of the application to use
3647
+ - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
3648
+ - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google
3649
+ - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account)
3650
+ - jsonKey: The path to a file containing service account JSON, used to authenticate with Google
3651
+ - jsonKeyData: The raw service account JSON data used to authenticate with Google
3652
+ - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
3653
+ - timeout: Timeout for read, open, and send (in seconds)
3654
+
3655
+ - returns: Array of strings representing the release names for the given Google Play track
3656
+
3657
+ More information: [https://docs.fastlane.tools/actions/supply/](https://docs.fastlane.tools/actions/supply/)
3658
+ */
3659
+ func googlePlayTrackReleaseNames(packageName: String,
3660
+ track: String = "production",
3661
+ key: String? = nil,
3662
+ issuer: String? = nil,
3663
+ jsonKey: String? = nil,
3664
+ jsonKeyData: String? = nil,
3665
+ rootUrl: String? = nil,
3666
+ timeout: Int = 300) {
3667
+ let command = RubyCommand(commandID: "", methodName: "google_play_track_release_names", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
3668
+ RubyCommand.Argument(name: "track", value: track),
3669
+ RubyCommand.Argument(name: "key", value: key),
3670
+ RubyCommand.Argument(name: "issuer", value: issuer),
3671
+ RubyCommand.Argument(name: "json_key", value: jsonKey),
3672
+ RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
3673
+ RubyCommand.Argument(name: "root_url", value: rootUrl),
3674
+ RubyCommand.Argument(name: "timeout", value: timeout)])
3675
+ _ = runner.executeCommand(command)
3676
+ }
3677
+
3642
3678
  /**
3643
3679
  Retrieves version codes for a Google Play track
3644
3680
 
@@ -6520,10 +6556,10 @@ func setupTravis(force: Bool = false) {
6520
6556
  */
6521
6557
  @discardableResult func sh(command: String,
6522
6558
  log: Bool = true,
6523
- errorCallback: Any? = nil) -> String {
6559
+ errorCallback: ((String) -> Void)? = nil) -> String {
6524
6560
  let command = RubyCommand(commandID: "", methodName: "sh", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
6525
6561
  RubyCommand.Argument(name: "log", value: log),
6526
- RubyCommand.Argument(name: "error_callback", value: errorCallback)])
6562
+ RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure)])
6527
6563
  return runner.executeCommand(command)
6528
6564
  }
6529
6565
 
@@ -6868,7 +6904,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6868
6904
  appIdentifier: Any? = snapshotfile.appIdentifier,
6869
6905
  addPhotos: [String]? = snapshotfile.addPhotos,
6870
6906
  addVideos: [String]? = snapshotfile.addVideos,
6871
- htmlTemplate: Any = snapshotfile.htmlTemplate,
6907
+ htmlTemplate: Any? = snapshotfile.htmlTemplate,
6872
6908
  buildlogPath: Any = snapshotfile.buildlogPath,
6873
6909
  clean: Bool = snapshotfile.clean,
6874
6910
  testWithoutBuilding: Bool? = snapshotfile.testWithoutBuilding,
@@ -8924,4 +8960,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8924
8960
 
8925
8961
  // Please don't remove the lines below
8926
8962
  // They are used to detect outdated files
8927
- // FastlaneRunnerAPIVersion [0.9.77]
8963
+ // FastlaneRunnerAPIVersion [0.9.71]