Class: Flick::Ios

Inherits:
Object
  • Object
show all
Defined in:
lib/flick/ios.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Ios

Returns a new instance of Ios.



5
6
7
8
9
10
11
12
13
14
# File 'lib/flick/ios.rb', line 5

def initialize options
  self.udid = options.fetch(:udid, get_device_udid(options))
  self.flick_dir = "#{Dir.home}/.flick/#{udid}"
  self.name = remove_bad_characters(options.fetch(:name, self.udid))
  self.todir = options.fetch(:todir, self.flick_dir)
  self.outdir = options.fetch(:outdir, Dir.pwd)
  self.specs = options.fetch(:specs, false)
  create_flick_dirs
  is_paired?
end

Instance Attribute Details

#flick_dirObject

Returns the value of attribute flick_dir.



3
4
5
# File 'lib/flick/ios.rb', line 3

def flick_dir
  @flick_dir
end

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/flick/ios.rb', line 3

def name
  @name
end

#outdirObject

Returns the value of attribute outdir.



3
4
5
# File 'lib/flick/ios.rb', line 3

def outdir
  @outdir
end

#specsObject

Returns the value of attribute specs.



3
4
5
# File 'lib/flick/ios.rb', line 3

def specs
  @specs
end

#todirObject

Returns the value of attribute todir.



3
4
5
# File 'lib/flick/ios.rb', line 3

def todir
  @todir
end

#udidObject

Returns the value of attribute udid.



3
4
5
# File 'lib/flick/ios.rb', line 3

def udid
  @udid
end

Instance Method Details

#app_installed?(package) ⇒ Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/flick/ios.rb', line 107

def app_installed? package
  packages.include? "#{package}"
end

#check_for_devicesObject



44
45
46
47
48
49
# File 'lib/flick/ios.rb', line 44

def check_for_devices
  unless devices_connected?
    puts "\nNo iPhone or iPad Devices Connected!!!\nMake sure at least one REAL device is connected!\n".red
    abort
  end
end

#clear_filesObject



76
77
78
# File 'lib/flick/ios.rb', line 76

def clear_files
  Flick::System.clean_system_dir flick_dir, udid
end

#create_flick_dirsObject



20
21
22
23
# File 'lib/flick/ios.rb', line 20

def create_flick_dirs
  Flick::System.setup_system_dir "#{Dir.home}/.flick"
  Flick::System.setup_system_dir flick_dir
end

#devicesObject



35
36
37
38
# File 'lib/flick/ios.rb', line 35

def devices
  Flick::Checker.system_dependency "idevice_id"
  (`idevice_id -l`).split.uniq.map { |d| d }
end

#devices_connected?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/flick/ios.rb', line 40

def devices_connected?
  devices.any?
end

#get_device_udid(opts_hash) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'lib/flick/ios.rb', line 51

def get_device_udid opts_hash
  check_for_devices
  return unless opts_hash[:udid].nil?
  if devices.size == 1
    devices[0]
  else
    puts "\nMultiple iOS devices '#{devices}' found.\nSpecify a single UDID. e.g. -u #{devices.sample}\n".red
    abort unless specs
  end
end

#infoObject



62
63
64
65
66
67
68
69
70
# File 'lib/flick/ios.rb', line 62

def info
  specs = { os: "ProductVersion", name: "DeviceName", arc: "CPUArchitecture", type: "DeviceClass", sdk: "ProductType" }
  hash = { udid: udid }
  specs.each do |key, spec|
    value = (`ideviceinfo -u #{udid} | grep #{spec} | awk '{$1=""; print $0}'`).strip
    hash.merge!({key=> "#{value}"})
  end
  hash
end

#install(app_path) ⇒ Object



92
93
94
95
# File 'lib/flick/ios.rb', line 92

def install app_path
  Flick::Checker.system_dependency "ideviceinstaller"
  %x(ideviceinstaller -u #{udid} -i #{app_path})
end

#is_paired?Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
31
32
33
# File 'lib/flick/ios.rb', line 25

def is_paired?
  Flick::Checker.system_dependency "idevicename"
  if Open3.capture3("idevicename -u #{udid}")[1].split[0] == "ERROR:"
    puts "\nUDID: #{udid} - Is not paired with your machine!\nOr make sure the device is not locked!\n".red
    puts "Run: idevicepair -u <udid> pair\nIf not working still, see: https://github.com/isonic1/flick/issues/10\n".red
    puts "Read more information about libmobiledevice libraries, see: http://libimobiledevice.org".green
    abort
  end
end

#log(name) ⇒ Object



85
86
87
88
89
90
# File 'lib/flick/ios.rb', line 85

def log name
  Flick::Checker.system_dependency "idevicesyslog"
  system("idevicesyslog -u #{udid} > #{outdir}/#{name}.log")
  #file = File.open("#{outdir}/#{name}.log", 'a') { |f| f.puts "\n<<<<<<<<<<<<<<<<<<<<<<<<< FLICK LOG START >>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n" }
  #file.close
end

#packagesObject



111
112
113
# File 'lib/flick/ios.rb', line 111

def packages
  %x(ideviceinstaller -u #{udid} -l -o list_user).split("\n")[1..100000].map { |p| p.match(/(.*) -/)[1] }
end

#recordable?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/flick/ios.rb', line 72

def recordable?
  false
end

#remove_bad_characters(string) ⇒ Object



16
17
18
# File 'lib/flick/ios.rb', line 16

def remove_bad_characters string
  string.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_')
end

#screenshot(name) ⇒ Object



80
81
82
83
# File 'lib/flick/ios.rb', line 80

def screenshot name
  Flick::Checker.system_dependency "idevicescreenshot"
  %x(idevicescreenshot -u #{udid} #{todir}/#{name}.png)
end

#uninstall(package) ⇒ Object



97
98
99
100
101
102
103
104
105
# File 'lib/flick/ios.rb', line 97

def uninstall package
  Flick::Checker.system_dependency "ideviceinstaller"
  if app_installed? package
    %x(ideviceinstaller -u #{udid} -U #{package})
  else
    puts packages
    puts "\n#{package} was not found on device #{udid}! Please choose one from above. e.g. #{packages.sample}\n".red
  end
end