fastlane 2.168.0 → 2.173.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +68 -68
  3. data/cert/lib/cert/options.rb +2 -2
  4. data/deliver/lib/deliver/app_screenshot.rb +5 -7
  5. data/deliver/lib/deliver/app_screenshot_validator.rb +108 -0
  6. data/deliver/lib/deliver/commands_generator.rb +1 -1
  7. data/deliver/lib/deliver/loader.rb +123 -21
  8. data/deliver/lib/deliver/setup.rb +8 -3
  9. data/deliver/lib/deliver/upload_metadata.rb +6 -10
  10. data/deliver/lib/deliver/upload_screenshots.rb +1 -64
  11. data/fastlane/lib/fastlane/actions/add_git_tag.rb +12 -3
  12. data/fastlane/lib/fastlane/actions/artifactory.rb +36 -3
  13. data/fastlane/lib/fastlane/actions/build_app.rb +3 -1
  14. data/fastlane/lib/fastlane/actions/create_pull_request.rb +16 -1
  15. data/fastlane/lib/fastlane/actions/create_xcframework.rb +118 -0
  16. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  17. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
  18. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -0
  19. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +5 -1
  20. data/fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb +142 -0
  21. data/fastlane/lib/fastlane/actions/download_dsyms.rb +0 -1
  22. data/fastlane/lib/fastlane/actions/git_commit.rb +6 -2
  23. data/fastlane/lib/fastlane/actions/github_api.rb +14 -3
  24. data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
  25. data/fastlane/lib/fastlane/actions/onesignal.rb +13 -3
  26. data/fastlane/lib/fastlane/actions/pod_push.rb +9 -0
  27. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +9 -1
  28. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  29. data/fastlane/lib/fastlane/actions/register_devices.rb +2 -1
  30. data/fastlane/lib/fastlane/actions/set_github_release.rb +21 -8
  31. data/fastlane/lib/fastlane/actions/slack.rb +4 -5
  32. data/fastlane/lib/fastlane/actions/spm.rb +2 -2
  33. data/fastlane/lib/fastlane/actions/swiftlint.rb +4 -4
  34. data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +291 -0
  35. data/fastlane/lib/fastlane/actions/xcode_install.rb +8 -5
  36. data/fastlane/lib/fastlane/cli_tools_distributor.rb +3 -0
  37. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
  38. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +3 -0
  39. data/fastlane/lib/fastlane/version.rb +1 -1
  40. data/fastlane/swift/Deliverfile.swift +2 -2
  41. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  42. data/fastlane/swift/Fastlane.swift +267 -45
  43. data/fastlane/swift/Gymfile.swift +2 -2
  44. data/fastlane/swift/GymfileProtocol.swift +15 -3
  45. data/fastlane/swift/Matchfile.swift +2 -2
  46. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  47. data/fastlane/swift/Precheckfile.swift +2 -2
  48. data/fastlane/swift/PrecheckfileProtocol.swift +6 -2
  49. data/fastlane/swift/Scanfile.swift +2 -2
  50. data/fastlane/swift/ScanfileProtocol.swift +18 -2
  51. data/fastlane/swift/Screengrabfile.swift +2 -2
  52. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  53. data/fastlane/swift/Snapshotfile.swift +2 -2
  54. data/fastlane/swift/SnapshotfileProtocol.swift +15 -3
  55. data/fastlane_core/lib/fastlane_core/helper.rb +2 -2
  56. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
  57. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -4
  58. data/fastlane_core/lib/fastlane_core/project.rb +19 -6
  59. data/frameit/lib/frameit/device_types.rb +7 -1
  60. data/gym/lib/gym/error_handler.rb +8 -0
  61. data/gym/lib/gym/generators/build_command_generator.rb +3 -0
  62. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
  63. data/gym/lib/gym/options.rb +19 -3
  64. data/match/lib/match/encryption/openssl.rb +4 -2
  65. data/match/lib/match/runner.rb +1 -1
  66. data/match/lib/match/storage/git_storage.rb +14 -10
  67. data/precheck/lib/precheck/options.rb +6 -1
  68. data/precheck/lib/precheck/rule_processor.rb +1 -1
  69. data/precheck/lib/precheck/runner.rb +1 -1
  70. data/scan/lib/scan/options.rb +22 -1
  71. data/scan/lib/scan/runner.rb +6 -1
  72. data/scan/lib/scan/slack_poster.rb +4 -1
  73. data/scan/lib/scan/test_command_generator.rb +3 -0
  74. data/screengrab/lib/screengrab/runner.rb +2 -0
  75. data/sigh/lib/sigh/runner.rb +1 -1
  76. data/snapshot/lib/assets/SnapshotHelper.swift +6 -2
  77. data/snapshot/lib/snapshot/options.rb +17 -2
  78. data/snapshot/lib/snapshot/update.rb +1 -1
  79. data/spaceship/lib/spaceship/client.rb +28 -1
  80. data/spaceship/lib/spaceship/connect_api.rb +6 -0
  81. data/spaceship/lib/spaceship/connect_api/api_client.rb +1 -1
  82. data/spaceship/lib/spaceship/connect_api/models/app.rb +19 -4
  83. data/spaceship/lib/spaceship/connect_api/models/app_data_usage.rb +59 -0
  84. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb +65 -0
  85. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb +27 -0
  86. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb +18 -0
  87. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb +37 -0
  88. data/spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb +36 -0
  89. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
  90. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +2 -0
  91. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +8 -1
  92. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
  93. data/spaceship/lib/spaceship/connect_api/models/device.rb +30 -0
  94. data/spaceship/lib/spaceship/connect_api/response.rb +3 -1
  95. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
  96. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +103 -0
  97. data/spaceship/lib/spaceship/errors.rb +19 -0
  98. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +19 -6
  99. data/spaceship/lib/spaceship/upgrade_2fa_later_client.rb +91 -0
  100. metadata +44 -23
  101. data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
  102. data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
  103. data/spaceship/lib/spaceship/connect_api/models/.app_screenshot.rb.swp +0 -0
  104. data/spaceship/lib/spaceship/connect_api/models/.build.rb.swp +0 -0
