fastlane 2.148.1 → 2.150.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +84 -84
- data/deliver/lib/deliver.rb +0 -1
- data/deliver/lib/deliver/app_screenshot.rb +28 -27
- data/deliver/lib/deliver/options.rb +6 -11
- data/deliver/lib/deliver/runner.rb +7 -21
- data/deliver/lib/deliver/setup.rb +5 -30
- data/deliver/lib/deliver/submit_for_review.rb +155 -90
- data/deliver/lib/deliver/upload_metadata.rb +355 -143
- data/deliver/lib/deliver/upload_price_tier.rb +22 -8
- data/deliver/lib/deliver/upload_screenshots.rb +112 -37
- data/fastlane/lib/assets/s3_html_template.erb +1 -1
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +42 -2
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +77 -96
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +3 -2
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +7 -1
- data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
- data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +23 -20
- data/fastlane/lib/fastlane/actions/slack.rb +2 -2
- data/fastlane/lib/fastlane/actions/slather.rb +8 -1
- data/fastlane/lib/fastlane/actions/spm.rb +7 -0
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +2 -33
- data/fastlane/lib/fastlane/lane.rb +3 -3
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +22 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/ControlCommand.swift +1 -0
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +79 -22
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +3 -9
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +2 -5
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/RubyCommand.swift +29 -6
- data/fastlane/swift/RubyCommandable.swift +1 -0
- data/fastlane/swift/Runner.swift +85 -13
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +2 -2
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
- data/fastlane/swift/SocketClient.swift +76 -45
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +1 -0
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -3
- data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +7 -0
- data/frameit/lib/frameit/device_types.rb +100 -100
- data/gym/lib/gym/options.rb +1 -1
- data/match/lib/match/nuke.rb +21 -16
- data/match/lib/match/storage/git_storage.rb +4 -0
- data/match/lib/match/storage/google_cloud_storage.rb +4 -0
- data/match/lib/match/storage/interface.rb +4 -0
- data/match/lib/match/storage/s3_storage.rb +4 -0
- data/produce/lib/produce/itunes_connect.rb +32 -21
- data/produce/lib/produce/options.rb +3 -3
- data/scan/lib/scan/options.rb +1 -1
- data/scan/lib/scan/test_result_parser.rb +9 -2
- data/sigh/lib/assets/resign.sh +7 -7
- data/snapshot/lib/assets/SnapshotHelper.swift +5 -5
- data/snapshot/lib/assets/SnapshotHelperXcode8.swift +3 -3
- data/snapshot/lib/snapshot/options.rb +11 -1
- data/snapshot/lib/snapshot/reports_generator.rb +8 -1
- data/snapshot/lib/snapshot/test_command_generator.rb +8 -3
- data/spaceship/lib/spaceship/.DS_Store +0 -0
- data/spaceship/lib/spaceship/client.rb +13 -4
- data/spaceship/lib/spaceship/connect_api.rb +25 -2
- data/spaceship/lib/spaceship/connect_api/client.rb +97 -31
- data/spaceship/lib/spaceship/connect_api/file_uploader.rb +66 -0
- data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +113 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +115 -3
- data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +66 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +38 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +77 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +71 -0
- data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
- data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +81 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +97 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +101 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +182 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +86 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +36 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +40 -0
- data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +10 -3
- data/spaceship/lib/spaceship/connect_api/tunes/client.rb +33 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +831 -0
- data/spaceship/lib/spaceship/errors.rb +3 -0
- data/spaceship/lib/spaceship/spaceauth_runner.rb +2 -2
- data/supply/lib/supply/client.rb +19 -0
- data/supply/lib/supply/reader.rb +16 -0
- metadata +51 -42
- 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
|
-
|
11
|
-
options[:price_tier] = options[:price_tier].to_s
|
10
|
+
price_tier = options[:price_tier].to_s
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
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.
|
20
|
-
UI.success("Successfully updated the pricing from #{old_price} to #{
|
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
|
-
|
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
|
-
|
17
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
#
|
35
|
-
|
73
|
+
# Finding languages to enable
|
74
|
+
languages = screenshots_per_language.keys
|
75
|
+
locales_to_enable = languages - localizations.map(&:locale)
|
36
76
|
|
37
|
-
|
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
|
42
|
-
Helper.show_loading_indicator("Activating #{lng_text} #{
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
53
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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://
|
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
|
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
|
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::
|
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
|
-
|
506
|
-
|
507
|
-
- `
|
508
|
-
- `
|
509
|
-
- `
|
510
|
-
- `
|
511
|
-
- `
|
512
|
-
- `
|
513
|
-
- `
|
514
|
-
- `
|
515
|
-
- `
|
516
|
-
- `
|
517
|
-
- `
|
518
|
-
- `
|
519
|
-
- `
|
520
|
-
- `
|
521
|
-
- `
|
522
|
-
- `
|
523
|
-
- `
|
524
|
-
- `
|
525
|
-
- `
|
526
|
-
- `
|
527
|
-
- `
|
528
|
-
- `
|
529
|
-
- `
|
530
|
-
- `
|
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
|
-
|
555
|
-
|
556
|
-
- `
|
557
|
-
- `
|
558
|
-
- `
|
559
|
-
- `
|
560
|
-
- `
|
561
|
-
- `
|
562
|
-
- `
|
563
|
-
- `
|
564
|
-
- `
|
565
|
-
- `
|
566
|
-
- `
|
567
|
-
- `
|
568
|
-
- `
|
569
|
-
- `
|
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
|
-
- `
|
588
|
-
- `
|
589
|
-
- `
|
590
|
-
- `
|
591
|
-
- `
|
592
|
-
- `
|
593
|
-
- `
|
594
|
-
- `
|
595
|
-
- `
|
596
|
-
- `
|
597
|
-
- `
|
598
|
-
- `
|
599
|
-
- `
|
600
|
-
- `
|
601
|
-
- `
|
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
|
-
- `
|
616
|
-
- `
|
617
|
-
- `
|
618
|
-
- `
|
619
|
-
- `
|
620
|
-
- `
|
621
|
-
- `
|
622
|
-
- `
|
623
|
-
- `
|
624
|
-
- `
|
625
|
-
- `
|
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
|
-
- `
|
632
|
-
- `
|
612
|
+
- `unrestrictedWebAccess`
|
613
|
+
- `gamblingAndContests`
|
633
614
|
</details>
|
634
615
|
|
635
616
|
<br />
|