fastlane 2.191.0 → 2.194.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 +84 -84
  3. data/cert/lib/cert/options.rb +1 -1
  4. data/deliver/lib/deliver/options.rb +1 -1
  5. data/fastlane/lib/assets/completions/completion.bash +4 -1
  6. data/fastlane/lib/assets/completions/completion.zsh +6 -5
  7. data/fastlane/lib/fastlane/actions/.notarize.rb.swp +0 -0
  8. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/create_xcframework.rb +97 -17
  10. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/notarize.rb +97 -12
  14. data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/slather.rb +6 -0
  19. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -1
  20. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +3 -1
  21. data/fastlane/lib/fastlane/actions/zip.rb +5 -5
  22. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
  23. data/fastlane/lib/fastlane/version.rb +1 -1
  24. data/fastlane/swift/Deliverfile.swift +1 -1
  25. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  26. data/fastlane/swift/Fastlane.swift +101 -43
  27. data/fastlane/swift/Gymfile.swift +1 -1
  28. data/fastlane/swift/GymfileProtocol.swift +1 -1
  29. data/fastlane/swift/Matchfile.swift +1 -1
  30. data/fastlane/swift/MatchfileProtocol.swift +3 -3
  31. data/fastlane/swift/Precheckfile.swift +1 -1
  32. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  33. data/fastlane/swift/Scanfile.swift +1 -1
  34. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  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 +10 -10
  40. data/fastlane_core/lib/fastlane_core/build_watcher.rb +25 -6
  41. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +5 -0
  42. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
  43. data/match/lib/match/options.rb +2 -2
  44. data/match/lib/match/runner.rb +10 -9
  45. data/pilot/lib/pilot/build_manager.rb +14 -4
  46. data/pilot/lib/pilot/manager.rb +3 -1
  47. data/pilot/lib/pilot/options.rb +21 -2
  48. data/precheck/lib/precheck/options.rb +1 -1
  49. data/produce/lib/produce/service.rb +1 -1
  50. data/sigh/lib/assets/resign.sh +1 -1
  51. data/sigh/lib/sigh/options.rb +1 -1
  52. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
  53. data/spaceship/lib/spaceship/connect_api/api_client.rb +15 -1
  54. data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -1
  55. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
  56. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  57. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
  58. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +7 -5
  59. data/spaceship/lib/spaceship/connect_api/token.rb +2 -0
  60. data/supply/lib/supply/client.rb +38 -5
  61. data/supply/lib/supply/options.rb +7 -0
  62. data/supply/lib/supply/uploader.rb +9 -6
  63. metadata +35 -20
@@ -35,7 +35,7 @@ module Precheck
35
35
  end),