@@ -214,6 +214,18 @@ module Spaceship
214
214
  test_flight_request_client.post("betaGroups", body)
215
215
  end
216
216
 
217
+ def patch_group(group_id: nil, attributes: {})
218
+ body = {
219
+ data: {
220
+ attributes: attributes,
221
+ id: group_id,
222
+ type: "betaGroups"
223
+ }
224
+ }
225
+
226
+ test_flight_request_client.patch("betaGroups/#{group_id}", body)
227
+ end
228
+
217
229
  def delete_beta_group(group_id: nil)
218
230
  raise "group_id is nil" if group_id.nil?
219
231
 
@@ -200,6 +200,109 @@ module Spaceship
200
200
  tunes_request_client.patch("apps/#{app_id}", body)
201
201
  end
202
202
 
203
+ #
204
+ # appDataUsage
205
+ #
206
+
207
+ def get_app_data_usages(app_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
208
+ params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
209
+ tunes_request_client.get("apps/#{app_id}/dataUsages", params)
210
+ end
211
+
212
+ def post_app_data_usage(app_id:, app_data_usage_category_id: nil, app_data_usage_protection_id: nil, app_data_usage_purpose_id: nil)
213
+ raise "app_id is required " if app_id.nil?
214
+
215
+ relationships = {
216
+ app: {
217
+ data: {
218
+ type: "apps",
219
+ id: app_id
220
+ }
221
+ }
222
+ }
223
+
224
+ if app_data_usage_category_id
225
+ relationships[:category] = {
226
+ data: {
227
+ type: "appDataUsageCategories",
228
+ id: app_data_usage_category_id
229
+ }
230
+ }
231
+ end
232
+
233
+ if app_data_usage_protection_id
234
+ relationships[:dataProtection] = {
235
+ data: {
236
+ type: "appDataUsageDataProtections",
237
+ id: app_data_usage_protection_id
238
+ }
239
+ }
240
+ end
241
+
242
+ if app_data_usage_purpose_id
243
+ relationships[:purpose] = {
244
+ data: {
245
+ type: "appDataUsagePurposes",
246
+ id: app_data_usage_purpose_id
247
+ }
248
+ }
249
+ end
250
+
251
+ body = {
252
+ data: {
253
+ type: "appDataUsages",
254
+ relationships: relationships
255
+ }
256
+ }
257
+
258
+ tunes_request_client.post("appDataUsages", body)
259
+ end
260
+
261
+ def delete_app_data_usage(app_data_usage_id: nil)
262
+ tunes_request_client.delete("appDataUsages/#{app_data_usage_id}")
263
+ end
264
+
265
+ #
266
+ # appDataUsageCategory
267
+ #
268
+
269
+ def get_app_data_usage_categories(filter: {}, includes: nil, limit: nil, sort: nil)
270
+ params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
271
+ tunes_request_client.get("appDataUsageCategories", params)
272
+ end
273
+
274
+ #
275
+ # appDataUsagePurpose
276
+ #
277
+
278
+ def get_app_data_usage_purposes(filter: {}, includes: nil, limit: nil, sort: nil)
279
+ params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
280
+ tunes_request_client.get("appDataUsagePurposes", params)
281
+ end
282
+
283
+ #
284
+ # appDataUsagesPublishState
285
+ #
286
+
287
+ def get_app_data_usages_publish_state(app_id: nil)
288
+ params = tunes_request_client.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
289
+ tunes_request_client.get("apps/#{app_id}/dataUsagePublishState", params)
290
+ end
291
+
292
+ def patch_app_data_usages_publish_state(app_data_usages_publish_state_id: nil, published: nil)
293
+ body = {
294
+ data: {
295
+ type: "appDataUsagesPublishState",
296
+ id: app_data_usages_publish_state_id,
297
+ attributes: {
298
+ published: published
299
+ }
300
+ }
301
+ }
302
+
303
+ tunes_request_client.patch("appDataUsagesPublishState/#{app_data_usages_publish_state_id}", body)
304
+ end
305
+
203
306
  #
204
307
  # appPreview
205
308
  #
@@ -43,6 +43,25 @@ module Spaceship
43
43
  end
44
44
  end
45
45
 
46
+ # Raised when 429 is received from App Store Connect
47
+ class TooManyRequestsError < BasicPreferredInfoError
48
+ attr_reader :retry_after
49
+ attr_reader :rate_limit_user
50
+
51
+ def initialize(resp_hash)
52
+ headers = resp_hash[:response_headers] || {}
53
+ @retry_after = (headers['retry-after'] || 60).to_i
54
+ @rate_limit_user = headers['x-daiquiri-rate-limit-user']
55
+ message = 'Apple 429 detected'
56
+ message += " - #{rate_limit_user}" if rate_limit_user
57
+ super(message)
58
+ end
59
+
60
+ def show_github_issues
61
+ false
62
+ end
63
+ end
64
+
46
65
  class UnexpectedResponse < StandardError
47
66
  attr_reader :error_info
48
67
 
@@ -4,6 +4,7 @@ require_relative 'tunes/tunes_client'
4
4
  module Spaceship
5
5
  class Client
6
6
  def handle_two_step_or_factor(response)
7
+ raise "2FA can only be performed in interactive mode" if ENV["FASTLANE_IS_INTERACTIVE"] == "false"
7
8
  # extract `x-apple-id-session-id` and `scnt` from response, to be used by `update_request_headers`
8
9
  @x_apple_id_session_id = response["x-apple-id-session-id"]
9
10
  @scnt = response["scnt"]
@@ -134,18 +135,20 @@ module Spaceship
134
135
 
135
136
  phone_number = env_2fa_sms_default_phone_number
136
137
  phone_id = phone_id_from_number(response.body["trustedPhoneNumbers"], phone_number)
138
+ push_mode = push_mode_from_masked_number(response.body["trustedPhoneNumbers"], phone_number)
137
139
  # don't request sms if no trusted devices and env default is the only trusted number,
138
140
  # code was automatically sent
139
141
  should_request_code = !sms_automatically_sent(response)
140
142
  code_type = 'phone'
141
- body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, should_request_code)
143
+ body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, push_mode, should_request_code)
142
144
  elsif sms_automatically_sent(response) # sms fallback, code was automatically sent
