fastlane 2.196.0 → 2.199.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +94 -94
  3. data/cert/lib/cert/runner.rb +5 -2
  4. data/deliver/lib/assets/ScreenshotsHelp +29 -6
  5. data/deliver/lib/deliver/app_screenshot.rb +5 -4
  6. data/deliver/lib/deliver/app_screenshot_iterator.rb +1 -1
  7. data/deliver/lib/deliver/runner.rb +1 -1
  8. data/deliver/lib/deliver/upload_screenshots.rb +1 -1
  9. data/fastlane/lib/.DS_Store +0 -0
  10. data/fastlane/lib/fastlane/.DS_Store +0 -0
  11. data/fastlane/lib/fastlane/actions/.DS_Store +0 -0
  12. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
  13. data/fastlane/lib/fastlane/actions/download_dsyms.rb +61 -45
  14. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/get_version_number.rb +6 -2
  17. data/fastlane/lib/fastlane/actions/notarize.rb +29 -11
  18. data/fastlane/lib/fastlane/actions/set_github_release.rb +11 -5
  19. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +18 -1
  20. data/fastlane/lib/fastlane/actions/xcversion.rb +18 -3
  21. data/fastlane/lib/fastlane/documentation/docs_generator.rb +17 -12
  22. data/fastlane/lib/fastlane/version.rb +1 -1
  23. data/fastlane/swift/Deliverfile.swift +1 -1
  24. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  25. data/fastlane/swift/Fastlane.swift +66 -21
  26. data/fastlane/swift/Gymfile.swift +1 -1
  27. data/fastlane/swift/GymfileProtocol.swift +5 -1
  28. data/fastlane/swift/Matchfile.swift +1 -1
  29. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  30. data/fastlane/swift/Precheckfile.swift +1 -1
  31. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  32. data/fastlane/swift/Runner.swift +3 -7
  33. data/fastlane/swift/Scanfile.swift +1 -1
  34. data/fastlane/swift/ScanfileProtocol.swift +3 -3
  35. data/fastlane/swift/Screengrabfile.swift +1 -1
  36. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  37. data/fastlane/swift/Snapshotfile.swift +1 -1
  38. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  39. data/fastlane/swift/formatting/Brewfile.lock.json +26 -21
  40. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +38 -7
  41. data/frameit/lib/frameit/editor.rb +16 -18
  42. data/frameit/lib/frameit/trim_box.rb +6 -0
  43. data/gym/lib/gym/generators/build_command_generator.rb +1 -1
  44. data/gym/lib/gym/options.rb +6 -0
  45. data/match/lib/match/nuke.rb +79 -1
  46. data/match/lib/match/spaceship_ensure.rb +1 -0
  47. data/pem/lib/pem/manager.rb +29 -6
  48. data/pem/lib/pem/options.rb +9 -0
  49. data/pilot/lib/pilot/build_manager.rb +1 -1
  50. data/scan/lib/scan/options.rb +2 -2
  51. data/scan/lib/scan/runner.rb +1 -1
  52. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +1 -1
  53. data/spaceship/lib/spaceship/client.rb +35 -15
  54. data/spaceship/lib/spaceship/commands_generator.rb +1 -1
  55. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -2
  56. data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +59 -0
  57. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +3 -0
  58. data/spaceship/lib/spaceship/connect_api/response.rb +13 -0
  59. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  60. data/spaceship/lib/spaceship/globals.rb +9 -0
  61. data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
  62. data/trainer/lib/.DS_Store +0 -0
  63. metadata +24 -18
@@ -5,6 +5,7 @@ module Fastlane
5
5
  def self.run(params)
6
6
  package_path = params[:package]
7
7
  bundle_id = params[:bundle_id]
8
+ skip_stapling = params[:skip_stapling]
8
9
  try_early_stapling = params[:try_early_stapling]
9
10
  print_log = params[:print_log]
10
11
  verbose = params[:verbose]
@@ -38,13 +39,13 @@ module Fastlane
38
39
  UI.user_error!('Could not read bundle identifier, provide as a parameter') unless bundle_id
39
40
 
40
41
  if use_notarytool
41
- notarytool(params, package_path, bundle_id, try_early_stapling, print_log, verbose, api_key, compressed_package_path)
42
+ notarytool(params, package_path, bundle_id, skip_stapling, print_log, verbose, api_key, compressed_package_path)
42
43
  else