36
36
  FastlaneCore::ConfigItem.new(key: :api_key,
37
37
  env_names: ["PRECHECK_API_KEY", "APP_STORE_CONNECT_API_KEY"],
38
- description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
38
+ description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
39
39
  type: Hash,
40
40
  optional: true,
41
41
  sensitive: true,
@@ -97,7 +97,7 @@ module Produce
97
97
  bundle_id.update_capability(ACCESS_WIFI_INFORMATION, enabled: on)
98
98
  end
99
99
 
100
- if options.access_wifi
100
+ if options.app_attest
101
101
  UI.message("\tApp Attest")
102
102
  bundle_id.update_capability(APP_ATTEST, enabled: on)
103
103
  end
@@ -644,7 +644,7 @@ function resign {
644
644
  # Get the old and new app identifier (prefix)
645
645
  APP_ID_KEY="application-identifier"
646
646
  # Extract just the identifier from the value
647
- # Use the fact that we are after some identifer, which is always at the start of the string
647
+ # Use the fact that we are after some identifier, which is always at the start of the string
648
648
  OLD_APP_ID=$(PlistBuddy -c "Print $APP_ID_KEY" "$APP_ENTITLEMENTS" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
649
649
  NEW_APP_ID=$(PlistBuddy -c "Print $APP_ID_KEY" "$PROFILE_ENTITLEMENTS" | grep -E '^[A-Z0-9]*' -o | tr -d '\n')
650
650
 
@@ -66,7 +66,7 @@ module Sigh
66
66
  end),
67
67
  FastlaneCore::ConfigItem.new(key: :api_key,
68
68
  env_names: ["SIGH_API_KEY", "APP_STORE_CONNECT_API_KEY"],
69
- description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
69
+ description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
70
70
  type: Hash,
71
71
  optional: true,
72
72
  sensitive: true,
@@ -116,7 +116,8 @@ module Snapshot
116
116
  device_udid = TestCommandGenerator.device_udid(device_type)
117
117
 
118
118
  UI.message("Launch Simulator #{device_type}")
119
- Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")
119
+ # Boot the simulator and wait for it to finish booting
120
+ Helper.backticks("xcrun simctl bootstatus #{device_udid} -b &> /dev/null")
120
121
 
121
122
  UI.message("Overriding Status Bar")
122
123
 
@@ -208,7 +208,13 @@ module Spaceship
208
208
  # Overridden from Spaceship::Client
209
209
  def handle_error(response)
210
210
  body = response.body.empty? ? {} : response.body
211
- body = JSON.parse(body) if body.kind_of?(String)
211
+
212
+ # Setting body nil if invalid JSON which can happen if 502
213
+ begin
214
+ body = JSON.parse(body) if body.kind_of?(String)
215
+ rescue
216
+ nil
217
+ end
212
218
 
213
219
  case response.status.to_i
214
220
  when 401
@@ -221,6 +227,14 @@ module Spaceship
221
227
  else
222
228
  raise AccessForbiddenError, format_errors(response)
223
229
  end
230
+ when 502
231
+ # Issue - https://github.com/fastlane/fastlane/issues/19264
232
+ # This 502 with "Could not process this request" body sometimes
233
+ # work and sometimes doesn't
234
+ # Usually retrying once or twice will solve the issue
235
+ if body && body.include?("Could not process this request")
236
+ raise BadGatewayError, "Could not process this request"
237
+ end
224
238
  end
225
239
  end
226
240
 
@@ -385,11 +385,12 @@ module Spaceship
385
385
  return resps.flat_map(&:to_models)
386
386
  end
387
387
 
388
- def create_beta_group(client: nil, group_name: nil, public_link_enabled: false, public_link_limit: 10_000, public_link_limit_enabled: false)
388
+ def create_beta_group(client: nil, group_name: nil, is_internal_group: false, public_link_enabled: false, public_link_limit: 10_000, public_link_limit_enabled: false)
389
389
  client ||= Spaceship::ConnectAPI
390
390
  resps = client.create_beta_group(
391
391
  app_id: id,
392
392
  group_name: group_name,
393
+ is_internal_group: is_internal_group,
393
394
  public_link_enabled: public_link_enabled,
394
395
  public_link_limit: public_link_limit,
395
396
  public_link_limit_enabled: public_link_limit_enabled
@@ -112,7 +112,7 @@ module Spaceship
112
112
 
113
113
  # @deprecated
114
114
  def fetch_age_rating_declaration(client: nil)
115
- raise 'AppStoreVersion no longer as AgeRatingDelcaration as of App Store Connect API 1.3 - Use AppInfo instead'
115
+ raise 'AppStoreVersion no longer as AgeRatingDeclaration as of App Store Connect API 1.3 - Use AppInfo instead'
116
116
  end
117
117
 
118
118
  #
@@ -86,6 +86,10 @@ module Spaceship
86
86
  return build_beta_detail.nil? == false && build_beta_detail.ready_for_internal_testing?
87
87
  end
88
88
 
89
+ def ready_for_external_testing?
90
+ return build_beta_detail.nil? == false && build_beta_detail.ready_for_external_testing?
91
+ end
92
+
89
93
  def ready_for_beta_submission?
90
94
  raise "No build_beta_detail included" unless build_beta_detail
91
95
  return build_beta_detail.ready_for_beta_submission?
@@ -53,6 +53,10 @@ module Spaceship
53
53
  return internal_build_state == InternalState::READY_FOR_BETA_TESTING
54
54
  end
55
55
 
56
+ def processed?
57
+ return internal_build_state != InternalState::PROCESSING && external_build_state != ExternalState::PROCESSING
58
+ end
59
+
56
60
  def ready_for_beta_submission?
57
61
  return external_build_state == ExternalState::READY_FOR_BETA_SUBMISSION
58
62
  end
@@ -204,11 +204,13 @@ module Spaceship
204
204
  test_flight_request_client.delete("builds/#{build_id}/relationships/betaGroups", nil, body)
205
205
  end
206
206
 
207
- def create_beta_group(app_id: nil, group_name: nil, public_link_enabled: false, public_link_limit: 10_000, public_link_limit_enabled: false)
207
+ def create_beta_group(app_id: nil, group_name: nil, is_internal_group: false, public_link_enabled: false, public_link_limit: 10_000, public_link_limit_enabled: false)
208
208
  body = {
209
209
  data: {
210
210
  attributes: {
211
211
  name: group_name,
212
+ isInternalGroup: is_internal_group,
213
+ hasAccessToAllBuilds: is_internal_group ? true : false, # Undocumented of 2021-08-02 in ASC API docs and ASC Open API spec. This is the default behavior on App Store Connect and does work with both Apple ID and API Token
212
214
  publicLinkEnabled: public_link_enabled,
213
215
  publicLinkLimit: public_link_limit,
214
216
  publicLinkLimitEnabled: public_link_limit_enabled
@@ -218,11 +220,11 @@ module Spaceship
218
220
  data: {
219
221
  id: app_id,
220
222
  type: "apps"
221
- }
222
- }
223
+ },
224
+ },
223
225
  },
224
- type: "betaGroups"
225
- }
226
+ type: "betaGroups",
227
+ },
226
228
  }
