fastlane 2.150.0.rc1 → 2.150.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a0da99338a957f184c8f61225f84bbea77cf2e295f9a7fc21918095ec2967e3
4
- data.tar.gz: '0998f1c0adaa75fcabb51584113223c552268c9f86c844771bdc27b1f74f10d1'
3
+ metadata.gz: 0a5dd73db52643b353f17026fd0cfae042ef1586aa20770a0ed4b60d29f7454e
4
+ data.tar.gz: 8d01ca66b6b52465320701478986038cf2416f43dfa307a84504740fa25cc967
5
5
  SHA512:
6
- metadata.gz: 49d0496a16e951b91d512f972d8e5a5f4af1bae7bc68f8a71f32d328b3e1868e0d3b5dfa948723e7c82414f3c2672a6ec73a99884822ccec740aabd2ef1632a7
7
- data.tar.gz: 508186460c3e7e4c13bef4f3ad019a5f81374ddaffd32844aa079e02c2165dbb2c454aa2441e150c865aa3c42f526af7dbf494d53911ebfe99cbc02ae2cf5d3d
6
+ metadata.gz: 66f423b88a3d7fb5b9e7634f0918e5d13685dbc01ec4a332fa3eac07ab092efb392e84f3247fd70818a32665af5c70aa39baac6d533f122956b6c45b515462d7
7
+ data.tar.gz: 96d81a5f13c8df5f196f91607d6be870bc57ad8c4fcfdcc515c2eddb80cb83a28b02357cc0ce4319b6259b764167804c7c3d55418449343c6db5acb523d99dca
@@ -114,9 +114,6 @@ module Deliver
114
114
  # Assign "default" values to all languages
115
115
  upload_metadata.assign_defaults(options)
116
116
 
117
- # Handle app icon / watch icon
118
- prepare_app_icons(options)
119
-
120
117
  # Validate
121
118
  validate_html(screenshots)
122
119
 
@@ -126,20 +123,6 @@ module Deliver
126
123
  UploadPriceTier.new.upload(options)
127
124
  end
128
125
 
129
- # If options[:app_icon]/options[:apple_watch_app_icon]
130
- # is supplied value/path will be used.
131
- # If it is unset files (app_icon/watch_icon) exists in
132
- # the fastlane/metadata/ folder, those will be used
133
- def prepare_app_icons(options = {})
134
- return unless options[:metadata_path]
135
-
136
- default_app_icon_path = Dir[File.join(options[:metadata_path], "app_icon.{png,jpg}")].first
137
- options[:app_icon] ||= default_app_icon_path if default_app_icon_path && File.exist?(default_app_icon_path)
138
-
139
- default_watch_icon_path = Dir[File.join(options[:metadata_path], "watch_icon.{png,jpg}")].first
140
- options[:apple_watch_app_icon] ||= default_watch_icon_path if default_watch_icon_path && File.exist?(default_watch_icon_path)
141
- end
142
-
143
126
  # Upload the binary to App Store Connect
144
127
  def upload_binary
145
128
  UI.message("Uploading binary to App Store Connect")
@@ -61,55 +61,79 @@ module Deliver
61
61
  submission_information = options[:submission_information] || {}
62
62
  uses_encryption = submission_information[:export_compliance_uses_encryption]
63
63
 
64
- UI.verbose("Updating build for export compliance status of '#{uses_encryption}'")
65
64
  if build.uses_non_exempt_encryption.nil?
65
+ UI.verbose("Updating build for export compliance status of '#{uses_encryption}'")
66
+
67
+ if uses_encryption.to_s.empty?
68
+ message = [
69
+ "Export compliance is required to submit",
70
+ "Add information to the :submission_information option...",
71
+ " Docs: http://docs.fastlane.tools/actions/deliver/#compliance-and-idfa-settings",
72
+ " Example: submission_information: { export_compliance_uses_encryption: false }",
73
+ "This can also be set in your Info.plist with key 'ITSAppUsesNonExemptEncryption'"
74
+ ].join("\n")
75
+ UI.user_error!(message)
76
+ end
77
+
66
78
  build = build.update(attributes: {
67
79
  usesNonExemptEncryption: uses_encryption
68
80
  })
81
+
82
+ UI.verbose("Successfully updated build for export compliance status of '#{build.uses_non_exempt_encryption}' on App Store Connect")
69
83
  end
70
- UI.verbose("Updated build for export compliance status of '#{build.uses_non_exempt_encryption}'")
71
84
  end
