fastlane 2.149.0 → 2.150.0.rc4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -82
  3. data/deliver/lib/deliver.rb +0 -1
  4. data/deliver/lib/deliver/app_screenshot.rb +26 -25
  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 +155 -90
  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 +134 -39
  12. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  13. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +77 -96
  14. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +3 -2
  15. data/fastlane/lib/fastlane/actions/download_dsyms.rb +7 -1
  16. data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
  17. data/fastlane/lib/fastlane/actions/set_changelog.rb +23 -20
  18. data/fastlane/lib/fastlane/actions/slack.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/spm.rb +7 -0
  20. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -32
  21. data/fastlane/lib/fastlane/lane.rb +3 -3
  22. data/fastlane/lib/fastlane/swift_fastlane_function.rb +8 -4
  23. data/fastlane/lib/fastlane/version.rb +1 -1
  24. data/fastlane/swift/ControlCommand.swift +1 -0
  25. data/fastlane/swift/Deliverfile.swift +1 -1
  26. data/fastlane/swift/Fastlane.swift +48 -12
  27. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +3 -9
  28. data/fastlane/swift/Gymfile.swift +1 -1
  29. data/fastlane/swift/LaneFileProtocol.swift +2 -5
  30. data/fastlane/swift/Matchfile.swift +1 -1
  31. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  32. data/fastlane/swift/Precheckfile.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/Scanfile.swift +1 -1
  37. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  38. data/fastlane/swift/Screengrabfile.swift +1 -1
  39. data/fastlane/swift/Snapshotfile.swift +1 -1
  40. data/fastlane/swift/SnapshotfileProtocol.swift +3 -3
  41. data/fastlane/swift/SocketClient.swift +76 -45
  42. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  43. data/fastlane/swift/SocketResponse.swift +1 -0
  44. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -3
  45. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +89 -52
  46. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +7 -0
  47. data/fastlane_core/lib/fastlane_core/project.rb +0 -1
  48. data/frameit/lib/frameit/device_types.rb +100 -100
  49. data/produce/lib/produce/itunes_connect.rb +32 -21
  50. data/produce/lib/produce/options.rb +3 -3
  51. data/sigh/lib/assets/resign.sh +7 -7
  52. data/snapshot/lib/assets/SnapshotHelper.swift +5 -5
  53. data/snapshot/lib/assets/SnapshotHelperXcode8.swift +3 -3
  54. data/snapshot/lib/snapshot/options.rb +0 -1
  55. data/snapshot/lib/snapshot/reports_generator.rb +8 -1
  56. data/spaceship/lib/spaceship/.DS_Store +0 -0
  57. data/spaceship/lib/spaceship/client.rb +4 -3
  58. data/spaceship/lib/spaceship/connect_api.rb +25 -2
  59. data/spaceship/lib/spaceship/connect_api/client.rb +97 -31
  60. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +98 -0
  61. data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
  62. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +113 -0
  63. data/spaceship/lib/spaceship/connect_api/models/app.rb +120 -3
  64. data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
  65. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +67 -0
  66. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +38 -0
  67. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +129 -0
  68. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +71 -0
  69. data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
  70. data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
  71. data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +71 -0
  72. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +93 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +101 -0
  74. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +183 -0
  76. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +86 -0
  77. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +36 -0
  78. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
  79. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  80. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +40 -0
  81. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
  82. data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
  83. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +10 -3
  84. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +33 -0
  85. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +841 -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 +44 -39
  90. data/deliver/lib/deliver/upload_assets.rb +0 -27
  91. data/fastlane/lib/assets/.s3_html_template.erb.swp +0 -0
  92. data/fastlane/lib/fastlane/actions/.hipchat.rb.swp +0 -0
  93. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  94. data/scan/lib/scan/.options.rb.swp +0 -0
@@ -1,23 +1,37 @@
1
1
  require_relative 'module'
2
+ require 'spaceship'
2
3
 
3
4
  module Deliver
4
5
  # Set the app's pricing
5
6
  class UploadPriceTier
6
7
  def upload(options)
7
8
  return unless options[:price_tier]
8
- app = options[:app]
9
9
 
10
- # just to be sure, the user might have passed an int (which is fine with us)
11
- options[:price_tier] = options[:price_tier].to_s
10
+ price_tier = options[:price_tier].to_s
12
11
 