227
229
  test_flight_request_client.post("betaGroups", body)
228
230
  end
@@ -21,6 +21,8 @@ module Spaceship
21
21
  attr_reader :duration
22
22
  attr_reader :expiration
23
23
 
24
+ attr_reader :key_raw
25
+
24
26
  # Temporary attribute not needed to create the JWT text
25
27
  # There is no way to determine if the team associated with this
26
28
  # key is for App Store or Enterprise so this is the temporary workaround
@@ -163,11 +163,44 @@ module Supply
163
163
  ensure_active_edit!
164
164
 
165
165
  call_google_api do
166
- client.commit_edit(
167
- current_package_name,
168
- current_edit.id,
169
- changes_not_sent_for_review: Supply.config[:changes_not_sent_for_review]
170
- )
166
+ begin
167
+ client.commit_edit(
168
+ current_package_name,
169
+ current_edit.id,
170
+ changes_not_sent_for_review: Supply.config[:changes_not_sent_for_review]
171
+ )
172
+ rescue Google::Apis::ClientError => e
173
+ unless Supply.config[:rescue_changes_not_sent_for_review]
174
+ raise
175
+ end
176
+
177
+ error = begin
178
+ JSON.parse(e.body)
179
+ rescue
180
+ nil
181
+ end
182
+
183
+ if error
184
+ message = error["error"] && error["error"]["message"]
185
+ else
186
+ message = e.body
187
+ end
188
+
189
+ if message.include?("The query parameter changesNotSentForReview must not be set")
190
+ client.commit_edit(
191
+ current_package_name,
192
+ current_edit.id
193
+ )
194
+ elsif message.include?("Please set the query parameter changesNotSentForReview to true")
195
+ client.commit_edit(
196
+ current_package_name,
197
+ current_edit.id,
198
+ changes_not_sent_for_review: true
199
+ )
200
+ else
201
+ raise
202
+ end
203
+ end
171
204
  end
172
205
 
173
206
  self.current_edit = nil
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Metrics/ClassLength
2
+
1
3
  require 'fastlane_core/configuration/config_item'
2
4
  require 'credentials_manager/appfile_config'
3
5
 
@@ -286,6 +288,11 @@ module Supply
286
288
  description: "Indicates that the changes in this edit will not be reviewed until they are explicitly sent for review from the Google Play Console UI",
287
289
  type: Boolean,
288
290
  default_value: false),
291
+ FastlaneCore::ConfigItem.new(key: :rescue_changes_not_sent_for_review,
292
+ env_name: "SUPPLY_RESCUE_CHANGES_NOT_SENT_FOR_REVIEW",
293
+ description: "Catches changes_not_sent_for_review errors when an edit is committed and retries with the configuration that the error message recommended",
294
+ type: Boolean,
295
+ default_value: true),
289
296
  FastlaneCore::ConfigItem.new(key: :in_app_update_priority,
290
297
  env_name: "SUPPLY_IN_APP_UPDATE_PRIORITY",
291
298
  optional: true,
@@ -13,6 +13,8 @@ module Supply
13
13
  apk_version_codes.concat(upload_bundles) unless Supply.config[:skip_upload_aab]
14
14
  upload_mapping(apk_version_codes)
15
15
 
16
+ track_to_update = Supply.config[:track]
17
+
16
18
  apk_version_codes.concat(Supply.config[:version_codes_to_retain]) if Supply.config[:version_codes_to_retain]
17
19
 
18
20
  if !apk_version_codes.empty?
@@ -23,13 +25,14 @@ module Supply
23
25
  else
24
26
  # Only promote or rollout if we don't have version codes
25
27
  if Supply.config[:track_promote_to]
28
+ track_to_update = Supply.config[:track_promote_to]
26
29
  promote_track
27
30
  elsif !Supply.config[:rollout].nil? && Supply.config[:track].to_s != ""
28
31
  update_rollout
29
32
  end
30
33
  end
31
34
 
32
- perform_upload_meta(apk_version_codes)
35
+ perform_upload_meta(apk_version_codes, track_to_update)
33
36
 
34
37
  if Supply.config[:validate_only]
35
38
  UI.message("Validating all changes with Google Play...")
@@ -70,7 +73,7 @@ module Supply
70
73
  end
71
74
  end
72
75
 
73
- def perform_upload_meta(version_codes)
76
+ def perform_upload_meta(version_codes, track_name)
74
77
  if (!Supply.config[:skip_upload_metadata] || !Supply.config[:skip_upload_images] || !Supply.config[:skip_upload_changelogs] || !Supply.config[:skip_upload_screenshots]) && metadata_path
75
78
  # Use version code from config if version codes is empty and no nil or empty string
76
79
  version_codes = [Supply.config[:version_code]] if version_codes.empty?
@@ -81,7 +84,7 @@ module Supply
81
84
  version_codes.each do |version_code|
82
85
  UI.user_error!("Could not find folder #{metadata_path}") unless File.directory?(metadata_path)
83
86
 
84
- track, release = fetch_track_and_release!(Supply.config[:track], version_code)
87
+ track, release = fetch_track_and_release!(track_name, version_code)
85
88
  UI.user_error!("Unable to find the requested track - '#{Supply.config[:track]}'") unless track
86
89
  UI.user_error!("Could not find release for version code '#{version_code}' to update changelog") unless release
87
90
 
@@ -98,7 +101,7 @@ module Supply
98
101
  release_notes << upload_changelog(language, version_code) unless Supply.config[:skip_upload_changelogs]
99
102
  end
100
103
 
101
- upload_changelogs(release_notes, release, track) unless release_notes.empty?
104
+ upload_changelogs(release_notes, release, track, track_name) unless release_notes.empty?
102
105
  end
103
106
  end
104
107
  end
@@ -239,9 +242,9 @@ module Supply
239
242
  )
