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 App Store 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 App Store 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 SKU (Stock keeping unit) you provided for this app for internal tracking @example

"1435592086"
version_sets[RW]

@return (Array) An array of all versions sets

Private Class Methods

all() click to toggle source

@return (Array) Returns all apps available for this account

# File spaceship/lib/spaceship/tunes/application.rb, line 66
def all
  client.applications.map { |application| self.factory(application) }
end
available_bundle_ids(platform: nil) click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 107
def available_bundle_ids(platform: nil)
  client.get_available_bundle_ids(platform: platform)
end
create!(name: nil, primary_language: nil, version: nil, sku: nil, bundle_id: nil, bundle_id_suffix: nil, company_name: nil, platform: nil, platforms: nil, itunes_connect_users: nil) click to toggle source

Creates a new application on App Store 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 *DEPRECATED: Use `ensure_version!` method instead*

(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 spaceship/lib/spaceship/tunes/application.rb, line 94
def create!(name: nil, primary_language: nil, version: nil, sku: nil, bundle_id: nil, bundle_id_suffix: nil, company_name: nil, platform: nil, platforms: nil, itunes_connect_users: nil)
  puts("The `version` parameter is deprecated. Use `ensure_version!` method instead") if version
  client.create_application!(name: name,
                 primary_language: primary_language,
                              sku: sku,
                        bundle_id: bundle_id,
                        bundle_id_suffix: bundle_id_suffix,
                        company_name: company_name,
                            platform: platform,
                            platforms: platforms,
                            itunes_connect_users: itunes_connect_users)
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 spaceship/lib/spaceship/tunes/application.rb, line 72
def find(identifier, mac: false)
  all.find do |app|
    ((app.apple_id && app.apple_id.casecmp(identifier.to_s) == 0) || (app.bundle_id && app.bundle_id.casecmp(identifier.to_s) == 0)) &&
      app.version_sets.any? { |v| (mac ? ["osx"] : ["ios", "appletvos"]).include?(v.platform) }
  end
end

Private Instance Methods

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 spaceship/lib/spaceship/tunes/application.rb, line 311
def all_build_train_numbers(platform: nil)
  return self.build_trains(platform: platform || self.platform).versions
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 spaceship/lib/spaceship/tunes/application.rb, line 319
def all_builds_for_train(train: nil, platform: nil)
  return TestFlight::Build.builds_for_train(app_id: self.apple_id, platform: platform || self.platform, train_version: train)
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 spaceship/lib/spaceship/tunes/application.rb, line 325
def all_processing_builds(platform: nil)
  return TestFlight::Build.all_processing_builds(app_id: self.apple_id, platform: platform || self.platform)
end
analytics() click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 145
def analytics
  if self.live_version.nil?
    raise 'Analytics are only available for live apps.'
  end

  attrs = {}
  attrs[:apple_id] = self.apple_id
  Spaceship::Tunes::AppAnalytics.factory(attrs)
end
availability() click to toggle source

The current availability.

# File spaceship/lib/spaceship/tunes/application.rb, line 285
def availability
  client.availability(self.apple_id)
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 spaceship/lib/spaceship/tunes/application.rb, line 305
def build_trains(platform: nil)
  TestFlight::BuildTrains.all(app_id: self.apple_id, platform: platform || self.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 spaceship/lib/spaceship/tunes/application.rb, line 355
def builds(platform: nil)
  all = TestFlight::Build.all(app_id: self.apple_id, platform: platform || self.platform)
  return all unless block_given?
  all.each { |build| yield(build) }
end
cancel_all_testflight_submissions!() click to toggle source

Cancels all ongoing TestFlight beta submission for this application

# File spaceship/lib/spaceship/tunes/application.rb, line 375
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(platform: nil) click to toggle source

@!group Submit for Review

# File spaceship/lib/spaceship/tunes/application.rb, line 365
def create_submission(platform: nil)
  version = self.latest_version(platform: platform)
  if version.nil?
    raise "Could not find a valid version to submit for review"
  end

  Spaceship::Tunes::AppSubmission.create(self, version, platform: platform)
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 spaceship/lib/spaceship/tunes/application.rb, line 231
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
default_external_group() click to toggle source

@!group Testers

# File spaceship/lib/spaceship/tunes/application.rb, line 425
def default_external_group
  TestFlight::Group.default_external_group(app_id: self.apple_id)
end
details() click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 209
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::Tunes::AppVersion) Receive the version that can fully be edited

# File spaceship/lib/spaceship/tunes/application.rb, line 130
def edit_version(platform: nil)
  Spaceship::Tunes::AppVersion.find(self, self.apple_id, false, platform: platform)
end
ensure_not_a_bundle() click to toggle source

private to module

# File spaceship/lib/spaceship/tunes/application.rb, line 447
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 spaceship/lib/spaceship/tunes/application.rb, line 245
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
in_app_purchases() click to toggle source

@!group in_app_purchases

Get base In-App-Purchases object

# File spaceship/lib/spaceship/tunes/application.rb, line 293
def in_app_purchases
  attrs = {}
  attrs[:application] = self
  Tunes::IAP.factory(attrs)
end
latest_version(platform: nil) click to toggle source

@return (Spaceship::Tunes::AppVersion) This will return the `edit_version` if available

and fallback to the `live_version`. Use this to just access the latest data
# File spaceship/lib/spaceship/tunes/application.rb, line 136
def latest_version(platform: nil)
  edit_version(platform: platform) || live_version(platform: platform)
end
live_version(platform: nil) click to toggle source

@return (Spaceship::Tunes::AppVersion) Receive the version that is currently live on the

App Store. You can't modify all values there, so be careful.
# File spaceship/lib/spaceship/tunes/application.rb, line 125
def live_version(platform: nil)
  Spaceship::Tunes::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 spaceship/lib/spaceship/tunes/application.rb, line 196
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 spaceship/lib/spaceship/tunes/application.rb, line 172
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 spaceship/lib/spaceship/tunes/application.rb, line 275
def price_tier
  client.price_tier(self.apple_id)
end
promocodes() click to toggle source

@!group Promo codes

# File spaceship/lib/spaceship/tunes/application.rb, line 432
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 spaceship/lib/spaceship/tunes/application.rb, line 439
def promocodes_history
  data = client.app_promocodes_history(app_id: self.apple_id)
  data.map do |attrs|
    Tunes::AppVersionGeneratedPromocodes.factory(attrs)
  end
end
ratings(version_id: '', storefront: '') click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 166
def ratings(version_id: '', storefront: '')
  attrs = client.get_ratings(apple_id, platform, version_id, storefront)
  attrs[:application] = self
  Tunes::AppRatings.new(attrs)
end
reject_version_if_possible!() click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 260
def reject_version_if_possible!
  can_reject = edit_version.can_reject_version
  if can_reject
    client.reject!(apple_id, edit_version.version_id)
  end

  return can_reject
end
release!() click to toggle source

@!group release

# File spaceship/lib/spaceship/tunes/application.rb, line 390
def release!
  version = self.edit_version
  if version.nil?
    raise "Could not find a valid version to release"
  end
  version.release!
end
release_to_all_users!() click to toggle source

@!group release to all users

# File spaceship/lib/spaceship/tunes/application.rb, line 402
def release_to_all_users!
  version = self.live_version
  if version.nil?
    raise "Could not find a valid version to release"
  end
  version.release_to_all_users!
end
reply_resolution_center(app_id, platform, thread_id, version_id, version_number, from, message_body) click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 162
def reply_resolution_center(app_id, platform, thread_id, version_id, version_number, from, message_body)
  client.post_resolution_center(app_id, platform, thread_id, version_id, version_number, from, message_body)
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 spaceship/lib/spaceship/tunes/application.rb, line 158
def resolution_center
  client.get_resolution_center(apple_id, platform)
end
setup() click to toggle source

@!group General

Calls superclass method
# File spaceship/lib/spaceship/tunes/application.rb, line 413
def setup
  super
  @version_sets = (self.raw_data['versionSets'] || []).map do |attrs|
    attrs[:application] = self
    Tunes::VersionSet.factory(attrs)
  end
end
tunes_all_build_trains(app_id: nil, platform: nil) click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 329
def tunes_all_build_trains(app_id: nil, platform: nil)
  resp = client.all_build_trains(app_id: apple_id, platform: platform)
  trains = resp["trains"] or []
  trains.map do |attrs|
    attrs['application'] = self
    Tunes::BuildTrain.factory(attrs)
  end
end
tunes_all_builds_for_train(train: nil, platform: nil) click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 338
def tunes_all_builds_for_train(train: nil, platform: nil)
  resp = client.all_builds_for_train(app_id: apple_id, train: train, platform: platform)
  items = resp["items"] or []
  items.map do |attrs|
    attrs['apple_id'] = apple_id
    Tunes::Build.factory(attrs)
  end
end
tunes_build_details(train: nil, build_number: nil, platform: nil) click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 347
def tunes_build_details(train: nil, build_number: nil, platform: nil)
  resp = client.build_details(app_id: apple_id, train: train, build_number: build_number, platform: platform)
  resp['apple_id'] = apple_id
  Tunes::BuildDetails.factory(resp)
end
type() click to toggle source
# File spaceship/lib/spaceship/tunes/application.rb, line 180
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_availability!(availability) click to toggle source

set the availability. This method doesn't require `save` to be called

# File spaceship/lib/spaceship/tunes/application.rb, line 280
def update_availability!(availability)
  client.update_availability!(self.apple_id, availability)
end
update_price_tier!(price_tier) click to toggle source

set the price tier. This method doesn't require `save` to be called

# File spaceship/lib/spaceship/tunes/application.rb, line 270
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 spaceship/lib/spaceship/tunes/application.rb, line 141
def url
  "https://appstoreconnect.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 spaceship/lib/spaceship/tunes/application.rb, line 116
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 spaceship/lib/spaceship/tunes/application.rb, line 215
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