Class: RunLoop::Device

Inherits:
Object
  • Object
show all
Defined in:
lib/run_loop/device.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, version, udid, state = nil) ⇒ Device

Create a new device.

Parameters:

  • name (String)

    The name of the device. For sims this should be ‘iPhone 5s’ and for physical devices it will be the name the user gave to the device.

  • version (String, RunLoop::Version)

    The iOS version that is running on the device. Can be a string or a Version instance.

  • udid (String)

    The device identifier.

  • state (String) (defaults to: nil)

    (nil) This a simulator only value. It refers to the Booted/Shutdown/Creating state of the simulator. For pre-Xcode 6 simulators, this value should be nil.



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/run_loop/device.rb', line 23

def initialize(name, version, udid, state=nil)
  @name = name
  @udid = udid
  @state = state

  if version.is_a? String
    @version = RunLoop::Version.new version
  else
    @version = version
  end
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



4
5
6
# File 'lib/run_loop/device.rb', line 4

def name
  @name
end

#simulator_accessibility_plist_pathObject (readonly)

Returns the value of attribute simulator_accessibility_plist_path.



9
10
11
# File 'lib/run_loop/device.rb', line 9

def simulator_accessibility_plist_path
  @simulator_accessibility_plist_path
end

#simulator_preferences_plist_pathObject (readonly)

Returns the value of attribute simulator_preferences_plist_path.



10
11
12
# File 'lib/run_loop/device.rb', line 10

def simulator_preferences_plist_path
  @simulator_preferences_plist_path
end

#simulator_root_dirObject (readonly)

Returns the value of attribute simulator_root_dir.



8
9
10
# File 'lib/run_loop/device.rb', line 8

def simulator_root_dir
  @simulator_root_dir
end

#stateObject (readonly)

Returns the value of attribute state.



7
8
9
# File 'lib/run_loop/device.rb', line 7

def state
  @state
end

#udidObject (readonly)

Returns the value of attribute udid.



6
7
8
# File 'lib/run_loop/device.rb', line 6

def udid
  @udid
end

#versionObject (readonly)

Returns the value of attribute version.



5
6
7
# File 'lib/run_loop/device.rb', line 5

def version
  @version
end

Instance Method Details

#instruction_setString

Note:

Finding the instruction set of a device requires a third-party tool like ideviceinfo. Example: ‘$ ideviceinfo -u 89b59 < snip > ab7ba –key ’CPUArchitecture’ => arm64`

Return the instruction set for this device.

Simulator The simulator instruction set will be i386 or x86_64 depending on the the (marketing) name of the device.

Returns:

  • (String)

    An instruction set.

Raises:

  • (RuntimeError)

    Raises an error if this device is a physical device.



81
82
83
84
85
86
87
88
89
90
91
# File 'lib/run_loop/device.rb', line 81

def instruction_set
  if self.simulator?
    if ['iPhone 4s', 'iPhone 5', 'iPad 2', 'iPad Retina'].include?(self.name)
      'i386'
    else
      'x86_64'
    end
  else
    raise 'Finding the instruction set of a device requires a third-party tool like ideviceinfo'
  end
end

#instruments_identifier(xcode_tools = RunLoop::XCTools.new) ⇒ String

Returns and instruments-ready device identifier that is a suitable value for DEVICE_TARGET environment variable.

Returns:

  • (String)

    An instruments-ready device identifier.

Raises:

  • (RuntimeError)

    If trying to obtain a instruments-ready identifier for a simulator when Xcode < 6.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/run_loop/device.rb', line 41

def instruments_identifier(xcode_tools=RunLoop::XCTools.new)
  if physical_device?
    self.udid
  else
    unless xcode_tools.xcode_version_gte_6?
      raise "Expected Xcode >= 6, but found version #{xcode_tools.version} - cannot create an identifier"
    end
    if self.version == RunLoop::Version.new('7.0.3')
      version_part = self.version.to_s
    else
      version_part = "#{self.version.major}.#{self.version.minor}"
    end
    "#{self.name} (#{version_part} Simulator)"
  end
end

#physical_device?Boolean

Is this a physical device?

Returns:

  • (Boolean)

    Returns true if this is a device.



59
60
61
# File 'lib/run_loop/device.rb', line 59

def physical_device?
  not self.udid[/[a-f0-9]{40}/, 0].nil?
end

#simulator?Boolean

Is this a simulator?

Returns:

  • (Boolean)

    Returns true if this is a simulator.



65
66
67
# File 'lib/run_loop/device.rb', line 65

def simulator?
  not self.physical_device?
end