fastlane 2.149.1 → 2.150.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/deliver/lib/deliver.rb +0 -1
  3. data/deliver/lib/deliver/app_screenshot.rb +26 -25
  4. data/deliver/lib/deliver/download_screenshots.rb +46 -26
  5. data/deliver/lib/deliver/options.rb +6 -11
  6. data/deliver/lib/deliver/runner.rb +7 -21
  7. data/deliver/lib/deliver/setup.rb +5 -30
  8. data/deliver/lib/deliver/submit_for_review.rb +170 -86
  9. data/deliver/lib/deliver/upload_metadata.rb +355 -143
  10. data/deliver/lib/deliver/upload_price_tier.rb +22 -8
  11. data/deliver/lib/deliver/upload_screenshots.rb +140 -39
  12. data/{scan/lib/scan/.test_command_generator.rb.swp → fastlane/lib/fastlane/actions/.hockey.rb.swp} +0 -0
  13. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  14. data/{snapshot/lib/snapshot/.test_command_generator_base.rb.swp → fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp} +0 -0
  15. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  16. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +81 -96
  17. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +3 -2
  18. data/fastlane/lib/fastlane/actions/download_dsyms.rb +7 -1
  19. data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
  20. data/fastlane/lib/fastlane/actions/set_changelog.rb +23 -20
  21. data/fastlane/lib/fastlane/actions/slack.rb +1 -1
  22. data/fastlane/lib/fastlane/actions/spm.rb +7 -0
  23. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -32
  24. data/fastlane/lib/fastlane/lane.rb +3 -3
  25. data/fastlane/lib/fastlane/swift_fastlane_function.rb +8 -4
  26. data/fastlane/lib/fastlane/version.rb +1 -1
  27. data/fastlane/swift/ControlCommand.swift +1 -0
  28. data/fastlane/swift/Fastlane.swift +48 -12
  29. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  30. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +3 -9
  31. data/fastlane/swift/LaneFileProtocol.swift +2 -5
  32. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  33. data/fastlane/swift/RubyCommand.swift +29 -6
  34. data/fastlane/swift/RubyCommandable.swift +1 -0
  35. data/fastlane/swift/Runner.swift +85 -13
  36. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  37. data/fastlane/swift/SnapshotfileProtocol.swift +3 -3
  38. data/fastlane/swift/SocketClient.swift +76 -45
  39. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  40. data/fastlane/swift/SocketResponse.swift +1 -0
  41. data/fastlane_core/lib/fastlane_core/build_watcher.rb +4 -4
  42. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -3
  43. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +89 -52
  44. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +7 -0
  45. data/frameit/lib/frameit/device_types.rb +100 -100
  46. data/pilot/lib/pilot/.manager.rb.swp +0 -0
  47. data/produce/lib/produce/itunes_connect.rb +59 -21
  48. data/produce/lib/produce/options.rb +3 -3
  49. data/sigh/lib/assets/resign.sh +7 -7
  50. data/snapshot/lib/assets/SnapshotHelper.swift +5 -5
  51. data/snapshot/lib/assets/SnapshotHelperXcode8.swift +3 -3
  52. data/snapshot/lib/snapshot/options.rb +0 -1
  53. data/snapshot/lib/snapshot/reports_generator.rb +8 -1
  54. data/spaceship/lib/spaceship/client.rb +4 -3
  55. data/spaceship/lib/spaceship/connect_api.rb +25 -2
  56. data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
  57. data/spaceship/lib/spaceship/connect_api/client.rb +97 -31
  58. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +98 -0
  59. data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
  60. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +113 -0
  61. data/spaceship/lib/spaceship/connect_api/models/app.rb +135 -3
  62. data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
  63. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +67 -0
  64. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +38 -0
  65. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +129 -0
  66. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +71 -0
  67. data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
  68. data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
  69. data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +71 -0
  70. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +146 -0
  71. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +125 -0
  72. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +183 -0
  74. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +86 -0
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +36 -0
  76. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
  77. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  78. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +40 -0
  79. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
  80. data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
  81. data/spaceship/lib/spaceship/connect_api/models/user.rb +2 -1
  82. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +10 -3
  83. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +33 -0
  84. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +844 -0
  85. data/spaceship/lib/spaceship/connect_api/users/users.rb +13 -0
  86. data/spaceship/lib/spaceship/spaceauth_runner.rb +2 -2
  87. data/supply/lib/supply/client.rb +19 -0
  88. data/supply/lib/supply/reader.rb +16 -0
  89. metadata +34 -22
  90. data/deliver/lib/deliver/upload_assets.rb +0 -27
