fastlane 2.157.2 → 2.160.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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -80
  3. data/deliver/lib/deliver/options.rb +17 -1
  4. data/deliver/lib/deliver/runner.rb +36 -6
  5. data/deliver/lib/deliver/upload_metadata.rb +36 -6
  6. data/deliver/lib/deliver/upload_price_tier.rb +7 -2
  7. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +12 -8
  8. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +1 -0
  9. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -0
  10. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  11. data/fastlane/lib/fastlane/actions/download_dsyms.rb +116 -71
  12. data/fastlane/lib/fastlane/actions/set_changelog.rb +2 -1
  13. data/fastlane/lib/fastlane/helper/git_helper.rb +2 -0
  14. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +6 -4
  15. data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
  16. data/fastlane/lib/fastlane/version.rb +1 -1
  17. data/fastlane/swift/Actions.swift +2 -1
  18. data/fastlane/swift/Appfile.swift +2 -4
  19. data/fastlane/swift/ArgumentProcessor.swift +2 -6
  20. data/fastlane/swift/ControlCommand.swift +2 -5
  21. data/fastlane/swift/Deliverfile.swift +5 -2
  22. data/fastlane/swift/DeliverfileProtocol.swift +15 -4
  23. data/fastlane/swift/Fastfile.swift +5 -1
  24. data/fastlane/swift/Fastlane.swift +2279 -2237
  25. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +5 -5
  26. data/fastlane/swift/Gymfile.swift +5 -2
  27. data/fastlane/swift/GymfileProtocol.swift +6 -3
  28. data/fastlane/swift/LaneFileProtocol.swift +36 -19
  29. data/fastlane/swift/MainProcess.swift +77 -0
  30. data/fastlane/swift/Matchfile.swift +5 -2
  31. data/fastlane/swift/MatchfileProtocol.swift +6 -3
  32. data/fastlane/swift/Plugins.swift +2 -1
  33. data/fastlane/swift/Precheckfile.swift +5 -2
  34. data/fastlane/swift/PrecheckfileProtocol.swift +18 -3
  35. data/fastlane/swift/RubyCommand.swift +2 -6
  36. data/fastlane/swift/RubyCommandable.swift +2 -6
  37. data/fastlane/swift/Runner.swift +5 -9
  38. data/fastlane/swift/RunnerArgument.swift +2 -6
  39. data/fastlane/swift/Scanfile.swift +5 -2
  40. data/fastlane/swift/ScanfileProtocol.swift +6 -3
  41. data/fastlane/swift/Screengrabfile.swift +5 -2
  42. data/fastlane/swift/ScreengrabfileProtocol.swift +6 -3
  43. data/fastlane/swift/Snapshotfile.swift +5 -2
  44. data/fastlane/swift/SnapshotfileProtocol.swift +6 -3
  45. data/fastlane/swift/SocketClient.swift +3 -7
  46. data/fastlane/swift/SocketClientDelegateProtocol.swift +2 -6
  47. data/fastlane/swift/SocketResponse.swift +2 -6
  48. data/fastlane/swift/formatting/Brewfile.lock.json +18 -10
  49. data/fastlane/swift/main.swift +4 -8
  50. data/fastlane/swift/upgrade_manifest.json +1 -1
  51. data/frameit/lib/frameit/editor.rb +1 -0
  52. data/match/lib/match/importer.rb +5 -2
  53. data/match/lib/match/spaceship_ensure.rb +5 -5
  54. data/pilot/lib/pilot/build_manager.rb +0 -3
  55. data/pilot/lib/pilot/manager.rb +1 -2
  56. data/pilot/lib/pilot/options.rb +2 -2
  57. data/precheck/lib/precheck/options.rb +25 -0
  58. data/precheck/lib/precheck/rule_processor.rb +94 -60
  59. data/precheck/lib/precheck/runner.rb +26 -5
  60. data/produce/lib/produce/itunes_connect.rb +2 -1
  61. data/sigh/lib/assets/resign.sh +9 -6
  62. data/sigh/lib/sigh/runner.rb +2 -1
  63. data/snapshot/lib/assets/SnapshotHelper.swift +17 -2
  64. data/spaceship/lib/spaceship/client.rb +1 -0
  65. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  66. data/spaceship/lib/spaceship/connect_api/client.rb +34 -7
  67. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +2 -0
  68. data/spaceship/lib/spaceship/connect_api/models/.app_store_version_submission.rb.swp +0 -0
  69. data/spaceship/lib/spaceship/connect_api/models/app.rb +22 -14
  70. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
  71. data/spaceship/lib/spaceship/connect_api/models/app_price_point.rb +26 -0
  72. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -2
  73. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +10 -6
  74. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +3 -5
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +21 -0
  76. data/spaceship/lib/spaceship/connect_api/spaceship.rb +3 -2
  77. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +50 -50
  78. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +31 -6
  79. metadata +21 -18
