class Spaceship::Tunes::Application

Attributes

app_icon_preview_url[RW]

@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
apple_id[RW]

@return (String) The App identifier of this app, provided by iTunes Connect @example

"1013943394"
bundle_id[RW]

@return (String) The bundle_id (app identifier) of your app @example

"com.krausefx.app"
issues_count[RW]

@return (Integer) The number of issues provided by iTunes Connect

last_modified[RW]

@return (String) Last modified

name[RW]

@return (String) The name you provided for this app (in the default language) @example

"Spaceship App"
vendor_id[RW]

@return (String) The Vendor ID provided by iTunes Connect @example

"1435592086"
version_sets[RW]

@return (Array) An array of all versions sets

Public Class Methods

all() click to toggle source

@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
create!(name: nil, primary_language: nil, version: nil, sku: nil, bundle_id: nil, bundle_id_suffix: nil, company_name: nil, platform: nil) click to toggle source

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
factory(attrs) click to toggle source

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
find(identifier, mac: false) click to toggle source

@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!() click to toggle source

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!(email: nil, first_name: nil, last_name: nil) click to toggle source

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
all_build_train_numbers(platform: nil) click to toggle source

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
all_builds_for_train(train: nil, platform: nil) click to toggle source

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
all_invalid_builds(platform: nil) click to toggle source

@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
all_processing_builds(platform: nil) click to toggle source

@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
build_trains(platform: nil) click to toggle source

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
builds(platform: nil) { |build| ... } click to toggle source

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
cancel_all_testflight_submissions!() click to toggle source

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
create_submission() click to toggle source

@!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_version!(version_number, platform: nil) click to toggle source

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
details() click to toggle source
# File lib/spaceship/tunes/application.rb, line 181
def details
  attrs = client.app_details(apple_id)
  attrs[:application] = self
  Tunes::AppDetails.factory(attrs)
end
edit_version(platform: nil) click to toggle source

@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
ensure_not_a_bundle() click to toggle source

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
ensure_version!(version_number, platform: nil) click to toggle source

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
external_testers() click to toggle source

@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
find_external_tester(identifier) click to toggle source

@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
find_internal_tester(identifier) click to toggle source

@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
internal_testers() click to toggle source

@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
latest_version(platform: nil) click to toggle source

@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
live_version(platform: nil) click to toggle source

@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
platform() click to toggle source

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
platforms() click to toggle source
# File lib/spaceship/tunes/application.rb, line 144
def platforms
  platforms = []
  version_sets.each do |version_set|
    platforms << version_set.platform
  end
  platforms
end
price_tier() click to toggle source

The current price tier

# File lib/spaceship/tunes/application.rb, line 238
def price_tier
  client.price_tier(self.apple_id)
end
promocodes() click to toggle source

@!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
promocodes_history() click to toggle source
# 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
ratings() click to toggle source
# 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
release!() click to toggle source

@!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!(identifier) click to toggle source

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
resolution_center() click to toggle source

@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
setup() click to toggle source

@!group General

Calls superclass method
# 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
type() click to toggle source
# 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
update_price_tier!(price_tier) click to toggle source

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
url() click to toggle source

@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
version_set_for_platform(platform) click to toggle source

@!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
versions_history() click to toggle source
# 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