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



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



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

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

#check_for_devicesObject



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

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



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

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



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

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

#devices_connected?Boolean



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

def devices_connected?
  devices.any?
end

#get_device_udid(opts_hash) ⇒ Object



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

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



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

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



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

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

#is_paired?Boolean



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

def is_paired?
  Flick::Checker.system_dependency "idevicepair"
  unless %x(idevicepair -u #{udid} validate).split[0] == "SUCCESS:"
    puts "\nUDID: #{udid} - Is not paired with your machine!".red
    puts "Run: idevicepair -u <udid> pair\nIf not working still, see: https://github.com/isonic1/flick/issues/10".red
    abort
  end
end

#log(name) ⇒ Object



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

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



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

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

#recordable?Boolean



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

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



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

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

#uninstall(package) ⇒ Object



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

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