@@ -23,6 +23,7 @@ module Fastlane
23
23
 
24
24
  Actions.lane_context[Actions::SharedValues::SIGH_PROFILE_PATHS] = nil
25
25
  Actions.lane_context[Actions::SharedValues::DSYM_PATHS] = nil
26
+ Actions.lane_context[Actions::SharedValues::DSYM_LATEST_UPLOADED_DATE] = nil
26
27
 
27
28
  UI.success('Cleaned up build artifacts 🐙')
28
29
  end
@@ -164,6 +164,7 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
164
164
  | `color` | The font color for the text. Specify a hex/html color code. | `#000000` (black) |
165
165
  | `font` | The font family for the text. Specify the (relative) path to the font file (e.g. an OpenType Font). | The default `imagemagick` font, which is system dependent. |
166
166
  | `font_size` | The font size for the text specified in points. If not specified or `0`, font will be scaled automatically to fit the available space. _frameit_ still shrinks the text, if it would not fit. | NA |
167
+ | `font_weight` | The [font weight for the text](https://imagemagick.org/script/command-line-options.php#weight). Specify an integer value (e.g. 900). | NA |
167
168
  | `text` | The text that should be used for the `keyword` or `title`. <p> Note: If you want to use localised text, use [`.strings` files](#strings-files). | NA |
168
169
 
169
170
  ### Example
@@ -32,7 +32,7 @@ For all commands, you can either use an [API Key](#app-store-connect-api-key) or
32
32
 
33
33
  The App Store Connect API Key is the preferred authentication method (if you are able to use it).
34
34
 
35
- - Uses offial App Store Connect API
35
+ - Uses official App Store Connect API
36
36
  - No need for 2FA
37
37
  - Better performance over Apple ID
38
38
 
@@ -2,20 +2,24 @@ module Fastlane
2
2
  module Actions
3
3
  module SharedValues
4
4
  DSYM_PATHS = :DSYM_PATHS
5
+ DSYM_LATEST_UPLOADED_DATE = :DSYM_LATEST_UPLOADED_DATE
5
6
  end
6
7
  class DownloadDsymsAction < Action
7
8
  # rubocop:disable Metrics/PerceivedComplexity
8
9
  def self.run(params)
10
+ require 'openssl'
9
11
  require 'spaceship'
10
12
  require 'net/http'
13
+ require 'date'
11
14
 
15
+ # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
16
+ # Prompts select team if multiple teams and none specified
12
17
  UI.message("Login to App Store Connect (#{params[:username]})")
13
- Spaceship::Tunes.login(params[:username])
14
- Spaceship::Tunes.select_team
18
+ Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true)
15
19
  UI.message("Login successful")
16
20
 
17
21
  # Get App
18
- app = Spaceship::Application.find(params[:app_identifier])
22
+ app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
19
23
  unless app
20
24
  UI.user_error!("Could not find app with bundle identifier '#{params[:app_identifier]}' on account #{params[:username]}")
21
25
  end
@@ -23,38 +27,36 @@ module Fastlane
23
27
  # Process options
24
28
  version = params[:version]
25
29
  build_number = params[:build_number].to_s unless params[:build_number].nil?
26
- platform = params[:platform]
30
+ itc_platform = params[:platform]
27
31
  output_directory = params[:output_directory]
28
32
  wait_for_dsym_processing = params[:wait_for_dsym_processing]
29
33
  wait_timeout = params[:wait_timeout]
30
34
  min_version = Gem::Version.new(params[:min_version]) if params[:min_version]
35
+ after_uploaded_date = DateTime.parse(params[:after_uploaded_date]) unless params[:after_uploaded_date].nil?
36
+
37
+ platform = Spaceship::ConnectAPI::Platform.map(itc_platform)
31
38
 
32
39
  # Set version if it is latest
33
40
  if version == 'latest'
34
41
  # Try to grab the edit version first, else fallback to live version
35
42
  UI.message("Looking for latest version...")
36
- latest_version = app.edit_version(platform: platform) || app.live_version(platform: platform)
37
-
38
- UI.user_error!("Could not find latest version for your app, please try setting a specific version") if latest_version.version.nil?
39
-
40
- latest_candidate_build = latest_version.candidate_builds.max_by(&:upload_date)
41
- if latest_candidate_build.nil?
42
- version = latest_version.version
43
- build_number = latest_version.build_version
44
- else
45
- # The build_version of a candidate build does not always match the one in latest_version so get the version and build number from the same place.
46
- version = latest_candidate_build.train_version
47
- build_number = latest_candidate_build.build_version
48
- end
43
+ latest_version = app.get_edit_app_store_version(platform: platform) || app.get_live_app_store_version(platform: platform)
44
+
45
+ UI.user_error!("Could not find latest version for your app, please try setting a specific version") if latest_version.nil?
46
+
47
+ latest_build = get_latest_build!(app_id: app.id, version: latest_version.version_string, platform: platform)
48
+
49
+ version = latest_build.app_version
50
+ build_number = latest_build.version
49
51
  elsif version == 'live'
50
52
  UI.message("Looking for live version...")
51
- live_version = app.live_version(platform: platform)
53
+ live_version = app.get_live_app_store_version(platform: platform)
52
54
 
53
55
  UI.user_error!("Could not find live version for your app, please try setting 'latest' or a specific version") if live_version.nil?
54
56
 
55
57
  # No need to search for candidates, because released App Store version should only have one build
56
- version = live_version.version
57
- build_number = live_version.build_version
58
+ version = live_version.version_string
59
+ build_number = live_version.build.version
58
60
  end
59
61
 
60
62
  # Remove leading zeros from version string (eg. 1.02 -> 1.2)
@@ -74,83 +76,118 @@ module Fastlane
74
76
  message << "(#{build_number})" if build_number
75
77
  UI.message(message.join(" "))
76
78
 
77
- app.tunes_all_build_trains(platform: platform).each do |train|
79
+ filter = { app: app.id }
80
+ filter["preReleaseVersion.platform"] = platform
81
+ build_resps = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion").all_pages
82
+ builds = build_resps.flat_map(&:to_models)
83
+
84
+ builds.each do |build|
85
+ asc_app_version = build.app_version
86
+ asc_build_number = build.version
87
+ uploaded_date = DateTime.parse(build.uploaded_date)
88
+
78
89
  message = []
79
- message << "Found train (version): #{train.version_string}"
90
+ message << "Found train (version): #{asc_app_version}"
80
91
  message << ", comparing to supplied version: #{version}" if version
81
92
  UI.verbose(message.join(" "))
82
93
 
83
- if version && version != train.version_string
84
- UI.verbose("Version #{version} doesn't match: #{train.version_string}")
94
+ if version && version != asc_app_version
95
+ UI.verbose("Version #{version} doesn't match: #{asc_app_version}")
85
96
  next
86
97
  end
87
98
 
88
- if min_version && min_version > Gem::Version.new(train.version_string)
89
- UI.verbose("Min version #{min_version} not reached: #{train.version_string}")
99
+ if min_version && min_version > Gem::Version.new(asc_app_version)
100
+ UI.verbose("Min version #{min_version} not reached: #{asc_app_version}")
90
101
  next
91
102
  end
92
103
 
93
- app.tunes_all_builds_for_train(train: train.version_string, platform: platform).each do |build|
94
- message = []
95
- message << "Found build version: #{build.build_version}"
96
- message << ", comparing to supplied build_number: #{build_number}" if build_number
97
- UI.verbose(message.join(" "))
104
+ if after_uploaded_date && after_uploaded_date >= uploaded_date
105
+ UI.verbose("Upload date #{after_uploaded_date} not reached: #{uploaded_date}")
106
+ next
107
+ end
98
108
 
99
- if build_number && build.build_version != build_number
100
- UI.verbose("build_version: #{build.build_version} doesn't match: #{build_number}")
101
- next
102
- end
109
+ message = []
110
+ message << "Found build version: #{asc_build_number}"
111
+ message << ", comparing to supplied build_number: #{build_number}" if build_number
112
+ UI.verbose(message.join(" "))
103
113
 
104
- UI.verbose("Build_version: #{build.build_version} matches #{build_number}, grabbing dsym_url") if build_number
105
-
106
- start = Time.now
107
- download_url = nil
108
-
109
- loop do
110
- begin
111
- build_details = app.tunes_build_details(train: train.version_string, build_number: build.build_version, platform: platform)
112
- download_url = build_details.dsym_url
113
- UI.verbose("dsym_url: #{download_url}")
114
- rescue Spaceship::TunesClient::ITunesConnectError => ex
115
- UI.error("Error accessing dSYM file for build\n\n#{build}\n\nException: #{ex}")
116
- end
117
-
118
- unless download_url
119
- if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
120
- # In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
121
- UI.message("Could not find any dSYM for #{build.build_version} (#{train.version_string})")
122
- else
123
- UI.message("Waiting for dSYM file to appear...")
124
- sleep(30)
125
- next
126
- end
127
- end
128
-
129
- break
130
- end
114
+ if build_number && asc_build_number != build_number
115
+ UI.verbose("build_version: #{asc_build_number} doesn't match: #{build_number}")
116
+ next
117
+ end
131
118
 
132
- if download_url
133
- self.download(download_url, app.bundle_id, train.version_string, build.build_version, output_directory)
134
- break if build_number
119
+ UI.verbose("Build_version: #{asc_build_number} matches #{build_number}, grabbing dsym_url") if build_number
120
+ get_details_and_download_dsym(app: app, train: asc_app_version, build_number: asc_build_number, uploaded_date: uploaded_date, platform: itc_platform, wait_for_dsym_processing: wait_for_dsym_processing, wait_timeout: wait_timeout, output_directory: output_directory)
121
+ end
122
+ end
123
+
124
+ def self.get_details_and_download_dsym(app: nil, train: nil, build_number: nil, uploaded_date: nil, platform: nil, wait_for_dsym_processing: nil, wait_timeout: nil, output_directory: nil)
125
+ start = Time.now
126
+ download_url = nil
127
+
128
+ loop do
129
+ begin
130
+ resp = Spaceship::Tunes.client.build_details(app_id: app.id, train: train, build_number: build_number, platform: platform)
131
+
132
+ resp['apple_id'] = app.id
133
+ build_details = Spaceship::Tunes::BuildDetails.factory(resp)
134
+
135
+ download_url = build_details.dsym_url
136
+ UI.verbose("dsym_url: #{download_url}")
137
+ rescue Spaceship::TunesClient::ITunesConnectError => ex
138
+ UI.error("Error accessing dSYM file for build\n\n#{build}\n\nException: #{ex}")
139
+ end
140
+
141
+ unless download_url
142
+ if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
143
+ # In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
144
+ UI.message("Could not find any dSYM for #{build_number} (#{train})")
135
145
  else
136
- UI.message("No dSYM URL for #{build.build_version} (#{train.version_string})")
146
+ UI.message("Waiting for dSYM file to appear...")
147
+ sleep(30)
148
+ next
137
149
  end
138
150
  end
151
+
152
+ break
139
153
  end
140
154
 
141
- if (Actions.lane_context[SharedValues::DSYM_PATHS] || []).count == 0
142
- UI.error("No dSYM files found on App Store Connect - this usually happens when no recompiling has happened yet")
155
+ if download_url
156
+ self.download(download_url, app.bundle_id, train, build_number, uploaded_date, output_directory)
157
+ return if build_number
158
+ else
159
+ UI.message("No dSYM URL for #{build_number} (#{train})")
143
160
  end
144
161
  end
145
162
  # rubocop:enable Metrics/PerceivedComplexity
146
163
 
147
- def self.download(download_url, bundle_id, train_number, build_version, output_directory)
164
+ def self.get_latest_build!(app_id: nil, version: nil, platform: nil)
165
+ filter = { app: app_id }
166
+ filter["preReleaseVersion.version"] = version
167
+ filter["preReleaseVersion.platform"] = platform
168
+ latest_build = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion").first
169
+
170
+ if latest_build.nil?
171
+ UI.user_error!("Could not find latest build for version #{version}")
172
+ end
173
+
174
+ return latest_build
175
+ end
176
+
177
+ def self.download(download_url, bundle_id, train_number, build_version, uploaded_date, output_directory)
148
178
  result = self.download_file(download_url)
149
179
  path = write_dsym(result, bundle_id, train_number, build_version, output_directory)
150
180
  UI.success("🔑 Successfully downloaded dSYM file for #{train_number} - #{build_version} to '#{path}'")
151
181
 
152
182
  Actions.lane_context[SharedValues::DSYM_PATHS] ||= []
153
183
  Actions.lane_context[SharedValues::DSYM_PATHS] << File.expand_path(path)
184
+
185
+ unless uploaded_date.nil?
186
+ Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] ||= uploaded_date
187
+ current_latest = Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE]
188
+ Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] = [current_latest, uploaded_date].max
189
+ UI.verbose("Most recent build uploaded_date #{Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE]}")
190
+ end
154
191
  end