72
85
 
73
86
  def update_idfa(options, app, version)
74
87
  submission_information = options[:submission_information] || {}
75
- return unless submission_information.include?(:add_id_info_uses_idfa)
76
-
77
88
  uses_idfa = submission_information[:add_id_info_uses_idfa]
89
+
78
90
  idfa_declaration = begin
79
91
  version.fetch_idfa_declaration
80
92
  rescue
81
93
  nil
82
94
  end
83
95
 
96
+ # Set IDFA on version
84
97
  UI.verbose("Updating app store version for IDFA status of '#{uses_idfa}'")
85
- version = version.update(attributes: {
86
- usesIdfa: uses_idfa
87
- })
98
+ unless uses_idfa.nil?
99
+ version = version.update(attributes: {
100
+ usesIdfa: uses_idfa
101
+ })
102
+ end
88
103
  UI.verbose("Updated app store version for IDFA status of '#{version.uses_idfa}'")
89
104
 
105
+ # Error if uses_idfa not set
106
+ if version.uses_idfa.nil?
107
+ message = [
108
+ "Use of Advertising Identifier (IDFA) is required to submit",
109
+ "Add information to the :submission_information option...",
110
+ " Docs: http://docs.fastlane.tools/actions/deliver/#compliance-and-idfa-settings",
111
+ " Example: submission_information: { add_id_info_uses_idfa: false }",
112
+ " Example: submission_information: {",
113
+ " add_id_info_uses_idfa: true,",
114
+ " add_id_info_limits_tracking: false,",
115
+ " add_id_info_serves_ads: false,",
116
+ " add_id_info_uses_idfa: false,",
117
+ " add_id_info_tracks_install: false",
118
+ " }"
119
+ ].join("\n")
120
+ UI.user_error!(message)
121
+ end
122
+
123
+ # Create, update, or delete IDFA declaration
90
124
  if uses_idfa == false
91
125
  if idfa_declaration
92
126
  UI.verbose("Deleting IDFA delcaration")
93
127
  idfa_declaration.delete!
94
128
  UI.verbose("Deleted IDFA delcaration")
95
129
  end
96
- else
97
- attributes = {}
98
- if submission_information.include?(:add_id_info_limits_tracking)
99
- attributes[:honorsLimitedAdTracking] = submission_information[:add_id_info_limits_tracking]
100
- end
101
-
102
- if submission_information.include?(:add_id_info_serves_ads)
103
- attributes[:servesAds] = submission_information[:add_id_info_serves_ads]
104
- end
105
-
106
- if submission_information.include?(:add_id_info_tracks_install)
107
- attributes[:attributesAppInstallationToPreviousAd] = submission_information[:add_id_info_tracks_install]
108
- end
109
-
110
- if submission_information.include?(:add_id_info_tracks_action)
111
- attributes[:attributesActionWithPreviousAd] = submission_information[:add_id_info_tracks_action]
112
- end
130
+ elsif uses_idfa == true
131
+ attributes = {
132
+ honorsLimitedAdTracking: !!submission_information[:add_id_info_limits_tracking],
133
+ servesAds: !!submission_information[:add_id_info_serves_ads],
134
+ attributesAppInstallationToPreviousAd: !!submission_information[:add_id_info_tracks_install],
135
+ attributesActionWithPreviousAd: !!submission_information[:add_id_info_tracks_action]
136
+ }
113
137
 
114
138
  if idfa_declaration
115
139
  UI.verbose("Updating IDFA delcaration")
@@ -122,22 +146,26 @@ module Deliver
122
146
  end
123
147
  end
124
148
 
125
- UI.success("Successfully updated IDFA delcarations")
149
+ UI.success("Successfully updated IDFA delcarations on App Store Connect")
126
150
  end
127
151
 
128
152
  def update_submission_information(options, app)
129
153
  submission_information = options[:submission_information] || {}
130
- if submission_information.include?(:content_rights_contains_third_party_content)
131
- value = if submission_information[:content_rights_contains_third_party_content]
154
+
155
+ content_rights = submission_information[:content_rights_contains_third_party_content]
156
+
157
+ unless content_rights.nil?
158
+ value = if content_rights
132
159
  Spaceship::ConnectAPI::App::ContentRightsDeclaration::USES_THIRD_PARTY_CONTENT
133
160
  else
134
161
  Spaceship::ConnectAPI::App::ContentRightsDeclaration::DOES_NOT_USE_THIRD_PARTY_CONTENT
