fastlane 2.148.0 → 2.150.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +86 -86
  3. data/deliver/lib/deliver.rb +0 -1
  4. data/deliver/lib/deliver/app_screenshot.rb +28 -27
  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 +112 -37
  12. data/fastlane/lib/assets/s3_html_template.erb +1 -1
  13. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +42 -2
  14. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  15. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +77 -96
  16. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +3 -2
  17. data/fastlane/lib/fastlane/actions/download_dsyms.rb +7 -1
  18. data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
  19. data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
  20. data/fastlane/lib/fastlane/actions/set_changelog.rb +23 -20
  21. data/fastlane/lib/fastlane/actions/slack.rb +2 -2
  22. data/fastlane/lib/fastlane/actions/slather.rb +8 -1
  23. data/fastlane/lib/fastlane/actions/spm.rb +7 -0
  24. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +2 -33
  25. data/fastlane/lib/fastlane/documentation/actions_list.rb +1 -1
  26. data/fastlane/lib/fastlane/lane.rb +3 -3
  27. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
  28. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +29 -0
  29. data/fastlane/lib/fastlane/swift_fastlane_function.rb +22 -5
  30. data/fastlane/lib/fastlane/version.rb +1 -1
  31. data/fastlane/swift/ControlCommand.swift +1 -0
  32. data/fastlane/swift/Deliverfile.swift +1 -1
  33. data/fastlane/swift/Fastlane.swift +79 -22
  34. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +3 -9
  35. data/fastlane/swift/Gymfile.swift +1 -1
  36. data/fastlane/swift/GymfileProtocol.swift +1 -1
  37. data/fastlane/swift/LaneFileProtocol.swift +2 -5
  38. data/fastlane/swift/Matchfile.swift +1 -1
  39. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  40. data/fastlane/swift/Precheckfile.swift +1 -1
  41. data/fastlane/swift/RubyCommand.swift +29 -6
  42. data/fastlane/swift/RubyCommandable.swift +1 -0
  43. data/fastlane/swift/Runner.swift +85 -13
  44. data/fastlane/swift/Scanfile.swift +1 -1
  45. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  46. data/fastlane/swift/Screengrabfile.swift +1 -1
  47. data/fastlane/swift/Snapshotfile.swift +1 -1
  48. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  49. data/fastlane/swift/SocketClient.swift +76 -45
  50. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  51. data/fastlane/swift/SocketResponse.swift +1 -0
  52. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -3
  53. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +7 -0
  54. data/frameit/lib/frameit/device_types.rb +100 -100
  55. data/gym/lib/gym/options.rb +1 -1
  56. data/match/lib/match/nuke.rb +21 -16
  57. data/match/lib/match/storage/git_storage.rb +4 -0
  58. data/match/lib/match/storage/google_cloud_storage.rb +4 -0
  59. data/match/lib/match/storage/interface.rb +4 -0
  60. data/match/lib/match/storage/s3_storage.rb +4 -0
  61. data/produce/lib/produce/itunes_connect.rb +32 -21
  62. data/produce/lib/produce/options.rb +3 -3
  63. data/scan/lib/scan/options.rb +1 -1
  64. data/scan/lib/scan/test_result_parser.rb +9 -2
  65. data/sigh/lib/assets/resign.sh +7 -7
  66. data/snapshot/lib/assets/SnapshotHelper.swift +5 -5
  67. data/snapshot/lib/assets/SnapshotHelperXcode8.swift +3 -3
  68. data/snapshot/lib/snapshot/options.rb +11 -1
  69. data/snapshot/lib/snapshot/reports_generator.rb +8 -1
  70. data/snapshot/lib/snapshot/test_command_generator.rb +8 -3
  71. data/spaceship/lib/spaceship/.DS_Store +0 -0
  72. data/spaceship/lib/spaceship/client.rb +13 -4
  73. data/spaceship/lib/spaceship/connect_api.rb +25 -2
  74. data/spaceship/lib/spaceship/connect_api/client.rb +97 -31
  75. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +66 -0
  76. data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
  77. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +113 -0
  78. data/spaceship/lib/spaceship/connect_api/models/app.rb +117 -3
  79. data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
  80. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +66 -0
  81. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +38 -0
  82. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +77 -0
  83. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +71 -0
  84. data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
  85. data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
  86. data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +81 -0
  87. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +97 -0
  88. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +101 -0
  89. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
  90. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +182 -0
  91. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +86 -0
  92. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +36 -0
  93. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
  94. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  95. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +40 -0
  96. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
  97. data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
  98. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +10 -3
  99. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +33 -0
  100. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +832 -0
  101. data/spaceship/lib/spaceship/errors.rb +3 -0
  102. data/spaceship/lib/spaceship/spaceauth_runner.rb +2 -2
  103. data/supply/lib/supply/client.rb +19 -0
  104. data/supply/lib/supply/reader.rb +16 -0
  105. metadata +50 -42
  106. data/deliver/lib/deliver/upload_assets.rb +0 -27
  107. data/snapshot/lib/snapshot/.options.rb.swp +0 -0
  108. data/snapshot/lib/snapshot/.test_command_generator_base.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