155
192
 
156
193
  def self.write_dsym(data, bundle_id, train_number, build_number, output_directory)
@@ -265,6 +302,12 @@ module Fastlane
265
302
  env_name: "DOWNLOAD_DSYMS_MIN_VERSION",
266
303
  description: "The minimum app version for dSYMs you wish to download",
267
304
  optional: true),
305
+ FastlaneCore::ConfigItem.new(key: :after_uploaded_date,
306
+ short_option: "-d",
307
+ env_name: "DOWNLOAD_DSYMS_AFTER_UPLOADED_DATE",
308
+ description: "The uploaded date after which you wish to download dSYMs",
309
+ optional: true,
310
+ is_string: true),
268
311
  FastlaneCore::ConfigItem.new(key: :output_directory,
269
312
  short_option: "-s",
270
313
  env_name: "DOWNLOAD_DSYMS_OUTPUT_DIRECTORY",
@@ -289,7 +332,8 @@ module Fastlane
289
332
 
290
333
  def self.output
291
334
  [
292
- ['DSYM_PATHS', 'An array to all the zipped dSYM files']
335
+ ['DSYM_PATHS', 'An array to all the zipped dSYM files'],
336
+ ['DSYM_LATEST_UPLOADED_DATE', 'Date of the most recent uploaded time of successfully downloaded dSYM files']
293
337
  ]
294
338
  end
295
339
 
@@ -311,7 +355,8 @@ module Fastlane
311
355
  'download_dsyms(version: "1.0.0", build_number: "345")',
312
356
  'download_dsyms(version: "1.0.1", build_number: 42)',
313
357
  'download_dsyms(version: "live")',
314
- 'download_dsyms(min_version: "1.2.3")'
358
+ 'download_dsyms(min_version: "1.2.3")',
359
+ 'download_dsyms(after_uploaded_date: "2020-09-11T19:00:00+01:00")'
315
360
  ]