43
- altool(params, package_path, bundle_id, try_early_stapling, print_log, verbose, api_key, compressed_package_path)
44
+ altool(params, package_path, bundle_id, try_early_stapling, skip_stapling, print_log, verbose, api_key, compressed_package_path)
44
45
  end
45
46
  end
46
47
 
47
- def self.notarytool(params, package_path, bundle_id, try_early_stapling, print_log, verbose, api_key, compressed_package_path)
48
+ def self.notarytool(params, package_path, bundle_id, skip_stapling, print_log, verbose, api_key, compressed_package_path)
48
49
  temp_file = nil
49
50
 
50
51
  # Create authorization part of command with either API Key or Apple ID
@@ -89,10 +90,15 @@ module Fastlane
89
90
  submission_id = notarization_info["id"]
90
91
  UI.success("Successfully uploaded package to notarization service with request identifier #{submission_id}")
91
92
 
92
- UI.message('Stapling package')
93
- self.staple(package_path, verbose)
93
+ if skip_stapling
94
+ UI.success("Successfully notarized artifact")
95
+ else
96
+ UI.message('Stapling package')
94
97
 
95
- UI.success("Successfully notarized and stapled package")
98
+ self.staple(package_path, verbose)
99
+
100
+ UI.success("Successfully notarized and stapled package")
101
+ end
96
102
  when 'Invalid'
97
103
  UI.user_error!("Could not notarize package with message '#{notarization_info['statusSummary']}'")
98
104
  else
@@ -102,7 +108,7 @@ module Fastlane
102
108
  temp_file.delete if temp_file
103
109
  end
104
110
 
105
- def self.altool(params, package_path, bundle_id, try_early_stapling, print_log, verbose, api_key, compressed_package_path)
111
+ def self.altool(params, package_path, bundle_id, try_early_stapling, skip_stapling, print_log, verbose, api_key, compressed_package_path)
106
112
  UI.message('Uploading package to notarization service, might take a while')
107
113
 
108
114
  notarization_upload_command = "xcrun altool --notarize-app -t osx -f \"#{compressed_package_path || package_path}\" --primary-bundle-id #{bundle_id} --output-format xml"
@@ -133,7 +139,7 @@ module Fastlane
133
139
  while notarization_info.empty? || (notarization_info['Status'] == 'in progress')
134
140
  if notarization_info.empty?
135
141
  UI.message('Waiting to query request status')
136
- elsif try_early_stapling
142
+ elsif try_early_stapling && !skip_stapling
137
143
  UI.message('Request in progress, trying early staple')
138
144
 
139
145
  begin
@@ -182,11 +188,15 @@ module Fastlane
182
188
 
183
189
  case notarization_info['Status']
184
190
  when 'success'
185
- UI.message('Stapling package')
191
+ if skip_stapling
192
+ UI.success("Successfully notarized artifact#{log_suffix}")
193
+ else
194
+ UI.message('Stapling package')
186
195
 
187
- self.staple(package_path, verbose)
196
+ self.staple(package_path, verbose)
188
197
 
189
- UI.success("Successfully notarized and stapled package#{log_suffix}")
198
+ UI.success("Successfully notarized and stapled package#{log_suffix}")
199
+ end
190
200
  when 'invalid'
191
201
  UI.user_error!("Could not notarize package with message '#{notarization_info['Status Message']}'#{log_suffix}")
192
202
  else
@@ -262,6 +272,14 @@ module Fastlane
262
272
  env_name: 'FL_NOTARIZE_TRY_EARLY_STAPLING',
263
273
  description: 'Whether to try early stapling while the notarization request is in progress',
264
274
  optional: true,
275
+ conflicting_options: [:skip_stapling],
276
+ default_value: false,
277
+ type: Boolean),
278
+ FastlaneCore::ConfigItem.new(key: :skip_stapling,
279
+ env_name: 'FL_NOTARIZE_SKIP_STAPLING',
280
+ description: 'Do not staple the notarization ticket to the artifact; useful for single file executables and ZIP archives',
281
+ optional: true,
282
+ conflicting_options: [:try_early_stapling],
265
283
  default_value: false,
266
284
  type: Boolean),
