fastlane 2.191.0 → 2.194.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 +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