316
361
  end
317
362
 
@@ -4,9 +4,10 @@ module Fastlane
4
4
  def self.run(params)
5
5
  require 'spaceship'
6
6
 
7
+ # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
8
+ # Prompts select team if multiple teams and none specified
7
9
  UI.message("Login to App Store Connect (#{params[:username]})")
8
10
  Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true)
9
- Spaceship::ConnectAPI.select_team
10
11
  UI.message("Login successful")
11
12
 
12
13
  app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
@@ -45,6 +45,8 @@ module Fastlane
45
45
  command = %w(git describe)
46
46
  command << '--tags' if match_lightweight
47
47
  command << hash
48
+ command << '--match' if tag_match_pattern
49
+ command << tag_match_pattern if tag_match_pattern
48
50
  Actions.sh(*command.compact, log: false).chomp
49
51
  rescue
50
52
  nil
@@ -188,6 +188,8 @@ module Fastlane
188
188
 
189
189
  def write_lanefile(lanefile_implementation_opening: nil, class_name: nil, tool_name: nil)
190
190
  disclaimer = []
191
+ disclaimer << "// *bait*" # As we are using a custom common header, we have to bait with a random comment so it does not remove important text.
192
+ disclaimer << ""
191
193
  disclaimer << "// This class is automatically included in FastlaneRunner during build"
