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
@@ -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,169 @@ 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
+ # Check if should wait for processing
100
+ wait_for_processing = !FastlaneCore::Env.truthy?("DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING")
101
+ if wait_for_processing
102
+ UI.important("Set environment variable DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING=true to skip waiting for screenshots to process")
103
+ end
104
+
105
+ # Upload screenshots
106
+ indized = {} # per language and device type
107
+
49
108
  screenshots_per_language.each do |language, screenshots_for_language|
109
+ # Find localization to upload screenshots to
110
+ localization = localizations.find do |l|
111
+ l.locale == language
112
+ end
113
+
114
+ unless localization
115
+ UI.error("Couldn't find localization on version for #{language}")
116
+ next
117
+ end
118
+
119
+ indized[localization.locale] ||= {}
120
+
121
+ # Create map to find screenshot set to add screenshot to
122
+ app_screenshot_sets_map = {}
123
+ app_screenshot_sets = localization.get_app_screenshot_sets
124
+ app_screenshot_sets.each do |app_screenshot_set|
125
+ app_screenshot_sets_map[app_screenshot_set.screenshot_display_type] = app_screenshot_set
126
+
127
+ # Set initial screnshot count
128
+ indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= {
129
+ count: app_screenshot_set.app_screenshots.size,
130
+ checksums: []
131
+ }
132
+
133
+ checksums = app_screenshot_set.app_screenshots.map(&:source_file_checksum).uniq
134
+ indized[localization.locale][app_screenshot_set.screenshot_display_type][:checksums] = checksums
135
+ end
136
+
50
137
  UI.message("Uploading #{screenshots_for_language.length} screenshots for language #{language}")
51
138
  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
139
+ display_type = screenshot.device_type
140
+ set = app_screenshot_sets_map[display_type]
141
+
142
+ if display_type.nil?
143
+ UI.error("Error... Screenshot size #{screenshot.screen_size} not valid for App Store Connect")
144
+ next
145
+ end
146
+
147
+ unless set
148
+ set = localization.create_app_screenshot_set(attributes: {
149
+ screenshotDisplayType: display_type
150
+ })
151
+ app_screenshot_sets_map[display_type] = set
55
152
 
56
- index = indized[screenshot.language][screenshot.formatted_name]
153
+ indized[localization.locale][set.screenshot_display_type] = {
154
+ count: 0,
155
+ checksums: []
156
+ }
157
+ end
158
+
159
+ index = indized[localization.locale][set.screenshot_display_type][:count]
57
160
 
58
- if index > 10
59
- UI.error("Too many screenshots found for device '#{screenshot.formatted_name}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
161
+ if index >= 10
162
+ UI.error("Too many screenshots found for device '#{screenshot.device_type}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
60
163
  next
61
164
  end
62
165
 
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?)
166
+ bytes = File.binread(screenshot.path)
167
+ checksum = Digest::MD5.hexdigest(bytes)
168
+ duplicate = indized[localization.locale][set.screenshot_display_type][:checksums].include?(checksum)
169
+
170
+ if duplicate
171
+ UI.message("Previous uploaded. Skipping '#{screenshot.path}'...")
172
+ else
173
+ indized[localization.locale][set.screenshot_display_type][:count] += 1
174
+ UI.message("Uploading '#{screenshot.path}'...")
175
+ set.upload_screenshot(path: screenshot.path, wait_for_processing: wait_for_processing)
176
+ end
69
177
  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
178
  end
78
179
  UI.success("Successfully uploaded screenshots to App Store Connect")
79
180
  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)
@@ -435,6 +435,10 @@ Omit `build_number` to let _fastlane_ automatically select the latest build numb
435
435
 
436
436
  Use the `submission_information` parameter for additional submission specifiers, including compliance and IDFA settings. Look at the Spaceship's [`app_submission.rb`](https://github.com/fastlane/fastlane/blob/master/spaceship/lib/spaceship/tunes/app_submission.rb) file for options. See [this example](https://github.com/artsy/eigen/blob/faa02e2746194d8d7c11899474de9c517435eca4/fastlane/Fastfile#L131-L149).
437
437
 
438
+ ```no-highlight
439
+ fastlane deliver submit_build --build_number 830 --submission_information "{\"export_compliance_uses_encryption\": false, \"add_id_info_uses_idfa\": false }"
440
+ ```
441
+
438
442
  # Credentials
439
443
 