@@ -0,0 +1,26 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppStoreVersionSubmission
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :can_reject
8
+
9
+ attr_mapping({
10
+ "canReject" => "can_reject"
11
+ })
12
+
13
+ def self.type
14
+ return "appStoreVersionSubmissions"
15
+ end
16
+
17
+ #
18
+ # API
19
+ #
20
+
21
+ def delete!(filter: {}, includes: nil, limit: nil, sort: nil)
22
+ Spaceship::ConnectAPI.delete_app_store_version_submission(app_store_version_submission_id: id)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -129,6 +129,10 @@ module Spaceship
129
129
  return Spaceship::ConnectAPI.get_build(build_id: build_id, includes: includes).first
130
130
  end
131
131
 
132
+ def update(attributes: nil)
133
+ return Spaceship::ConnectAPI.patch_builds(build_id: id, attributes: attributes).first
134
+ end
135
+
132
136
  def add_beta_groups(beta_groups: nil)
133
137
  beta_groups ||= []
134
138
  beta_group_ids = beta_groups.map(&:id)
@@ -0,0 +1,40 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class IdfaDeclaration
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :serves_ads
8
+ attr_accessor :attributes_app_installation_to_previous_ad
9
+ attr_accessor :attributes_action_with_previous_ad
10
+ attr_accessor :honors_limited_ad_tracking
11
+
12
+ module AppStoreAgeRating
13
+ FOUR_PLUS = "FOUR_PLUS"
14
+ end
15
+
16
+ attr_mapping({
17
+ "servesAds" => "serves_ads",
18
+ "attributesAppInstallationToPreviousAd" => "attributes_app_installation_to_previous_ad",
19
+ "attributesActionWithPreviousAd" => "attributes_action_with_previous_ad",
20
+ "honorsLimitedAdTracking" => "honors_limited_ad_tracking"
21
+ })
22
+
23
+ def self.type
24
+ return "idfaDeclarations"
25
+ end
26
+
27
+ #
28
+ # API
29
+ #
30
+
31
+ def update(attributes: nil)
32
+ Spaceship::ConnectAPI.patch_idfa_declaration(idfa_declaration_id: id, attributes: attributes)
33
+ end
34
+
35
+ def delete!
36
+ Spaceship::ConnectAPI.delete_idfa_declaration(idfa_declaration_id: id)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class ResetRatingsRequest
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :reset_date
8
+
9
+ attr_mapping({
10
+ "resetDate" => "reset_date"
11
+ })
12
+
13
+ def self.type
14
+ return "resetRatingsRequests"
15
+ end
16
+
17
+ #
18
+ # API
19
+ #
20
+
21
+ def delete!(filter: {}, includes: nil, limit: nil, sort: nil)
22
+ Spaceship::ConnectAPI.delete_reset_ratings_request(reset_ratings_request_id: id)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class Territory
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :currency
8
+
9
+ attr_mapping({
10
+ "currency" => "currency"
11
+ })
12
+
13
+ def self.type
14
+ return "territories"
15
+ end
16
+
17
+ #
18
+ # API
19
+ #
20
+
21
+ def self.all(filter: {}, includes: nil, limit: 180, sort: nil)
22
+ resps = Spaceship::ConnectAPI.get_territories(filter: {}, includes: nil, limit: nil, sort: nil).all_pages
23
+ return resps.flat_map(&:to_models)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -39,7 +39,8 @@ module Spaceship
39
39
  #
40
40
 
41
41
  def self.all(filter: {}, includes: nil, limit: nil, sort: nil)
42
- return Spaceship::ConnectAPI.get_users(filter: filter, includes: includes)
42
+ resps = Spaceship::ConnectAPI.get_users(filter: filter, includes: includes).all_pages
43
+ return resps.flat_map(&:to_models)
43
44
  end
44
45
 
45
46
  def self.find(email: nil, includes: nil)
@@ -285,9 +285,16 @@ module Spaceship
285
285
  Client.instance.get("builds", params)
286
286
  end
287
287
 
288
- def get_build(build_id: nil, includes: nil)
289
- params = Client.instance.build_params(filter: nil, includes: includes, limit: nil, sort: nil, cursor: nil)
290
- Client.instance.get("builds/#{build_id}", params)
288
+ def get_build(build_id: nil, app_store_version_id: nil, includes: nil)
289
+ if build_id
290
+ params = Client.instance.build_params(filter: nil, includes: includes, limit: nil, sort: nil, cursor: nil)
291
+ return Client.instance.get("builds/#{build_id}", params)
292
+ elsif app_store_version_id
293
+ params = Client.instance.build_params(filter: nil, includes: includes, limit: nil, sort: nil, cursor: nil)
294
+ return Client.instance.get("appStoreVersions/#{app_store_version_id}/build", params)
295
+ else
296
+ return nil
297
+ end
291
298
  end