@@ -11,69 +11,144 @@ module Deliver
11
11
  return if options[:skip_screenshots]
12
12
  return if options[:edit_live]
13
13
 
14
- app = options[:app]
14
+ legacy_app = options[:app]
15
+ app_id = legacy_app.apple_id
16
+ app = Spaceship::ConnectAPI::App.get(app_id: app_id)
15
17
 
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
18
+ platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
19
+ version = app.get_edit_app_store_version(platform: platform)
20
+ UI.user_error!("Could not find a version to edit for app '#{app.name}' for '#{platform}'") unless version
21
+
22
+ UI.important("Will begin uploading snapshots for '#{version.version_string}' on App Store Connect")
18
23
 
19
24
  UI.message("Starting with the upload of screenshots...")
20
25
  screenshots_per_language = screenshots.group_by(&:language)
21
26
 
27
+ localizations = version.get_app_store_version_localizations
28
+
22
29
  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)
30
+ # Get localizations on version
31
+ localizations.each do |localization|
32
+ # Only delete screenshots if trying to upload
33
+ next unless screenshots_per_language.keys.include?(localization.locale)
34
+
35
+ # Iterate over all screenshots for each set and delete
36
+ screenshot_sets = localization.get_app_screenshot_sets
37
+
38
+ # Multi threading delete on single localization
39
+ threads = []
40
+ errors = []
41
+
42
+ screenshot_sets.each do |screenshot_set|
43
+ UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
44
+ screenshot_set.app_screenshots.each do |screenshot|
45
+ UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
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
55
+ end
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"))
30
69
  end
31
70
  end
32
71
  end
33
72
 
34
- # Now, fill in the new ones
35
- indized = {} # per language and device type
73
+ # Finding languages to enable
74
+ languages = screenshots_per_language.keys
75
+ locales_to_enable = languages - localizations.map(&:locale)
36
76
 
37
- enabled_languages = screenshots_per_language.keys
38
- if enabled_languages.count > 0
39
- v.create_languages(enabled_languages)
77
+ if locales_to_enable.count > 0
40
78
  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])
79
+ lng_text += "s" if locales_to_enable.count != 1
80
+ Helper.show_loading_indicator("Activating #{lng_text} #{locales_to_enable.join(', ')}...")
81
+
82
+ locales_to_enable.each do |locale|
83
+ version.create_app_store_version_localization(attributes: {
84
+ locale: locale
85
+ })
86
+ end
87
+
46
88
  Helper.hide_loading_indicator
89
+
90
+ # Refresh version localizations
91
+ localizations = version.get_app_store_version_localizations
47
92
  end
48
93
 
94
+ # Upload screenshots
95
+ indized = {} # per language and device type
96
+
49
97
  screenshots_per_language.each do |language, screenshots_for_language|
98
+ # Find localization to upload screenshots to
99
+ localization = localizations.find do |l|
100
+ l.locale == language
101
+ end
102
+
103
+ unless localization
104
+ UI.error("Couldn't find localization on version for #{language}")
105
+ next
106
+ end
107
+
108
+ indized[localization.locale] ||= {}
109
+
110
+ # Create map to find screenshot set to add screenshot to
111
+ app_screenshot_sets_map = {}
112
+ app_screenshot_sets = localization.get_app_screenshot_sets
113
+ app_screenshot_sets.each do |app_screenshot_set|
114
+ app_screenshot_sets_map[app_screenshot_set.screenshot_display_type] = app_screenshot_set
115
+
116
+ # Set initial screnshot count
117
+ indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= app_screenshot_set.app_screenshots.size
118
+ end
119
+
50
120
  UI.message("Uploading #{screenshots_for_language.length} screenshots for language #{language}")
51
121
  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
122
+ display_type = screenshot.device_type
123
+ set = app_screenshot_sets_map[display_type]
55
124
 
56
- index = indized[screenshot.language][screenshot.formatted_name]
125
+ if display_type.nil?
126
+ UI.error("Error... Screenshot size #{screenshot.screen_size} not valid for App Store Connect")
127
+ next
128
+ end
129
+
130
+ unless set
131
+ set = localization.create_app_screenshot_set(attributes: {
132
+ screenshotDisplayType: display_type
133
+ })
134
+ app_screenshot_sets_map[display_type] = set
135
+
136
+ indized[localization.locale][set.screenshot_display_type] = 0
137
+ end
57
138
 
