class Spaceship::Portal::Device

Represents a device from the Apple Developer Portal

Attributes

device_type[RW]

@return (String) Device type @example

'watch'  - Apple Watch
'ipad'   - iPad
'iphone' - iPhone
'ipod'   - iPod
'tvOS'   - Apple TV
id[RW]

@return (String) The ID given from the developer portal. You'll probably not need it. @example

"XJXGVS46MW"
model[RW]

@return (String) Model (can be nil) @example

'iPhone 6', 'iPhone 4 GSM'
name[RW]

@return (String) The name of the device, must be 50 characters or less. @example

"Felix Krause's iPhone 6"
platform[RW]

@return (String) The platform of the device. This is probably always “ios” @example

"ios"
status[RW]

@return (String) Status of the device. “c” for enabled devices, “r” for disabled devices. @example

"c"
udid[RW]

@return (String) The UDID of the device @example

"4c24a7ee5caaa4847f49aaab2d87483053f53b65"

Private Class Methods

all(mac: false, include_disabled: false) click to toggle source

@param mac [Bool] Fetches Mac devices if true @param include_disabled [Bool] Whether to include disable devices. false by default. @return (Array) Returns all devices registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 60
def all(mac: false, include_disabled: false)
  client.devices(mac: mac, include_disabled: include_disabled).map { |device| self.factory(device) }
end
all_apple_tvs() click to toggle source

@return (Array) Returns all Apple TVs registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 65
def all_apple_tvs
  client.devices_by_class('tvOS').map { |device| self.factory(device) }
end
all_for_profile_type(profile_type) click to toggle source

@return (Array) Returns all devices matching the provided profile_type

# File spaceship/lib/spaceship/portal/device.rb, line 100
def all_for_profile_type(profile_type)
  if profile_type.include?("tvOS")
    Spaceship::Portal::Device.all_apple_tvs
  elsif profile_type.include?("Mac")
    Spaceship::Portal::Device.all_macs
  else
    Spaceship::Portal::Device.all_ios_profile_devices
  end
end
all_ios_profile_devices() click to toggle source

@return (Array) Returns all devices that can be used for iOS profiles (all devices except TVs)

# File spaceship/lib/spaceship/portal/device.rb, line 95
def all_ios_profile_devices
  all.reject { |device| device.device_type == "tvOS" }
end
all_ipads() click to toggle source

@return (Array) Returns all iPads registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 75
def all_ipads
  client.devices_by_class('ipad').map { |device| self.factory(device) }
end
all_iphones() click to toggle source

@return (Array) Returns all iPhones registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 80
def all_iphones
  client.devices_by_class('iphone').map { |device| self.factory(device) }
end
all_ipod_touches() click to toggle source

@return (Array) Returns all iPods registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 85
def all_ipod_touches
  client.devices_by_class('ipod').map { |device| self.factory(device) }
end
all_macs() click to toggle source

@return (Array) Returns all Macs registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 90
def all_macs
  all(mac: true)
end
all_watches() click to toggle source

@return (Array) Returns all Watches registered for this account

# File spaceship/lib/spaceship/portal/device.rb, line 70
def all_watches
  client.devices_by_class('watch').map { |device| self.factory(device) }
end
create!(name: nil, udid: nil, mac: false) click to toggle source

Register a new device to this account @param name (String) (required): The name of the new device @param udid (String) (required): The UDID of the new device @param mac (Bool) (optional): Pass Mac if device is a Mac @example

Spaceship.device.create!(name: "Felix Krause's iPhone 6", udid: "4c24a7ee5caaa4847f49aaab2d87483053f53b65")

@return (Device): The newly created device

# File spaceship/lib/spaceship/portal/device.rb, line 145
def create!(name: nil, udid: nil, mac: false)
  # Check whether the user has passed in a UDID and a name
  unless udid && name
    raise "You cannot create a device without a device_id (UDID) and name"
  end

  raise "Device name must be 50 characters or less. \"#{name}\" has a #{name.length} character length." if name.length > 50

  # Find the device by UDID, raise an exception if it already exists
  existing = self.find_by_udid(udid, mac: mac)
  return existing if existing

  # It is valid to have the same name for multiple devices
  device = client.create_device!(name, udid, mac: mac)

  # Update self with the new device
  self.new(device)
end
find(device_id, mac: false, include_disabled: false) click to toggle source

@param mac [Bool] Searches for Macs if true @param include_disabled [Bool] Whether to include disable devices. false by default. @return (Device) Find a device based on the ID of the device. Attention:

This is *not* the UDID. nil if no device was found.
# File spaceship/lib/spaceship/portal/device.rb, line 114
def find(device_id, mac: false, include_disabled: false)
  all(mac: mac, include_disabled: include_disabled).find do |device|
    device.id == device_id
  end
end
find_by_name(device_name, mac: false, include_disabled: false) click to toggle source

@param mac [Bool] Searches for Macs if true @param include_disabled [Bool] Whether to include disable devices. false by default. @return (Device) Find a device based on its name. nil if no device was found.

# File spaceship/lib/spaceship/portal/device.rb, line 132
def find_by_name(device_name, mac: false, include_disabled: false)
  all(mac: mac, include_disabled: include_disabled).find do |device|
    device.name == device_name
  end
end
find_by_udid(device_udid, mac: false, include_disabled: false) click to toggle source

@param mac [Bool] Searches for Macs if true @param include_disabled [Bool] Whether to include disable devices. false by default. @return (Device) Find a device based on the UDID of the device. nil if no device was found.

# File spaceship/lib/spaceship/portal/device.rb, line 123
def find_by_udid(device_udid, mac: false, include_disabled: false)
  all(mac: mac, include_disabled: include_disabled).find do |device|
    device.udid.casecmp(device_udid) == 0
  end
end

Private Instance Methods

disable!() click to toggle source

Disable current device. This will invalidate all provisioning profiles that use this device.

# File spaceship/lib/spaceship/portal/device.rb, line 182
def disable!
  if enabled?
    client.disable_device!(self.id, self.udid, mac: self.platform == 'mac')
    # disable request doesn't return device json, so we assume that the new status is "r" if response succeeded
    self.status = "r"
  end
end
disabled?() click to toggle source
# File spaceship/lib/spaceship/portal/device.rb, line 169
def disabled?
  return self.status == "r"
end
enable!() click to toggle source

Enable current device.

# File spaceship/lib/spaceship/portal/device.rb, line 174
def enable!
  unless enabled?
    attr = client.enable_device!(self.id, self.udid, mac: self.platform == 'mac')
    initialize(attr)
  end
end
enabled?() click to toggle source
# File spaceship/lib/spaceship/portal/device.rb, line 165
def enabled?
  return self.status == "c"
end