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 (Integer) The number of issues provided by App
Store Connect
@return (String
) Last modified
@return (String
) The name you provided for this app (in the default language) @example
"Spaceship App"
@return (String
) The SKU (Stock keeping unit) you provided for this app for internal tracking @example
"1435592086"
@return (Array
) An array of all versions sets
Private Class Methods
@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
# File spaceship/lib/spaceship/tunes/application.rb, line 107 def available_bundle_ids(platform: nil) client.get_available_bundle_ids(platform: platform) end
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
@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
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
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
@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
# 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
The current availability.
# File spaceship/lib/spaceship/tunes/application.rb, line 285 def availability client.availability(self.apple_id) end
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
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
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
@!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 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
@!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
# 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
@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
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
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
@!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
@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
@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
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
# 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
The current price tier
# File spaceship/lib/spaceship/tunes/application.rb, line 275 def price_tier client.price_tier(self.apple_id) end
@!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
# 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
# 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
# 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
@!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
@!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
# 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
@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
@!group General
# 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
# 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
# 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
# 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
# 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
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
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
@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
@!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
# 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