135
162
  end
136
163
 
137
- UI.success("Updating contents rights declaration on App Store Connect")
164
+ UI.verbose("Updating contents rights declaration on App Store Connect")
138
165
  app.update(attributes: {
139
166
  contentRightsDeclaration: value
140
167
  })
168
+ UI.success("Successfully updated contents rights declaration on App Store Connect")
141
169
  end
142
170
  end
143
171
 
@@ -192,26 +192,82 @@ module Deliver
192
192
  # Update categories
193
193
  app_info = app.fetch_edit_app_info
194
194
  if app_info
195
- app_info.update_categories(
196
- primary_category_id: Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
197
- options[:primary_category].to_s.strip
198
- ),
199
- secondary_category_id: Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
200
- options[:secondary_category].to_s.strip
201
- ),
202
- primary_subcategory_one_id: Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
203
- options[:primary_first_sub_category].to_s.strip
204
- ),
205
- primary_subcategory_two_id: Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
206
- options[:primary_second_sub_category].to_s.strip
207
- ),
208
- secondary_subcategory_one_id: Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
209
- options[:secondary_first_sub_category].to_s.strip
210
- ),
211
- secondary_subcategory_two_id: Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
212
- options[:secondary_second_sub_category].to_s.strip
195
+ category_id_map = {}
196
+
197
+ primary_category = options[:primary_category].to_s.strip
198
+ secondary_category = options[:secondary_category].to_s.strip
199
+ primary_first_sub_category = options[:primary_first_sub_category].to_s.strip
200
+ primary_second_sub_category = options[:primary_second_sub_category].to_s.strip
201
+ secondary_first_sub_category = options[:secondary_first_sub_category].to_s.strip
202
+ secondary_second_sub_category = options[:secondary_second_sub_category].to_s.strip
203
+
204
+ mapped_values = {}
205
+
206
+ # Only update primary and secondar category if explicitly set
207
+ unless primary_category.empty?
208
+ mapped = Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
209
+ primary_category
210
+ )
211
+
212
+ mapped_values[primary_category] = mapped
213
+ category_id_map[:primary_category_id] = mapped
214
+ end
215
+ unless secondary_category.empty?
216
+ mapped = Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
217
+ secondary_category
213
218
  )
214
- )
219
+
220
+ mapped_values[secondary_category] = mapped
221
+ category_id_map[:secondary_category_id] = mapped
222
+ end
223
+
224
+ # Only set if primary category is going to be set
225
+ unless primary_category.empty?
226
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
227
+ primary_first_sub_category
228
+ )
229
+
230
+ mapped_values[primary_first_sub_category] = mapped
231
+ category_id_map[:primary_subcategory_one_id] = mapped
232
+ end
233
+ unless primary_category.empty?
234
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
235
+ primary_second_sub_category
236
+ )
237
+
238
+ mapped_values[primary_second_sub_category] = mapped
239
+ category_id_map[:primary_subcategory_two_id] = mapped
240
+ end
241
+
242
+ # Only set if secondary category is going to be set
243
+ unless secondary_category.empty?
244
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
245
+ secondary_first_sub_category
246
+ )
247
+
248
+ mapped_values[secondary_first_sub_category] = mapped
249
+ category_id_map[:secondary_subcategory_one_id] = mapped
250
+ end
251
+ unless secondary_category.empty?
252
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
253
+ secondary_second_sub_category
254
+ )
255
+
256
+ mapped_values[secondary_second_sub_category] = mapped
257
+ category_id_map[:secondary_subcategory_two_id] = mapped
258
+ end
259
+
260
+ # Print deprecation warnings if category was mapped
261
+ has_mapped_values = false
262
+ mapped_values.each do |k, v|
263
+ next if k.nil? || v.nil?
264
+ next if k == v
265
+ has_mapped_values = true
266
+ UI.deprecated("Category '#{k}' from iTunesConnect as been deprecated. Please replace with '#{v}'")
267
+ end
268
+ UI.deprecated("You can find more info at https://docs.fastlane.tools/actions/deliver/#reference") if has_mapped_values
269
+
270
+ app_info.update_categories(category_id_map: category_id_map)
215
271
  end
216
272
 
217
273
  # Update phased release
@@ -343,7 +399,7 @@ module Deliver
343
399
 
344
400
  localizations = app_info.get_app_info_localizations
345
401
 