440
444
  A detailed description about how your credentials are handled is available in a [credentials_manager](https://github.com/fastlane/fastlane/tree/master/credentials_manager).
@@ -467,7 +471,7 @@ _deliver_ allows for metadata to be set through `.txt` files in the metadata fol
467
471
 
468
472
  Key | Editable While Live | Directory | Filename
469
473
  ----|--------|--------|--------
470
- <%- (Deliver::UploadMetadata::NON_LOCALISED_VERSION_VALUES + Deliver::UploadMetadata::NON_LOCALISED_APP_VALUES).each do |value| -%>
474
+ <%- (Deliver::UploadMetadata::NON_LOCALISED_VERSION_VALUES.keys + Deliver::UploadMetadata::NON_LOCALISED_APP_VALUES).each do |value| -%>
471
475
  `<%= value %>` | <%= Deliver::UploadMetadata::NON_LOCALISED_LIVE_VALUES.include?(value) ? 'Yes' : 'No' %> | `<metadata_path>` | `<%= value %>.txt`
472
476
  <%- end %>
473
477
 
@@ -475,23 +479,15 @@ Key | Editable While Live | Directory | Filename
475
479
 
476
480
  Key | Editable While Live | Directory | Filename
477
481
  ----|--------|--------|--------
478
- <%- (Deliver::UploadMetadata::LOCALISED_APP_VALUES + Deliver::UploadMetadata::LOCALISED_VERSION_VALUES).each do |value| -%>
482
+ <%- (Deliver::UploadMetadata::LOCALISED_APP_VALUES.keys + Deliver::UploadMetadata::LOCALISED_VERSION_VALUES.keys).each do |value| -%>
479
483
  `<%= value %>` | <%= Deliver::UploadMetadata::LOCALISED_LIVE_VALUES.include?(value) ? 'Yes' : 'No' %> | `<metadata_path>/<lang>/` | `<%= value %>.txt`
480
484
  <%- end %>
481
485
 
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
486
  ### Review Information Metadata
491
487
 
492
488
  Key | Editable While Live | Directory | Filename
493
489
  ----|--------|--------|--------
494
- <%- Deliver::UploadMetadata::REVIEW_INFORMATION_VALUES.each do |key, value| -%>
490
+ <%- Deliver::UploadMetadata::REVIEW_INFORMATION_VALUES_LEGACY.each do |key, value| -%>
495
491
  `<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::REVIEW_INFORMATION_DIR %>` | `<%= value %>.txt`
496
492
  <%- end %>
497
493
 
@@ -502,33 +498,32 @@ Key | Editable While Live | Directory | Filename
502
498
 
503
499
  ### Available Categories
504
500
 
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`
501
+ - `FOOD_AND_DRINK`
502
+ - `BUSINESS`
503
+ - `EDUCATION`
504
+ - `SOCIAL_NETWORKING`
505
+ - `BOOKS`
506
+ - `SPORTS`
507
+ - `FINANCE`
508
+ - `REFERENCE`
509
+ - `GRAPHICS_AND_DESIGN`
510
+ - `DEVELOPER_TOOLS`
511
+ - `HEALTH_AND_FITNESS`
512
+ - `MUSIC`
513
+ - `WEATHER`
514
+ - `TRAVEL`
515
+ - `ENTERTAINMENT`
516
+ - `STICKERS`
517
+ - `GAMES`
518
+ - `LIFESTYLE`
519
+ - `MEDICAL`
520
+ - `MAGAZINES_AND_NEWSPAPERS`
521
+ - `UTILITIES`
522
+ - `SHOPPING`
523
+ - `PRODUCTIVITY`
524
+ - `NEWS`
525
+ - `PHOTO_AND_VIDEO`
526
+ - `NAVIGATION`
532
527
 
533
528
  ### Available Game Subcategories
534
529
 
@@ -551,54 +546,40 @@ You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deli
551
546
  - `MZGenre.Trivia`
552
547
  - `MZGenre.Word`
553
548
 
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`
549
+ - `GAMES_SPORTS`
550
+ - `GAMES_WORD`
551
+ - `GAMES_MUSIC`
552
+ - `GAMES_ADVENTURE`
553
+ - `GAMES_ACTION`
554
+ - `GAMES_ROLE_PLAYING`
555
+ - `GAMES_CASUAL`
556
+ - `GAMES_BOARD`
557
+ - `GAMES_TRIVIA`
558
+ - `GAMES_CARD`
559
+ - `GAMES_PUZZLE`
560
+ - `GAMES_CASINO`
561
+ - `GAMES_STRATEGY`
562
+ - `GAMES_SIMULATION`
563
+ - `GAMES_RACING`
564
+ - `GAMES_FAMILY`
584
565
 
585
566
  ### Available Stickers Subcategories
586
567
 
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`
568
+ - `STICKERS_PLACES_AND_OBJECTS`
569
+ - `STICKERS_EMOJI_AND_EXPRESSIONS`
570
+ - `STICKERS_CELEBRATIONS`
571
+ - `STICKERS_CELEBRITIES`
572
+ - `STICKERS_MOVIES_AND_TV`
573
+ - `STICKERS_SPORTS_AND_ACTIVITIES`
574
+ - `STICKERS_EATING_AND_DRINKING`
575
+ - `STICKERS_CHARACTERS`
576
+ - `STICKERS_ANIMALS`
577
+ - `STICKERS_FASHION`
578
+ - `STICKERS_ART`
579
+ - `STICKERS_GAMING`
580
+ - `STICKERS_KIDS_AND_FAMILY`
581
+ - `STICKERS_PEOPLE`
582
+ - `STICKERS_MUSIC`
602
583
 
603
584
  ### Available age rating groups
604
585
 
@@ -610,26 +591,30 @@ You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deli
610
591
  - 1: Infrequent/Mild
611
592
  - 2: Frequent/Intense
612
593
 
594
+ - `NONE`
595
+ - `INFREQUENT_OR_MILD`
596
+ - `FREQUENT_OR_INTENSE`
597
+
613
598
  **Keys**
614
599
 
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`
600
+ - `violenceCartoonOrFantasy`
601
+ - `violenceRealistic`
602
+ - `violenceRealisticProlongedGraphicOrSadistic`
603
+ - `profanityOrCrudeHumor`
604
+ - `matureOrSuggestiveThemes`
605
+ - `horrorOrFearThemes`
606
+ - `medicalOrTreatmentInformation`
607
+ - `alcoholTobaccoOrDrugUseOrReferences`
608
+ - `gamblingSimulated`
609
+ - `sexualContentOrNudity`
610
+ - `sexualContentGraphicAndNudity`
626
611
 
627
612
  #### Boolean
628
613
 
629
614
  **Keys**
630
615
 
631
- - `UNRESTRICTED_WEB_ACCESS`
632
- - `GAMBLING_CONTESTS`
616
+ - `unrestrictedWebAccess`
617
+ - `gamblingAndContests`
633
618
  </details>
634
619
 
635
620
  <br />