143
145
  fallback_number = response.body["trustedPhoneNumbers"].first
144
146
  phone_number = fallback_number["numberWithDialCode"]
145
147
  phone_id = fallback_number["id"]
148
+ push_mode = fallback_number['pushMode']
146
149
 
147
150
  code_type = 'phone'
148
- body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, false)
151
+ body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, push_mode, false)
149
152
  elsif sms_fallback(response) # sms fallback but code wasn't sent bec > 1 phone number
150
153
  code_type = 'phone'
151
154
  body = request_two_factor_code_from_phone_choose(response.body["trustedPhoneNumbers"], code_length)
@@ -275,6 +278,15 @@ If it is, please open an issue at https://github.com/fastlane/fastlane/issues/ne
275
278
  end
276
279
  end
277
280
 
281
+ def push_mode_from_masked_number(phone_numbers, masked_number)
282
+ phone_numbers.each do |phone|
283
+ return phone['pushMode'] if phone['numberWithDialCode'] == masked_number
284
+ end
285
+
286
+ # If no pushMode was supplied, assume sms
287
+ return "sms"
288
+ end
289
+
278
290
  def request_two_factor_code_from_phone_choose(phone_numbers, code_length)
279
291
  puts("Please select a trusted phone number to send code to:")
280
292
 
