Class: Spaceship::Tunes::Application

Inherits:
TunesBase show all
Defined in:
spaceship/lib/spaceship/tunes/application.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#client, #raw_data

Getting information collapse

Modifying collapse

in_app_purchases collapse

Builds collapse

Submit for Review collapse

release collapse

release to all users collapse

General collapse

Testers collapse

Promo codes collapse

Class Method Summary collapse

Methods inherited from TunesBase

client

Methods inherited from Base

attr_accessor, attr_mapping, attributes, #attributes, factory, #initialize, #inspect, mapping_module, method_missing, set_client, #to_s

Constructor Details

This class inherits a constructor from Spaceship::Base

Instance Attribute Details

#app_icon_preview_urlString

Returns The URL to a low resolution app icon of this app (340x340px). Might be nil.

Examples:

"https://is1-ssl.mzstatic.com/image/thumb/Purple7/v4/cd/a3/e2/cda3e2ac-4034-c6af-ee0c-3e4d9a0bafaa/pr_source.png/340x340bb-80.png"
nil


49
50
51
# File 'spaceship/lib/spaceship/tunes/application.rb', line 49

def app_icon_preview_url
  @app_icon_preview_url
end

#apple_idString

Returns The App identifier of this app, provided by App Store Connect.

Examples:

"1013943394"


21
22
23
# File 'spaceship/lib/spaceship/tunes/application.rb', line 21

def apple_id
  @apple_id
end

#bundle_idString

Returns The bundle_id (app identifier) of your app.

Examples:

"com.krausefx.app"


36
37
38
# File 'spaceship/lib/spaceship/tunes/application.rb', line 36

def bundle_id
  @bundle_id
end

#issues_countInteger



42
43
44
# File 'spaceship/lib/spaceship/tunes/application.rb', line 42

def issues_count
  @issues_count
end

#last_modifiedString



39
40
41
# File 'spaceship/lib/spaceship/tunes/application.rb', line 39

def last_modified
  @last_modified
end

#nameString

Returns The name you provided for this app (in the default language).

Examples:

"Spaceship App"


26
27
28
# File 'spaceship/lib/spaceship/tunes/application.rb', line 26

def name
  @name
end

#vendor_idString

Returns The SKU (Stock keeping unit) you provided for this app for internal tracking.

Examples:

"1435592086"


31
32
33
# File 'spaceship/lib/spaceship/tunes/application.rb', line 31

def vendor_id
  @vendor_id
end

#version_setsArray



52
53
54
# File 'spaceship/lib/spaceship/tunes/application.rb', line 52

def version_sets
  @version_sets
end

Class Method Details

.allArray



66
67
68
# File 'spaceship/lib/spaceship/tunes/application.rb', line 66

def all
  client.applications.map { |application| self.factory(application) }
end

.available_bundle_ids(platform: nil) ⇒ Object



107
108
109
# 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) ⇒ Object

Creates a new application on App Store Connect It cannot be changed after you create your first app.



94
95
96
97
98
99
100
101
102
103
104
105
# 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) ⇒ Spaceship::Tunes::Application



72
73
74
75
76
77
# 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

Instance Method Details

#all_build_train_numbers(platform: nil) ⇒ Array

The numbers of all build trains that were uploaded



311
312
313
# 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) ⇒ Object

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



319
320
321
# 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) ⇒ Array



325
326
327
# 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

#analyticsObject



145
146
147
148
149
150
151
152
153
# 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

#availabilityObject

The current availability.



285
286
287
# File 'spaceship/lib/spaceship/tunes/application.rb', line 285

def availability
  client.availability(self.apple_id)
end

#build_trains(platform: nil) ⇒ Hash

TestFlight: A reference to all the build trains



305
306
307
# 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) ⇒ Object

Get all builds that are already processed for all build trains You can either use the return value (array) or pass a block



355
356
357
358
359
# 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!Object

Cancels all ongoing TestFlight beta submission for this application



375
376
377
378
379
380
381
382
383
384
# 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) ⇒ Object



365
366
367
368
369
370
371
372
# 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) ⇒ Object

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



231
232
233
234
235
236
237
238
239
# 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_groupObject



425
426
427
# File 'spaceship/lib/spaceship/tunes/application.rb', line 425

def default_external_group
  TestFlight::Group.default_external_group(app_id: self.apple_id)
end

#detailsObject



209
210
211
212
213
# 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) ⇒ Spaceship::Tunes::AppVersion



130
131
132
# 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_bundleObject

private to module



447
448
449
450
# 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) ⇒ Bool

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



245
246
247
248
249
250
251
252
253
254
255
256
257
258
# 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_purchasesObject

Get base In-App-Purchases object



293
294
295
296
297
# 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) ⇒ Spaceship::Tunes::AppVersion



136
137
138
# 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) ⇒ Spaceship::Tunes::AppVersion



125
126
127
# 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

#platformObject

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



196
197
198
199
200
201
202
203
204
205
206
207
# 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

#platformsObject



172
173
174
175
176
177
178
# 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_tierObject

The current price tier



275
276
277
# File 'spaceship/lib/spaceship/tunes/application.rb', line 275

def price_tier
  client.price_tier(self.apple_id)
end

#promocodesObject



432
433
434
435
436
437
# 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_historyObject



439
440
441
442
443
444
# 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: '') ⇒ Object



166
167
168
169
170
# 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!Object



260
261
262
263
264
265
266
267
# 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!Object



390
391
392
393
394
395
396
# 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!Object



402
403
404
405
406
407
408
# 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) ⇒ Object



162
163
164
# 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_centerHash



158
159
160
# File 'spaceship/lib/spaceship/tunes/application.rb', line 158

def resolution_center
  client.get_resolution_center(apple_id, platform)
end

#setupObject



413
414
415
416
417
418
419
# 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) ⇒ Object



329
330
331
332
333
334
335
336
# 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) ⇒ Object



338
339
340
341
342
343
344
345
# 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) ⇒ Object



347
348
349
350
351
# 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

#typeObject



180
181
182
183
184
185
186
187
188
189
190
# 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) ⇒ Object

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



280
281
282
# 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) ⇒ Object

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



270
271
272
# 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

#urlString



141
142
143
# 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) ⇒ Object



116
117
118
119
120
121
# 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_historyObject



215
216
217
218
219
220
221
222
# 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