58
- if index > 10
139
+ index = indized[localization.locale][set.screenshot_display_type]
140
+
141
+ if index >= 10
59
142
  UI.error("Too many screenshots found for device '#{screenshot.formatted_name}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
60
143
  next
61
144
  end
62
145
 
146
+ indized[localization.locale][set.screenshot_display_type] += 1
147
+
148
+ # Also.. what is the messages type even for?
63
149
  UI.message("Uploading '#{screenshot.path}'...")
64
- v.upload_screenshot!(screenshot.path,
65
- index,
66
- screenshot.language,
67
- screenshot.device_type,
68
- screenshot.is_messages?)
150
+ set.upload_screenshot(path: screenshot.path)
69
151
  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
152
  end
78
153
  UI.success("Successfully uploaded screenshots to App Store Connect")
79
154
  end
@@ -72,7 +72,7 @@
72
72
  <p id="footnote">
73
73
  This is a beta version and is not meant to share with the public.
74
74
  </p>
75
- <img src="https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane_medium.png" id="fastlaneLogo" />
75
+ <img src="https://fastlane.tools/assets/img/fastlane_icon.png" id="fastlaneLogo" />
76
76
  </body>
77
77
 
78
78
  <script type='text/javascript'>
@@ -52,7 +52,25 @@ Ensure that the following permissions exist in your **src/debug/AndroidManifest.
52
52
 
53
53
  ##### Configuring your <a href="#ui-tests">UI Tests</a> for Screenshots
54
54
 
55
- 1. Add `@ClassRule public static final LocaleTestRule localeTestRule = new LocaleTestRule();` to your tests class to handle automatic switching of locales
55
+ 1. Add `LocaleTestRule` to your tests class to handle automatic switching of locales.
56
+ If you're using Java use:
57
+ ```java
58
+ @ClassRule
59
+ public static final LocaleTestRule localeTestRule = new LocaleTestRule();
60
+ ```
61
+ If you're using Kotlin use:
62
+ ```kotlin
63
+ @Rule @JvmField
64
+ val localeTestRule = LocaleTestRule()
65
+ ```
66
+ Important is the `@JvmField` annotation. It won't work like that:
67
+ ```kotlin
68
+ companion object {
69
+ @get:ClassRule
70
+ val localeTestRule = LocaleTestRule()
71
+ }
72
+ ```
73
+
56
74
  2. To capture screenshots, add the following to your tests `Screengrab.screenshot("name_of_screenshot_here");` on the appropriate screens
57
75
 
58
76
  # Generating Screenshots with Screengrab
@@ -137,6 +155,7 @@ fastlane action screengrab
137
155
  Check out [Testing UI for a Single App](http://developer.android.com/training/testing/ui-testing/espresso-testing.html) for an introduction to using Espresso for UI testing.
138
156
 
139
157
  ##### Example UI Test Class (Using JUnit4)
158
+ Java:
140
159
  ```java
141
160
  @RunWith(JUnit4.class)
142
161
  public class JUnit4StyleTests {
@@ -157,6 +176,28 @@ public class JUnit4StyleTests {
157
176
  }
158
177
 
159
178
  ```
179
+ Kotlin:
180
+ ```kotlin
181
+ @RunWith(JUnit4.class)
182
+ class JUnit4StyleTests {
183
+ @get:Rule
184
+ var activityRule = ActivityTestRule(MainActivity::class.java)
185
+
186
+ @Rule @JvmField
187
+ val localeTestRule = LocaleTestRule()
188
+
189
+ @Test
190
+ fun testTakeScreenshot() {
191
+ Screengrab.screenshot("before_button_click")
192
+
193
+ onView(withId(R.id.fab)).perform(click())
194
+
195
+ Screengrab.screenshot("after_button_click")
196
+ }
197
+ }
198
+
199
+ ```
200
+
160
201
  There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use use JUnit 3 or 4 and Espresso with the screengrab Java library to capture screenshots during a UI test run.
161
202
 
162
203
  Using JUnit 4 is preferable because of its ability to perform actions before and after the entire test class is run. This means you will change the device's locale far fewer times when compared with JUnit 3 running those commands before and after each test method.
@@ -290,4 +331,3 @@ Sit back and enjoy your new screenshots!
290
331
  Note: while this could also be done by creating a new build variant (i.e. debug, release and creating a new one called screengrab), [Android only allows one build type to be tested](http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing) which defaults to debug. That's why we use product flavors.
291
332
 
292
333
  </details>
293
-
@@ -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 />