lib/spaceship/tunes/app_version.rb in spaceship-0.37.0 vs lib/spaceship/tunes/app_version.rb in spaceship-0.38.0
- old
+ new
@@ -166,18 +166,17 @@
end
# @param application (Spaceship::Tunes::Application) The app this version is for
# @param app_id (String) The unique Apple ID of this app
# @param is_live (Boolean)
- def find(application, app_id, is_live)
+ def find(application, app_id, is_live, platform: nil)
# we only support applications
- platform = Spaceship::Tunes::AppVersionCommon.find_platform(application.raw_data['versionSets'])
- raise "We do not support BUNDLE types right now" if platform['type'] == 'BUNDLE'
+ raise "We do not support BUNDLE types right now" if application.type == 'BUNDLE'
# too bad the "id" field is empty, it forces us to make more requests to the server
# these could also be cached
- attrs = client.app_version(app_id, is_live)
+ attrs = client.app_version(app_id, is_live, platform: platform)
return nil unless attrs
attrs[:application] = application
attrs[:is_live] = is_live
@@ -378,20 +377,21 @@
# Uploads or removes a screenshot
# @param icon_path (String): The path to the screenshot. Use nil to remove it
# @param sort_order (Fixnum): The sort_order, from 1 to 5
# @param language (String): The language for this screenshot
# @param device (string): The device for this screenshot
- def upload_screenshot!(screenshot_path, sort_order, language, device)
+ # @param is_messages (Bool): True if the screenshot is for iMessage
+ def upload_screenshot!(screenshot_path, sort_order, language, device, is_messages)
raise "sort_order must be higher than 0" unless sort_order > 0
raise "sort_order must not be > 5" if sort_order > 5
# this will also check both language and device parameters
- device_lang_screenshots = screenshots_data_for_language_and_device(language, device)["value"]
+ device_lang_screenshots = screenshots_data_for_language_and_device(language, device, is_messages)["value"]
existing_sort_orders = device_lang_screenshots.map { |s| s["value"]["sortOrder"] }
if screenshot_path # adding / replacing
upload_file = UploadFile.from_path screenshot_path
- screenshot_data = client.upload_screenshot(self, upload_file, device)
+ screenshot_data = client.upload_screenshot(self, upload_file, device, is_messages)
# Since October 2016 we also need to pass the size, height, width and checksum
# otherwise iTunes Connect validation will fail at a later point
new_screenshot = {
"value" => {
@@ -409,11 +409,12 @@
# We only set this, if we actually successfully uploaded a new screenshot
# for this device / language combination
# if this value is not set, iTC will fallback to another device type for screenshots
language_details = raw_data_details.find { |d| d["language"] == language }["displayFamilies"]["value"]
device_language_details = language_details.find { |display_family| display_family['name'] == device }
- device_language_details["scaled"]["value"] = false
+ scaled_key = is_messages ? "messagesScaled" : "scaled"
+ device_language_details[scaled_key]["value"] = false
if existing_sort_orders.include?(sort_order) # replace
device_lang_screenshots[existing_sort_orders.index(sort_order)] = new_screenshot
else # add
device_lang_screenshots << new_screenshot
@@ -445,11 +446,11 @@
# @param device (String): The device for this screenshot
# @param timestamp (String): The optional timestamp of the screenshot to grab
def upload_trailer!(trailer_path, language, device, timestamp = "05.00", preview_image_path = nil)
raise "No app trailer supported for iphone35" if device == 'iphone35'
- device_lang_trailer = trailer_data_for_language_and_device(language, device)
+ device_lang_trailer = trailer_data_for_language_and_device(language, device, is_messages)
if trailer_path # adding / replacing trailer / replacing preview
raise "Invalid timestamp #{timestamp}" if (timestamp =~ /^[0-9][0-9].[0-9][0-9]$/).nil?
if preview_image_path
check_preview_screenshot_resolution(preview_image_path, device)
@@ -552,12 +553,13 @@
transit_app_file = raw_data["transitAppFile"]["value"]
@transit_app_file = nil
@transit_app_file = Tunes::TransitAppFile.factory(transit_app_file) if transit_app_file
end
- def screenshots_data_for_language_and_device(language, device)
- container_data_for_language_and_device("screenshots", language, device)
+ def screenshots_data_for_language_and_device(language, device, is_messages)
+ data_field = is_messages ? "messagesScreenshots" : "screenshots"
+ container_data_for_language_and_device(data_field, language, device)
end
def trailer_data_for_language_and_device(language, device)
container_data_for_language_and_device("appTrailers", language, device)
end
@@ -580,11 +582,11 @@
def setup_screenshots
@screenshots = {}
raw_data_details.each do |row|
# Now that's one language right here
- @screenshots[row['language']] = setup_screenshots_for(row)
+ @screenshots[row['language']] = setup_screenshots_for(row) + setup_messages_screenshots_for(row)
end
end
# generates the nested data structure to represent screenshots
def setup_screenshots_for(row)
@@ -624,10 +626,38 @@
# },
# "isEditable": true,
# "isRequired": false,
# "errorKeys": null
# }],
+ # "messagesScaled": {
+ # "value": false,
+ # "isEditable": false,
+ # "isRequired": false,
+ # "errorKeys": null
+ # },
+ # "messagesScreenshots": {
+ # "value": [{
+ # "value": {
+ # "assetToken": "Purple62/v4/08/0a/04/080a0430-c2cc-2577-f491-9e0a09c58ffe/mzl.pbcpzqyg.jpg",
+ # "sortOrder": 1,
+ # "type": null,
+ # "originalFileName": "ios-414-1.jpg"
+ # },
+ # "isEditable": true,
+ # "isRequired": false,
+ # "errorKeys": null
+ # }, {
+ # "value": {
+ # "assetToken": "Purple71/v4/de/81/aa/de81aa10-64f6-332e-c974-9ee46adab675/mzl.cshkjvwl.jpg",
+ # "sortOrder": 2,
+ # "type": null,
+ # "originalFileName": "ios-414-2.jpg"
+ # },
+ # "isEditable": true,
+ # "isRequired": false,
+ # "errorKeys": null
+ # }],
# "isEditable": true,
# "isRequired": false,
# "errorKeys": null
# },
# "trailer": {
@@ -637,9 +667,34 @@
# "errorKeys": null
# }
# }
display_family.fetch("screenshots", {}).fetch("value", []).each do |screenshot|
+ screenshot_data = screenshot["value"]
+ data = {
+ device_type: display_family['name'],
+ language: row["language"]
+ }.merge(screenshot_data)
+ result << Tunes::AppScreenshot.factory(data)
+ end
+ end
+
+ return result
+ end
+
+ # generates the nested data structure to represent screenshots
+ def setup_messages_screenshots_for(row)
+ return [] if row.nil? || row["displayFamilies"].nil?
+
+ display_families = row.fetch("displayFamilies", {}).fetch("value", nil)
+ return [] unless display_families
+
+ result = []
+
+ display_families.each do |display_family|
+ display_family_screenshots = display_family.fetch("messagesScreenshots", {})
+ next unless display_family_screenshots
+ display_family_screenshots.fetch("value", []).each do |screenshot|
screenshot_data = screenshot["value"]
data = {
device_type: display_family['name'],
language: row["language"]
}.merge(screenshot_data)