240
243
  end
241
244
 
242
- def upload_changelogs(release_notes, release, track)
245
+ def upload_changelogs(release_notes, release, track, track_name)
243
246
  release.release_notes = release_notes
244
- client.upload_changelogs(track, Supply.config[:track])
247
+ client.upload_changelogs(track, track_name)
245
248
  end
246
249
 
247
250
  def upload_metadata(language, listing)
metadata CHANGED
@@ -1,38 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.191.0
4
+ version: 2.194.0
5
5
  platform: ruby
6
6
  authors:
7
- - Andrew McBurney
8
- - Fumiya Nakamura
9
- - Manu Wallner
10
- - Jimmy Dee
11
- - Satoshi Namai
12
7
  - Josh Holtz
13
- - Felix Krause
14
- - Jérôme Lacoste
15
- - Manish Rathi
16
- - Kohki Miki
17
- - Iulian Onofrei
18
- - Matthew Ellis
19
- - Aaron Brager
20
8
  - Danielle Tomlinson
9
+ - Jorge Revuelta H
10
+ - Aaron Brager
11
+ - Kohki Miki
12
+ - Joshua Liebowitz
13
+ - Olivier Halligon
14
+ - Fumiya Nakamura
15
+ - Satoshi Namai
21
16
  - Max Ott
17
+ - Helmut Januschka
22
18
  - Roger Oba
23
- - Olivier Halligon
19
+ - Felix Krause
24
20
  - Maksym Grebenets
25
- - Jan Piotrowski
26
- - Jorge Revuelta H
21
+ - Jérôme Lacoste
22
+ - Jimmy Dee
27
23
  - Luka Mirosevic
28
- - Daniel Jankowski
24
+ - Manish Rathi
25
+ - Manu Wallner
26
+ - Andrew McBurney
29
27
  - Stefan Natchev
30
- - Helmut Januschka
31
- - Joshua Liebowitz
28
+ - Daniel Jankowski
29
+ - Jan Piotrowski
30
+ - Matthew Ellis
31
+ - Iulian Onofrei
32
32
  autorequire:
33
33
  bindir: bin
34
34
  cert_chain: []
35
- date: 2021-08-06 00:00:00.000000000 Z
35
+ date: 2021-09-15 00:00:00.000000000 Z
36
36
  dependencies:
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: xcodeproj
@@ -196,6 +196,20 @@ dependencies:
196
196
  - - "~>"
197
197
  - !ruby/object:Gem::Version
198
198
  version: 1.0.0
199
+ - !ruby/object:Gem::Dependency
200
+ name: optparse
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: 0.1.1
206
+ type: :runtime
207
+ prerelease: false
208
+ version_requirements: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: 0.1.1
199
213
  - !ruby/object:Gem::Dependency
200
214
  name: tty-screen
201
215
  requirement: !ruby/object:Gem::Requirement
@@ -999,6 +1013,7 @@ files:
999
1013
  - fastlane/lib/fastlane.rb
1000
1014
  - fastlane/lib/fastlane/action.rb
1001
1015
  - fastlane/lib/fastlane/action_collector.rb
1016
+ - fastlane/lib/fastlane/actions/.notarize.rb.swp
1002
1017
  - fastlane/lib/fastlane/actions/README.md
1003
1018
  - fastlane/lib/fastlane/actions/actions_helper.rb
1004
1019
  - fastlane/lib/fastlane/actions/adb.rb