346
- languages = options[:languages] || []
402
+ languages = (options[:languages] || []).reject { |lang| lang == "default" }
347
403
  locales_to_enable = languages - localizations.map(&:locale)
348
404
 
349
405
  if locales_to_enable.count > 0
@@ -378,7 +434,7 @@ module Deliver
378
434
 
379
435
  localizations = version.get_app_store_version_localizations
380
436
 
381
- languages = options[:languages] || []
437
+ languages = (options[:languages] || []).reject { |lang| lang == "default" }
382
438
  locales_to_enable = languages - localizations.map(&:locale)
383
439
 
384
440
  if locales_to_enable.count > 0
@@ -517,13 +573,28 @@ module Deliver
517
573
  UI.message("Setting the app's age rating...")
518
574
 
519
575
  # Maping from legacy ITC values to App Store Connect Values
576
+ mapped_values = {}
520
577
  attributes = {}
521
578
  json.each do |k, v|
522
579
  new_key = Spaceship::ConnectAPI::AgeRatingDeclaration.map_key_from_itc(k)
523
580
  new_value = Spaceship::ConnectAPI::AgeRatingDeclaration.map_value_from_itc(new_key, v)
581
+
582
+ mapped_values[k] = new_key
583
+ mapped_values[v] = new_value
584
+
524
585
  attributes[new_key] = new_value
525
586
  end
526
587
 
588
+ # Print deprecation warnings if category was mapped
589
+ has_mapped_values = false
590
+ mapped_values.each do |k, v|
591
+ next if k.nil? || v.nil?
592
+ next if k == v
593
+ has_mapped_values = true
594
+ UI.deprecated("Age rating '#{k}' from iTunesConnect as been deprecated. Please replace with '#{v}'")
595
+ end
596
+ UI.deprecated("You can find more info at https://docs.fastlane.tools/actions/deliver/#reference") if has_mapped_values
597
+
527
598
  age_rating_delcaration = version.fetch_age_rating_declaration
528
599
  age_rating_delcaration.update(attributes: attributes)
529
600
  end
@@ -13,9 +13,16 @@ module Deliver
13
13
  app_id = legacy_app.apple_id
14
14
  app = Spaceship::ConnectAPI::App.get(app_id: app_id)
15
15
 
16
+ attributes = {}
17
+ territory_ids = []
18
+
16
19
  app_prices = app.fetch_app_prices
17
20
  if app_prices.first
18
- old_price = app_prices.first.id
21
+ old_price = app_prices.first.price_tier.id
22
+ else
23
+ UI.message("App has no prices yet... Enabling all countries in App Store Connect")
24
+ territory_ids = Spaceship::ConnectAPI::Territory.all.map(&:id)
25
+ attributes[:availableInNewTerritories] = true
19
26
  end
20
27
 
21
28
  if price_tier == old_price
@@ -23,7 +30,7 @@ module Deliver
23
30
  return
24
31
  end
25
32
 
26
- app.update_app_price_tier(app_price_tier_id: price_tier)
33
+ app.update(attributes: attributes, app_price_tier_id: price_tier, territory_ids: territory_ids)
27
34
  UI.success("Successfully updated the pricing from #{old_price} to #{price_tier}")
28
35
  end
29
36
  end
@@ -34,13 +34,39 @@ module Deliver
34
34
 
35
35
  # Iterate over all screenshots for each set and delete
36
36
  screenshot_sets = localization.get_app_screenshot_sets
37
+
38
+ # Multi threading delete on single localization
39
+ threads = []
40
+ errors = []
41
+
37
42
  screenshot_sets.each do |screenshot_set|
38
43
  UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
39
44
  screenshot_set.app_screenshots.each do |screenshot|
40
45
  UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
