flick 0.3.2 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -1
- data/bin/flick +14 -1
- data/flick.gemspec +2 -1
- data/lib/flick.rb +2 -1
- data/lib/flick/android.rb +31 -2
- data/lib/flick/info.rb +5 -3
- data/lib/flick/ios.rb +14 -2
- data/lib/flick/simple_daemon.rb +1 -0
- data/lib/flick/system.rb +4 -14
- data/lib/flick/version.rb +1 -1
- data/lib/flick/video.rb +26 -29
- data/lib/flick/vitals.rb +28 -0
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60c1f971ea573c80a3728c5b6473637edc635510
|
4
|
+
data.tar.gz: 38a0fc9d7c3b996a44d3721262ee020a40745c27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c001315844ae3126cbb92d6d786522d6d07d7335021dd842ac915fefae80425f8f082e502fa532d0c4103ad4125e5b1dc2b26a5702a0753cc8a6b10afaaccbd
|
7
|
+
data.tar.gz: 4cd4aa8fe85f50196d59190f13f75e4ff9e9179b45ce90450427e479ca132403e823538c75cdda4c295589a8b7668ea8509485a57a98c065bb9386448a2f3bdc
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# FLICK
|
2
|
-
A CLI to capture screenshots, video, logs, and device
|
2
|
+
A CLI to capture screenshots, video, logs, device info and device vitals(memory, cpu) for Android (Devices & Emulators) and iOS (Devices).
|
3
3
|
|
4
4
|
<img src="https://www.dropbox.com/s/o49et3fhncu3l4v/animacii_09.gif?raw=1" width="600">
|
5
5
|
|
@@ -111,6 +111,9 @@ Usage:
|
|
111
111
|
$ flick manager -a install -p (ios or android) -f ~/myApp/my-awesome-app.apk or .app
|
112
112
|
$ flick maanger -a uninstall -p (ios or android) -n com.package.name
|
113
113
|
|
114
|
+
`$ flick vitals --help`
|
115
|
+
$ flick vitals -n com.package.name
|
116
|
+
|
114
117
|
##Demo
|
115
118
|
<img src="https://www.dropbox.com/s/9be37gc1c2dlxa6/flick-demo.gif?raw=1" width="600">
|
116
119
|
|
data/bin/flick
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require_relative '../lib/flick'
|
3
3
|
require 'commander/import'
|
4
4
|
|
5
|
-
program :version, '0.3.
|
5
|
+
program :version, '0.3.5'
|
6
6
|
program :description, 'A CLI to capture screenshots, video, logs, and device info for Android (Devices & Emulators) and iOS (Devices).'
|
7
7
|
|
8
8
|
command :video do |c|
|
@@ -100,4 +100,17 @@ command :manager do |c|
|
|
100
100
|
|
101
101
|
Manager.new(options.default).run
|
102
102
|
end
|
103
|
+
|
104
|
+
command :vitals do |c|
|
105
|
+
c.syntax = 'flick vitals [options]'
|
106
|
+
c.summary = 'Android Only! Get apps and device vitals - App Memory Used, App CPU %. System Stats: (User, System, IQW, IRQ)'
|
107
|
+
c.description = c.summary
|
108
|
+
c.example 'description', "flick vitals -p android -n com.viber"
|
109
|
+
c.option '-p', '--platform PLATFORM', String, 'Set platform: android or ios'
|
110
|
+
c.option '-n', '--name NAME', String, 'Set the package name.'
|
111
|
+
c.action do |args, options|
|
112
|
+
|
113
|
+
Vitals.new(options.default).vitals
|
114
|
+
end
|
115
|
+
end
|
103
116
|
end
|
data/flick.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.executables = ["flick"]
|
26
26
|
spec.require_paths = ["lib"]
|
27
27
|
|
28
|
-
spec.add_development_dependency "bundler", "~> 1.
|
28
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
29
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
30
30
|
spec.add_development_dependency "rspec", '~> 3.4', '>= 3.4.0'
|
31
31
|
spec.add_dependency "parallel", '~> 1.6', '>= 1.6.2'
|
@@ -37,4 +37,5 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_dependency "os", "~> 0.9.6"
|
38
38
|
spec.add_dependency "sys-proctable", '~> 1.1', '>= 1.1.1'
|
39
39
|
spec.add_dependency "apktools", '~> 0.7.1', '>= 0.7.1'
|
40
|
+
spec.add_dependency "ffi"
|
40
41
|
end
|
data/lib/flick.rb
CHANGED
@@ -18,4 +18,5 @@ require_relative "./flick/screenshot"
|
|
18
18
|
require_relative "./flick/simple_daemon"
|
19
19
|
require_relative "./flick/system"
|
20
20
|
require_relative "./flick/video"
|
21
|
-
require_relative "./flick/manager"
|
21
|
+
require_relative "./flick/manager"
|
22
|
+
require_relative "./flick/vitals"
|
data/lib/flick/android.rb
CHANGED
@@ -30,7 +30,7 @@ module Flick
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def clear_files
|
33
|
-
Flick::System.clean_system_dir flick_dir
|
33
|
+
Flick::System.clean_system_dir flick_dir, udid
|
34
34
|
%x(adb -s #{udid} shell rm '#{dir_name}/*')
|
35
35
|
end
|
36
36
|
|
@@ -68,7 +68,35 @@ module Flick
|
|
68
68
|
end
|
69
69
|
hash
|
70
70
|
end
|
71
|
+
|
72
|
+
def system_stats
|
73
|
+
x = %x(adb shell top -n 1 -d 1 | grep System).split(",")
|
74
|
+
user = x.find { |x| x.include? "User" }.match(/User (.*)%/)[1].to_i
|
75
|
+
sys = x.find { |x| x.include? "System" }.match(/System (.*)%/)[1].to_i
|
76
|
+
iow = x.find { |x| x.include? "IOW" }.match(/IOW (.*)%/)[1].to_i
|
77
|
+
irq = x.find { |x| x.include? "IRQ" }.match(/IRQ (.*)%/)[1].to_i
|
78
|
+
{ user: user, system: sys, iow: iow, irq: irq }
|
79
|
+
end
|
80
|
+
|
81
|
+
def memory package
|
82
|
+
(%x(adb shell dumpsys meminfo | grep #{package} | awk '{print $1}').strip.split.last.to_i * 0.001).round(2)
|
83
|
+
end
|
71
84
|
|
85
|
+
def cpu package
|
86
|
+
%x(adb shell top -n 1 -d 1 | grep #{package} | awk '{print $3}').strip.chomp("%").to_i
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_vitals package
|
90
|
+
if app_installed? package
|
91
|
+
stats = { app_stats: { memory_mb: memory(package), cpu_per: cpu(package) }, system_stats: system_stats }
|
92
|
+
puts stats
|
93
|
+
return stats
|
94
|
+
else
|
95
|
+
puts packages
|
96
|
+
puts "\n#{package} was not found on device #{udid}! Please choose one from above. e.g. #{packages.sample}\n".red
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
72
100
|
def install app_path
|
73
101
|
%x(adb -s #{udid} install -r #{app_path})
|
74
102
|
end
|
@@ -113,6 +141,7 @@ module Flick
|
|
113
141
|
end
|
114
142
|
|
115
143
|
def log name
|
144
|
+
%x(adb -s #{udid} logcat -c)
|
116
145
|
%x(adb -s #{udid} logcat -v long > #{outdir}/#{name}.log)
|
117
146
|
end
|
118
147
|
|
@@ -153,7 +182,7 @@ module Flick
|
|
153
182
|
return if files.empty?
|
154
183
|
Parallel.map(files, in_threads: 10) do |file|
|
155
184
|
pull_file file, flick_dir
|
156
|
-
Flick::System.wait_for_file 10, "#{flick_dir}/#{file.split("/").last}"
|
185
|
+
#Flick::System.wait_for_file 10, "#{flick_dir}/#{file.split("/").last}"
|
157
186
|
end
|
158
187
|
end
|
159
188
|
end
|
data/lib/flick/info.rb
CHANGED
@@ -14,7 +14,7 @@ class Info
|
|
14
14
|
end
|
15
15
|
self.save = options[:save].to_b
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def info
|
19
19
|
ap driver.info
|
20
20
|
if save
|
@@ -22,12 +22,14 @@ class Info
|
|
22
22
|
save_device_data driver.info
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
private
|
27
27
|
|
28
28
|
def save_device_data info
|
29
|
+
file = "#{driver.outdir}/info-#{driver.name}.log"
|
30
|
+
File.delete file if File.exists? file
|
29
31
|
info.each do |k,v|
|
30
|
-
open(
|
32
|
+
open(file, 'a') do |file|
|
31
33
|
file << "#{k}: #{v}\n"
|
32
34
|
end
|
33
35
|
end
|
data/lib/flick/ios.rb
CHANGED
@@ -10,6 +10,7 @@ module Flick
|
|
10
10
|
self.outdir = options.fetch(:outdir, Dir.pwd)
|
11
11
|
self.specs = options.fetch(:specs, false)
|
12
12
|
create_flick_dirs
|
13
|
+
is_paired?
|
13
14
|
end
|
14
15
|
|
15
16
|
def remove_bad_characters string
|
@@ -20,6 +21,15 @@ module Flick
|
|
20
21
|
Flick::System.setup_system_dir "#{Dir.home}/.flick"
|
21
22
|
Flick::System.setup_system_dir flick_dir
|
22
23
|
end
|
24
|
+
|
25
|
+
def is_paired?
|
26
|
+
Flick::Checker.system_dependency "idevicepair"
|
27
|
+
unless %x(idevicepair -u #{udid} validate).split[0] == "SUCCESS:"
|
28
|
+
puts "\nUDID: #{udid} - Is not paired with your machine!".red
|
29
|
+
puts "Run: idevicepair -u <udid> pair\n".red
|
30
|
+
abort
|
31
|
+
end
|
32
|
+
end
|
23
33
|
|
24
34
|
def devices
|
25
35
|
Flick::Checker.system_dependency "idevice_id"
|
@@ -63,7 +73,7 @@ module Flick
|
|
63
73
|
end
|
64
74
|
|
65
75
|
def clear_files
|
66
|
-
Flick::System.clean_system_dir flick_dir
|
76
|
+
Flick::System.clean_system_dir flick_dir, udid
|
67
77
|
end
|
68
78
|
|
69
79
|
def screenshot name
|
@@ -73,7 +83,9 @@ module Flick
|
|
73
83
|
|
74
84
|
def log name
|
75
85
|
Flick::Checker.system_dependency "idevicesyslog"
|
76
|
-
|
86
|
+
system("idevicesyslog -u #{udid} > #{outdir}/#{name}.log")
|
87
|
+
#file = File.open("#{outdir}/#{name}.log", 'a') { |f| f.puts "\n<<<<<<<<<<<<<<<<<<<<<<<<< FLICK LOG START >>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n" }
|
88
|
+
#file.close
|
77
89
|
end
|
78
90
|
|
79
91
|
def install app_path
|
data/lib/flick/simple_daemon.rb
CHANGED
data/lib/flick/system.rb
CHANGED
@@ -7,8 +7,10 @@ module Flick
|
|
7
7
|
Dir.mkdir dir_name unless File.exists? dir_name
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.clean_system_dir dir_name
|
11
|
-
Dir.glob("#{dir_name}
|
10
|
+
def self.clean_system_dir dir_name, udid
|
11
|
+
Dir.glob("#{dir_name}/*#{udid}*").each do |file|
|
12
|
+
File.delete file
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
def self.find_pid string
|
@@ -34,24 +36,12 @@ module Flick
|
|
34
36
|
def self.kill_process type, udid
|
35
37
|
pids = self.find_pid "#{type}-#{udid}"
|
36
38
|
self.kill_pids pids
|
37
|
-
if type == "video"
|
38
|
-
pid = `pgrep -f #{udid}`.to_i
|
39
|
-
`kill #{pid}` unless pid.zero?
|
40
|
-
end
|
41
39
|
end
|
42
40
|
|
43
41
|
def self.kill string
|
44
42
|
pids = self.find_pid string
|
45
43
|
self.kill_pids pids
|
46
44
|
end
|
47
|
-
|
48
|
-
def self.wait_for_file time, file
|
49
|
-
start = Time.now
|
50
|
-
until File.exists? file
|
51
|
-
puts "Waiting for #{file} to exist..."
|
52
|
-
sleep 1; break if Time.now - start > time
|
53
|
-
end
|
54
|
-
end
|
55
45
|
|
56
46
|
def self.video_length file
|
57
47
|
(`ffmpeg -i #{file} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//`).strip
|
data/lib/flick/version.rb
CHANGED
data/lib/flick/video.rb
CHANGED
@@ -21,24 +21,31 @@ class Video
|
|
21
21
|
self.format = options[:format]
|
22
22
|
end
|
23
23
|
|
24
|
+
def android
|
25
|
+
platform == "android"
|
26
|
+
end
|
27
|
+
|
28
|
+
def ios
|
29
|
+
platform == "ios"
|
30
|
+
end
|
31
|
+
|
24
32
|
def run
|
25
33
|
self.send(action)
|
26
34
|
end
|
27
35
|
|
28
36
|
def start
|
29
37
|
driver.clear_files
|
38
|
+
puts "\nStarting Recoder!!!"
|
30
39
|
if driver.recordable?
|
31
|
-
Flick::Checker.system_dependency "mp4box"
|
32
40
|
if extended
|
33
|
-
puts "
|
41
|
+
puts "In extended mode."
|
42
|
+
Flick::Checker.system_dependency "mp4box"
|
34
43
|
loop_record
|
35
44
|
else
|
36
|
-
puts "Starting Recorder In Normal Mode.\nRecorder will automatically stop after 180 seconds...\n"
|
37
45
|
start_record
|
38
46
|
end
|
39
47
|
else
|
40
48
|
Flick::Checker.system_dependency "ffmpeg"
|
41
|
-
puts "Starting Screenshot Recorder...\n"
|
42
49
|
start_screenshot_record
|
43
50
|
end
|
44
51
|
end
|
@@ -56,20 +63,12 @@ class Video
|
|
56
63
|
|
57
64
|
private
|
58
65
|
|
59
|
-
def android
|
60
|
-
platform == "android"
|
61
|
-
end
|
62
|
-
|
63
|
-
def ios
|
64
|
-
platform == "ios"
|
65
|
-
end
|
66
|
-
|
67
66
|
def start_record
|
68
67
|
Flick::System.kill_process "video", udid
|
69
68
|
$0 = "flick-video-#{udid}"
|
70
69
|
SimpleDaemon.daemonize!
|
71
70
|
command = -> do
|
72
|
-
driver.screenrecord "video-single"
|
71
|
+
driver.screenrecord "video-#{udid}-single"
|
73
72
|
end
|
74
73
|
command.call
|
75
74
|
end
|
@@ -82,7 +81,7 @@ class Video
|
|
82
81
|
count = "%03d" % 1
|
83
82
|
loop do
|
84
83
|
unless Flick::System.process_running? "#{udid}-"
|
85
|
-
driver.screenrecord "video-#{count}"
|
84
|
+
driver.screenrecord "video-#{udid}-#{count}"
|
86
85
|
count.next!
|
87
86
|
end
|
88
87
|
end
|
@@ -91,20 +90,17 @@ class Video
|
|
91
90
|
end
|
92
91
|
|
93
92
|
def stop_record
|
94
|
-
Flick::System.kill_process "video", udid
|
95
|
-
sleep 5 #wait for video process to
|
96
|
-
driver.pull_files "video"
|
97
|
-
files = Dir.glob("#{driver.flick_dir}/video*.mp4")
|
98
|
-
if files.empty?
|
99
|
-
|
100
|
-
return
|
101
|
-
end
|
102
|
-
files.each { |file| system("mp4box -cat #{file} #{driver.flick_dir}/#{driver.name}.mp4") } #renames video-single to udid or name if given...
|
93
|
+
Flick::System.kill_process "video", udid
|
94
|
+
sleep 5 #wait for video process to finish
|
95
|
+
driver.pull_files "video"
|
96
|
+
files = Dir.glob("#{driver.flick_dir}/video-#{udid}*.mp4")
|
97
|
+
return if files.empty?
|
98
|
+
files.each { |file| system("mp4box -cat #{file} #{driver.flick_dir}/#{driver.name}.mp4") }
|
103
99
|
puts "Saving to #{driver.outdir}/#{driver.name}.#{format}"
|
104
100
|
if format == "gif"
|
105
101
|
gif
|
106
102
|
else
|
107
|
-
File.rename "#{driver.flick_dir}/#{driver.name}.mp4", "#{driver.outdir}/#{driver.name}.mp4"
|
103
|
+
File.rename "#{driver.flick_dir}/#{driver.name}.mp4", "#{driver.outdir}/#{driver.name}.mp4"
|
108
104
|
end
|
109
105
|
end
|
110
106
|
|
@@ -117,7 +113,7 @@ class Video
|
|
117
113
|
count = "%03d" % 1
|
118
114
|
loop do
|
119
115
|
if count.to_i <= image_count
|
120
|
-
driver.screenshot "screenshot-#{count}"
|
116
|
+
driver.screenshot "screenshot-#{udid}-#{count}"
|
121
117
|
count.next!; sleep seconds
|
122
118
|
else
|
123
119
|
stop_screenshot_recording
|
@@ -130,9 +126,9 @@ class Video
|
|
130
126
|
|
131
127
|
def stop_screenshot_recording
|
132
128
|
driver.pull_files "screenshot" if android
|
133
|
-
self.send(format)
|
134
129
|
Flick::System.kill_process "screenshot", udid
|
135
130
|
puts "Saving to #{driver.outdir}/#{driver.name}.#{format}"
|
131
|
+
self.send(format)
|
136
132
|
end
|
137
133
|
|
138
134
|
def gif
|
@@ -147,11 +143,12 @@ class Video
|
|
147
143
|
|
148
144
|
def convert_images_to_mp4
|
149
145
|
remove_zero_byte_images
|
150
|
-
%x(ffmpeg -loglevel quiet -framerate 1 -pattern_type glob -i '#{driver.flick_dir}/screenshot*.png' -c:v libx264 -pix_fmt yuv420p #{driver.flick_dir}/#{driver.name}.mp4)
|
151
|
-
Flick::System.wait_for_file 30, "#{driver.flick_dir}/#{driver.name}.mp4"
|
146
|
+
%x(ffmpeg -loglevel quiet -framerate 1 -pattern_type glob -i '#{driver.flick_dir}/screenshot-#{udid}*.png' -c:v libx264 -pix_fmt yuv420p #{driver.flick_dir}/#{driver.name}.mp4)
|
152
147
|
end
|
153
148
|
|
154
149
|
def remove_zero_byte_images
|
155
|
-
Dir.glob("#{driver.flick_dir}/screenshot*.png").each
|
150
|
+
Dir.glob("#{driver.flick_dir}/screenshot-#{udid}*.png").each do |f|
|
151
|
+
File.delete f if File.zero? f
|
152
|
+
end
|
156
153
|
end
|
157
154
|
end
|
data/lib/flick/vitals.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class Vitals
|
2
|
+
|
3
|
+
attr_accessor :platform, :driver, :name
|
4
|
+
|
5
|
+
def initialize options
|
6
|
+
Flick::Checker.platform options[:platform]
|
7
|
+
self.platform = options[:platform]
|
8
|
+
case @platform
|
9
|
+
when "ios"
|
10
|
+
options[:todir] = options[:outdir]
|
11
|
+
self.driver = Flick::Ios.new options
|
12
|
+
when "android"
|
13
|
+
self.driver = Flick::Android.new options
|
14
|
+
end
|
15
|
+
self.name = options[:name]
|
16
|
+
end
|
17
|
+
|
18
|
+
def vitals
|
19
|
+
if platform == "ios"
|
20
|
+
puts "\nAndroid only for now. If you know of a tool to get this info for iOS please let me know or add a PR :)\n".yellow; abort
|
21
|
+
end
|
22
|
+
if name.nil?
|
23
|
+
puts "Specify a Package Name. e.g. -n com.viber".red; abort
|
24
|
+
else
|
25
|
+
driver.get_vitals name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.9'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,6 +220,20 @@ dependencies:
|
|
220
220
|
- - ">="
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: 0.7.1
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: ffi
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :runtime
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
223
237
|
description: A CLI with helpful QA tools for iOS and Android from the command line
|
224
238
|
email:
|
225
239
|
- justin.ison@gmail.com
|
@@ -252,6 +266,7 @@ files:
|
|
252
266
|
- lib/flick/system.rb
|
253
267
|
- lib/flick/version.rb
|
254
268
|
- lib/flick/video.rb
|
269
|
+
- lib/flick/vitals.rb
|
255
270
|
homepage: https://github.com/isonic1/flick
|
256
271
|
licenses:
|
257
272
|
- MIT
|
@@ -273,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
288
|
version: '0'
|
274
289
|
requirements: []
|
275
290
|
rubyforge_project:
|
276
|
-
rubygems_version: 2.
|
291
|
+
rubygems_version: 2.6.10
|
277
292
|
signing_key:
|
278
293
|
specification_version: 4
|
279
294
|
summary: A CLI to capture screenshots, video, logs, and device information for Android
|