@@ -283,18 +295,19 @@ If it is, please open an issue at https://github.com/fastlane/fastlane/issues/ne
283
295
  end
284
296
  chosen = choose_phone_number(available)
285
297
  phone_id = phone_id_from_masked_number(phone_numbers, chosen)
298
+ push_mode = push_mode_from_masked_number(phone_numbers, chosen)
286
299
 
287
- request_two_factor_code_from_phone(phone_id, chosen, code_length)
300
+ request_two_factor_code_from_phone(phone_id, chosen, code_length, push_mode)
288
301
  end
289
302
 
290
303
  # this is used in two places: after choosing a phone number and when a phone number is set via ENV var
291
- def request_two_factor_code_from_phone(phone_id, phone_number, code_length, should_request_code = true)
304
+ def request_two_factor_code_from_phone(phone_id, phone_number, code_length, push_mode = "sms", should_request_code = true)
292
305
  if should_request_code
293
306
  # Request code
294
307
  r = request(:put) do |req|
295
308
  req.url("https://idmsa.apple.com/appleauth/auth/verify/phone")
296
309
  req.headers['Content-Type'] = 'application/json'
297
- req.body = { "phoneNumber" => { "id" => phone_id }, "mode" => "sms" }.to_json
310
+ req.body = { "phoneNumber" => { "id" => phone_id }, "mode" => push_mode }.to_json
298
311
  update_request_headers(req)
299
312
  end
300
313
 
@@ -307,7 +320,7 @@ If it is, please open an issue at https://github.com/fastlane/fastlane/issues/ne
307
320
 
308
321
  code = ask_for_2fa_code("Please enter the #{code_length} digit code you received at #{phone_number}:")
309
322
 
310
- return { "securityCode" => { "code" => code.to_s }, "phoneNumber" => { "id" => phone_id }, "mode" => "sms" }.to_json
323
+ return { "securityCode" => { "code" => code.to_s }, "phoneNumber" => { "id" => phone_id }, "mode" => push_mode }.to_json
311
324
  end
312
325
 
313
326
  def store_session