192
194
  disclaimer << ""
193
195
  disclaimer << "// This autogenerated file will be overwritten or replaced during build time, or when you initialize `#{tool_name}`"
@@ -223,7 +225,7 @@ module Fastlane
223
225
  header << "// new group so that it won't be marked for upgrade"
224
226
  header << "//"
225
227
  header << ""
226
- header << "class #{tool_detail.swift_class}: #{tool_detail.swift_protocol} {"
228
+ header << "public class #{tool_detail.swift_class}: #{tool_detail.swift_protocol} {"
227
229
  lanefile_implementation_opening = header.join("\n")
228
230
 
229
231
  files_generated << write_lanefile(
@@ -284,7 +286,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
284
286
 
285
287
  def generate_lanefile_tool_objects(classes: nil)
286
288
  objects = classes.map do |filename|
287
- "let #{filename.downcase}: #{filename} = #{filename}()"
289
+ "public let #{filename.downcase}: #{filename} = #{filename}()"
288
290
  end
289
291
  return objects
290
292
  end
@@ -362,12 +364,12 @@ func parseInt(fromString: String, function: String = #function) -> Int {
362
364
  protocol_content_array = []
363
365
  protocol_name = tool_swift_function.protocol_name
364
366
 
365
- protocol_content_array << "protocol #{protocol_name}: class {"
367
+ protocol_content_array << "public protocol #{protocol_name}: class {"
366
368
  protocol_content_array += tool_swift_function.swift_vars
367
369
  protocol_content_array << "}"
368
370
  protocol_content_array << ""
369
371
 
370
- protocol_content_array << "extension #{protocol_name} {"
372
+ protocol_content_array << "public extension #{protocol_name} {"
371
373
  protocol_content_array += tool_swift_function.swift_default_implementations
372
374
  protocol_content_array << "}"
373
375
  protocol_content_array << ""
@@ -206,7 +206,7 @@ module Fastlane
206
206
  # This just creates a string with as many spaces are necessary given whether or not
207
207
  # the function has a 'discardableResult' annotation, the 'func' keyword, function name
208
208
  # and the opening paren.
209
- function_keyword_definition = 'func '
209
+ function_keyword_definition = 'public func '
210
210
  open_paren = '('
211
211
  closed_paren = ')'
212
212
  indent = ' ' * (discardable_result.length + function_name.length + function_keyword_definition.length + open_paren.length)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.157.2'.freeze
2
+ VERSION = '2.160.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
@@ -1,4 +1,5 @@
1
- // This class is automatically included in FastlaneRunner during build
1
+ // Actions.swift
2
+ // Copyright (c) 2020 FastlaneTools
2
3
 
3
4
  // This autogenerated file will be overwritten or replaced when running "fastlane generate_swift"
4
5
  //
@@ -1,7 +1,5 @@
1
- // This class is automatically included in FastlaneRunner during build
2
- // If you have a custom Appfile.swift, this file will be replaced by it
3
- // Don't modify this file unless you are familiar with how fastlane's swift code generation works
4
- // *** This file will be overwritten or replaced during build time ***
1
+ // Appfile.swift
2
+ // Copyright (c) 2020 FastlaneTools
5
3
 
6
4
  var appIdentifier: String { return "" } // The bundle identifier of your app
7
5
  var appleID: String { return "" } // Your Apple email address
@@ -1,9 +1,5 @@
1
- //
2
- // ArgumentProcessor.swift
3
- // FastlaneRunner
4
- //
5
- // Created by Joshua Liebowitz on 9/28/17.
6
- //
1
+ // ArgumentProcessor.swift
2
+ // Copyright (c) 2020 FastlaneTools
7
3
 
8
4
  //
9
5
  // ** NOTE **
@@ -1,8 +1,5 @@
1
- //
2
- // ControlCommand.swift
3
- // FastlaneRunner
4
- //
5
- // Created by Joshua Liebowitz on 1/3/18.
1
+ // ControlCommand.swift
2
+ // Copyright (c) 2020 FastlaneTools
6
3
 
7
4
  //
8
5
  // ** NOTE **
@@ -1,3 +1,6 @@
1
+ // Deliverfile.swift
2
+ // Copyright (c) 2020 FastlaneTools
3
+
1
4
  // This class is automatically included in FastlaneRunner during build
2
5
 
3
6
  // This autogenerated file will be overwritten or replaced during build time, or when you initialize `deliver`
@@ -8,10 +11,10 @@
8
11
  // new group so that it won't be marked for upgrade
9
12
  //
10
13
 
11
- class Deliverfile: DeliverfileProtocol {
14
+ public class Deliverfile: DeliverfileProtocol {
12
15
  // If you want to enable `deliver`, run `fastlane deliver init`
13
16
  // After, this file will be replaced with a custom implementation that contains values you supplied
14
17
  // during the `init` process, and you won't see this message
15
18
  }
16
19
 
17
- // Generated with fastlane 2.157.2
20
+ // Generated with fastlane 2.160.0