fastlane 2.157.2 → 2.160.0

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