@@ -0,0 +1,91 @@
1
+ require_relative 'globals'
2
+ require_relative 'tunes/tunes_client'
3
+
4
+ module Spaceship
5
+ class Client
6
+ def try_upgrade_2fa_later(response)
7
+ if ENV['SPACESHIP_SKIP_2FA_UPGRADE'].nil?
8
+ return false
9
+ end
10
+
11
+ puts("This account is being prompted to upgrade to 2FA")
12
+ puts("Attempting to automatically bypass the upgrade until a later date")
13
+ puts("To disable this, remove SPACESHIP_SKIP_2FA_UPGRADE=1 environment variable")
14
+
15
+ # Get URL that requests a repair and gets the widget key
16
+ widget_key_location = response.headers['location']
17
+ uri = URI.parse(widget_key_location)
18
+ params = CGI.parse(uri.query)
19
+
20
+ widget_key = params.dig('widgetKey', 0)
21
+ if widget_key.nil?
22
+ STDERR.puts("Couldn't find widgetKey to continue with requests")
23
+ return false
24
+ end
25
+
26
+ # Step 1 - Request repair
27
+ response_repair = request(:get) do |req|
28
+ req.url(widget_key_location)
29
+ end
30
+
31
+ # Step 2 - Request repair options
32
+ response_repair_options = request(:get) do |req|
33
+ req.url("https://appleid.apple.com/account/manage/repair/options")
34
+
35
+ req.headers['scnt'] = response_repair.headers['scnt']
36
+ req.headers['X-Apple-Id-Session-Id'] = response.headers['X-Apple-Id-Session-Id']
37
+ req.headers['X-Apple-Session-Token'] = response.headers['X-Apple-Repair-Session-Token']
38
+
39
+ req.headers['X-Apple-Skip-Repair-Attributes'] = '[]'
40
+ req.headers['X-Apple-Widget-Key'] = widget_key
41
+
42
+ req.headers['Content-Type'] = 'application/json'
43
+ req.headers['X-Requested-With'] = 'XMLHttpRequest'
44
+ req.headers['Accept'] = 'application/json, text/javascript'
45
+ end
46
+
47
+ # Step 3 - Request setup later
48
+ request(:get) do |req|
49
+ req.url("https://appleid.apple.com/account/security/upgrade/setuplater")
50
+
51
+ req.headers['scnt'] = response_repair_options.headers['scnt']
52
+ req.headers['X-Apple-Id-Session-Id'] = response.headers['X-Apple-Id-Session-Id']
53
+ req.headers['X-Apple-Session-Token'] = response_repair_options.headers['x-apple-session-token']
54
+ req.headers['X-Apple-Skip-Repair-Attributes'] = '[]'
55
+ req.headers['X-Apple-Widget-Key'] = widget_key
56
+
57
+ req.headers['Content-Type'] = 'application/json'
58
+ req.headers['X-Requested-With'] = 'XMLHttpRequest'
59
+ req.headers['Accept'] = 'application/json, text/javascript'
60
+ end
61
+
62
+ # Step 4 - Post complete
63
+ response_repair_complete = request(:post) do |req|
64
+ req.url("https://idmsa.apple.com/appleauth/auth/repair/complete")
65
+
66
+ req.body = ''
67
+ req.headers['scnt'] = response.headers['scnt']
68
+ req.headers['X-Apple-Id-Session-Id'] = response.headers['X-Apple-Id-Session-Id']
69
+ req.headers['X-Apple-Repair-Session-Token'] = response_repair_options.headers['X-Apple-Session-Token']
70
+
71
+ req.headers['X-Apple-Widget-Key'] = widget_key
72
+
73
+ req.headers['Content-Type'] = 'application/json'
74
+ req.headers['X-Requested-With'] = 'XMLHttpRequest'
75
+ req.headers['Accept'] = 'application/json;charset=utf-8'
76
+ end
77
+
78
+ if response_repair_complete.status == 204
79
+ return true
80
+ else
81
+ STDERR.puts("Failed with status code of #{response_repair_complete.status}")
82
+ return false
83
+ end
84
+ rescue => error
85
+ STDERR.puts(error.backtrace)
86
+ STDERR.puts("Failed to bypass 2FA upgrade")
87
+ STDERR.puts("To disable this from trying again, set SPACESHIP_SKIP_UPGRADE_2FA_LATER=1")
88
+ return false
89
+ end
90
+ end
91
+ end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.168.0
4
+ version: 2.173.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Brager
8
- - Danielle Tomlinson
9
8
  - Matthew Ellis
