mobmanager 0.0.2
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 +7 -0
- data/.gitignore +4 -0
- data/README.md +2 -0
- data/lib/mobmanager/mobile/appium/server/server.rb +72 -0
- data/lib/mobmanager/mobile/os/os.rb +18 -0
- data/lib/mobmanager/mobile/platform/android/common.rb +32 -0
- data/lib/mobmanager/mobile/platform/android/device.rb +65 -0
- data/lib/mobmanager/mobile/platform/android/emulator.rb +134 -0
- data/lib/mobmanager/mobile/platform/ios/common.rb +21 -0
- data/lib/mobmanager/mobile/platform/ios/device.rb +13 -0
- data/lib/mobmanager/mobile/platform/ios/simulator.rb +74 -0
- data/lib/mobmanager/version.rb +3 -0
- data/lib/mobmanager.rb +9 -0
- data/mobmanager.gemspec +18 -0
- metadata +72 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: aef04bb70e5ad38e7e6b0e61999d5e1cd20eff19
|
4
|
+
data.tar.gz: 44ec61ad4b32c6008c6f839261f1e29b1e258e69
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 056abce902ace629d88e045c2022089e3791564cfe9151fa2ed671b9e3e38cd1889928da920b9e402c02304e781f2e4ab56e1b8f994a6b376e4374c5ef954e10
|
7
|
+
data.tar.gz: 1dab5c43178fafdea35829b211a14ec7de43265535623e5c6f45a1d269d84af2275b3b0d4a9fcec715a95c0175eb55da5b645e99f3bd5cf67a9a4cc00ffc21cd
|
data/.gitignore
ADDED
data/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require_relative '../../../../mobmanager/mobile/os/os'
|
2
|
+
|
3
|
+
module Mobile
|
4
|
+
module Appium
|
5
|
+
module Server
|
6
|
+
include OS
|
7
|
+
|
8
|
+
def start_appium_server
|
9
|
+
end_appium_server if node_running?
|
10
|
+
puts 'Starting Appium server...'
|
11
|
+
|
12
|
+
platform = ENV['PLATFORM']
|
13
|
+
|
14
|
+
if platform == 'android'
|
15
|
+
puts '-- Android Platform --'
|
16
|
+
if ENV['ANDROID_PHONE'] == 'emulator'
|
17
|
+
start_server
|
18
|
+
else
|
19
|
+
start_server ENV['DEVICE']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
if platform == 'ios'
|
24
|
+
puts '-- IOS Platform --'
|
25
|
+
if ENV['IOS_PHONE'] == 'simulator'
|
26
|
+
start_server
|
27
|
+
else
|
28
|
+
start_server ENV['UIUD']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
sleep 5
|
33
|
+
puts "Appium is listening...\n\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
def end_appium_server
|
37
|
+
if node_running?
|
38
|
+
puts 'Terminating Appium server...'
|
39
|
+
if mac?
|
40
|
+
termination = system 'pkill node'
|
41
|
+
else
|
42
|
+
termination = system 'TASKKILL /F /IM node.exe'
|
43
|
+
end
|
44
|
+
return print_response(termination)
|
45
|
+
end
|
46
|
+
puts 'No Appium server found.'
|
47
|
+
end
|
48
|
+
|
49
|
+
def node_running?
|
50
|
+
if mac?
|
51
|
+
return true if %x[ps aux | grep -i node | grep -v grep | wc -l].to_i > 0
|
52
|
+
else
|
53
|
+
return true if %x[tasklist /FI "IMAGENAME eq node.exe"].to_s.include? 'node'
|
54
|
+
end
|
55
|
+
false
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def print_response(success)
|
60
|
+
return puts "Appium server terminated successfully." if success
|
61
|
+
return puts "Appium server was not found." unless success
|
62
|
+
warn '[PANIC]: Something went wrong while terminating the appium server.'
|
63
|
+
end
|
64
|
+
|
65
|
+
def start_server(id=nil, log_level='--log-level error')
|
66
|
+
udid = "--udid #{id}" unless id.nil?
|
67
|
+
command = "appium #{udid} #{log_level}"
|
68
|
+
spawn command
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module OS
|
2
|
+
def mac?
|
3
|
+
begin
|
4
|
+
os = %x[sw_vers -productName]
|
5
|
+
rescue Exception
|
6
|
+
os = nil
|
7
|
+
end
|
8
|
+
if os.nil?
|
9
|
+
return false if %x[ver].to_s.downcase.include? 'windows'
|
10
|
+
elsif os
|
11
|
+
return true if %[sw_vers -productName].to_s.downcase.include? 'mac'
|
12
|
+
else
|
13
|
+
fail '[PANIC:] Failed to determine OS.'
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative '../../../../mobmanager/mobile/platform/android/device'
|
2
|
+
require_relative '../../../../mobmanager/mobile/platform/android/emulator'
|
3
|
+
|
4
|
+
module Platform
|
5
|
+
module Android
|
6
|
+
module Common
|
7
|
+
|
8
|
+
include Platform::Android::Device
|
9
|
+
include Platform::Android::Emulator
|
10
|
+
|
11
|
+
def prepare_android_phone(settings = nil)
|
12
|
+
if ENV['ANDROID_PHONE'] == 'emulator'
|
13
|
+
if ENV['TARGET'] == 'sauce'
|
14
|
+
start_emulator(settings)
|
15
|
+
else
|
16
|
+
terminate_emulator
|
17
|
+
start_emulator
|
18
|
+
online = wait_for_emulator
|
19
|
+
retry_again unless online
|
20
|
+
end
|
21
|
+
else
|
22
|
+
start_android_device
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def back_button
|
27
|
+
%x[adb shell input keyevent KEYCODE_BACK]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative '../../../../mobmanager/mobile/os/os'
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Android
|
5
|
+
module Device
|
6
|
+
|
7
|
+
include OS
|
8
|
+
|
9
|
+
ANDROID_DEVICE ||= ENV['DEVICE']
|
10
|
+
|
11
|
+
def start_android_device
|
12
|
+
puts "Setting android device #{ANDROID_DEVICE}"
|
13
|
+
system 'adb start-server'
|
14
|
+
wait_for_android_device
|
15
|
+
end
|
16
|
+
|
17
|
+
def wait_for_android_device
|
18
|
+
max_wait = 5
|
19
|
+
counter = 0
|
20
|
+
|
21
|
+
found = false
|
22
|
+
while !found && counter <= max_wait
|
23
|
+
devices = %x[adb devices]
|
24
|
+
list = list_of_devices(devices)
|
25
|
+
begin
|
26
|
+
found = is_partial_string_in_array?(ANDROID_DEVICE, list)
|
27
|
+
rescue Exception => e
|
28
|
+
found = false
|
29
|
+
end
|
30
|
+
if found
|
31
|
+
return puts "Android device #{ANDROID_DEVICE} found."
|
32
|
+
end
|
33
|
+
counter += 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def terminate_android_device
|
38
|
+
system 'adb kill-server'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
#TODO - move to a helper module maybe adb?
|
45
|
+
def list_of_devices(text)
|
46
|
+
devices = []
|
47
|
+
lines = text.split("\n")
|
48
|
+
|
49
|
+
lines.each do |ele|
|
50
|
+
if ele.include?("\t")
|
51
|
+
devices << ele.split("\t")
|
52
|
+
else
|
53
|
+
devices << ele
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
devices.flatten!
|
58
|
+
end
|
59
|
+
|
60
|
+
def is_partial_string_in_array?(part_of_string, in_array)
|
61
|
+
in_array.each do |element|
|
62
|
+
return true if part_of_string.include? element
|
63
|
+
false
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require_relative '../../../../mobmanager/mobile/os/os'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Platform
|
5
|
+
module Android
|
6
|
+
module Emulator
|
7
|
+
|
8
|
+
include OS
|
9
|
+
|
10
|
+
ANDROID_EMULATOR ||= ENV['DEVICE']
|
11
|
+
OFFLINE_CHECKS ||= 15
|
12
|
+
|
13
|
+
def start_emulator(settings = nil)
|
14
|
+
if ENV['TARGET'] == 'sauce'
|
15
|
+
caps = settings unless settings.nil?
|
16
|
+
caps = YAML.load_file(Dir.pwd + '/features/support/settings/android.yml') if settings.nil?
|
17
|
+
setup_for_android_sauce caps
|
18
|
+
else
|
19
|
+
spawn "emulator -avd #{ANDROID_EMULATOR} -no-audio"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def setup_for_android_sauce(settings)
|
24
|
+
sauce_user = %x[echo $SAUCE_USER].strip
|
25
|
+
sauce_key = %x[echo $SAUCE_KEY].strip
|
26
|
+
app_path = settings[:apk_path]
|
27
|
+
app = app_path.split('/').select{|item| item.include?('.apk')}.first
|
28
|
+
puts 'MobTest: Connecting to sauce server...'
|
29
|
+
system "curl https://#{sauce_user}:#{sauce_key}@saucelabs.com/rest/v1/users/#{sauce_user}"
|
30
|
+
puts 'MobTest: Sending apk to sauce storage'
|
31
|
+
system 'curl -u '+"#{sauce_user}:#{sauce_key}"+' -X POST "https://saucelabs.com/rest/v1/storage/'+sauce_user+'/'+app+'?overwrite=true" -H "Content-Type: application/octet-stream" --data-binary @'+app_path
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
# Wait until emulator is online
|
36
|
+
def wait_for_emulator
|
37
|
+
online = false
|
38
|
+
iterations = 0
|
39
|
+
while online == false && iterations < OFFLINE_CHECKS
|
40
|
+
iterations += 1
|
41
|
+
sleep 3
|
42
|
+
puts 'Emulator is offline...'
|
43
|
+
list_of_devices = %x[adb devices].to_s
|
44
|
+
if list_of_devices.include? 'emulator'
|
45
|
+
if list_of_devices.include? 'offline'
|
46
|
+
online = false
|
47
|
+
else
|
48
|
+
puts "Emulator is online...\n\n"
|
49
|
+
online = true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
online
|
55
|
+
end
|
56
|
+
|
57
|
+
def retry_again
|
58
|
+
puts 'Something went wrong while getting the AVD. Retrying now...'
|
59
|
+
delete_locked_files
|
60
|
+
terminate_emulator
|
61
|
+
system 'adb kill-server'
|
62
|
+
system 'adb start-server'
|
63
|
+
start_emulator
|
64
|
+
online = wait_for_emulator
|
65
|
+
unless online
|
66
|
+
fail 'Something went wrong while getting the AVD. Verify the selected AVD exists.'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def terminate_emulator
|
71
|
+
if emulator_running?
|
72
|
+
puts 'Terminating Android emulator...'
|
73
|
+
if mac?
|
74
|
+
termination = system 'pkill -9 emulator'
|
75
|
+
else
|
76
|
+
termination = system 'TASKKILL /F /IM emulator-x86.exe'
|
77
|
+
cleanup_after_emulator
|
78
|
+
end
|
79
|
+
print_termination_response(termination)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def cleanup_after_emulator
|
84
|
+
if mac?
|
85
|
+
#remove /private/temp/android-<username>
|
86
|
+
path = '/private/tmp'
|
87
|
+
files = Dir["#{path}/**"]
|
88
|
+
files.each do |file|
|
89
|
+
if File.directory(file)
|
90
|
+
FileUtils.remove_dir(file) if ((file.include? 'android-'))
|
91
|
+
end
|
92
|
+
end
|
93
|
+
else
|
94
|
+
# Delete temp files from AppData/Local/Temp/AndroidEmulator
|
95
|
+
user_profile = %x[echo %USERPROFILE%].to_s.chomp!
|
96
|
+
Dir.glob(user_profile.gsub("\\", '/')+ '//AppData//Local//Temp//AndroidEmulator//*.tmp').each { |f| File.delete(f) }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def emulator_running?
|
101
|
+
if mac?
|
102
|
+
if %x[ps aux | grep -i emulator | grep -v grep | wc -l].to_i > 0
|
103
|
+
return true
|
104
|
+
end
|
105
|
+
else
|
106
|
+
if %x[tasklist /FI "IMAGENAME eq emulator-x86.exe"].to_s.include? 'emulator'
|
107
|
+
return true
|
108
|
+
end
|
109
|
+
end
|
110
|
+
false
|
111
|
+
end
|
112
|
+
|
113
|
+
private
|
114
|
+
def print_termination_response(success)
|
115
|
+
if success
|
116
|
+
puts 'Android emulator terminated successfully.'
|
117
|
+
elsif !success
|
118
|
+
puts 'Android emulator was not found.'
|
119
|
+
else
|
120
|
+
warn '[PANIC]: Something went wrong while terminating the Android emulator.'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def delete_locked_files
|
125
|
+
# Delete lock files from ./.android/avd
|
126
|
+
path = "#{Dir.home}/.android/avd"
|
127
|
+
locks = Dir["#{path}/**/*.lock"]
|
128
|
+
locks.each do |file|
|
129
|
+
File.delete(file)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../../../mobmanager/mobile/platform/ios/device'
|
2
|
+
require_relative '../../../../mobmanager/mobile/platform/ios/simulator'
|
3
|
+
|
4
|
+
module Platform
|
5
|
+
module IOS
|
6
|
+
module Common
|
7
|
+
include Platform::IOS::Device
|
8
|
+
include Platform::IOS::Simulator
|
9
|
+
|
10
|
+
def prepare_ios_phone(settings = nil)
|
11
|
+
if ENV['IOS_PHONE'] == 'simulator'
|
12
|
+
terminate_simulator
|
13
|
+
start_simulator(settings)
|
14
|
+
else
|
15
|
+
start_ios_device
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require_relative '../../../../mobmanager/mobile/os/os'
|
3
|
+
|
4
|
+
module Platform
|
5
|
+
module IOS
|
6
|
+
module Simulator
|
7
|
+
|
8
|
+
include OS
|
9
|
+
|
10
|
+
def start_simulator(settings = nil)
|
11
|
+
caps = settings unless settings.nil?
|
12
|
+
caps = YAML.load_file(Dir.pwd + '/features/support/settings/ios.yml') if settings.nil?
|
13
|
+
|
14
|
+
unless caps[:workspace_path].nil?
|
15
|
+
build_ios_app(caps)
|
16
|
+
end
|
17
|
+
|
18
|
+
if ENV['TARGET'] == 'sauce'
|
19
|
+
setup_for_sauce(caps)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_ios_app(settings)
|
24
|
+
puts 'Building ios app with xcodebuild tool...'
|
25
|
+
puts 'MobTest: Building ios app with xcodebuild tool...'
|
26
|
+
#TODO - Add to PATH?
|
27
|
+
puts "ENV['IOS_DERIVED_DATA_PATH'] #{ENV['IOS_DERIVED_DATA_PATH']}"
|
28
|
+
fail("MobTest: Failed to determine app_path. Please check your ios.yml settings") if settings[:app_path].nil?
|
29
|
+
app = settings[:app_path].split('/').select{|element| element.include?'.app'}.first
|
30
|
+
system "xcodebuild -workspace #{settings[:workspace_path]} -scheme \"#{app.gsub('.app', '')}\" -configuration Debug -sdk \"#{settings['sim_sdk']}\" -derivedDataPath \"~/\""
|
31
|
+
end
|
32
|
+
|
33
|
+
def setup_for_sauce(settings)
|
34
|
+
sauce_user = %x[echo $SAUCE_USER].strip
|
35
|
+
sauce_key = %x[echo $SAUCE_KEY].strip
|
36
|
+
app_path = settings[:app_path]
|
37
|
+
zipped_app_path = app_path.gsub('.app','.zip')
|
38
|
+
app = app_path.split('/').select{|item| item.include?('.app')}.first.gsub('.app','')
|
39
|
+
puts 'MobTest: Connecting to sauce server...'
|
40
|
+
system "curl https://#{sauce_user}:#{sauce_key}@saucelabs.com/rest/v1/users/#{sauce_user}"
|
41
|
+
puts 'MobTest: Zipping iOS app'
|
42
|
+
system "zip -r #{zipped_app_path} #{app_path}/"
|
43
|
+
zipped_app_path = zipped_app_path.gsub('~',Dir.home)
|
44
|
+
puts 'MobTest: Sending zipped app to sauce storage'
|
45
|
+
system 'curl -u '+"#{sauce_user}:#{sauce_key}"+' -X POST "https://saucelabs.com/rest/v1/storage/'+sauce_user+'/'+app+'.zip?overwrite=true" -H "Content-Type: application/octet-stream" --data-binary @'+zipped_app_path
|
46
|
+
end
|
47
|
+
|
48
|
+
def terminate_simulator
|
49
|
+
spawn 'killall "iOS Simulator"'
|
50
|
+
spawn 'killall -9 instruments'
|
51
|
+
end
|
52
|
+
|
53
|
+
def close_and_clean_simulator
|
54
|
+
terminate_simulator
|
55
|
+
remove_sim_temp_files
|
56
|
+
end
|
57
|
+
|
58
|
+
def remove_sim_temp_files
|
59
|
+
if mac?
|
60
|
+
#remove ios related files from /private/temp/
|
61
|
+
path = '/private/tmp'
|
62
|
+
files = Dir["#{path}/**"]
|
63
|
+
files.each do |file|
|
64
|
+
if File.directory?(file)
|
65
|
+
FileUtils.remove_dir(file) if ((file.include? 'com.apple.') || (file.include? 'appium-instruments'))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
else
|
69
|
+
# TODO - research in Windows OS
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/mobmanager.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'mobmanager/version'
|
2
|
+
require 'mobmanager/mobile/appium/server/server'
|
3
|
+
require 'mobmanager/mobile/os/os'
|
4
|
+
require 'mobmanager/mobile/platform/android/common'
|
5
|
+
require 'mobmanager/mobile/platform/android/device'
|
6
|
+
require 'mobmanager/mobile/platform/android/emulator'
|
7
|
+
require 'mobmanager/mobile/platform/ios/common'
|
8
|
+
require 'mobmanager/mobile/platform/ios/device'
|
9
|
+
require 'mobmanager/mobile/platform/ios/simulator'
|
data/mobmanager.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mobmanager/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "mobmanager"
|
8
|
+
spec.version = Mobmanager::VERSION
|
9
|
+
spec.authors = ['Milton Davalos']
|
10
|
+
spec.email = ['miltondavalos@gmail.com']
|
11
|
+
spec.summary = %q{Provides methods to manage Appium server}
|
12
|
+
spec.description = %q{Provides methods to start/end Appium server and management of apps in Android and iOS}
|
13
|
+
spec.homepage = 'https://github.com/miltondavalos/MobManager'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.files = `git ls-files`.split("\n")
|
16
|
+
spec.require_paths = ["lib"]
|
17
|
+
spec.add_dependency 'require_all'
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mobmanager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Milton Davalos
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: require_all
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Provides methods to start/end Appium server and management of apps in
|
28
|
+
Android and iOS
|
29
|
+
email:
|
30
|
+
- miltondavalos@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- .gitignore
|
36
|
+
- README.md
|
37
|
+
- lib/mobmanager.rb
|
38
|
+
- lib/mobmanager/mobile/appium/server/server.rb
|
39
|
+
- lib/mobmanager/mobile/os/os.rb
|
40
|
+
- lib/mobmanager/mobile/platform/android/common.rb
|
41
|
+
- lib/mobmanager/mobile/platform/android/device.rb
|
42
|
+
- lib/mobmanager/mobile/platform/android/emulator.rb
|
43
|
+
- lib/mobmanager/mobile/platform/ios/common.rb
|
44
|
+
- lib/mobmanager/mobile/platform/ios/device.rb
|
45
|
+
- lib/mobmanager/mobile/platform/ios/simulator.rb
|
46
|
+
- lib/mobmanager/version.rb
|
47
|
+
- mobmanager.gemspec
|
48
|
+
homepage: https://github.com/miltondavalos/MobManager
|
49
|
+
licenses:
|
50
|
+
- MIT
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.0.14
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: Provides methods to manage Appium server
|
72
|
+
test_files: []
|