13
- old_price = app.price_tier
14
- if options[:price_tier] == old_price
15
- UI.success("Price Tier unchanged (tier #{options[:price_tier]})")
12
+ legacy_app = options[:app]
13
+ app_id = legacy_app.apple_id
14
+ app = Spaceship::ConnectAPI::App.get(app_id: app_id)
15
+
16
+ attributes = {}
17
+ territory_ids = []
18
+
19
+ app_prices = app.fetch_app_prices
20
+ if app_prices.first
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
26
+ end
27
+
28
+ if price_tier == old_price
29
+ UI.success("Price Tier unchanged (tier #{old_price})")
16
30
  return
17
31
  end
18
32
 
19
- app.update_price_tier!(options[:price_tier])
20
- UI.success("Successfully updated the pricing from #{old_price} to #{options[:price_tier]}")
33
+ app.update(attributes: attributes, app_price_tier_id: price_tier, territory_ids: territory_ids)
34
+ UI.success("Successfully updated the pricing from #{old_price} to #{price_tier}")
21
35
  end
22
36
  end
23
37
  end
@@ -1,4 +1,5 @@
1
1
  require 'spaceship/tunes/tunes'
2
+ require 'digest/md5'
2
3
 
3
4
  require_relative 'app_screenshot'
4
5
  require_relative 'module'
@@ -11,69 +12,163 @@ module Deliver
11
12
  return if options[:skip_screenshots]
12
13
  return if options[:edit_live]
13
14
 
14
- app = options[:app]
15
+ legacy_app = options[:app]
16
+ app_id = legacy_app.apple_id
17
+ app = Spaceship::ConnectAPI::App.get(app_id: app_id)
15
18
 
16
- v = app.edit_version(platform: options[:platform])
17
- UI.user_error!("Could not find a version to edit for app '#{app.name}'") unless v
19
+ platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
20
+ version = app.get_edit_app_store_version(platform: platform)
21
+ UI.user_error!("Could not find a version to edit for app '#{app.name}' for '#{platform}'") unless version
22
+
23
+ UI.important("Will begin uploading snapshots for '#{version.version_string}' on App Store Connect")
18
24
 
19
25
  UI.message("Starting with the upload of screenshots...")
20
26
  screenshots_per_language = screenshots.group_by(&:language)
21
27
 
28
+ localizations = version.get_app_store_version_localizations
29
+
22
30
  if options[:overwrite_screenshots]