10
- - Joshua Liebowitz
11
- - Felix Krause
9
+ - Jan Piotrowski
10
+ - Maksym Grebenets
11
+ - Fumiya Nakamura
12
+ - Jorge Revuelta H
13
+ - Jérôme Lacoste
14
+ - Max Ott
12
15
  - Manu Wallner
16
+ - Luka Mirosevic
13
17
  - Daniel Jankowski
14
- - Iulian Onofrei
18
+ - Helmut Januschka
15
19
  - Josh Holtz
16
- - Jérôme Lacoste
17
- - Fumiya Nakamura
18
- - Andrew McBurney
19
- - Max Ott
20
- - Jan Piotrowski
21
- - Jorge Revuelta H
20
+ - Joshua Liebowitz
22
21
  - Stefan Natchev
23
- - Luka Mirosevic
24
22
  - Jimmy Dee
25
- - Maksym Grebenets
26
- - Kohki Miki
27
- - Helmut Januschka
23
+ - Iulian Onofrei
24
+ - Andrew McBurney
28
25
  - Olivier Halligon
26
+ - Kohki Miki
27
+ - Felix Krause
28
+ - Danielle Tomlinson
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-11-19 00:00:00.000000000 Z
32
+ date: 2021-02-04 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier
@@ -253,6 +253,20 @@ dependencies:
253
253
  - - "<"
254
254
  - !ruby/object:Gem::Version
255
255
  version: 1.0.0
256
+ - !ruby/object:Gem::Dependency
257
+ name: artifactory
258
+ requirement: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - "~>"
261
+ - !ruby/object:Gem::Version
262
+ version: '3.0'
263
+ type: :runtime
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - "~>"
268
+ - !ruby/object:Gem::Version
269
+ version: '3.0'
256
270
  - !ruby/object:Gem::Dependency
257
271
  name: babosa
258
272
  requirement: !ruby/object:Gem::Requirement
@@ -679,14 +693,14 @@ dependencies:
679
693
  requirements:
680
694
  - - "~>"
681
695
  - !ruby/object:Gem::Version
682
- version: 3.9.0
696
+ version: 3.10.0
683
697
  type: :development
684
698
  prerelease: false
685
699
  version_requirements: !ruby/object:Gem::Requirement
686
700
  requirements:
687
701
  - - "~>"
688
702
  - !ruby/object:Gem::Version
689
- version: 3.9.0
703
+ version: 3.10.0
690
704
  - !ruby/object:Gem::Dependency
691
705
  name: rspec_junit_formatter
692
706
  requirement: !ruby/object:Gem::Requirement
@@ -945,6 +959,7 @@ files:
945
959
  - deliver/lib/deliver.rb
946
960
  - deliver/lib/deliver/app_screenshot.rb
947
961
  - deliver/lib/deliver/app_screenshot_iterator.rb
962
+ - deliver/lib/deliver/app_screenshot_validator.rb
948
963
  - deliver/lib/deliver/commands_generator.rb
949
964
  - deliver/lib/deliver/detect_values.rb
950
965
  - deliver/lib/deliver/download_screenshots.rb
@@ -983,7 +998,6 @@ files:
983
998
  - fastlane/lib/fastlane/.erb_template_helper.rb.swp
984
999
  - fastlane/lib/fastlane/action.rb
985
1000
  - fastlane/lib/fastlane/action_collector.rb
986
- - fastlane/lib/fastlane/actions/.download_dsyms.rb.swp
987
1001
  - fastlane/lib/fastlane/actions/.git_commit.rb.swp
988
1002
  - fastlane/lib/fastlane/actions/README.md