267
285
  FastlaneCore::ConfigItem.new(key: :bundle_id,
@@ -19,11 +19,12 @@ module Fastlane
19
19
 
20
20
  payload = {
21
21
  'tag_name' => params[:tag_name],
22
- 'name' => params[:name],
23
- 'body' => params[:description],
24
22
  'draft' => !!params[:is_draft],
25
- 'prerelease' => !!params[:is_prerelease]
23
+ 'prerelease' => !!params[:is_prerelease],
24
+ 'generate_release_notes' => !!params[:is_generate_release_notes]
26
25
  }
26
+ payload['name'] = params[:name] if params[:name]
27
+ payload['body'] = params[:description] if params[:description]
27
28
  payload['target_commitish'] = params[:commitish] if params[:commitish]
28
29
 
29
30
  GithubApiAction.run(
@@ -48,8 +49,7 @@ module Fastlane
48
49
  UI.user_error!("You are not authorized to access #{repo_name}, please make sure you provided a valid API token (GITHUB_API_TOKEN)")
49
50
  end,
50
51
  '*' => proc do |result|
51
- UI.error("GitHub responded with #{result[:status]}:#{result[:body]}")
52
- return nil
52
+ UI.user_error!("GitHub responded with #{result[:status]}:#{result[:body]}")
53
53
  end
54
54
  }
55
55
  ) do |result|
@@ -221,6 +221,12 @@ module Fastlane
221
221
  optional: true,
222
222
  default_value: false,
223
223
  type: Boolean),
224
+ FastlaneCore::ConfigItem.new(key: :is_generate_release_notes,
225
+ env_name: "FL_SET_GITHUB_RELEASE_IS_GENERATE_RELEASE_NOTES",
226
+ description: "Whether the name and body of this release should be generated automatically",
227
+ optional: true,
228
+ default_value: false,
229
+ type: Boolean),
224
230
  FastlaneCore::ConfigItem.new(key: :upload_assets,
225
231
  env_name: "FL_SET_GITHUB_RELEASE_UPLOAD_ASSETS",
226
232
  description: "Path to assets to be uploaded with the release",
@@ -50,6 +50,10 @@ module Fastlane
50
50
  set_build_setting(config, "PROVISIONING_PROFILE_SPECIFIER", params[:profile_name])
51
51
  UI.important("Set Provisioning Profile name to: #{params[:profile_name]} for target: #{target.name} for build configuration: #{config.name}")
52
52
  end
53
+ if params[:entitlements_file_path]
54
+ set_build_setting(config, "CODE_SIGN_ENTITLEMENTS", params[:entitlements_file_path])
55
+ UI.important("Set Entitlements file path to: #{params[:entitlements_file_path]} for target: #{target.name} for build configuration: #{config.name}")
56
+ end
53
57
  # Since Xcode 8, this is no longer needed, you simply use PROVISIONING_PROFILE_SPECIFIER
54
58
  if params[:profile_uuid]
55
59
  set_build_setting(config, "PROVISIONING_PROFILE", params[:profile_uuid])
@@ -143,6 +147,10 @@ module Fastlane
143
147
  env_name: "FL_CODE_SIGN_IDENTITY",
144
148
  description: "Code signing identity type (iPhone Developer, iPhone Distribution)",
145
149
  optional: true),
150
+ FastlaneCore::ConfigItem.new(key: :entitlements_file_path,
151
+ env_name: "FL_CODE_SIGN_ENTITLEMENTS_FILE_PATH",
152
+ description: "Path to your entitlements file",
153
+ optional: true),
146
154
  FastlaneCore::ConfigItem.new(key: :profile_name,
147
155
  env_name: "FL_PROVISIONING_PROFILE_SPECIFIER",
148
156
  description: "Provisioning profile name to use for code signing",
@@ -172,6 +180,15 @@ module Fastlane
172
180
  update_code_signing_settings(
173
181
  use_automatic_signing: true,
174
182
  path: "demo-project/demo/demo.xcodeproj"
183
+ )',
184
+ ' # more advanced manual code signing
185
+ update_code_signing_settings(
186
+ use_automatic_signing: true,
187
+ path: "demo-project/demo/demo.xcodeproj",
188
+ team_id: "QABC123DEV",
189
+ bundle_identifier: "com.demoapp.QABC123DEV",
190
+ profile_name: "Demo App Deployment Profile",
191
+ entitlements_file_path: "Demo App/generated/New.entitlements"
175
192
  )'
176
193
  ]
177
194
  end
@@ -185,7 +202,7 @@ module Fastlane
185
202
  end
186
203
 
187
204
  def self.authors
188
- ["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55"]
205
+ ["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55", "abcdev"]
189
206
  end
190
207
 
191
208
  def self.is_supported?(platform)
@@ -5,6 +5,7 @@ module Fastlane
5
5
  Actions.verify_gem!('xcode-install')
6
6
 
7
7
  version = params[:version]
