Class: Deliver::App

Inherits:
Object
  • Object
show all
Defined in:
lib/deliver/app.rb

Defined Under Namespace

Modules: AppStatus

Updating the App Metadata collapse

Instance Attribute Summary collapse

Interacting with iTunesConnect collapse

Updating the App Metadata collapse

Destructive/Constructive methods collapse

Instance Method Summary collapse

Constructor Details

#initialize(apple_id: nil, app_identifier: nil) ⇒ App

Returns a new instance of App.

Parameters:

  • apple_id (defaults to: nil)

    The Apple ID of the app you want to modify or update. This ID has usually 9 digits

  • app_identifier (defaults to: nil)

    If you don’t pass this, it will automatically be fetched from the Apple API which means it takes longer. If you can pass the app_identifier (e.g. com.facebook.Facebook) do it



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/deliver/app.rb', line 34

def initialize(apple_id: nil, app_identifier: nil)
  self.apple_id = (apple_id || '').to_s.gsub('id', '').to_i
  self.app_identifier = app_identifier
  
  if apple_id and not app_identifier
    # Fetch the app identifier based on the given Apple ID
    self.app_identifier = Deliver::ItunesSearchApi.fetch_bundle_identifier(apple_id)
  elsif app_identifier and not apple_id
    # Fetch the Apple ID based on the given app identifier
    begin
      self.apple_id = Deliver::ItunesSearchApi.fetch_by_identifier(app_identifier)['trackId']
    rescue
      unless Helper.is_test?
        Helper.log.info "Could not find Apple ID based on the app identifier in the US App Store. Maybe the app is not yet in the store?".yellow
        Helper.log.info "You can provde the Apple ID of your app using `apple_id '974739333'` in your `Deliverfile`".green

        while ((self.apple_id || '').to_s.length == 0) || ((self.apple_id || 0).to_i == 0)
          self.apple_id = ask("\nApple ID of your app (e.g. 284882215): ")
        end
      else
        raise "Please pass a valid Apple ID using 'apple_id'".red
      end
    end
  end
end

Instance Attribute Details

#app_identifierObject

Returns the value of attribute app_identifier.



3
4
5
# File 'lib/deliver/app.rb', line 3

def app_identifier
  @app_identifier
end

#apple_idObject

Returns the value of attribute apple_id.



3
4
5
# File 'lib/deliver/app.rb', line 3

def apple_id
  @apple_id
end

#metadataDeliver::AppMetadata

Access to update the metadata of this app

The first time accessing this, will take some time, since it’s downloading the latest version from iTC.

Don’t forget to call #upload_metadata! once you are finished

Returns:



112
113
114
# File 'lib/deliver/app.rb', line 112

def 
  @metadata
end

Instance Method Details

#create_new_version!(version_number) ⇒ Object

This method creates a new version of your app using the iTunesConnect frontend. This will happen directly after calling this method. the new version that should be created

Parameters:

  • version_number (String)

    the version number as string for



138
139
140
# File 'lib/deliver/app.rb', line 138

def create_new_version!(version_number)
  itc.create_new_version!(self, version_number)
end

#get_app_statusObject

This method fetches the current app status from iTunesConnect. This method may take some time to execute, since it uses frontend scripting under the hood.

Returns:

  • the current App Status defined at AppStatus, like “Waiting For Review”



76
77
78
# File 'lib/deliver/app.rb', line 76

def get_app_status
  itc.get_app_status(self)
end

#get_live_versionObject

This method fetches the app version of the latest published version This method may take some time to execute, since it uses frontend scripting under the hood.

Returns:

  • the currently active app version, which in production



83
84
85
# File 'lib/deliver/app.rb', line 83

def get_live_version
  itc.get_live_version(self)
end

#get_metadata_directoryObject

Returns the path to the directy in which the itmsp files will be downloaded.

Returns:

  • the path to the directy in which the itmsp files will be downloaded



99
100
101
102
103
# File 'lib/deliver/app.rb', line 99

def 
  return @metadata_dir if @metadata_dir 
  return "./spec/fixtures/packages/" if Helper.is_test?
  return "./"
end

#itcObject

The iTC handler which is used to interact with the iTunesConnect backend



69
70
71
# File 'lib/deliver/app.rb', line 69

def itc
  @itc ||= Deliver::ItunesConnect.new
end

#metadata_downloaded?Boolean

Was the app metadata already downloaded?

Returns:

  • (Boolean)


117
118
119
# File 'lib/deliver/app.rb', line 117

def 
  @metadata != nil
end

#set_metadata_directory(dir) ⇒ Object

Use this method to change the default download location for the metadata packages



93
94
95
96
# File 'lib/deliver/app.rb', line 93

def (dir)
  raise "Can not change metadata directory after accessing metadata of an app" if @metadata
  @metadata_dir = dir
end

#to_sObject



60
61
62
# File 'lib/deliver/app.rb', line 60

def to_s
  "#{apple_id} - #{app_identifier}"
end

#upload_app_icon!(path) ⇒ Object

Uploads a new app icon to iTunesConnect. This uses a headless browser which makes this command quite slow.

Parameters:

  • a (path)

    path to the new app icon. The image must have the resolution of 1024x1024



125
126
127
# File 'lib/deliver/app.rb', line 125

def upload_app_icon!(path)
  itc.upload_app_icon!(self, path)
end

#upload_metadata!bool

This method has to be called, after modifying the values of .metadata. It will take care of uploading all changes to Apple. This method might take a few minutes to run

Returns:

  • (bool)

    true on success

Raises:



148
149
150
151
152
# File 'lib/deliver/app.rb', line 148

def upload_metadata!
  raise "You first have to modify the metadata using app.metadata.setDescription" unless @metadata
  
  self..upload!
end