989
1003
  - fastlane/lib/fastlane/actions/actions_helper.rb
@@ -1033,6 +1047,7 @@ files:
1033
1047
  - fastlane/lib/fastlane/actions/create_app_online.rb
1034
1048
  - fastlane/lib/fastlane/actions/create_keychain.rb
1035
1049
  - fastlane/lib/fastlane/actions/create_pull_request.rb
1050
+ - fastlane/lib/fastlane/actions/create_xcframework.rb
1036
1051
  - fastlane/lib/fastlane/actions/danger.rb
1037
1052
  - fastlane/lib/fastlane/actions/debug.rb
1038
1053
  - fastlane/lib/fastlane/actions/default_platform.rb
@@ -1056,6 +1071,7 @@ files:
1056
1071
  - fastlane/lib/fastlane/actions/docs/upload_to_testflight.md
1057
1072
  - fastlane/lib/fastlane/actions/dotgpg_environment.rb
1058
1073
  - fastlane/lib/fastlane/actions/download.rb
1074
+ - fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb
1059
1075
  - fastlane/lib/fastlane/actions/download_dsyms.rb
1060
1076
  - fastlane/lib/fastlane/actions/download_from_play_store.rb
1061
1077
  - fastlane/lib/fastlane/actions/dsym_zip.rb
@@ -1207,6 +1223,7 @@ files:
1207
1223
  - fastlane/lib/fastlane/actions/update_project_team.rb
1208
1224
  - fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb
1209
1225
  - fastlane/lib/fastlane/actions/update_url_schemes.rb
1226
+ - fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb
1210
1227
  - fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb
1211
1228
  - fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb
1212
1229
  - fastlane/lib/fastlane/actions/upload_to_app_store.rb
@@ -1619,13 +1636,16 @@ files:
1619
1636
  - spaceship/lib/spaceship/connect_api/client.rb
1620
1637
  - spaceship/lib/spaceship/connect_api/file_uploader.rb
1621
1638
  - spaceship/lib/spaceship/connect_api/model.rb
1622
- - spaceship/lib/spaceship/connect_api/models/.app.rb.swp
1623
- - spaceship/lib/spaceship/connect_api/models/.app_screenshot.rb.swp
1624
1639
  - spaceship/lib/spaceship/connect_api/models/.app_store_version_submission.rb.swp
1625
- - spaceship/lib/spaceship/connect_api/models/.build.rb.swp
1626
1640
  - spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
1627
1641
  - spaceship/lib/spaceship/connect_api/models/app.rb
1628
1642
  - spaceship/lib/spaceship/connect_api/models/app_category.rb
1643
+ - spaceship/lib/spaceship/connect_api/models/app_data_usage.rb
1644
+ - spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb
1645
+ - spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb
1646
+ - spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb
1647
+ - spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb
1648
+ - spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb
1629
1649
  - spaceship/lib/spaceship/connect_api/models/app_info.rb
1630
1650
  - spaceship/lib/spaceship/connect_api/models/app_info_localization.rb
1631
1651
  - spaceship/lib/spaceship/connect_api/models/app_preview.rb
@@ -1783,6 +1803,7 @@ files:
1783
1803
  - spaceship/lib/spaceship/tunes/version_set.rb
1784
1804
  - spaceship/lib/spaceship/two_step_or_factor_client.rb
1785
1805
  - spaceship/lib/spaceship/ui.rb
1806
+ - spaceship/lib/spaceship/upgrade_2fa_later_client.rb
1786
1807
  - supply/README.md
1787
1808
  - supply/lib/supply.rb
1788
1809
  - supply/lib/supply/apk_listing.rb
@@ -1832,7 +1853,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1832
1853
  - !ruby/object:Gem::Version
1833
1854
  version: '0'
1834
1855
  requirements: []
1835
- rubygems_version: 3.1.4
1856
+ rubygems_version: 3.0.3
1836
1857
  signing_key:
1837
1858
  specification_version: 4
1838
1859
  summary: The easiest way to automate beta deployments and releases for your iOS and