8
+
8
9
  xcode = Helper::XcversionHelper.find_xcode(version)
9
10
  UI.user_error!("Cannot find an installed Xcode satisfying '#{version}'") if xcode.nil?
10
11
 
@@ -14,16 +15,29 @@ module Fastlane
14
15
  ENV["DEVELOPER_DIR"] = File.join(xcode.path, "/Contents/Developer")
15
16
  end
16
17
 
18
+ def self.read_xcode_version_file
19
+ xcode_version_paths = Dir.glob(".xcode-version")
20
+
21
+ if xcode_version_paths.first
22
+ return File.read(xcode_version_paths.first).strip
23
+ end
24
+
25
+ return nil
26
+ end
27
+
17
28
  def self.description
18
29
  "Select an Xcode to use by version specifier"
19
30
  end
20
31
 
21
32
  def self.details
22
- "Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)"
33
+ [
34
+ "Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)",
35
+ "You can either manually provide a specific version using `version:` or you make use of the `.xcode-version` file."
36
+ ].join("\n")
23
37
  end
24
38
 
25
39
  def self.authors
26
- ["oysta"]
40
+ ["oysta", "rogerluan"]
27
41
  end
28
42
 
29
43
  def self.available_options
@@ -31,7 +45,8 @@ module Fastlane
31
45
  FastlaneCore::ConfigItem.new(key: :version,
32
46
  env_name: "FL_XCODE_VERSION",
33
47
  description: "The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0')",
34
- optional: false,
48
+ default_value: self.read_xcode_version_file,
49
+ default_value_dynamic: true,
35
50
  verify_block: Helper::XcversionHelper::Verify.method(:requirement))
36
51
  ]
37
52
  end
@@ -4,21 +4,18 @@ module Fastlane
4
4
  output_path ||= File.join(FastlaneCore::FastlaneFolder.path || '.', 'README.md')
5
5
 
6
6
  output = ["fastlane documentation"]
7
- output << "================"
7
+ output << "----"
8
+ output << ""
8
9
 
9
10
  output << "# Installation"
10
11
  output << ""
11
12
  output << "Make sure you have the latest version of the Xcode command line tools installed:"
12
13
  output << ""
13
- output << "```"
14
+ output << "```sh"
14
15
  output << "xcode-select --install"
15
16
  output << "```"
16
17
  output << ""
17
- output << "Install _fastlane_ using"
18
- output << "```"
19
- output << "[sudo] gem install fastlane -NV"
20
- output << "```"
21
- output << "or alternatively using `brew install fastlane`"
18
+ output << "For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)"
22
19
  output << ""
23
20
  output << "# Available Actions"
24
21
 
@@ -32,7 +29,10 @@ module Fastlane
32
29
  next
33
30
  end
34
31
 
35
- output << "## #{formatted_platform(platform)}" if platform
32
+ if platform
33
+ output << ""
34
+ output << "## #{formatted_platform(platform)}"
35
+ end
36
36
 
37
37
  lanes.each do |lane_name, lane|
38
38
  next if lane.is_private
@@ -45,8 +45,10 @@ module Fastlane
45
45
  end
46
46
 
47
47
  output << "This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run."
48
- output << "More information about fastlane can be found on [fastlane.tools](https://fastlane.tools)."
49
- output << "The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools)."
48
+ output << ""
49
+ output << "More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools)."
50
+ output << ""
51
+ output << "The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools)."
50
52
  output << ""
51
53
 
52
54
  begin
@@ -78,10 +80,13 @@ module Fastlane
78
80
  full_name = [platform, lane].reject(&:nil?).join(' ')
79
81
 
80
82
  output = []
83
+ output << ""
81
84
  output << "### #{full_name}"
85
+ output << ""
86
+ output << "```sh"
87
+ output << "[bundle exec] fastlane #{full_name}"
82
88
  output << "```"
83
- output << "fastlane #{full_name}"
84
- output << "```"
89
+ output << ""
85
90
  output << description
86
91
  output
87
92
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.196.0'.freeze
2
+ VERSION = '2.199.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 = '1.12.1'.freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.196.0
20
+ // Generated with fastlane 2.199.0
@@ -260,4 +260,4 @@ public extension DeliverfileProtocol {
260
260
 
261
261
  // Please don't remove the lines below
262
262
  // They are used to detect outdated files
263
- // FastlaneRunnerAPIVersion [0.9.85]
263
+ // FastlaneRunnerAPIVersion [0.9.89]