292
299
 
293
300
  def patch_builds(build_id: nil, attributes: {})
@@ -0,0 +1,33 @@
1
+ require_relative '../client'
2
+ require_relative '../../tunes/tunes_client'
3
+
4
+ module Spaceship
5
+ class ConnectAPI
6
+ module Tunes
7
+ class Client < Spaceship::ConnectAPI::Client
8
+ def self.instance
9
+ # Verify there is a token or a client that can be used
10
+ if Spaceship::ConnectAPI.token
11
+ if @client.nil? || @client.token != Spaceship::ConnectAPI.token
12
+ @client = Client.new(token: Spaceship::ConnectAPI.token)
13
+ end
14
+ elsif Spaceship::Tunes.client
15
+ # Initialize new client if new or if team changed
16
+ if @client.nil? || @client.team_id != Spaceship::Tunes.client.team_id
17
+ @client = Client.client_with_authorization_from(Spaceship::Tunes.client)
18
+ end
19
+ end
20
+
21
+ # Need to handle not having a client but this shouldn't ever happen
22
+ raise "Please login using `Spaceship::Tunes.login('user', 'password')`" unless @client
23
+
24
+ @client
25
+ end
26
+
27
+ def self.hostname
28
+ 'https://appstoreconnect.apple.com/iris/v1/'
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,844 @@
1
+ require 'spaceship/connect_api/tunes/client'
2
+
3
+ module Spaceship
4
+ class ConnectAPI
5
+ module Tunes
6
+ #
7
+ # ageRatingDeclarations
8
+ #
9
+
10
+ def get_age_rating_declaration(app_store_version_id: nil)
11
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
12
+ Client.instance.get("appStoreVersions/#{app_store_version_id}/ageRatingDeclaration", params)
13
+ end
14
+
15
+ def patch_age_rating_declaration(age_rating_declaration_id: nil, attributes: nil)
16
+ body = {
17
+ data: {
18
+ type: "ageRatingDeclarations",
19
+ id: age_rating_declaration_id,
20
+ attributes: attributes
21
+ }
22
+ }
23
+
24
+ Client.instance.patch("ageRatingDeclarations/#{age_rating_declaration_id}", body)
25
+ end
26
+
27
+ #
28
+ # app
29
+ #
30
+
31
+ def post_app(name: nil, version_string: nil, sku: nil, primary_locale: nil, bundle_id: nil, platforms: nil, company_name: nil)
32
+ included = []
33
+ included << {
34
+ type: "appInfos",
35
+ id: "${new-appInfo-id}",
36
+ relationships: {
37
+ appInfoLocalizations: {
38
+ data: [
39
+ {
40
+ type: "appInfoLocalizations",
41
+ id: "${new-appInfoLocalization-id}"
42
+ }
43
+ ]
44
+ }
45
+ }
46
+ }
47
+ included << {
48
+ type: "appInfoLocalizations",
49
+ id: "${new-appInfoLocalization-id}",
50
+ attributes: {
51
+ locale: primary_locale,
52
+ name: name
53
+ }
54
+ }
55
+
56
+ platforms.each do |platform|
57
+ included << {
58
+ type: "appStoreVersions",
59
+ id: "${store-version-#{platform}}",
60
+ attributes: {
61
+ platform: platform,
62
+ versionString: version_string
63
+ },
64
+ relationships: {
65
+ appStoreVersionLocalizations: {
66
+ data: [
67
+ {
68
+ type: "appStoreVersionLocalizations",
69
+ id: "${new-#{platform}VersionLocalization-id}"
70
+ }
71
+ ]
72
+ }
73
+ }
74
+ }
75
+
76
+ included << {
77
+ type: "appStoreVersionLocalizations",
78
+ id: "${new-#{platform}VersionLocalization-id}",
79
+ attributes: {
80
+ locale: primary_locale
81
+ }
82
+ }
83
+ end
84
+
85
+ app_store_verions_data = platforms.map do |platform|
86
+ {
87
+ type: "appStoreVersions",
88
+ id: "${store-version-#{platform}}"
89
+ }
90
+ end
91
+
92
+ relationships = {
93
+ appStoreVersions: {
94
+ data: app_store_verions_data
95
+ },
96
+ appInfos: {
97
+ data: [
98
+ {
99
+ type: "appInfos",
100
+ id: "${new-appInfo-id}"
101
+ }
102
+ ]
103
+ }
104
+ }
105
+
106
+ app_attributes = {
107
+ sku: sku,
108
+ primaryLocale: primary_locale,
109
+ bundleId: bundle_id
110
+ }
111
+ app_attributes[:companyName] = company_name if company_name
112
+
113
+ body = {
114
+ data: {
115
+ type: "apps",
116
+ attributes: app_attributes,
117
+ relationships: relationships
118
+ },
119
+ included: included
120
+ }
121
+
122
+ Client.instance.post("apps", body)
123
+ end
124
+
125
+ def patch_app(app_id: nil, attributes: {}, app_price_tier_id: nil, territory_ids: nil)
126
+ relationships = {}
127
+ included = []
128
+
129
+ # Price tier
130
+ unless app_price_tier_id.nil?
131
+ relationships[:prices] = {
132
+ data: [
133
+ {
134
+ type: "appPrices",
135
+ id: "${price1}"
136
+ }
137
+ ]
138
+ }
139
+
140
+ included << {
141
+ type: "appPrices",
142
+ id: "${price1}",
143
+ attributes: {
144
+ startDate: nil
145
+ },
146
+ relationships: {
147
+ app: {
148
+ data: {
149
+ type: "apps",
150
+ id: app_id
151
+ }
152
+ },
153
+ priceTier: {
154
+ data: {
155
+ type: "appPriceTiers",
156
+ id: app_price_tier_id.to_s
157
+ }
158
+ }
159
+ }
160
+ }
161
+ end
162
+
163
+ # Territories
164
+ territories_data = (territory_ids || []).map do |id|
165
+ { type: "territories", id: id }
166
+ end
167
+ unless territories_data.empty?
168
+ relationships[:availableTerritories] = {
169
+ data: territories_data
170
+ }
171
+ end
172
+
173
+ # Data
174
+ data = {
175
+ type: "apps",
176
+ id: app_id
177
+ }
178
+ data[:attributes] = attributes unless attributes.empty?
179
+ data[:relationships] = relationships unless relationships.empty?
180
+
181
+ # Body
182
+ body = {
183
+ data: data
184
+ }
185
+ body[:included] = included unless included.empty?
186
+
187
+ Client.instance.patch("apps/#{app_id}", body)
188
+ end
189
+
190
+ #
191
+ # appPreview
192
+ #
193
+
194
+ def get_app_preview(app_preview_id: nil)
195
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
196
+ Client.instance.get("appPreviews/#{app_preview_id}", params)
197
+ end
198
+
199
+ def post_app_preview(app_preview_set_id: nil, attributes: {})
200
+ body = {
201
+ data: {
202
+ type: "appPreviews",
203
+ attributes: attributes,
204
+ relationships: {
205
+ appPreviewSet: {
206
+ data: {
207
+ type: "appPreviewSets",
208
+ id: app_preview_set_id
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+
215
+ Client.instance.post("appPreviews", body)
216
+ end
217
+
218
+ def patch_app_preview(app_preview_id: nil, attributes: {})
219
+ body = {
220
+ data: {
221
+ type: "appPreviews",
222
+ id: app_preview_id,
223
+ attributes: attributes
224
+ }
225
+ }
226
+
227
+ Client.instance.patch("appPreviews/#{app_preview_id}", body)
228
+ end
229
+
230
+ def delete_app_preview(app_preview_id: nil)
231
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
232
+ Client.instance.delete("appPreviews/#{app_preview_id}", params)
233
+ end
234
+
235
+ #
236
+ # appPreviewSets
237
+ #
238
+
239
+ def get_app_preview_sets(filter: {}, includes: nil, limit: nil, sort: nil)
240
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
241
+ Client.instance.get("appPreviewSets", params)
242
+ end
243
+
244
+ def post_app_preview_set(app_store_version_localization_id: nil, attributes: {})
245
+ body = {
246
+ data: {
247
+ type: "appPreviewSets",
248
+ attributes: attributes,
249
+ relationships: {
250
+ appStoreVersionLocalization: {
251
+ data: {
252
+ type: "appStoreVersionLocalizations",
253
+ id: app_store_version_localization_id
254
+ }
255
+ }
256
+ }
257
+ }
258
+ }
259
+
260
+ Client.instance.post("appPreviewSets", body)
261
+ end
262
+
263
+ #
264
+ # appPrices
265
+ #
266
+
267
+ def get_app_prices(app_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
268
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
269
+ Client.instance.get("appPrices", params)
270
+ end
271
+
272
+ #
273
+ # appReviewAttachments
274
+ #
275
+
276
+ def get_app_review_attachments(app_store_review_detail_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
277
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
278
+ Client.instance.get("appStoreReviewDetails/#{app_store_review_detail_id}/appReviewAttachments", params)
279
+ end
280
+
281
+ def post_app_review_attachment(app_store_review_detail_id: nil, attributes: {})
282
+ body = {
283
+ data: {
284
+ type: "appReviewAttachments",
285
+ attributes: attributes,
286
+ relationships: {
287
+ appStoreReviewDetail: {
288
+ data: {
289
+ type: "appStoreReviewDetails",
290
+ id: app_store_review_detail_id
291
+ }
292
+ }
293
+ }
294
+ }
295
+ }
296
+
297
+ Client.instance.post("appReviewAttachments", body)
298
+ end
299
+
300
+ def patch_app_review_attachment(app_review_attachment_id: nil, attributes: {})
301
+ body = {
302
+ data: {
303
+ type: "appReviewAttachments",
304
+ id: app_review_attachment_id,
305
+ attributes: attributes
306
+ }
307
+ }
308
+
309
+ Client.instance.patch("appReviewAttachments/#{app_review_attachment_id}", body)
310
+ end
311
+
312
+ def delete_app_review_attachment(app_review_attachment_id: nil)
313
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
314
+ Client.instance.delete("appReviewAttachments/#{app_review_attachment_id}", params)
315
+ end
316
+
317
+ #
318
+ # appScreenshotSets
319
+ #
320
+
321
+ def get_app_screenshot_sets(filter: {}, includes: nil, limit: nil, sort: nil)
322
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
323
+ Client.instance.get("appScreenshotSets", params)
324
+ end
325
+
326
+ def post_app_screenshot_set(app_store_version_localization_id: nil, attributes: {})
327
+ body = {
328
+ data: {
329
+ type: "appScreenshotSets",
330
+ attributes: attributes,
331
+ relationships: {
332
+ appStoreVersionLocalization: {
333
+ data: {
334
+ type: "appStoreVersionLocalizations",
335
+ id: app_store_version_localization_id
336
+ }
337
+ }
338
+ }
339
+ }
340
+ }
341
+
342
+ Client.instance.post("appScreenshotSets", body)
343
+ end
344
+
345
+ #
346
+ # appScreenshots
347
+ #
348
+
349
+ def get_app_screenshot(app_screenshot_id: nil)
350
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
351
+ Client.instance.get("appScreenshots/#{app_screenshot_id}", params)
352
+ end
353
+
354
+ def post_app_screenshot(app_screenshot_set_id: nil, attributes: {})
355
+ body = {
356
+ data: {
357
+ type: "appScreenshots",
358
+ attributes: attributes,
359
+ relationships: {
360
+ appScreenshotSet: {
361
+ data: {
362
+ type: "appScreenshotSets",
363
+ id: app_screenshot_set_id
364
+ }
365
+ }
366
+ }
367
+ }
368
+ }
369
+
370
+ Client.instance.post("appScreenshots", body)
371
+ end
372
+
373
+ def patch_app_screenshot(app_screenshot_id: nil, attributes: {})
374
+ body = {
375
+ data: {
376
+ type: "appScreenshots",
377
+ id: app_screenshot_id,
378
+ attributes: attributes
379
+ }
380
+ }
381
+
382
+ Client.instance.patch("appScreenshots/#{app_screenshot_id}", body)
383
+ end
384
+
385
+ def delete_app_screenshot(app_screenshot_id: nil)
386
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
387
+ Client.instance.delete("appScreenshots/#{app_screenshot_id}", params)
388
+ end
389
+
390
+ #
391
+ # appInfos
392
+ #
393
+
394
+ def get_app_infos(filter: {}, includes: nil, limit: nil, sort: nil)
395
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
396
+ Client.instance.get("appInfos", params)
397
+ end
398
+
399
+ def patch_app_info(app_info_id: nil, attributes: {})
400
+ attributes ||= {}
401
+
402
+ data = {
403
+ type: "appInfos",
404
+ id: app_info_id
405
+ }
406
+ data[:attributes] = attributes unless attributes.empty?
407
+
408
+ body = {
409
+ data: data
410
+ }
411
+
412
+ Client.instance.patch("appInfos/#{app_info_id}", body)
413
+ end
414
+
415
+ #
416
+ # Adding the key will create/update (if value) or delete if nil
417
+ # Not including a key will leave as is
418
+ # category_id_map: {
419
+ # primary_category_id: "GAMES",
420
+ # primary_subcategory_one_id: "PUZZLE",
421
+ # primary_subcategory_two_id: "STRATEGY",
422
+ # secondary_category_id: nil,
423
+ # secondary_subcategory_one_id: nil,
424
+ # secondary_subcategory_two_id: nil
425
+ # }
426
+ #
427
+ def patch_app_info_categories(app_info_id: nil, category_id_map: nil)
428
+ category_id_map ||= {}
429
+ primary_category_id = category_id_map[:primary_category_id]
430
+ primary_subcategory_one_id = category_id_map[:primary_subcategory_one_id]
431
+ primary_subcategory_two_id = category_id_map[:primary_subcategory_two_id]
432
+ secondary_category_id = category_id_map[:secondary_category_id]
433
+ secondary_subcategory_one_id = category_id_map[:secondary_subcategory_one_id]
434
+ secondary_subcategory_two_id = category_id_map[:secondary_subcategory_two_id]
435
+
436
+ relationships = {}
437
+
438
+ # Only update if key is included (otherwise category will be removed)
439
+ if category_id_map.include?(:primary_category_id)
440
+ relationships[:primaryCategory] = {
441
+ data: primary_category_id ? { type: "appCategories", id: primary_category_id } : nil
442
+ }
443
+ end
444
+
445
+ # Only update if key is included (otherwise category will be removed)
446
+ if category_id_map.include?(:primary_subcategory_one_id)
447
+ relationships[:primarySubcategoryOne] = {
448
+ data: primary_subcategory_one_id ? { type: "appCategories", id: primary_subcategory_one_id } : nil
449
+ }
450
+ end
451
+
452
+ # Only update if key is included (otherwise category will be removed)
453
+ if category_id_map.include?(:primary_subcategory_two_id)
454
+ relationships[:primarySubcategoryTwo] = {
455
+ data: primary_subcategory_two_id ? { type: "appCategories", id: primary_subcategory_two_id } : nil
456
+ }
457
+ end
458
+
459
+ # Only update if key is included (otherwise category will be removed)
460
+ if category_id_map.include?(:secondary_category_id)
461
+ relationships[:secondaryCategory] = {
462
+ data: secondary_category_id ? { type: "appCategories", id: secondary_category_id } : nil
463
+ }
464
+ end
465
+
466
+ # Only update if key is included (otherwise category will be removed)
467
+ if category_id_map.include?(:secondary_subcategory_one_id)
468
+ relationships[:secondarySubcategoryOne] = {
469
+ data: secondary_subcategory_one_id ? { type: "appCategories", id: secondary_subcategory_one_id } : nil
470
+ }
471
+ end
472
+
473
+ # Only update if key is included (otherwise category will be removed)
474
+ if category_id_map.include?(:secondary_subcategory_two_id)
475
+ relationships[:secondarySubcategoryTwo] = {
476
+ data: secondary_subcategory_two_id ? { type: "appCategories", id: secondary_subcategory_two_id } : nil
477
+ }
478
+ end
479
+
480
+ data = {
481
+ type: "appInfos",
482
+ id: app_info_id
483
+ }
484
+ data[:relationships] = relationships unless relationships.empty?
485
+
486
+ body = {
487
+ data: data
488
+ }
489
+
490
+ Client.instance.patch("appInfos/#{app_info_id}", body)
491
+ end
492
+
493
+ def delete_app_info(app_info_id: nil)
494
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
495
+ Client.instance.delete("appInfos/#{app_info_id}", params)
496
+ end
497
+
498
+ #
499
+ # appInfoLocalizations
500
+ #
501
+
502
+ def get_app_info_localizations(app_info_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
503
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
504
+ Client.instance.get("appInfos/#{app_info_id}/appInfoLocalizations", params)
505
+ end
506
+
507
+ def post_app_info_localization(app_info_id: nil, attributes: {})
508
+ body = {
509
+ data: {
510
+ type: "appInfoLocalizations",
511
+ attributes: attributes,
512
+ relationships: {
513
+ appStoreVersion: {
514
+ data: {
515
+ type: "appStoreVersions",
516
+ id: app_info_id
517
+ }
518
+ }
519
+ }
520
+ }
521
+ }
522
+
523
+ Client.instance.post("appInfoLocalizations", body)
524
+ end
525
+
526
+ def patch_app_info_localization(app_info_localization_id: nil, attributes: {})
527
+ body = {
528
+ data: {
529
+ type: "appInfoLocalizations",
530
+ id: app_info_localization_id,
531
+ attributes: attributes
532
+ }
533
+ }
534
+
535
+ Client.instance.patch("appInfoLocalizations/#{app_info_localization_id}", body)
536
+ end
537
+
538
+ #
539
+ # appStoreReviewDetails
540
+ #
541
+
542
+ def get_app_store_review_detail(app_store_version_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
543
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
544
+ Client.instance.get("appStoreVersions/#{app_store_version_id}/appStoreReviewDetail", params)
545
+ end
546
+
547
+ def post_app_store_review_detail(app_store_version_id: nil, attributes: {})
548
+ body = {
549
+ data: {
550
+ type: "appStoreReviewDetails",
551
+ attributes: attributes,
552
+ relationships: {
553
+ appStoreVersion: {
554
+ data: {
555
+ type: "appStoreVersions",
556
+ id: app_store_version_id
557
+ }
558
+ }
559
+ }
560
+ }
561
+ }
562
+
563
+ Client.instance.post("appStoreReviewDetails", body)
564
+ end
565
+
566
+ def patch_app_store_review_detail(app_store_review_detail_id: nil, attributes: {})
567
+ body = {
568
+ data: {
569
+ type: "appStoreReviewDetails",
570
+ id: app_store_review_detail_id,
571
+ attributes: attributes
572
+ }
573
+ }
574
+
575
+ Client.instance.patch("appStoreReviewDetails/#{app_store_review_detail_id}", body)
576
+ end
577
+
578
+ #
579
+ # appStoreVersionLocalizations
580
+ #
581
+
582
+ def get_app_store_version_localizations(filter: {}, includes: nil, limit: nil, sort: nil)
583
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
584
+ Client.instance.get("appStoreVersionLocalizations", params)
585
+ end
586
+
587
+ def post_app_store_version_localization(app_store_version_id: nil, attributes: {})
588
+ body = {
589
+ data: {
590
+ type: "appStoreVersionLocalizations",
591
+ attributes: attributes,
592
+ relationships: {
593
+ appStoreVersion: {
594
+ data: {
595
+ type: "appStoreVersions",
596
+ id: app_store_version_id
597
+ }
598
+ }
599
+ }
600
+ }
601
+ }
602
+
603
+ Client.instance.post("appStoreVersionLocalizations", body)
604
+ end
605
+
606
+ def patch_app_store_version_localization(app_store_version_localization_id: nil, attributes: {})
607
+ body = {
608
+ data: {
609
+ type: "appStoreVersionLocalizations",
610
+ id: app_store_version_localization_id,
611
+ attributes: attributes
612
+ }
613
+ }
614
+
615
+ Client.instance.patch("appStoreVersionLocalizations/#{app_store_version_localization_id}", body)
616
+ end
617
+
618
+ def delete_app_store_version_localization(app_store_version_localization_id: nil)
619
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
620
+ Client.instance.delete("appStoreVersionLocalizations/#{app_store_version_localization_id}", params)
621
+ end
622
+
623
+ #
624
+ # appStoreVersionPhasedReleases
625
+ #
626
+
627
+ def get_app_store_version_phased_release(app_store_version_id: nil)
628
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
629
+ Client.instance.get("appStoreVersions/#{app_store_version_id}/appStoreVersionPhasedRelease", params)
630
+ end
631
+
632
+ def post_app_store_version_phased_release(app_store_version_id: nil, attributes: {})
633
+ body = {
634
+ data: {
635
+ type: "appStoreVersionPhasedReleases",
636
+ attributes: attributes,
637
+ relationships: {
638
+ appStoreVersion: {
639
+ data: {
640
+ type: "appStoreVersions",
641
+ id: app_store_version_id
642
+ }
643
+ }
644
+ }
645
+ }
646
+ }
647
+
648
+ Client.instance.post("appStoreVersionPhasedReleases", body)
649
+ end
650
+
651
+ def delete_app_store_version_phased_release(app_store_version_phased_release_id: nil)
652
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
653
+ Client.instance.delete("appStoreVersionPhasedReleases/#{app_store_version_phased_release_id}", params)
654
+ end
655
+
656
+ #
657
+ # appStoreVersions
658
+ #
659
+
660
+ def get_app_store_versions(app_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
661
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
662
+ Client.instance.get("apps/#{app_id}/appStoreVersions", params)
663
+ end
664
+
665
+ def get_app_store_version(app_store_version_id: nil, includes: nil)
666
+ params = Client.instance.build_params(filter: nil, includes: includes, limit: nil, sort: nil)
667
+ Client.instance.get("appStoreVersions/#{app_store_version_id}", params)
668
+ end
669
+
670
+ def post_app_store_version(app_id: nil, attributes: {})
671
+ body = {
672
+ data: {
673
+ type: "appStoreVersions",
674
+ attributes: attributes,
675
+ relationships: {
676
+ app: {
677
+ data: {
678
+ type: "apps",
679
+ id: app_id
680
+ }
681
+ }
682
+ }
683
+ }
684
+ }
685
+
686
+ Client.instance.post("appStoreVersions", body)
687
+ end
688
+
689
+ def patch_app_store_version(app_store_version_id: nil, attributes: {})
690
+ body = {
691
+ data: {
692
+ type: "appStoreVersions",
693
+ id: app_store_version_id,
694
+ attributes: attributes
695
+ }
696
+ }
697
+
698
+ Client.instance.patch("appStoreVersions/#{app_store_version_id}", body)
699
+ end
700
+
701
+ def patch_app_store_version_with_build(app_store_version_id: nil, build_id: nil)
702
+ data = nil
703
+ if build_id
704
+ data = {
705
+ type: "builds",
706
+ id: build_id
707
+ }
708
+ end
709
+
710
+ body = {
711
+ data: {
712
+ type: "appStoreVersions",
713
+ id: app_store_version_id,
714
+ relationships: {
715
+ build: {
716
+ data: data
717
+ }
718
+ }
719
+ }
720
+ }
721
+
722
+ Client.instance.patch("appStoreVersions/#{app_store_version_id}", body)
723
+ end
724
+
725
+ #
726
+ # appStoreVersionPhasedReleases
727
+ #
728
+
729
+ def get_reset_ratings_request(app_store_version_id: nil)
730
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
731
+ Client.instance.get("appStoreVersions/#{app_store_version_id}/resetRatingsRequest", params)
732
+ end
733
+
734
+ def post_reset_ratings_request(app_store_version_id: nil)
735
+ body = {
736
+ data: {
737
+ type: "resetRatingsRequests",
738
+ relationships: {
739
+ appStoreVersion: {
740
+ data: {
741
+ type: "appStoreVersions",
742
+ id: app_store_version_id
743
+ }
744
+ }
745
+ }
746
+ }
747
+ }
748
+
749
+ Client.instance.post("resetRatingsRequests", body)
750
+ end
751
+
752
+ def delete_reset_ratings_request(reset_ratings_request_id: nil)
753
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
754
+ Client.instance.delete("resetRatingsRequests/#{reset_ratings_request_id}", params)
755
+ end
756
+
757
+ #
758
+ # appStoreVersionSubmissions
759
+ #
760
+
761
+ def get_app_store_version_submission(app_store_version_id: nil)
762
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
763
+ Client.instance.get("appStoreVersions/#{app_store_version_id}/appStoreVersionSubmission", params)
764
+ end
765
+
766
+ def post_app_store_version_submission(app_store_version_id: nil)
767
+ body = {
768
+ data: {
769
+ type: "appStoreVersionSubmissions",
770
+ relationships: {
771
+ appStoreVersion: {
772
+ data: {
773
+ type: "appStoreVersions",
774
+ id: app_store_version_id
775
+ }
776
+ }
777
+ }
778
+ }
779
+ }
780
+
781
+ Client.instance.post("appStoreVersionSubmissions", body)
782
+ end
783
+
784
+ def delete_app_store_version_submission(app_store_version_submission_id: nil)
785
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
786
+ Client.instance.delete("appStoreVersionSubmissions/#{app_store_version_submission_id}", params)
787
+ end
788
+
789
+ #
790
+ # idfaDeclarations
791
+ #
792
+
793
+ def get_idfa_declaration(app_store_version_id: nil)
794
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
795
+ Client.instance.get("appStoreVersions/#{app_store_version_id}/idfaDeclaration", params)
796
+ end
797
+
798
+ def post_idfa_declaration(app_store_version_id: nil, attributes: nil)
799
+ body = {
800
+ data: {
801
+ type: "idfaDeclarations",
802
+ attributes: attributes,
803
+ relationships: {
804
+ appStoreVersion: {
805
+ data: {
806
+ type: "appStoreVersions",
807
+ id: app_store_version_id
808
+ }
809
+ }
810
+ }
811
+ }
812
+ }
813
+
814
+ Client.instance.post("idfaDeclarations", body)
815
+ end
816
+
817
+ def patch_idfa_declaration(idfa_declaration_id: nil, attributes: nil)
818
+ body = {
819
+ data: {
820
+ type: "idfaDeclarations",
821
+ id: idfa_declaration_id,
822
+ attributes: attributes
823
+ }
824
+ }
825
+
826
+ Client.instance.patch("idfaDeclarations/#{idfa_declaration_id}", body)
827
+ end
828
+
829
+ def delete_idfa_declaration(idfa_declaration_id: nil)
830
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
831
+ Client.instance.delete("idfaDeclarations/#{idfa_declaration_id}", params)
832
+ end
833
+
834
+ #
835
+ # territories
836
+ #
837
+
838
+ def get_territories(filter: {}, includes: nil, limit: nil, sort: nil)
839
+ params = Client.instance.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
840
+ Client.instance.get("territories", params)
841
+ end
842
+ end
843
+ end
844
+ end