23
- UI.message("Removing all previously uploaded screenshots...")
24
- # First, clear all previously uploaded screenshots
25
- screenshots_per_language.keys.each do |language|
26
- # We have to nil check for languages not activated
27
- next if v.screenshots[language].nil?
28
- v.screenshots[language].each_with_index do |t, index|
29
- v.upload_screenshot!(nil, t.sort_order, t.language, t.device_type, t.is_imessage)
31
+ # Get localizations on version
32
+ localizations.each do |localization|
33
+ # Only delete screenshots if trying to upload
34
+ next unless screenshots_per_language.keys.include?(localization.locale)
35
+
36
+ # Iterate over all screenshots for each set and delete
37
+ screenshot_sets = localization.get_app_screenshot_sets
38
+
39
+ # Multi threading delete on single localization
40
+ threads = []
41
+ errors = []
42
+
43
+ screenshot_sets.each do |screenshot_set|
44
+ UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
45
+ screenshot_set.app_screenshots.each do |screenshot|
46
+ UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
47
+ threads << Thread.new do
48
+ begin
49
+ screenshot.delete!
50
+ UI.verbose("Deleted screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
51
+ rescue => error
52
+ UI.verbose("Failed to delete screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
53
+ errors << error
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ sleep(1) # Feels bad but sleeping a bit to let the threads catchup
60
+
61
+ unless threads.empty?
62
+ Helper.show_loading_indicator("Waiting for screenshots to be deleted for '#{localization.locale}'... (might be slow)") unless FastlaneCore::Globals.verbose?
63
+ threads.each(&:join)
64
+ Helper.hide_loading_indicator unless FastlaneCore::Globals.verbose?
65
+ end
66
+
67
+ # Crash if any errors happen while deleting
68
+ unless errors.empty?
69
+ UI.crash!(errors.map(&:message).join("\n"))
30
70
  end
31
71
  end
32
72
  end
33
73
 
34
- # Now, fill in the new ones
35
- indized = {} # per language and device type
74
+ # Finding languages to enable
75
+ languages = screenshots_per_language.keys
76
+ locales_to_enable = languages - localizations.map(&:locale)
36
77
 
37
- enabled_languages = screenshots_per_language.keys
38
- if enabled_languages.count > 0
39
- v.create_languages(enabled_languages)
78
+ if locales_to_enable.count > 0
40
79
  lng_text = "language"
41
- lng_text += "s" if enabled_languages.count != 1
42
- Helper.show_loading_indicator("Activating #{lng_text} #{enabled_languages.join(', ')}...")
43
- v.save!
44
- # This refreshes the app version from iTC after enabling a localization
45
- v = app.edit_version(platform: options[:platform])
80
+ lng_text += "s" if locales_to_enable.count != 1
81
+ Helper.show_loading_indicator("Activating #{lng_text} #{locales_to_enable.join(', ')}...")
82
+
83
+ locales_to_enable.each do |locale|
84
+ version.create_app_store_version_localization(attributes: {
85
+ locale: locale
86
+ })
87
+ end
88
+
46
89
  Helper.hide_loading_indicator
90
+
91
+ # Refresh version localizations
92
+ localizations = version.get_app_store_version_localizations
47
93
  end
48
94
 
95
+ upload_screenshots(screenshots_per_language, localizations)
96
+ end
97
+
98
+ def upload_screenshots(screenshots_per_language, localizations)
99
+ # Upload screenshots
100
+ indized = {} # per language and device type
101
+
49
102
  screenshots_per_language.each do |language, screenshots_for_language|
103
+ # Find localization to upload screenshots to
104
+ localization = localizations.find do |l|
105
+ l.locale == language
106
+ end
107
+
108
+ unless localization
109
+ UI.error("Couldn't find localization on version for #{language}")
110
+ next
111
+ end
112
+
113
+ indized[localization.locale] ||= {}
114
+
115
+ # Create map to find screenshot set to add screenshot to
116
+ app_screenshot_sets_map = {}
117
+ app_screenshot_sets = localization.get_app_screenshot_sets
118
+ app_screenshot_sets.each do |app_screenshot_set|
119
+ app_screenshot_sets_map[app_screenshot_set.screenshot_display_type] = app_screenshot_set
120
+
121
+ # Set initial screnshot count
122
+ indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= {
123
+ count: app_screenshot_set.app_screenshots.size,
124
+ checksums: []
125
+ }
126
+
127
+ checksums = app_screenshot_set.app_screenshots.map(&:source_file_checksum).uniq
128
+ indized[localization.locale][app_screenshot_set.screenshot_display_type][:checksums] = checksums
129
+ end
130
+
50
131
  UI.message("Uploading #{screenshots_for_language.length} screenshots for language #{language}")
51
132
  screenshots_for_language.each do |screenshot|
52
- indized[screenshot.language] ||= {}
53
- indized[screenshot.language][screenshot.formatted_name] ||= 0
54
- indized[screenshot.language][screenshot.formatted_name] += 1 # we actually start with 1... wtf iTC
133
+ display_type = screenshot.device_type
134
+ set = app_screenshot_sets_map[display_type]
55
135
 
56
- index = indized[screenshot.language][screenshot.formatted_name]
136
+ if display_type.nil?
137
+ UI.error("Error... Screenshot size #{screenshot.screen_size} not valid for App Store Connect")
138
+ next
139
+ end
140
+
141
+ unless set
142
+ set = localization.create_app_screenshot_set(attributes: {
143
+ screenshotDisplayType: display_type
144
+ })
145
+ app_screenshot_sets_map[display_type] = set
146
+
147
+ indized[localization.locale][set.screenshot_display_type] = {
148
+ count: 0,
149
+ checksums: []
150
+ }
151
+ end
57
152
 
58
- if index > 10
59
- UI.error("Too many screenshots found for device '#{screenshot.formatted_name}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
153
+ index = indized[localization.locale][set.screenshot_display_type][:count]
154
+
155
+ if index >= 10
156
+ UI.error("Too many screenshots found for device '#{screenshot.device_type}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
60
157
  next
61
158
  end
62
159
 
63
- UI.message("Uploading '#{screenshot.path}'...")
64
- v.upload_screenshot!(screenshot.path,
65
- index,
66
- screenshot.language,
67
- screenshot.device_type,
68
- screenshot.is_messages?)
160
+ bytes = File.binread(screenshot.path)
161
+ checksum = Digest::MD5.hexdigest(bytes)
162
+ duplicate = indized[localization.locale][set.screenshot_display_type][:checksums].include?(checksum)
163
+
164
+ if duplicate
165
+ UI.message("Previous uploaded. Skipping '#{screenshot.path}'...")
166
+ else
167
+ indized[localization.locale][set.screenshot_display_type][:count] += 1
168
+ UI.message("Uploading '#{screenshot.path}'...")
169
+ set.upload_screenshot(path: screenshot.path)
170
+ end
69
171
  end
70
- # ideally we should only save once, but itunes server can't cope it seems
71
- # so we save per language. See issue #349
72
- Helper.show_loading_indicator("Saving changes")
73
- v.save!
74
- # Refresh app version to start clean again. See issue #9859
75
- v = app.edit_version
76
- Helper.hide_loading_indicator
77
172
  end
78
173
  UI.success("Successfully uploaded screenshots to App Store Connect")
79
174
  end
@@ -364,7 +364,7 @@ snapshot(launch_arguments: ["SKIP_ANIMATIONS"])
364
364
  ```
365
365
 
366
366
  By default, _snapshot_ will wait for a short time for the animations to finish.
367
- If you're skipping the animations, this is wait time is unnecessary and can be skipped:
367
+ If you're skipping the animations, this wait time is unnecessary and can be skipped:
368
368
 
369
369
  ```swift
370
370
  setupSnapshot(app, waitForAnimations: false)
@@ -467,7 +467,7 @@ _deliver_ allows for metadata to be set through `.txt` files in the metadata fol
467
467
 
468
468
  Key | Editable While Live | Directory | Filename
469
469
  ----|--------|--------|--------
470
- <%- (Deliver::UploadMetadata::NON_LOCALISED_VERSION_VALUES + Deliver::UploadMetadata::NON_LOCALISED_APP_VALUES).each do |value| -%>
470
+ <%- (Deliver::UploadMetadata::NON_LOCALISED_VERSION_VALUES.keys + Deliver::UploadMetadata::NON_LOCALISED_APP_VALUES).each do |value| -%>
471
471
  `<%= value %>` | <%= Deliver::UploadMetadata::NON_LOCALISED_LIVE_VALUES.include?(value) ? 'Yes' : 'No' %> | `<metadata_path>` | `<%= value %>.txt`
472
472
  <%- end %>
473
473
 
@@ -475,23 +475,15 @@ Key | Editable While Live | Directory | Filename
475
475
 
476
476
  Key | Editable While Live | Directory | Filename
477
477
  ----|--------|--------|--------
478
- <%- (Deliver::UploadMetadata::LOCALISED_APP_VALUES + Deliver::UploadMetadata::LOCALISED_VERSION_VALUES).each do |value| -%>
478
+ <%- (Deliver::UploadMetadata::LOCALISED_APP_VALUES.keys + Deliver::UploadMetadata::LOCALISED_VERSION_VALUES.keys).each do |value| -%>
479
479
  `<%= value %>` | <%= Deliver::UploadMetadata::LOCALISED_LIVE_VALUES.include?(value) ? 'Yes' : 'No' %> | `<metadata_path>/<lang>/` | `<%= value %>.txt`
480
480
  <%- end %>
481
481
 
482
- ### Trade Representative Contact Information Metadata
483
-
484
- Key | Editable While Live | Directory | Filename
485
- ----|--------|--------|--------
486
- <%- Deliver::UploadMetadata::TRADE_REPRESENTATIVE_CONTACT_INFORMATION_VALUES.each do |key, value| -%>
487
- `<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::TRADE_REPRESENTATIVE_CONTACT_INFORMATION_DIR %>` | `<%= value %>.txt`
488
- <%- end %>
489
-
490
482
  ### Review Information Metadata
491
483
 
492
484
  Key | Editable While Live | Directory | Filename
493
485
  ----|--------|--------|--------
494
- <%- Deliver::UploadMetadata::REVIEW_INFORMATION_VALUES.each do |key, value| -%>
486
+ <%- Deliver::UploadMetadata::REVIEW_INFORMATION_VALUES_LEGACY.each do |key, value| -%>
495
487
  `<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::REVIEW_INFORMATION_DIR %>` | `<%= value %>.txt`
496
488
  <%- end %>
497
489
 
@@ -502,33 +494,32 @@ Key | Editable While Live | Directory | Filename
502
494
 
503
495
  ### Available Categories
504
496
 
505
- You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deliver_ supports both notations.
506
-
507
- - `Book`
508
- - `Business`
509
- - `Apps.Catalogs`
510
- - `Education`
511
- - `Entertainment`
512
- - `Finance`
513
- - `Apps.Food_Drink`
514
- - `Games`
515
- - `Healthcare_Fitness`
516
- - `Lifestyle`
517
- - `Medical`
518
- - `Music`
519
- - `Navigation`
520
- - `News`
521
- - `Apps.Newsstand`
522
- - `Photography`
523
- - `Productivity`
524
- - `Reference`
525
- - `Apps.Shopping`
526
- - `SocialNetworking`
527
- - `Sports`
528
- - `Stickers`
529
- - `Travel`
530
- - `Utilities`
531
- - `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`
532
523
 
533
524
  ### Available Game Subcategories
534
525
 
@@ -551,54 +542,40 @@ You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deli
551
542
  - `MZGenre.Trivia`
552
543
  - `MZGenre.Word`
553
544
 
554
- ### Available Magazines & Newspapers Subcategories
555
-
556
- - `MZGenre.Apps.Arts_Photography`
557
- - `MZGenre.Apps.Automotive`
558
- - `MZGenre.Apps.Brides_Weddings`
559
- - `MZGenre.Apps.Business_Investing`
560
- - `MZGenre.Apps.Childrens_Magazines`
561
- - `MZGenre.Apps.Computers_Internet`
562
- - `MZGenre.Apps.Cooking_Food_Drink`
563
- - `MZGenre.Apps.Crafts_Hobbies`
564
- - `MZGenre.Apps.Electronics_Audio`
565
- - `MZGenre.Apps.Entertainment`
566
- - `MZGenre.Apps.Fashion_Style`
567
- - `MZGenre.Apps.Health_Mind_Body`
568
- - `MZGenre.Apps.History`
569
- - `MZGenre.Apps.Home_Garden`
570
- - `MZGenre.Apps.Literary_Magazines_Journals`
571
- - `MZGenre.Apps.Mens_Interest`
572
- - `MZGenre.Apps.Movies_Music`
573
- - `MZGenre.Apps.News_Politics`
574
- - `MZGenre.Apps.Outdoors_Nature`
575
- - `MZGenre.Apps.Parenting_Family`
576
- - `MZGenre.Apps.Pets`
577
- - `MZGenre.Apps.Professional_Trade`
578
- - `MZGenre.Apps.Regional_News`
579
- - `MZGenre.Apps.Science`
580
- - `MZGenre.Apps.Sports_Leisure`
581
- - `MZGenre.Apps.Teens`
582
- - `MZGenre.Apps.Travel_Regional`
583
- - `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`
584
561
 
585
562
  ### Available Stickers Subcategories
586
563
 
587
- - `MZGenre.Apps.Stickers.Animals`
588
- - `MZGenre.Apps.Stickers.Art`
589
- - `MZGenre.Apps.Stickers.BirthdaysAndCelebrations`
590
- - `MZGenre.Apps.Stickers.Celebrities`
591
- - `MZGenre.Apps.Stickers.Characters`
592
- - `MZGenre.Apps.Stickers.FoodAndDrink`
593
- - `MZGenre.Apps.Stickers.Emotions`
594
- - `MZGenre.Apps.Stickers.Fashion`
595
- - `MZGenre.Apps.Stickers.Games`
596
- - `MZGenre.Apps.Stickers.KidsAndFamily`
597
- - `MZGenre.Apps.Stickers.MoviesAndTV`
598
- - `MZGenre.Apps.Stickers.Music`
599
- - `MZGenre.Apps.Stickers.People`
600
- - `MZGenre.Apps.Stickers.Places`
601
- - `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`
602
579
 
603
580
  ### Available age rating groups
604
581
 
@@ -610,26 +587,30 @@ You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deli
610
587
  - 1: Infrequent/Mild
611
588
  - 2: Frequent/Intense
612
589
 
590
+ - `NONE`
591
+ - `INFREQUENT_OR_MILD`
592
+ - `FREQUENT_OR_INTENSE`
593
+
613
594
  **Keys**
614
595
 
615
- - `CARTOON_FANTASY_VIOLENCE`
616
- - `REALISTIC_VIOLENCE`
617
- - `PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE`
618
- - `PROFANITY_CRUDE_HUMOR`
619
- - `MATURE_SUGGESTIVE`
620
- - `HORROR`
621
- - `MEDICAL_TREATMENT_INFO`
622
- - `ALCOHOL_TOBACCO_DRUGS`
623
- - `GAMBLING`
624
- - `SEXUAL_CONTENT_NUDITY`
625
- - `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`
626
607
 
627
608
  #### Boolean
628
609
 
629
610
  **Keys**
630
611
 
631
- - `UNRESTRICTED_WEB_ACCESS`
632
- - `GAMBLING_CONTESTS`
612
+ - `unrestrictedWebAccess`
613
+ - `gamblingAndContests`
633
614
  </details>
634
615
 
635
616
  <br />