class Deliver::AppScreenshot
AppScreenshot
represents one screenshots for one specific locale and device type.
Attributes
language[RW]
path[RW]
screen_size[RW]
@return [Deliver::ScreenSize] the screen size (device type)
specified at {Deliver::ScreenSize}
Public Class Methods
calculate_screen_size(path)
click to toggle source
# File lib/deliver/app_screenshot.rb, line 192 def self.calculate_screen_size(path) size = FastImage.size(path) UI.user_error!("Could not find or parse file at path '#{path}'") if size.nil? or size.count == 0 # Walk up two directories and test if we need to handle a platform that doesn't support landscape path_component = Pathname.new(path).each_filename.to_a[-3] if path_component.eql? "appleTV" skip_landscape = true end # iMessage screenshots have same resolution as app screenshots so we need to distinguish them devices = path_component.eql?("iMessage") ? self.device_messages : self.devices devices.each do |device_type, array| array.each do |resolution| if skip_landscape if size[0] == resolution[0] and size[1] == resolution[1] # portrait return device_type end else if (size[0] == resolution[0] and size[1] == resolution[1]) or # portrait (size[1] == resolution[0] and size[0] == resolution[1]) # landscape return device_type end end end end UI.user_error!("Unsupported screen size #{size} for path '#{path}'") end
device_messages()
click to toggle source
# File lib/deliver/app_screenshot.rb, line 113 def self.device_messages return { ScreenSize::IOS_55_MESSAGES => [ [1080, 1920], [1242, 2208] ], ScreenSize::IOS_47_MESSAGES => [ [750, 1334] ], ScreenSize::IOS_40_MESSAGES => [ [640, 1136], [640, 1096], [1136, 600] # landscape status bar is smaller ], ScreenSize::IOS_IPAD_MESSAGES => [ [1024, 748], [1024, 768], [2048, 1496], [2048, 1536], [768, 1004], [768, 1024], [1536, 2008], [1536, 2048] ], ScreenSize::IOS_IPAD_PRO_MESSAGES => [ [2732, 2048], [2048, 2732] ] } end
devices()
click to toggle source
# File lib/deliver/app_screenshot.rb, line 144 def self.devices return { ScreenSize::IOS_55 => [ [1080, 1920], [1242, 2208] ], ScreenSize::IOS_47 => [ [750, 1334] ], ScreenSize::IOS_40 => [ [640, 1136], [640, 1096], [1136, 600] # landscape status bar is smaller ], ScreenSize::IOS_35 => [ [640, 960], [640, 920], [960, 600] # landscape status bar is smaller ], ScreenSize::IOS_IPAD => [ [1024, 748], [1024, 768], [2048, 1496], [2048, 1536], [768, 1004], [768, 1024], [1536, 2008], [1536, 2048] ], ScreenSize::IOS_IPAD_PRO => [ [2732, 2048], [2048, 2732] ], ScreenSize::MAC => [ [1280, 800], [1440, 900], [2880, 1800], [2560, 1600] ], ScreenSize::IOS_APPLE_WATCH => [ [312, 390] ], ScreenSize::APPLE_TV => [ [1920, 1080] ] } end
new(path, language, screen_size = nil)
click to toggle source
@param path (String) path to the screenshot file @param path (String) Language of this screenshot (e.g. English) @param screen_size
(Deliver::AppScreenshot::ScreenSize
) the screen size, which
will automatically be calculated when you don't set it.
# File lib/deliver/app_screenshot.rb, line 50 def initialize(path, language, screen_size = nil) self.path = path self.language = language screen_size ||= self.class.calculate_screen_size(path) self.screen_size = screen_size UI.error("Looks like the screenshot given (#{path}) does not match the requirements of #{screen_size}") unless self.is_valid? end
Public Instance Methods
device_type()
click to toggle source
The iTC API requires a different notation for the device
# File lib/deliver/app_screenshot.rb, line 61 def device_type matching = { ScreenSize::IOS_35 => "iphone35", ScreenSize::IOS_40 => "iphone4", ScreenSize::IOS_47 => "iphone6", ScreenSize::IOS_55 => "iphone6Plus", ScreenSize::IOS_IPAD => "ipad", ScreenSize::IOS_IPAD_PRO => "ipadPro", ScreenSize::IOS_40_MESSAGES => "iphone4", ScreenSize::IOS_47_MESSAGES => "iphone6", ScreenSize::IOS_55_MESSAGES => "iphone6Plus", ScreenSize::IOS_IPAD_MESSAGES => "ipad", ScreenSize::IOS_IPAD_PRO_MESSAGES => "ipadPro", ScreenSize::MAC => "desktop", ScreenSize::IOS_APPLE_WATCH => "watch", ScreenSize::APPLE_TV => "appleTV" } return matching[self.screen_size] end
formatted_name()
click to toggle source
Nice name
# File lib/deliver/app_screenshot.rb, line 82 def formatted_name matching = { ScreenSize::IOS_35 => "iPhone 4", ScreenSize::IOS_40 => "iPhone 5", ScreenSize::IOS_47 => "iPhone 6", ScreenSize::IOS_55 => "iPhone 6 Plus", ScreenSize::IOS_IPAD => "iPad", ScreenSize::IOS_IPAD_PRO => "iPad Pro", ScreenSize::IOS_40_MESSAGES => "iPhone 5 (iMessage)", ScreenSize::IOS_47_MESSAGES => "iPhone 6 (iMessage)", ScreenSize::IOS_55_MESSAGES => "iPhone 6 Plus (iMessage)", ScreenSize::IOS_IPAD_MESSAGES => "iPad (iMessage)", ScreenSize::IOS_IPAD_PRO_MESSAGES => "iPad Pro (iMessage)", ScreenSize::MAC => "Mac", ScreenSize::IOS_APPLE_WATCH => "Watch", ScreenSize::APPLE_TV => "Apple TV" } return matching[self.screen_size] end
is_messages?()
click to toggle source
# File lib/deliver/app_screenshot.rb, line 109 def is_messages? return [ScreenSize::IOS_40_MESSAGES, ScreenSize::IOS_47_MESSAGES, ScreenSize::IOS_55_MESSAGES, ScreenSize::IOS_IPAD_MESSAGES, ScreenSize::IOS_IPAD_PRO_MESSAGES].include?(self.screen_size) end
is_valid?()
click to toggle source
Validates the given screenshots (size and format)
# File lib/deliver/app_screenshot.rb, line 103 def is_valid? return false unless ["png", "PNG", "jpg", "JPG", "jpeg", "JPEG"].include?(self.path.split(".").last) return self.screen_size == self.class.calculate_screen_size(self.path) end