fastlane 2.196.0 → 2.199.0

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