class Spaceship::Tunes::Application
Attributes
@return (String
) The URL to a low resolution app icon of this app (340x340px). Might be nil @example
"https://is1-ssl.mzstatic.com/image/thumb/Purple7/v4/cd/a3/e2/cda3e2ac-4034-c6af-ee0c-3e4d9a0bafaa/pr_source.png/340x340bb-80.png"
@example
nil
@return (String
) The App identifier of this app, provided by iTunes Connect @example
"1013943394"
@return (Integer) The number of issues provided by iTunes Connect
@return (String
) Last modified
@return (String
) The name you provided for this app (in the default language) @example
"Spaceship App"
@return (String
) The Vendor ID provided by iTunes Connect @example
"1435592086"
@return (Array) An array of all versions sets
Public Class Methods
@return (Array) Returns all apps available for this account
# File lib/spaceship/tunes/application.rb, line 58 def all client.applications.map { |application| self.factory(application) } end
Creates a new application on iTunes Connect @param name (String
): The name of your app as it will appear on the App Store.
This can't be longer than 255 characters.
@param primary_language (String
): If localized app information isn't available in an
App Store territory, the information from your primary language will be used instead.
@param version (String
): The version number is shown on the App Store and should
match the one you used in Xcode.
@param sku (String
): A unique ID for your app that is not visible on the App Store. @param bundle_id
(String
): The bundle ID must match the one you used in Xcode. It
can't be changed after you submit your first build.
@param company_name (String
): The company name or developer name to display on the App Store for your apps. It cannot be changed after you create your first app. @param platform (String
): Platform one of (ios,osx)
should it be an ios or an osx app
# File lib/spaceship/tunes/application.rb, line 86 def create!(name: nil, primary_language: nil, version: nil, sku: nil, bundle_id: nil, bundle_id_suffix: nil, company_name: nil, platform: nil) client.create_application!(name: name, primary_language: primary_language, version: version, sku: sku, bundle_id: bundle_id, bundle_id_suffix: bundle_id_suffix, company_name: company_name, platform: platform) end
Create a new object based on a hash. This is used to create a new object based on the server response.
# File lib/spaceship/tunes/application.rb, line 53 def factory(attrs) return self.new(attrs) end
@return (Spaceship::Tunes::Application
) Returns the application matching the parameter
as either the App ID or the bundle identifier
# File lib/spaceship/tunes/application.rb, line 64 def find(identifier, mac: false) all.find do |app| (app.apple_id == identifier.to_s || app.bundle_id == identifier) && app.version_sets.any? { |v| (mac ? ["osx"] : ["ios", "appletvos"]).include?(v.platform) } end end
Public Instance Methods
Add all testers (internal and external) to the current app list
# File lib/spaceship/tunes/application.rb, line 360 def add_all_testers! Tunes::Tester.external.add_all_to_app!(self.apple_id) Tunes::Tester.internal.add_all_to_app!(self.apple_id) end
Add external tester to the current app list, if it doesn't exist will be created @param email (String
) (required): The email of the tester @param first_name (String
) (optional): The first name of the tester (Ignored if user already exist) @param last_name (String
) (optional): The last name of the tester (Ignored if user already exist)
# File lib/spaceship/tunes/application.rb, line 393 def add_external_tester!(email: nil, first_name: nil, last_name: nil) raise "Tester is already on #{self.name} betatesters" if find_external_tester(email) tester = Tunes::Tester.external.find(email) || Tunes::Tester.external.create!(email: email, first_name: first_name, last_name: last_name) tester.add_to_app!(self.apple_id) end
The numbers of all build trains that were uploaded @return [Array] An array of train version numbers
# File lib/spaceship/tunes/application.rb, line 254 def all_build_train_numbers(platform: nil) client.all_build_trains(app_id: self.apple_id, platform: platform).fetch("trains").collect do |current| current["versionString"] end end
Receive the build details for a specific build useful if the app is not listed in the TestFlight build list which might happen if you don't use TestFlight This is used to receive dSYM files from Apple
# File lib/spaceship/tunes/application.rb, line 264 def all_builds_for_train(train: nil, platform: nil) client.all_builds_for_train(app_id: self.apple_id, train: train, platform: platform).fetch("items", []).collect do |attrs| attrs[:apple_id] = self.apple_id Tunes::Build.factory(attrs) end end
@return [Array]A list of binaries which are in the invalid state
# File lib/spaceship/tunes/application.rb, line 272 def all_invalid_builds(platform: nil) builds = [] self.build_trains(platform: platform).values.each do |train| builds.concat(train.invalid_builds) end return builds end
@return [Array] This will return an array of all processing builds
this include pre-processing or standard processing
# File lib/spaceship/tunes/application.rb, line 284 def all_processing_builds(platform: nil) builds = [] self.build_trains(platform: platform).each do |version_number, train| builds.concat(train.processing_builds) end return builds end
TestFlight: A reference to all the build trains @return [Hash] a hash, the version number and platform being the key
# File lib/spaceship/tunes/application.rb, line 248 def build_trains(platform: nil) Tunes::BuildTrain.all(self, self.apple_id, platform: platform) end
Get all builds that are already processed for all build trains You can either use the return value (array) or pass a block
# File lib/spaceship/tunes/application.rb, line 296 def builds(platform: nil) all_builds = [] self.build_trains(platform: platform).each do |version_number, train| train.builds.each do |build| yield(build) if block_given? all_builds << build unless block_given? end end all_builds end
Cancels all ongoing TestFlight beta submission for this application
# File lib/spaceship/tunes/application.rb, line 321 def cancel_all_testflight_submissions! self.builds do |build| begin build.cancel_beta_review! rescue # We really don't care about any errors here end end true end
@!group Submit for Review
# File lib/spaceship/tunes/application.rb, line 311 def create_submission version = self.latest_version if version.nil? raise "Could not find a valid version to submit for review" end Spaceship::AppSubmission.create(self, version) end
Create a new version of your app Since we have stored the outdated raw_data, we need to refresh this object otherwise `edit_version` will return nil
# File lib/spaceship/tunes/application.rb, line 203 def create_version!(version_number, platform: nil) if edit_version(platform: platform) raise "Cannot create a new version for this app as there already is an `edit_version` available" end client.create_version!(apple_id, version_number, platform.nil? ? 'ios' : platform) # Future: implemented -reload method end
# File lib/spaceship/tunes/application.rb, line 181 def details attrs = client.app_details(apple_id) attrs[:application] = self Tunes::AppDetails.factory(attrs) end
@return (Spaceship::AppVersion) Receive the version that can fully be edited
# File lib/spaceship/tunes/application.rb, line 116 def edit_version(platform: nil) Spaceship::AppVersion.find(self, self.apple_id, false, platform: platform) end
private to module
# File lib/spaceship/tunes/application.rb, line 431 def ensure_not_a_bundle # we only support applications raise "We do not support BUNDLE types right now" if self.type == 'BUNDLE' end
Will make sure the current edit_version
matches the given version number This will either create a new version or change the version number from an existing version @return (Bool) Was something changed?
# File lib/spaceship/tunes/application.rb, line 217 def ensure_version!(version_number, platform: nil) if (e = edit_version(platform: platform)) if e.version.to_s != version_number.to_s # Update an existing version e.version = version_number e.save! return true end return false else create_version!(version_number, platform: platform) return true end end
@return (Array) Returns all external testers available for this app
# File lib/spaceship/tunes/application.rb, line 366 def external_testers Tunes::Tester.external.all_by_app(self.apple_id) end
@return (Spaceship::Tunes::Tester.external) Returns the external tester matching the parameter
as either the Tester id or email
@param identifier (String
) (required): Value used to filter the tester
# File lib/spaceship/tunes/application.rb, line 378 def find_external_tester(identifier) Tunes::Tester.external.find_by_app(self.apple_id, identifier) end
@return (Spaceship::Tunes::Tester.internal) Returns the internal tester matching the parameter
as either the Tester id or email
@param identifier (String
) (required): Value used to filter the tester
# File lib/spaceship/tunes/application.rb, line 385 def find_internal_tester(identifier) Tunes::Tester.internal.find_by_app(self.apple_id, identifier) end
@return (Array) Returns all internal testers available for this app
# File lib/spaceship/tunes/application.rb, line 371 def internal_testers Tunes::Tester.internal.all_by_app(self.apple_id) end
@return (Spaceship::AppVersion) This will return the `edit_version` if available
and fallback to the `live_version`. Use this to just access the latest data
# File lib/spaceship/tunes/application.rb, line 122 def latest_version(platform: nil) edit_version(platform: platform) || live_version(platform: platform) end
@return (Spaceship::AppVersion) Receive the version that is currently live on the
App Store. You can't modify all values there, so be careful.
# File lib/spaceship/tunes/application.rb, line 111 def live_version(platform: nil) Spaceship::AppVersion.find(self, self.apple_id, true, platform: platform) end
kept for backward compatibility tries to guess the platform of the currently submitted apps note that as ITC now supports multiple app types, this might break if your app supports more than one
# File lib/spaceship/tunes/application.rb, line 168 def platform if self.version_sets.nil? raise 'The application has no version sets and Spaceship does not know what to do here.' end if self.version_sets.length == 1 version_sets[0].platform elsif self.platforms == %w(ios appletvos) 'ios' end Spaceship::Tunes::AppVersionCommon.find_platform(raw_data['versionSets'])['platformString'] end
# File lib/spaceship/tunes/application.rb, line 144 def platforms platforms = [] version_sets.each do |version_set| platforms << version_set.platform end platforms end
The current price tier
# File lib/spaceship/tunes/application.rb, line 238 def price_tier client.price_tier(self.apple_id) end
@!group Promo codes
# File lib/spaceship/tunes/application.rb, line 416 def promocodes data = client.app_promocodes(app_id: self.apple_id) data.map do |attrs| Tunes::AppVersionPromocodes.factory(attrs) end end
# File lib/spaceship/tunes/application.rb, line 423 def promocodes_history data = client.app_promocodes_history(app_id: self.apple_id) data.map do |attrs| Tunes::AppVersionGeneratedPromocodes.factory(attrs) end end
# File lib/spaceship/tunes/application.rb, line 138 def ratings attrs = client.get_rating_summary(apple_id, platform) attrs[:application] = self Tunes::AppRatings.factory(attrs) end
@!group release
# File lib/spaceship/tunes/application.rb, line 336 def release! version = self.edit_version if version.nil? raise "Could not find a valid version to release" end version.release! end
Remove external tester from the current app list that matching the parameter
as either the Tester id or email
@param identifier (String
) (required): Value used to filter the tester
# File lib/spaceship/tunes/application.rb, line 405 def remove_external_tester!(identifier) tester = find_external_tester(identifier) raise "Tester is not on #{self.name} betatesters" unless tester tester.remove_from_app!(self.apple_id) end
@return (Hash) Contains the reason for rejection.
if everything is alright, the result will be `{"sectionErrorKeys"=>[], "sectionInfoKeys"=>[], "sectionWarningKeys"=>[], "replyConstraints"=>{"minLength"=>1, "maxLength"=>4000}, "appNotes"=>{"threads"=>[]}, "betaNotes"=>{"threads"=>[]}, "appMessages"=>{"threads"=>[]}}`
# File lib/spaceship/tunes/application.rb, line 134 def resolution_center client.get_resolution_center(apple_id, platform) end
@!group General
# File lib/spaceship/tunes/application.rb, line 347 def setup super @version_sets = (self.raw_data['versionSets'] || []).map do |attrs| attrs[:application] = self Tunes::VersionSet.factory(attrs) end end
# File lib/spaceship/tunes/application.rb, line 152 def type if self.version_sets.nil? raise 'The application has no version sets and Spaceship does not know what to do here.' end if self.version_sets.length == 1 version_sets[0].platform end platform = Spaceship::Tunes::AppVersionCommon.find_platform(raw_data['versionSets']) platform['type'] end
set the price tier. This method doesn't require `save` to be called
# File lib/spaceship/tunes/application.rb, line 233 def update_price_tier!(price_tier) client.update_price_tier!(self.apple_id, price_tier) end
@return (String
) An URL to this specific resource. You can enter this URL into your browser
# File lib/spaceship/tunes/application.rb, line 127 def url "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app/#{self.apple_id}" end
@!group Getting information
# File lib/spaceship/tunes/application.rb, line 102 def version_set_for_platform(platform) version_sets.each do |version_set| return version_set if version_set.platform == platform end nil end
# File lib/spaceship/tunes/application.rb, line 187 def versions_history ensure_not_a_bundle versions = client.versions_history(apple_id, platform) versions.map do |attrs| attrs[:application] = self Tunes::AppVersionHistory.factory(attrs) end end