41
- screenshot.delete!
46
+ threads << Thread.new do
47
+ begin
48
+ screenshot.delete!
49
+ UI.verbose("Deleted screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
50
+ rescue => error
51
+ UI.verbose("Failed to delete screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
52
+ errors << error
53
+ end
54
+ end
42
55
  end
43
56
  end
57
+
58
+ sleep(1) # Feels bad but sleeping a bit to let the threads catchup
59
+
60
+ unless threads.empty?
61
+ Helper.show_loading_indicator("Waiting for screenshots to be deleted for '#{localization.locale}'... (might be slow)") unless FastlaneCore::Globals.verbose?
62
+ threads.each(&:join)
63
+ Helper.hide_loading_indicator unless FastlaneCore::Globals.verbose?
64
+ end
65
+
66
+ # Crash if any errors happen while deleting
67
+ unless errors.empty?
68
+ UI.crash!(errors.map(&:message).join("\n"))
69
+ end
44
70
  end
45
71
  end
46
72
 
@@ -494,33 +494,32 @@ Key | Editable While Live | Directory | Filename
494
494
 
495
495
  ### Available Categories
496
496
 
497
- You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deliver_ supports both notations.
498
-
499
- - `Book`
500
- - `Business`
501
- - `Apps.Catalogs`
502
- - `Education`
503
- - `Entertainment`
504
- - `Finance`
505
- - `Apps.Food_Drink`
506
- - `Games`
507
- - `Healthcare_Fitness`
508
- - `Lifestyle`
509
- - `Medical`
510
- - `Music`
511
- - `Navigation`
512
- - `News`
513
- - `Apps.Newsstand`
514
- - `Photography`
515
- - `Productivity`
516
- - `Reference`
517
- - `Apps.Shopping`
518
- - `SocialNetworking`
519
- - `Sports`
520
- - `Stickers`
521
- - `Travel`
522
- - `Utilities`
523
- - `Weather`
497
+ - `FOOD_AND_DRINK`
498
+ - `BUSINESS`
499
+ - `EDUCATION`
500
+ - `SOCIAL_NETWORKING`
501
+ - `BOOKS`
502
+ - `SPORTS`
503
+ - `FINANCE`
504
+ - `REFERENCE`
505
+ - `GRAPHICS_AND_DESIGN`
506
+ - `DEVELOPER_TOOLS`
507
+ - `HEALTH_AND_FITNESS`
508
+ - `MUSIC`
509
+ - `WEATHER`
510
+ - `TRAVEL`
511
+ - `ENTERTAINMENT`
512
+ - `STICKERS`
513
+ - `GAMES`
514
+ - `LIFESTYLE`
515
+ - `MEDICAL`
516
+ - `MAGAZINES_AND_NEWSPAPERS`
517
+ - `UTILITIES`
518
+ - `SHOPPING`
519
+ - `PRODUCTIVITY`
520
+ - `NEWS`
521
+ - `PHOTO_AND_VIDEO`
522
+ - `NAVIGATION`
524
523
 
525
524
  ### Available Game Subcategories
526
525
 
@@ -543,54 +542,40 @@ You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deli
543
542
  - `MZGenre.Trivia`
544
543
  - `MZGenre.Word`
545
544
 
546
- ### Available Magazines & Newspapers Subcategories
547
-
548
- - `MZGenre.Apps.Arts_Photography`
549
- - `MZGenre.Apps.Automotive`
550
- - `MZGenre.Apps.Brides_Weddings`
551
- - `MZGenre.Apps.Business_Investing`
552
- - `MZGenre.Apps.Childrens_Magazines`
553
- - `MZGenre.Apps.Computers_Internet`
554
- - `MZGenre.Apps.Cooking_Food_Drink`
555
- - `MZGenre.Apps.Crafts_Hobbies`
556
- - `MZGenre.Apps.Electronics_Audio`
557
- - `MZGenre.Apps.Entertainment`
558
- - `MZGenre.Apps.Fashion_Style`
559
- - `MZGenre.Apps.Health_Mind_Body`
560
- - `MZGenre.Apps.History`
561
- - `MZGenre.Apps.Home_Garden`
562
- - `MZGenre.Apps.Literary_Magazines_Journals`
563
- - `MZGenre.Apps.Mens_Interest`
564
- - `MZGenre.Apps.Movies_Music`
565
- - `MZGenre.Apps.News_Politics`
566
- - `MZGenre.Apps.Outdoors_Nature`
567
- - `MZGenre.Apps.Parenting_Family`
568
- - `MZGenre.Apps.Pets`
569
- - `MZGenre.Apps.Professional_Trade`
570
- - `MZGenre.Apps.Regional_News`
571
- - `MZGenre.Apps.Science`
572
- - `MZGenre.Apps.Sports_Leisure`
573
- - `MZGenre.Apps.Teens`
574
- - `MZGenre.Apps.Travel_Regional`
575
- - `MZGenre.Apps.Womens_Interest`
545
+ - `GAMES_SPORTS`
546
+ - `GAMES_WORD`
547
+ - `GAMES_MUSIC`
548
+ - `GAMES_ADVENTURE`
549
+ - `GAMES_ACTION`
550
+ - `GAMES_ROLE_PLAYING`
551
+ - `GAMES_CASUAL`
552
+ - `GAMES_BOARD`
553
+ - `GAMES_TRIVIA`
554
+ - `GAMES_CARD`
555
+ - `GAMES_PUZZLE`
556
+ - `GAMES_CASINO`
557
+ - `GAMES_STRATEGY`
558
+ - `GAMES_SIMULATION`
559
+ - `GAMES_RACING`
560
+ - `GAMES_FAMILY`
576
561
 
577
562
  ### Available Stickers Subcategories
578
563
 
579
- - `MZGenre.Apps.Stickers.Animals`
580
- - `MZGenre.Apps.Stickers.Art`
581
- - `MZGenre.Apps.Stickers.BirthdaysAndCelebrations`
582
- - `MZGenre.Apps.Stickers.Celebrities`
583
- - `MZGenre.Apps.Stickers.Characters`
584
- - `MZGenre.Apps.Stickers.FoodAndDrink`
585
- - `MZGenre.Apps.Stickers.Emotions`
586
- - `MZGenre.Apps.Stickers.Fashion`
587
- - `MZGenre.Apps.Stickers.Games`
588
- - `MZGenre.Apps.Stickers.KidsAndFamily`
589
- - `MZGenre.Apps.Stickers.MoviesAndTV`
590
- - `MZGenre.Apps.Stickers.Music`
591
- - `MZGenre.Apps.Stickers.People`
592
- - `MZGenre.Apps.Stickers.Places`
593
- - `MZGenre.Apps.Stickers.Sports`
564
+ - `STICKERS_PLACES_AND_OBJECTS`
565
+ - `STICKERS_EMOJI_AND_EXPRESSIONS`
566
+ - `STICKERS_CELEBRATIONS`
567
+ - `STICKERS_CELEBRITIES`
568
+ - `STICKERS_MOVIES_AND_TV`
569
+ - `STICKERS_SPORTS_AND_ACTIVITIES`
570
+ - `STICKERS_EATING_AND_DRINKING`
571
+ - `STICKERS_CHARACTERS`
572
+ - `STICKERS_ANIMALS`
573
+ - `STICKERS_FASHION`
574
+ - `STICKERS_ART`
575
+ - `STICKERS_GAMING`
576
+ - `STICKERS_KIDS_AND_FAMILY`
577
+ - `STICKERS_PEOPLE`
578
+ - `STICKERS_MUSIC`
594
579
 
595
580
  ### Available age rating groups
596
581
 
@@ -602,26 +587,30 @@ You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deli
602
587
  - 1: Infrequent/Mild
603
588
  - 2: Frequent/Intense
604
589
 
590
+ - `NONE`
591
+ - `INFREQUENT_OR_MILD`
592
+ - `FREQUENT_OR_INTENSE`
593
+
605
594
  **Keys**
606
595
 
607
- - `CARTOON_FANTASY_VIOLENCE`
608
- - `REALISTIC_VIOLENCE`
609
- - `PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE`
610
- - `PROFANITY_CRUDE_HUMOR`
611
- - `MATURE_SUGGESTIVE`
612
- - `HORROR`
613
- - `MEDICAL_TREATMENT_INFO`
614
- - `ALCOHOL_TOBACCO_DRUGS`
615
- - `GAMBLING`
616
- - `SEXUAL_CONTENT_NUDITY`
617
- - `GRAPHIC_SEXUAL_CONTENT_NUDITY`
596
+ - `violenceCartoonOrFantasy`
597
+ - `violenceRealistic`
598
+ - `violenceRealisticProlongedGraphicOrSadistic`
599
+ - `profanityOrCrudeHumor`
600
+ - `matureOrSuggestiveThemes`
601
+ - `horrorOrFearThemes`
602
+ - `medicalOrTreatmentInformation`
603
+ - `alcoholTobaccoOrDrugUseOrReferences`
604
+ - `gamblingSimulated`
605
+ - `sexualContentOrNudity`
606
+ - `sexualContentGraphicAndNudity`
618
607
 
619
608
  #### Boolean
620
609
 
621
610
  **Keys**
622
611
 
623
- - `UNRESTRICTED_WEB_ACCESS`
624
- - `GAMBLING_CONTESTS`
612
+ - `unrestrictedWebAccess`
613
+ - `gamblingAndContests`
625
614
  </details>
626
615
 
627
616
  <br />