├── .gitignore ├── Gemfile ├── Gemfile.lock ├── README.md ├── Rakefile ├── android ├── .rspec ├── NotesList.apk ├── appium.txt ├── helpers.rb ├── spec │ ├── add_note_spec.rb │ ├── delete_note_spec.rb │ └── spec_helper.rb └── start_emulators.rb ├── common ├── dowload_sauce_assets.rb └── methods.rb ├── ios ├── .rspec ├── TestApp │ ├── .gitignore │ ├── Test App 2 │ │ ├── GestureTestViewController.h │ │ ├── GestureTestViewController.m │ │ ├── GestureTestViewController.xib │ │ ├── MyViewControllerViewController.h │ │ ├── MyViewControllerViewController.m │ │ ├── TA2AppDelegate.h │ │ ├── TA2AppDelegate.m │ │ ├── TestApp-Info.plist │ │ ├── TestApp-Prefix.pch │ │ ├── en.lproj │ │ │ ├── InfoPlist.strings │ │ │ ├── Localizable.strings │ │ │ └── MyViewControllerViewController.xib │ │ └── main.m │ ├── TestApp.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcuserdata │ │ │ │ └── justin.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── justin.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── TestApp.xcscheme │ │ │ └── xcschememanagement.plist │ └── build │ │ ├── Release-iphoneos │ │ ├── TestApp.app.dSYM │ │ │ └── Contents │ │ │ │ ├── Info.plist │ │ │ │ └── Resources │ │ │ │ └── DWARF │ │ │ │ └── TestApp │ │ ├── TestApp.app.zip │ │ └── TestApp.app │ │ │ ├── GestureTestViewController.nib │ │ │ ├── objects.nib │ │ │ └── runtime.nib │ │ │ ├── Info.plist │ │ │ ├── PkgInfo │ │ │ ├── TestApp │ │ │ ├── _CodeSignature │ │ │ └── CodeResources │ │ │ ├── embedded.mobileprovision │ │ │ └── en.lproj │ │ │ ├── InfoPlist.strings │ │ │ ├── Localizable.strings │ │ │ └── MyViewControllerViewController.nib │ │ │ ├── objects.nib │ │ │ └── runtime.nib │ │ ├── TestApp.build │ │ └── Release-iphoneos │ │ │ └── TestApp.build │ │ │ ├── GestureTestViewController-PartialInfo.plist │ │ │ ├── MyViewControllerViewController-PartialInfo.plist │ │ │ ├── Objects-normal │ │ │ └── armv7 │ │ │ │ ├── GestureTestViewController.d │ │ │ │ ├── GestureTestViewController.dia │ │ │ │ ├── GestureTestViewController.o │ │ │ │ ├── MyViewControllerViewController.d │ │ │ │ ├── MyViewControllerViewController.dia │ │ │ │ ├── MyViewControllerViewController.o │ │ │ │ ├── TA2AppDelegate.d │ │ │ │ ├── TA2AppDelegate.dia │ │ │ │ ├── TA2AppDelegate.o │ │ │ │ ├── TestApp.LinkFileList │ │ │ │ ├── TestApp_dependency_info.dat │ │ │ │ ├── main.d │ │ │ │ ├── main.dia │ │ │ │ └── main.o │ │ │ ├── TestApp-all-non-framework-target-headers.hmap │ │ │ ├── TestApp-all-target-headers.hmap │ │ │ ├── TestApp-generated-files.hmap │ │ │ ├── TestApp-own-target-headers.hmap │ │ │ ├── TestApp-project-headers.hmap │ │ │ ├── TestApp.app.xcent │ │ │ ├── TestApp.hmap │ │ │ ├── dgph │ │ │ └── dgph~ │ │ └── release-iphonesimulator │ │ └── TestApp.app.zip ├── appium.txt ├── helpers.rb └── spec │ ├── alert_spec.rb │ ├── features_spec.rb │ └── spec_helper.rb ├── node_configs └── .gitignore ├── output ├── .gitignore ├── .txt └── allure │ └── .gitignore ├── selenium-server-standalone-2.47.1.jar └── server_launcher.rb /.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | *.xml 3 | *.json 4 | *.log 5 | *.png 6 | *.mp4 7 | *.lck 8 | allure-report 9 | node_configs 10 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :test do 4 | gem 'appium_lib' 5 | gem 'rspec' 6 | gem 'rspec_junit_formatter' 7 | gem "parallel_tests" 8 | gem 'faker' 9 | gem 'allure-rspec' 10 | gem 'sauce_whisk' 11 | end -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | allure-rspec (0.7.7) 5 | allure-ruby-adaptor-api (= 0.6.10) 6 | rspec (~> 3.2) 7 | allure-ruby-adaptor-api (0.6.10) 8 | mimemagic 9 | nokogiri (~> 1.6.0) 10 | uuid 11 | appium_lib (8.0.2) 12 | awesome_print (~> 1.6) 13 | json (~> 1.8) 14 | nokogiri (~> 1.6.6) 15 | selenium-webdriver (~> 2.49) 16 | tomlrb (~> 1.1) 17 | awesome_print (1.6.1) 18 | builder (3.2.2) 19 | childprocess (0.5.9) 20 | ffi (~> 1.0, >= 1.0.11) 21 | diff-lcs (1.2.5) 22 | domain_name (0.5.20160128) 23 | unf (>= 0.0.5, < 1.0.0) 24 | faker (1.6.1) 25 | i18n (~> 0.5) 26 | ffi (1.9.10) 27 | http-cookie (1.0.2) 28 | domain_name (~> 0.5) 29 | i18n (0.7.0) 30 | json (1.8.3) 31 | macaddr (1.7.1) 32 | systemu (~> 2.6.2) 33 | mime-types (2.99) 34 | mimemagic (0.3.1) 35 | mini_portile2 (2.0.0) 36 | multi_json (1.11.2) 37 | netrc (0.11.0) 38 | nokogiri (1.6.7.2) 39 | mini_portile2 (~> 2.0.0.rc2) 40 | parallel (1.6.1) 41 | parallel_tests (2.3.1) 42 | parallel 43 | rest-client (1.8.0) 44 | http-cookie (>= 1.0.2, < 2.0) 45 | mime-types (>= 1.16, < 3.0) 46 | netrc (~> 0.7) 47 | rspec (3.4.0) 48 | rspec-core (~> 3.4.0) 49 | rspec-expectations (~> 3.4.0) 50 | rspec-mocks (~> 3.4.0) 51 | rspec-core (3.4.2) 52 | rspec-support (~> 3.4.0) 53 | rspec-expectations (3.4.0) 54 | diff-lcs (>= 1.2.0, < 2.0) 55 | rspec-support (~> 3.4.0) 56 | rspec-mocks (3.4.1) 57 | diff-lcs (>= 1.2.0, < 2.0) 58 | rspec-support (~> 3.4.0) 59 | rspec-support (3.4.1) 60 | rspec_junit_formatter (0.2.3) 61 | builder (< 4) 62 | rspec-core (>= 2, < 4, != 2.12.0) 63 | rubyzip (1.1.7) 64 | sauce_whisk (0.0.19) 65 | json (~> 1.8.1) 66 | rest-client (~> 1.8.0) 67 | selenium-webdriver (2.52.0) 68 | childprocess (~> 0.5) 69 | multi_json (~> 1.0) 70 | rubyzip (~> 1.0) 71 | websocket (~> 1.0) 72 | systemu (2.6.5) 73 | tomlrb (1.2.0) 74 | unf (0.1.4) 75 | unf_ext 76 | unf_ext (0.0.7.2) 77 | uuid (2.3.8) 78 | macaddr (~> 1.0) 79 | websocket (1.2.2) 80 | 81 | PLATFORMS 82 | ruby 83 | 84 | DEPENDENCIES 85 | allure-rspec 86 | appium_lib 87 | faker 88 | parallel_tests 89 | rspec 90 | rspec_junit_formatter 91 | sauce_whisk 92 | 93 | BUNDLED WITH 94 | 1.11.2 95 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Appium Mobile Grid Example 2 | 3 | ## Getting Started 4 | 5 | Assumptions: 6 | * You have AndroidStudios and Xcode installed. 7 | * You have Xcode command line tools installed. 8 | * You have npm & Appium installed. https://www.npmjs.com/package/appium 9 | * You followed the Appium setup instructions http://appium.io/slate/en/1.5/?ruby#setup for android & iOS. 10 | * You're running this on a Mac for iOS. For android, you can run on Windows and Linux with some tweaking. 11 | * You have Homebrew installed. http://brew.sh/ 12 | * You have ideviceinstaller installed for iOS tests. `brew install ideviceinstaller` 13 | * You have enabled UI Automation in Settings > Developer for iOS. 14 | * You have android emulators installed or USB connected devices with USB Debug enabled. 15 | 16 | To set up: 17 | 18 | * Ensure you running at least Ruby version 2.0 or above. You can check this by 19 | running: 20 | 21 | `ruby -v` 22 | 23 | If you have an older version of Ruby installed, consider using 24 | [rbenv](https://github.com/sstephenson/rbenv) for installing a newer version 25 | of Ruby. 26 | 27 | * Install Bundler: 28 | 29 | `gem install bundler` 30 | 31 | * Run bundle install: 32 | 33 | `bundle install` 34 | 35 | * Install Allure Report: https://github.com/allure-framework/allure-cli 36 | 37 | `brew tap allure-framework/allure` 38 | 39 | `brew install allure-cli` 40 | 41 | ## Running Specs 42 | 43 | * Start android emulators or connect devices! 44 | * iOS is setup to only run on real devices. This is due to Apple's limitation of allowing only one running emulator per machine. 45 | 46 | To run specs single threaded: 47 | 48 | `rake android[single]` 49 | `rake ios[single]` 50 | 51 | To run specs in parallel: 52 | 53 | `rake android[parallel]` 54 | `rake ios[parallel]` 55 | 56 | To run specs distributed: 57 | 58 | `rake android[dist]` 59 | `rake ios[dist]` 60 | 61 | To run specs on SauceLabs: 62 | * Goto saucelabs.com and signup. 63 | * Then add your SauceLabs environment variables. 64 | 65 | `export SAUCE_USERNAME=` 66 | 67 | `export SAUCE_ACCESS_KEY=` 68 | 69 | `rake android/ios[single,sauce]` <- "Will run tests tagged with :sauce single threaded" 70 | 71 | `rake android/ios[dist,sauce]` <- "Will run tests tagged with :sauce distributed" 72 | 73 | Generate Allure report: (Displays test results, hub log, appium log, screenshots and video) 74 | 75 | `allure generate report output/allure/*` 76 | 77 | `allure report open` 78 | 79 | ## iOS debugging: 80 | * There could be times when the tests hang on iOS. This is most likely due to a pairing issue with ideviceinstaller. 81 | 82 | `idevicepair -u unpair` 83 | 84 | `idevicepair -u pair` 85 | 86 | * Accept the "Trust this computer" popup on the device. 87 | 88 | `idevicepair -u validate` 89 | 90 | * Make sure you get "SUCCESS: Validated pairing with device " 91 | * You should now be able to install the app manually. 92 | 93 | `ideviceinstaller -u -i ./appium-mobile-grid/ios/TestApp/build/Release-iphoneos/TestApp.app.zip` 94 | 95 | * Build the app with xcodebuild 96 | 97 | `cd ios/TestApp` 98 | 99 | `xcodebuild -sdk iphoneos` <- This will place a new binary in appium-mobile-grid/ios/TestApp/build/Release-iphoneos 100 | 101 | `ideviceinstaller -u -i ./appium-mobile-grid/ios/TestApp/build/Release-iphoneos/TestApp.app` 102 | 103 | ## Capture Metadata 104 | 105 | `$ gem install flick` 106 | 107 | * See [here](https://github.com/isonic1/flick) for more details. 108 | * Also see [here](https://github.com/isonic1/appium-mobile-grid/blob/flick/android/spec/spec_helper.rb#L15-L16) for example of implementation. 109 | 110 | ## Disclaimer: 111 | * This example was built quickly, so the code is not in the optimal state of dryness. 112 | * No page objects were used. The tests are soley for example purposes. 113 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require_relative 'server_launcher' 2 | 3 | desc 'Running Android tests!' 4 | task :android, :type, :tag do |t, args| 5 | task_setup android_app, t.to_s, args 6 | end 7 | 8 | desc 'Running iOS tests!' 9 | task :ios, :type, :tag do |t, args| 10 | app = ios_app 11 | task_setup app, t.to_s, args 12 | end 13 | 14 | def task_setup app, platform, args 15 | types = ['single', 'dist', 'parallel'] 16 | unless types.include? args[:type] 17 | puts "Invalid run type!\nChoose: #{types}" 18 | abort 19 | end 20 | 21 | setup_output_dir 22 | 23 | ENV["BASE_DIR"], ENV["APP_PATH"] = Dir.pwd, app 24 | 25 | tag = "--tag #{args[:tag]}" unless args[:tag].nil? 26 | if tag.nil? 27 | ENV['SAUCE_USERNAME'],ENV['SAUCE_ACCESS_KEY'] = nil,nil 28 | if args[:type] == "single" 29 | start_single_appium platform 30 | elsif ['dist', 'parallel'].include? args[:type] 31 | launch_hub_and_nodes platform 32 | threads = "-n #{ENV["THREADS"]}" 33 | ENV["SERVER_URL"] = "http://localhost:4444/wd/hub" #Change this to your hub url if different. 34 | end 35 | elsif tag.include? "sauce" 36 | ENV["ENV"], ENV["SERVER_URL"] = "sauce","http://#{ENV['SAUCE_USERNAME']}:#{ENV['SAUCE_ACCESS_KEY']}@ondemand.saucelabs.com:80/wd/hub" 37 | upload_app_to_sauce app 38 | end 39 | 40 | Dir.chdir platform 41 | 42 | case args[:type] 43 | when "single" 44 | exec "rspec spec #{tag}" 45 | when "dist" 46 | exec "SPEC_OPTS='#{tag}' parallel_rspec #{threads} spec" 47 | when "parallel" 48 | exec "parallel_test #{threads} -e 'rspec spec #{tag}'" 49 | end 50 | end 51 | 52 | def android_app 53 | "#{Dir.pwd}/android/NotesList.apk" 54 | end 55 | 56 | def ios_app 57 | "#{Dir.pwd}/ios/TestApp/build/Release-iphoneos/TestApp.app.zip" 58 | end 59 | 60 | def ios_app_sauce 61 | "#{Dir.pwd}/ios/TestApp/build/Release-iphonesimulator/TestApp.app.zip" 62 | end 63 | 64 | def upload_app_to_sauce app 65 | require 'sauce_whisk' 66 | storage = SauceWhisk::Storage.new 67 | puts "Uploading #{app} to saucelabs...\n" 68 | storage.upload app 69 | ENV["APP_PATH"] = "sauce-storage:#{File.basename(app)}" 70 | end 71 | 72 | def setup_output_dir 73 | system "mkdir output >> /dev/null 2>&1" 74 | `/bin/rm -rf ./output/allure/* >> /dev/null 2>&1` 75 | `rm ./output/* >> /dev/null 2>&1` 76 | end 77 | -------------------------------------------------------------------------------- /android/.rspec: -------------------------------------------------------------------------------- 1 | --color 2 | -p 3 | --require=./spec/spec_helper.rb 4 | --order random 5 | --format documentation 6 | -------------------------------------------------------------------------------- /android/NotesList.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/android/NotesList.apk -------------------------------------------------------------------------------- /android/appium.txt: -------------------------------------------------------------------------------- 1 | [caps] 2 | appium-version = "1.4.16" 3 | platformName = "ANDROID" 4 | 5 | [appium_lib] 6 | wait = 30 -------------------------------------------------------------------------------- /android/helpers.rb: -------------------------------------------------------------------------------- 1 | module Helpers 2 | class << self 3 | 4 | def kill_adb_pid pid 5 | `kill #{pid} >> /dev/null 2>&1` 6 | end 7 | 8 | def recording_setup udid 9 | %x(adb -s #{udid} shell 'mkdir /sdcard/recordings' >> /dev/null 2>&1) 10 | spawn "adb -s #{udid} shell rm /sdcard/recordings/* >> /dev/null 2>&1" 11 | end 12 | 13 | def start_video_record udid 14 | if ENV["UDID"].include? "emulator" 15 | puts "\nNot video recording. Cannot video record on #{udid} emulator!\n\n" 16 | return 17 | else 18 | recording_setup udid 19 | puts "\nRecording! You have a maximum of 180 seconds record time...\n" 20 | pid = spawn "adb -s #{udid} shell screenrecord --size 720x1280 /sdcard/recordings/video-#{udid}.mp4", :out=> "/dev/null" 21 | ENV["VIDEO_PID"] = pid.to_s 22 | end 23 | end 24 | 25 | def stop_video_record udid 26 | return if ENV["UDID"].include? "emulator" 27 | kill_adb_pid ENV["VIDEO_PID"] 28 | sleep 5 #delay for video to complete processing on device... 29 | spawn "adb -s #{udid} pull /sdcard/recordings/video-#{udid}.mp4 #{ENV["BASE_DIR"]}/output" 30 | end 31 | 32 | def start_logcat udid 33 | pid = spawn("adb -s #{udid} logcat -v long", :out=>"#{ENV["BASE_DIR"]}/output/logcat-#{udid}.log") 34 | ENV["LOGCAT_PID"] = pid.to_s 35 | end 36 | 37 | def stop_logcat 38 | kill_adb_pid ENV["LOGCAT_PID"] 39 | end 40 | end 41 | end 42 | 43 | module Kernel 44 | def helper 45 | Helpers 46 | end 47 | end -------------------------------------------------------------------------------- /android/spec/add_note_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe "Add Note Scenarios #{ENV["UDID"]}" do 4 | 5 | before :each do 6 | wait_true { find_element(:id, 'android:id/action_bar_title').text.eql? "Notes" } 7 | find_element(:id, 'com.example.android.notepad:id/menu_add').click 8 | wait_true { find_element(:id, "android:id/action_bar_title").text.eql? "New note" } 9 | end 10 | 11 | it 'Create A Note', :sauce do 12 | note = Lorem.sentence 13 | find_element(:id, 'com.example.android.notepad:id/note').send_keys note 14 | find_element(:id, 'com.example.android.notepad:id/menu_save').click 15 | wait_true { find_element(:id, "android:id/action_bar_title").text.eql? "Notes" } 16 | expect(find_element(:id, 'android:id/text1').text).to eq "FAIL ON PURPOSE!!!" 17 | end 18 | end -------------------------------------------------------------------------------- /android/spec/delete_note_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe "Modify Note Scenarios #{ENV["UDID"]}" do 4 | 5 | before :each do 6 | wait_true { find_element(:id, 'android:id/action_bar_title').text == "Notes" } 7 | find_element(:id, 'com.example.android.notepad:id/menu_add').click 8 | wait_true { find_element(:id, "android:id/action_bar_title").text == "New note" } 9 | @note = Lorem.sentence 10 | find_element(:id, 'com.example.android.notepad:id/note').send_keys @note 11 | sleep 5 12 | find_element(:id, 'com.example.android.notepad:id/menu_save').click 13 | wait_true { find_element(:id, "android:id/action_bar_title").text == "Notes" } 14 | end 15 | 16 | it 'Delete A Note', sauce: false do 17 | find_elements(:id, 'android:id/text1').find { |note| note.text.eql? @note }.click 18 | if exists { find_element(:id, "com.example.android.notepad:id/menu_delete") } 19 | find_element(:id, "com.example.android.notepad:id/menu_delete").click 20 | else 21 | find_element(:id, 'More options').click 22 | find_element(:name, 'Delete').click 23 | end 24 | wait_true { find_element(:id, "android:id/action_bar_title").text.eql? "Notes" } 25 | if exists { find_element(:id, 'android:id/text1') } 26 | notes = find_elements(:id, 'android:id/text1').map { |note| note.text } 27 | else 28 | notes = [] 29 | end 30 | expect(notes).to_not include @note 31 | end 32 | end -------------------------------------------------------------------------------- /android/spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require_relative "#{ENV["BASE_DIR"]}/common/methods" 2 | 3 | set_udid_environment_variable 4 | 5 | RSpec.configure do |config| 6 | config.color = true 7 | config.tty = true 8 | 9 | config.before :all do 10 | initialize_appium_and_methods "android" 11 | end 12 | 13 | config.before :each do 14 | unless ENV["ENV"] == "sauce" 15 | helper.start_logcat ENV["UDID"] 16 | helper.start_video_record ENV["UDID"] 17 | end 18 | end 19 | 20 | config.after :each do |e| 21 | unless ENV["ENV"] == "sauce" 22 | helper.stop_logcat 23 | helper.stop_video_record ENV["UDID"] 24 | end 25 | update_sauce_status_get_assets @driver.session_id, e.exception.nil? 26 | unless e.exception.nil? 27 | attach_report_files e 28 | end 29 | end 30 | 31 | config.after :all do 32 | @driver.driver_quit 33 | end 34 | end 35 | 36 | allure_setup -------------------------------------------------------------------------------- /android/start_emulators.rb: -------------------------------------------------------------------------------- 1 | require 'parallel' 2 | 3 | emulators = (`emulator -list-avds`).split("\n") 4 | Parallel.map(emulators, :in_threads=> emulators.size) do |emulator| 5 | spawn("emulator -avd #{emulator} -scale 100dpi -no-boot-anim -cpu-delay 0 -no-audio -accel on &", :out=> "/dev/null") 6 | end -------------------------------------------------------------------------------- /common/dowload_sauce_assets.rb: -------------------------------------------------------------------------------- 1 | require 'saucewhisk' 2 | require 'parallel' 3 | 4 | def download_sauce_assets job_id, name = "sauce" 5 | job = SauceWhisk::Jobs 6 | until !job.fetch(job_id).screenshot_urls.nil? 7 | puts "Waiting for sauce to mark job as completed..."; sleep 5 8 | end 9 | screenshot = job.fetch(job_id).screenshot_urls.last 10 | assets = [{file: "selenium-server.log", name: "appium-#{name}.log"}, {file: "video.flv", name: "video-#{name}.flv"}, {file: screenshot, name: "screenshot-#{name}.png"}] 11 | Parallel.each(assets, :in_threads=> assets.size) do |asset| 12 | %x(curl -s -u #{ENV["SAUCE_USERNAME"]}:#{ENV["SAUCE_ACCESS_KEY"]} https://saucelabs.com/rest/#{ENV["SAUCE_USERNAME"]}/jobs/#{job_id}/results/#{asset[:file]} > ../output/#{asset[:name]}) 13 | end 14 | end 15 | 16 | if ARGV[0].nil? 17 | puts "Please supply a sauce labs job id...\ne.g. download_sauce_assets e6dc361349aa85sdf27acdf38f7d" 18 | else 19 | download_sauce_assets ARGV[0] 20 | end -------------------------------------------------------------------------------- /common/methods.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | require 'bundler' 3 | Bundler.require(:test) 4 | include Faker 5 | 6 | def update_sauce_status_get_assets job_id, status 7 | return unless ENV["ENV"] == "sauce" 8 | job = SauceWhisk::Jobs 9 | job.change_status job_id, status 10 | end 11 | 12 | def thread 13 | ((ENV['TEST_ENV_NUMBER'].nil? || ENV['TEST_ENV_NUMBER'].empty?) ? 1 : ENV['TEST_ENV_NUMBER']).to_i 14 | end 15 | 16 | def get_device_data 17 | unless ENV["ENV"] == "sauce" 18 | JSON.parse(ENV["DEVICES"]).find { |t| t["thread"].eql? thread } 19 | else 20 | {} 21 | end 22 | end 23 | 24 | def set_udid_environment_variable 25 | return if ENV["ENV"] == "sauce" 26 | ENV["UDID"] = get_device_data["udid"] 27 | end 28 | 29 | def initialize_appium_and_methods platform 30 | device = get_device_data 31 | caps = Appium.load_appium_txt file: File.join(File.dirname(__FILE__), "../#{platform}/appium.txt") 32 | caps[:caps][:udid] = device.fetch("udid", nil) 33 | caps[:caps][:platformVersion] = device.fetch("os", caps[:caps][:platformVersion]) 34 | caps[:caps][:deviceName] = device.fetch("name", caps[:caps][:deviceName]) 35 | caps[:caps][:app] = ENV["APP_PATH"] 36 | caps[:appium_lib][:server_url] = ENV["SERVER_URL"] 37 | caps[:caps][:name] = self.class.metadata[:full_description].strip #for sauce labs test description 38 | @driver = Appium::Driver.new(caps).start_driver 39 | Appium.promote_appium_methods Object 40 | Appium.promote_appium_methods RSpec::Core::ExampleGroup 41 | require_relative "../#{platform}/helpers" 42 | Appium.promote_singleton_appium_methods Helpers 43 | end 44 | 45 | def attach_report_files example 46 | return if ENV["ENV"] == "sauce" 47 | example.attach_file("Hub Log: #{ENV["UDID"]}", File.new("#{ENV["BASE_DIR"]}/output/hub.log")) unless ENV["THREADS"].nil? 48 | @driver.screenshot "#{ENV["BASE_DIR"]}/output/screenshot-#{ENV["UDID"]}.png" 49 | files = (`ls #{ENV["BASE_DIR"]}/output/*#{ENV["UDID"]}*`).split("\n").map { |file| { name: file.match(/output\/(.*)-/)[1], file: file } } 50 | files.each { |file| example.attach_file(file[:name], File.new(file[:file])) } unless files.empty? 51 | end 52 | 53 | def allure_setup 54 | AllureRSpec.configure do |config| 55 | config.include AllureRSpec::Adaptor 56 | config.output_dir = "#{ENV["BASE_DIR"]}/output/allure/#{thread}/" 57 | config.clean_dir = true 58 | end 59 | ParallelTests.first_process? ? FileUtils.rm_rf(AllureRSpec::Config.output_dir) : sleep(1) 60 | end -------------------------------------------------------------------------------- /ios/.rspec: -------------------------------------------------------------------------------- 1 | --color 2 | -p 3 | --require=./spec/spec_helper.rb 4 | --order random 5 | --format documentation 6 | -------------------------------------------------------------------------------- /ios/TestApp/.gitignore: -------------------------------------------------------------------------------- 1 | xcshareddata 2 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/GestureTestViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // GestureTestViewController.h 3 | // TestApp 4 | // 5 | // Created by ThinkSys- Amit on 12/07/13. 6 | // 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface GestureTestViewController : UIViewController 13 | @property (retain, nonatomic) IBOutlet MKMapView *mapView; 14 | 15 | 16 | - (IBAction)handleRotation:(UIRotationGestureRecognizer*)sender; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/GestureTestViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // GestureTestViewController.m 3 | // TestApp 4 | // 5 | // Created by ThinkSys- Amit on 12/07/13. 6 | // 7 | // 8 | 9 | #import "GestureTestViewController.h" 10 | 11 | @interface GestureTestViewController () 12 | 13 | @end 14 | 15 | @implementation GestureTestViewController 16 | 17 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 18 | { 19 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 20 | if (self) { 21 | // Custom initialization 22 | } 23 | return self; 24 | } 25 | 26 | - (void)viewDidLoad 27 | { 28 | [super viewDidLoad]; 29 | // Do any additional setup after loading the view from its nib. 30 | } 31 | 32 | - (void)didReceiveMemoryWarning 33 | { 34 | [super didReceiveMemoryWarning]; 35 | // Dispose of any resources that can be recreated. 36 | } 37 | 38 | - (IBAction)handleRotation:(UIRotationGestureRecognizer*)sender 39 | { 40 | NSLog(@"Rotation Starts"); 41 | sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation); 42 | sender.rotation = 0; 43 | } 44 | - (void)dealloc { 45 | [_mapView release]; 46 | [super dealloc]; 47 | } 48 | @end 49 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/GestureTestViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/MyViewControllerViewController.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2012 Appium Committers 3 | * 4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | #import 23 | #import 24 | #import "GestureTestViewController.h" 25 | 26 | @interface MyViewControllerViewController : UIViewController 27 | @property (retain, nonatomic) IBOutlet UITextField *firstArg; 28 | @property (retain, nonatomic) IBOutlet UITextField *secondArg; 29 | @property (retain, nonatomic) IBOutlet UILabel *answerLabel; 30 | @property (retain, nonatomic) IBOutlet UISwitch *locationStatus; 31 | @property (retain, nonatomic) IBOutlet UIButton *computeSumButton; 32 | @property (nonatomic, retain) CLLocationManager *locationMgr; 33 | 34 | - (IBAction)testGesture:(id)sender; 35 | - (IBAction)computeAction:(id)sender; 36 | - (IBAction)showAlert:(id)sender; 37 | - (IBAction)crashApp:(id)sender; 38 | - (BOOL)textFieldShouldReturn:(UITextField *)textField; 39 | - (void)logLocationAuthFromTimer:(NSTimer *)timer; 40 | - (void)logLocationAuth; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/MyViewControllerViewController.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2012 Appium Committers 3 | * 4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | #import "MyViewControllerViewController.h" 23 | #import 24 | #import 25 | 26 | @interface MyViewControllerViewController () 27 | 28 | @end 29 | 30 | @implementation MyViewControllerViewController 31 | @synthesize computeSumButton; 32 | @synthesize answerLabel; 33 | @synthesize firstArg; 34 | @synthesize secondArg; 35 | @synthesize locationMgr; 36 | @synthesize locationStatus; 37 | 38 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 39 | { 40 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 41 | if (self) { 42 | // Custom initialization 43 | self.locationMgr = [[CLLocationManager alloc] init]; 44 | self.locationMgr.desiredAccuracy = kCLLocationAccuracyBest; 45 | self.locationMgr.delegate = self; 46 | [self logLocationAuth]; 47 | } 48 | 49 | return self; 50 | } 51 | 52 | - (void)viewDidLoad 53 | { 54 | [super viewDidLoad]; 55 | // Do any additional setup after loading the view from its nib. 56 | firstArg.returnKeyType = UIReturnKeyDone; 57 | secondArg.returnKeyType = UIReturnKeyDone; 58 | firstArg.delegate = self; 59 | secondArg.delegate = self; 60 | [NSTimer scheduledTimerWithTimeInterval:0.2 61 | target:self 62 | selector:@selector(logLocationAuthFromTimer:) 63 | userInfo:nil 64 | repeats:NO]; 65 | 66 | [firstArg setAccessibilityIdentifier:@"IntegerA"]; 67 | [secondArg setAccessibilityIdentifier:@"IntegerB"]; 68 | [computeSumButton setAccessibilityIdentifier:@"ComputeSumButton"]; 69 | [answerLabel setAccessibilityIdentifier:@"Answer"]; 70 | [locationStatus setAccessibilityIdentifier:@"locationStatus"]; 71 | 72 | UISwipeGestureRecognizer * swipe =[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeUp:)]; 73 | swipe.direction = UISwipeGestureRecognizerDirectionUp; 74 | [self.view addGestureRecognizer:swipe]; 75 | [swipe release]; 76 | 77 | computeSumButton.titleLabel.text = NSLocalizedString(@"main.button.computeSum", @"Compute Sum button"); 78 | } 79 | 80 | -(void)swipeUp:(UISwipeGestureRecognizer*)gestureRecognizer 81 | { 82 | [secondArg resignFirstResponder]; 83 | } 84 | 85 | 86 | - (void)logLocationAuthFromTimer:(NSTimer *)timer 87 | { 88 | [self logLocationAuth]; 89 | } 90 | 91 | - (void)logLocationAuth 92 | { 93 | CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; 94 | if (status != kCLAuthorizationStatusRestricted && status != kCLAuthorizationStatusDenied) { 95 | locationStatus.on = YES; 96 | } else { 97 | locationStatus.on = NO; 98 | } 99 | } 100 | 101 | - (void)viewDidUnload 102 | { 103 | [self setFirstArg:nil]; 104 | [self setSecondArg:nil]; 105 | [self setAnswerLabel:nil]; 106 | [self setLocationStatus:nil]; 107 | [super viewDidUnload]; 108 | // Release any retained subviews of the main view. 109 | // e.g. self.myOutlet = nil; 110 | } 111 | 112 | - (BOOL)textFieldShouldReturn:(UITextField *)textField { 113 | [textField resignFirstResponder]; 114 | return YES; 115 | } 116 | 117 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 118 | { 119 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 120 | } 121 | 122 | - (void)dealloc { 123 | [self.locationMgr release]; 124 | self.locationMgr = nil; 125 | [firstArg release]; 126 | [secondArg release]; 127 | [answerLabel release]; 128 | [computeSumButton release]; 129 | [super dealloc]; 130 | } 131 | - (IBAction)testGesture:(id)sender 132 | { 133 | GestureTestViewController *test = [[GestureTestViewController alloc] initWithNibName:@"GestureTestViewController" bundle:nil]; 134 | [self presentViewController:test animated:YES completion:NULL]; 135 | } 136 | 137 | - (IBAction)computeAction:(id)sender { 138 | int a = [[firstArg text] intValue]; 139 | int b = [[secondArg text] intValue]; 140 | int sum = a + b; 141 | NSString *newLabelValue = [NSString stringWithFormat:@"%d",sum]; 142 | [answerLabel setText:newLabelValue]; 143 | [answerLabel setAccessibilityLabel:newLabelValue]; 144 | } 145 | 146 | - (IBAction)showAlert:(id)sender { 147 | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Cool title" 148 | message:@"this alert is so cool." 149 | delegate:nil 150 | cancelButtonTitle:@"Cancel" 151 | otherButtonTitles:@"OK", nil]; 152 | [alert show]; 153 | [alert release]; 154 | } 155 | 156 | - (IBAction)crashApp:(id)sender { 157 | abort(); 158 | } 159 | 160 | - (void)requestContactsPermission { 161 | ABAddressBookRef book = [MyViewControllerViewController addressBookForPermissionRequest]; 162 | [self popContactsPermissionDialogWithAddressBook:book]; 163 | } 164 | 165 | - (void)popContactsPermissionDialogWithAddressBook:(ABAddressBookRef)book { 166 | ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) { 167 | }); 168 | CFRelease (book); 169 | } 170 | 171 | + (ABAddressBookRef)addressBookForPermissionRequest { 172 | CFErrorRef error = NULL; 173 | return ABAddressBookCreateWithOptions(NULL, &error); 174 | } 175 | 176 | - (IBAction)accessContactsAlert:(id)sender { 177 | if ([MyViewControllerViewController addressBookAuthorizationStatus] == kABAuthorizationStatusNotDetermined) { 178 | [self requestContactsPermission]; 179 | } 180 | } 181 | 182 | - (IBAction)accessLocationAlert:(id)sender { 183 | CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 184 | 185 | [locationManager startUpdatingLocation]; 186 | [locationManager stopUpdatingLocation]; 187 | } 188 | 189 | + (ABAuthorizationStatus)addressBookAuthorizationStatus { 190 | return ABAddressBookGetAuthorizationStatus(); 191 | } 192 | 193 | @end 194 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/TA2AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2012 Appium Committers 3 | * 4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | #import 23 | 24 | @interface TA2AppDelegate : UIResponder 25 | 26 | @property (strong, nonatomic) UIWindow *window; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/TA2AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2012 Appium Committers 3 | * 4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | #import "TA2AppDelegate.h" 23 | #import "MyViewControllerViewController.h" 24 | 25 | @interface TA2AppDelegate () 26 | 27 | @property (nonatomic, retain) UIViewController *myAddVC; 28 | @end 29 | 30 | @implementation TA2AppDelegate 31 | 32 | @synthesize window = _window; 33 | @synthesize myAddVC; 34 | 35 | 36 | 37 | 38 | - (void)dealloc 39 | { 40 | [_window release]; 41 | [super dealloc]; 42 | } 43 | 44 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 45 | { 46 | self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 47 | // Override point for customization after application launch. 48 | self.window.backgroundColor = [UIColor whiteColor]; 49 | [self.window makeKeyAndVisible]; 50 | 51 | self.myAddVC = [[MyViewControllerViewController alloc] init]; 52 | self.myAddVC.view.frame = self.window.bounds; 53 | [self.window setRootViewController:self.myAddVC]; 54 | 55 | return YES; 56 | } 57 | 58 | - (void)applicationWillResignActive:(UIApplication *)application 59 | { 60 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 61 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 62 | } 63 | 64 | - (void)applicationDidEnterBackground:(UIApplication *)application 65 | { 66 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 67 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 68 | } 69 | 70 | - (void)applicationWillEnterForeground:(UIApplication *)application 71 | { 72 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 73 | } 74 | 75 | - (void)applicationDidBecomeActive:(UIApplication *)application 76 | { 77 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 78 | } 79 | 80 | - (void)applicationWillTerminate:(UIApplication *)application 81 | { 82 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 83 | } 84 | 85 | @end 86 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/TestApp-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | io.appium.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIApplicationExitsOnSuspend 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/TestApp-Prefix.pch: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed to the Apache Software Foundation (ASF) under one 3 | * or more contributor license agreements. See the NOTICE file 4 | * distributed with this work for additional information 5 | * regarding copyright ownership. The ASF licenses this file 6 | * to you under the Apache License, Version 2.0 (the 7 | * "License"); you may not use this file except in compliance 8 | * with the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, 13 | * software distributed under the License is distributed on an 14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | * KIND, either express or implied. See the License for the 16 | * specific language governing permissions and limitations 17 | * under the License. 18 | */ 19 | 20 | #import 21 | 22 | #ifndef __IPHONE_3_0 23 | #warning "This project uses features only available in iOS SDK 3.0 and later." 24 | #endif 25 | 26 | #ifdef __OBJC__ 27 | #import 28 | #import 29 | #endif 30 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed to the Apache Software Foundation (ASF) under one 3 | * or more contributor license agreements. See the NOTICE file 4 | * distributed with this work for additional information 5 | * regarding copyright ownership. The ASF licenses this file 6 | * to you under the Apache License, Version 2.0 (the 7 | * "License"); you may not use this file except in compliance 8 | * with the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, 13 | * software distributed under the License is distributed on an 14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | * KIND, either express or implied. See the License for the 16 | * specific language governing permissions and limitations 17 | * under the License. 18 | */ 19 | 20 | /* Localized versions of Info.plist keys */ 21 | 22 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/Test App 2/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/en.lproj/MyViewControllerViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 54 | 64 | 72 | 73 | 74 | 75 | 76 | 77 | 85 | 96 | 106 | 116 | 117 | 118 | 119 | 120 | 121 | 131 | 141 | 152 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | -------------------------------------------------------------------------------- /ios/TestApp/Test App 2/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2012 Appium Committers 3 | * 4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | #import 23 | 24 | #import "TA2AppDelegate.h" 25 | 26 | int main(int argc, char *argv[]) 27 | { 28 | @autoreleasepool { 29 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([TA2AppDelegate class])); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ios/TestApp/TestApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0FD861CB19A2933400F753B7 /* MyViewControllerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0FD861CD19A2933400F753B7 /* MyViewControllerViewController.xib */; }; 11 | 1BB2B952189053DC00D0591D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BB2B951189053DC00D0591D /* CoreLocation.framework */; }; 12 | 255BAFEC1790223300DE7158 /* GestureTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 255BAFEA1790223300DE7158 /* GestureTestViewController.m */; }; 13 | 255BAFED1790223300DE7158 /* GestureTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 255BAFEB1790223300DE7158 /* GestureTestViewController.xib */; }; 14 | 255BAFEF1790249F00DE7158 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 255BAFEE1790249F00DE7158 /* MapKit.framework */; }; 15 | 3647AE1315CA0082006F70D6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3647AE1215CA0082006F70D6 /* UIKit.framework */; }; 16 | 3647AE1515CA0082006F70D6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3647AE1415CA0082006F70D6 /* Foundation.framework */; }; 17 | 3647AE1715CA0082006F70D6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3647AE1615CA0082006F70D6 /* CoreGraphics.framework */; }; 18 | 3647AE1D15CA0082006F70D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3647AE1B15CA0082006F70D6 /* InfoPlist.strings */; }; 19 | 3647AE1F15CA0082006F70D6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3647AE1E15CA0082006F70D6 /* main.m */; }; 20 | 3647AE2315CA0082006F70D6 /* TA2AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3647AE2215CA0082006F70D6 /* TA2AppDelegate.m */; }; 21 | 3647AE2C15CA00D5006F70D6 /* MyViewControllerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3647AE2A15CA00D5006F70D6 /* MyViewControllerViewController.m */; }; 22 | 36FEEFEE1656DD6000100C04 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 36FEEFED1656DD6000100C04 /* Default-568h@2x.png */; }; 23 | ABB96E8E192ECF150022BE43 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = ABB96E8C192ECF150022BE43 /* Localizable.strings */; }; 24 | EA040B6118D3DF5E00AC02D8 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA040B6018D3DF5E00AC02D8 /* AddressBook.framework */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 0FD861CC19A2933400F753B7 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MyViewControllerViewController.xib; sourceTree = ""; }; 29 | 1BB2B951189053DC00D0591D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 30 | 255BAFE91790223300DE7158 /* GestureTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GestureTestViewController.h; sourceTree = ""; }; 31 | 255BAFEA1790223300DE7158 /* GestureTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GestureTestViewController.m; sourceTree = ""; }; 32 | 255BAFEB1790223300DE7158 /* GestureTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GestureTestViewController.xib; sourceTree = ""; }; 33 | 255BAFEE1790249F00DE7158 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; 34 | 3647AE0E15CA0082006F70D6 /* TestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 3647AE1215CA0082006F70D6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 36 | 3647AE1415CA0082006F70D6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 37 | 3647AE1615CA0082006F70D6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 38 | 3647AE1A15CA0082006F70D6 /* TestApp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestApp-Info.plist"; sourceTree = ""; }; 39 | 3647AE1C15CA0082006F70D6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 40 | 3647AE1E15CA0082006F70D6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 41 | 3647AE2015CA0082006F70D6 /* TestApp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TestApp-Prefix.pch"; sourceTree = ""; }; 42 | 3647AE2115CA0082006F70D6 /* TA2AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TA2AppDelegate.h; sourceTree = ""; }; 43 | 3647AE2215CA0082006F70D6 /* TA2AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TA2AppDelegate.m; sourceTree = ""; }; 44 | 3647AE2915CA00D5006F70D6 /* MyViewControllerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyViewControllerViewController.h; sourceTree = ""; }; 45 | 3647AE2A15CA00D5006F70D6 /* MyViewControllerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyViewControllerViewController.m; sourceTree = ""; }; 46 | 36FEEFED1656DD6000100C04 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 47 | ABB96E8D192ECF150022BE43 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 48 | EA040B6018D3DF5E00AC02D8 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; 49 | /* End PBXFileReference section */ 50 | 51 | /* Begin PBXFrameworksBuildPhase section */ 52 | 3647AE0B15CA0082006F70D6 /* Frameworks */ = { 53 | isa = PBXFrameworksBuildPhase; 54 | buildActionMask = 2147483647; 55 | files = ( 56 | EA040B6118D3DF5E00AC02D8 /* AddressBook.framework in Frameworks */, 57 | 1BB2B952189053DC00D0591D /* CoreLocation.framework in Frameworks */, 58 | 255BAFEF1790249F00DE7158 /* MapKit.framework in Frameworks */, 59 | 3647AE1315CA0082006F70D6 /* UIKit.framework in Frameworks */, 60 | 3647AE1515CA0082006F70D6 /* Foundation.framework in Frameworks */, 61 | 3647AE1715CA0082006F70D6 /* CoreGraphics.framework in Frameworks */, 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | /* End PBXFrameworksBuildPhase section */ 66 | 67 | /* Begin PBXGroup section */ 68 | 3647AE0315CA0082006F70D6 = { 69 | isa = PBXGroup; 70 | children = ( 71 | 255BAFEE1790249F00DE7158 /* MapKit.framework */, 72 | 36FEEFED1656DD6000100C04 /* Default-568h@2x.png */, 73 | 3647AE1815CA0082006F70D6 /* TestApp */, 74 | 3647AE1115CA0082006F70D6 /* Frameworks */, 75 | 3647AE0F15CA0082006F70D6 /* Products */, 76 | ); 77 | sourceTree = ""; 78 | }; 79 | 3647AE0F15CA0082006F70D6 /* Products */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 3647AE0E15CA0082006F70D6 /* TestApp.app */, 83 | ); 84 | name = Products; 85 | sourceTree = ""; 86 | }; 87 | 3647AE1115CA0082006F70D6 /* Frameworks */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | EA040B6018D3DF5E00AC02D8 /* AddressBook.framework */, 91 | 1BB2B951189053DC00D0591D /* CoreLocation.framework */, 92 | 3647AE1215CA0082006F70D6 /* UIKit.framework */, 93 | 3647AE1415CA0082006F70D6 /* Foundation.framework */, 94 | 3647AE1615CA0082006F70D6 /* CoreGraphics.framework */, 95 | ); 96 | name = Frameworks; 97 | sourceTree = ""; 98 | }; 99 | 3647AE1815CA0082006F70D6 /* TestApp */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | 3647AE2115CA0082006F70D6 /* TA2AppDelegate.h */, 103 | 3647AE2215CA0082006F70D6 /* TA2AppDelegate.m */, 104 | 3647AE1915CA0082006F70D6 /* Supporting Files */, 105 | 3647AE2915CA00D5006F70D6 /* MyViewControllerViewController.h */, 106 | 3647AE2A15CA00D5006F70D6 /* MyViewControllerViewController.m */, 107 | 0FD861CD19A2933400F753B7 /* MyViewControllerViewController.xib */, 108 | 255BAFE91790223300DE7158 /* GestureTestViewController.h */, 109 | 255BAFEA1790223300DE7158 /* GestureTestViewController.m */, 110 | 255BAFEB1790223300DE7158 /* GestureTestViewController.xib */, 111 | ); 112 | name = TestApp; 113 | path = "Test App 2"; 114 | sourceTree = ""; 115 | }; 116 | 3647AE1915CA0082006F70D6 /* Supporting Files */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 3647AE1A15CA0082006F70D6 /* TestApp-Info.plist */, 120 | ABB96E8C192ECF150022BE43 /* Localizable.strings */, 121 | 3647AE1B15CA0082006F70D6 /* InfoPlist.strings */, 122 | 3647AE1E15CA0082006F70D6 /* main.m */, 123 | 3647AE2015CA0082006F70D6 /* TestApp-Prefix.pch */, 124 | ); 125 | name = "Supporting Files"; 126 | sourceTree = ""; 127 | }; 128 | /* End PBXGroup section */ 129 | 130 | /* Begin PBXNativeTarget section */ 131 | 3647AE0D15CA0082006F70D6 /* TestApp */ = { 132 | isa = PBXNativeTarget; 133 | buildConfigurationList = 3647AE2615CA0082006F70D6 /* Build configuration list for PBXNativeTarget "TestApp" */; 134 | buildPhases = ( 135 | 3647AE0A15CA0082006F70D6 /* Sources */, 136 | 3647AE0B15CA0082006F70D6 /* Frameworks */, 137 | 3647AE0C15CA0082006F70D6 /* Resources */, 138 | ); 139 | buildRules = ( 140 | ); 141 | dependencies = ( 142 | ); 143 | name = TestApp; 144 | productName = "Test App 2"; 145 | productReference = 3647AE0E15CA0082006F70D6 /* TestApp.app */; 146 | productType = "com.apple.product-type.application"; 147 | }; 148 | /* End PBXNativeTarget section */ 149 | 150 | /* Begin PBXProject section */ 151 | 3647AE0515CA0082006F70D6 /* Project object */ = { 152 | isa = PBXProject; 153 | attributes = { 154 | CLASSPREFIX = TA2; 155 | LastUpgradeCheck = 0460; 156 | }; 157 | buildConfigurationList = 3647AE0815CA0082006F70D6 /* Build configuration list for PBXProject "TestApp" */; 158 | compatibilityVersion = "Xcode 3.2"; 159 | developmentRegion = English; 160 | hasScannedForEncodings = 0; 161 | knownRegions = ( 162 | en, 163 | ); 164 | mainGroup = 3647AE0315CA0082006F70D6; 165 | productRefGroup = 3647AE0F15CA0082006F70D6 /* Products */; 166 | projectDirPath = ""; 167 | projectRoot = ""; 168 | targets = ( 169 | 3647AE0D15CA0082006F70D6 /* TestApp */, 170 | ); 171 | }; 172 | /* End PBXProject section */ 173 | 174 | /* Begin PBXResourcesBuildPhase section */ 175 | 3647AE0C15CA0082006F70D6 /* Resources */ = { 176 | isa = PBXResourcesBuildPhase; 177 | buildActionMask = 2147483647; 178 | files = ( 179 | ABB96E8E192ECF150022BE43 /* Localizable.strings in Resources */, 180 | 3647AE1D15CA0082006F70D6 /* InfoPlist.strings in Resources */, 181 | 0FD861CB19A2933400F753B7 /* MyViewControllerViewController.xib in Resources */, 182 | 36FEEFEE1656DD6000100C04 /* Default-568h@2x.png in Resources */, 183 | 255BAFED1790223300DE7158 /* GestureTestViewController.xib in Resources */, 184 | ); 185 | runOnlyForDeploymentPostprocessing = 0; 186 | }; 187 | /* End PBXResourcesBuildPhase section */ 188 | 189 | /* Begin PBXSourcesBuildPhase section */ 190 | 3647AE0A15CA0082006F70D6 /* Sources */ = { 191 | isa = PBXSourcesBuildPhase; 192 | buildActionMask = 2147483647; 193 | files = ( 194 | 3647AE1F15CA0082006F70D6 /* main.m in Sources */, 195 | 3647AE2315CA0082006F70D6 /* TA2AppDelegate.m in Sources */, 196 | 3647AE2C15CA00D5006F70D6 /* MyViewControllerViewController.m in Sources */, 197 | 255BAFEC1790223300DE7158 /* GestureTestViewController.m in Sources */, 198 | ); 199 | runOnlyForDeploymentPostprocessing = 0; 200 | }; 201 | /* End PBXSourcesBuildPhase section */ 202 | 203 | /* Begin PBXVariantGroup section */ 204 | 0FD861CD19A2933400F753B7 /* MyViewControllerViewController.xib */ = { 205 | isa = PBXVariantGroup; 206 | children = ( 207 | 0FD861CC19A2933400F753B7 /* en */, 208 | ); 209 | name = MyViewControllerViewController.xib; 210 | sourceTree = ""; 211 | }; 212 | 3647AE1B15CA0082006F70D6 /* InfoPlist.strings */ = { 213 | isa = PBXVariantGroup; 214 | children = ( 215 | 3647AE1C15CA0082006F70D6 /* en */, 216 | ); 217 | name = InfoPlist.strings; 218 | sourceTree = ""; 219 | }; 220 | ABB96E8C192ECF150022BE43 /* Localizable.strings */ = { 221 | isa = PBXVariantGroup; 222 | children = ( 223 | ABB96E8D192ECF150022BE43 /* en */, 224 | ); 225 | name = Localizable.strings; 226 | sourceTree = ""; 227 | }; 228 | /* End PBXVariantGroup section */ 229 | 230 | /* Begin XCBuildConfiguration section */ 231 | 3647AE2415CA0082006F70D6 /* Debug */ = { 232 | isa = XCBuildConfiguration; 233 | buildSettings = { 234 | ALWAYS_SEARCH_USER_PATHS = NO; 235 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 236 | CLANG_WARN_CONSTANT_CONVERSION = YES; 237 | CLANG_WARN_ENUM_CONVERSION = YES; 238 | CLANG_WARN_INT_CONVERSION = YES; 239 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 240 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 241 | COPY_PHASE_STRIP = NO; 242 | GCC_C_LANGUAGE_STANDARD = gnu99; 243 | GCC_DYNAMIC_NO_PIC = NO; 244 | GCC_OPTIMIZATION_LEVEL = 0; 245 | GCC_PREPROCESSOR_DEFINITIONS = ( 246 | "DEBUG=1", 247 | "$(inherited)", 248 | ); 249 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 250 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 251 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 252 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 253 | GCC_WARN_UNUSED_VARIABLE = YES; 254 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 255 | SDKROOT = iphoneos; 256 | }; 257 | name = Debug; 258 | }; 259 | 3647AE2515CA0082006F70D6 /* Release */ = { 260 | isa = XCBuildConfiguration; 261 | buildSettings = { 262 | ALWAYS_SEARCH_USER_PATHS = NO; 263 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 264 | CLANG_WARN_CONSTANT_CONVERSION = YES; 265 | CLANG_WARN_ENUM_CONVERSION = YES; 266 | CLANG_WARN_INT_CONVERSION = YES; 267 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 268 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 269 | COPY_PHASE_STRIP = NO; 270 | GCC_C_LANGUAGE_STANDARD = gnu99; 271 | GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; 272 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 273 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 274 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 275 | GCC_WARN_UNUSED_VARIABLE = YES; 276 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 277 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 278 | SDKROOT = iphoneos; 279 | VALIDATE_PRODUCT = YES; 280 | }; 281 | name = Release; 282 | }; 283 | 3647AE2715CA0082006F70D6 /* Debug */ = { 284 | isa = XCBuildConfiguration; 285 | buildSettings = { 286 | CODE_SIGN_IDENTITY = "iPhone Developer"; 287 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 288 | GCC_PREFIX_HEADER = "Test App 2/TestApp-Prefix.pch"; 289 | INFOPLIST_FILE = "Test App 2/TestApp-Info.plist"; 290 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 291 | PRODUCT_NAME = TestApp; 292 | PROVISIONING_PROFILE = ""; 293 | WRAPPER_EXTENSION = app; 294 | }; 295 | name = Debug; 296 | }; 297 | 3647AE2815CA0082006F70D6 /* Release */ = { 298 | isa = XCBuildConfiguration; 299 | buildSettings = { 300 | CODE_SIGN_IDENTITY = "iPhone Developer"; 301 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 302 | GCC_PREFIX_HEADER = "Test App 2/TestApp-Prefix.pch"; 303 | INFOPLIST_FILE = "Test App 2/TestApp-Info.plist"; 304 | INSTALL_PATH = "${LOCAL_APPS_DIR}"; 305 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 306 | PRODUCT_NAME = TestApp; 307 | PROVISIONING_PROFILE = ""; 308 | WRAPPER_EXTENSION = app; 309 | }; 310 | name = Release; 311 | }; 312 | /* End XCBuildConfiguration section */ 313 | 314 | /* Begin XCConfigurationList section */ 315 | 3647AE0815CA0082006F70D6 /* Build configuration list for PBXProject "TestApp" */ = { 316 | isa = XCConfigurationList; 317 | buildConfigurations = ( 318 | 3647AE2415CA0082006F70D6 /* Debug */, 319 | 3647AE2515CA0082006F70D6 /* Release */, 320 | ); 321 | defaultConfigurationIsVisible = 0; 322 | defaultConfigurationName = Release; 323 | }; 324 | 3647AE2615CA0082006F70D6 /* Build configuration list for PBXNativeTarget "TestApp" */ = { 325 | isa = XCConfigurationList; 326 | buildConfigurations = ( 327 | 3647AE2715CA0082006F70D6 /* Debug */, 328 | 3647AE2815CA0082006F70D6 /* Release */, 329 | ); 330 | defaultConfigurationIsVisible = 0; 331 | defaultConfigurationName = Release; 332 | }; 333 | /* End XCConfigurationList section */ 334 | }; 335 | rootObject = 3647AE0515CA0082006F70D6 /* Project object */; 336 | } 337 | -------------------------------------------------------------------------------- /ios/TestApp/TestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/TestApp/TestApp.xcodeproj/project.xcworkspace/xcuserdata/justin.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/TestApp.xcodeproj/project.xcworkspace/xcuserdata/justin.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ios/TestApp/TestApp.xcodeproj/xcuserdata/justin.xcuserdatad/xcschemes/TestApp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/TestApp/TestApp.xcodeproj/xcuserdata/justin.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | TestApp.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 3647AE0D15CA0082006F70D6 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app.dSYM/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleIdentifier 8 | com.apple.xcode.dsym.io.appium.TestApp 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundlePackageType 12 | dSYM 13 | CFBundleSignature 14 | ???? 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app.zip -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/GestureTestViewController.nib/objects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/GestureTestViewController.nib/objects.nib -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/GestureTestViewController.nib/runtime.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/GestureTestViewController.nib/runtime.nib -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/Info.plist -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/TestApp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/TestApp -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Default-568h@2x.png 8 | 9 | D8STS3mHDv2ya6HKCvP6jrq8eig= 10 | 11 | GestureTestViewController.nib/objects.nib 12 | 13 | 7LDB0Duzk739rHCpsPaoq8iTZFY= 14 | 15 | GestureTestViewController.nib/runtime.nib 16 | 17 | bGcbxpseenEib767nqVmOaZL1XU= 18 | 19 | Info.plist 20 | 21 | LAHMwmcp8tMGO7u2eSDtXUmsgGI= 22 | 23 | PkgInfo 24 | 25 | n57qDP4tZfLD1rCS43W0B4LQjzE= 26 | 27 | embedded.mobileprovision 28 | 29 | +b9dq7YdgS7KMlKPsSY21LgKH4s= 30 | 31 | en.lproj/InfoPlist.strings 32 | 33 | hash 34 | 35 | zmV6UqBSo6r1NOz798vd5O4zTBA= 36 | 37 | optional 38 | 39 | 40 | en.lproj/Localizable.strings 41 | 42 | hash 43 | 44 | i5FCNEf4Khf5CMab7k9hsO+vWJ0= 45 | 46 | optional 47 | 48 | 49 | en.lproj/MyViewControllerViewController.nib/objects.nib 50 | 51 | hash 52 | 53 | 6q8863bi9fHijEWqYFnBSbBTFeA= 54 | 55 | optional 56 | 57 | 58 | en.lproj/MyViewControllerViewController.nib/runtime.nib 59 | 60 | hash 61 | 62 | SAjuIeWeTGDDu4G8qfajqzipxhg= 63 | 64 | optional 65 | 66 | 67 | 68 | files2 69 | 70 | Default-568h@2x.png 71 | 72 | D8STS3mHDv2ya6HKCvP6jrq8eig= 73 | 74 | GestureTestViewController.nib/objects.nib 75 | 76 | 7LDB0Duzk739rHCpsPaoq8iTZFY= 77 | 78 | GestureTestViewController.nib/runtime.nib 79 | 80 | bGcbxpseenEib767nqVmOaZL1XU= 81 | 82 | embedded.mobileprovision 83 | 84 | +b9dq7YdgS7KMlKPsSY21LgKH4s= 85 | 86 | en.lproj/InfoPlist.strings 87 | 88 | hash 89 | 90 | zmV6UqBSo6r1NOz798vd5O4zTBA= 91 | 92 | optional 93 | 94 | 95 | en.lproj/Localizable.strings 96 | 97 | hash 98 | 99 | i5FCNEf4Khf5CMab7k9hsO+vWJ0= 100 | 101 | optional 102 | 103 | 104 | en.lproj/MyViewControllerViewController.nib/objects.nib 105 | 106 | hash 107 | 108 | 6q8863bi9fHijEWqYFnBSbBTFeA= 109 | 110 | optional 111 | 112 | 113 | en.lproj/MyViewControllerViewController.nib/runtime.nib 114 | 115 | hash 116 | 117 | SAjuIeWeTGDDu4G8qfajqzipxhg= 118 | 119 | optional 120 | 121 | 122 | 123 | rules 124 | 125 | ^ 126 | 127 | ^.*\.lproj/ 128 | 129 | optional 130 | 131 | weight 132 | 1000 133 | 134 | ^.*\.lproj/locversion.plist$ 135 | 136 | omit 137 | 138 | weight 139 | 1100 140 | 141 | ^version.plist$ 142 | 143 | 144 | rules2 145 | 146 | .*\.dSYM($|/) 147 | 148 | weight 149 | 11 150 | 151 | ^ 152 | 153 | weight 154 | 20 155 | 156 | ^(.*/)?\.DS_Store$ 157 | 158 | omit 159 | 160 | weight 161 | 2000 162 | 163 | ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ 164 | 165 | nested 166 | 167 | weight 168 | 10 169 | 170 | ^.* 171 | 172 | ^.*\.lproj/ 173 | 174 | optional 175 | 176 | weight 177 | 1000 178 | 179 | ^.*\.lproj/locversion.plist$ 180 | 181 | omit 182 | 183 | weight 184 | 1100 185 | 186 | ^Info\.plist$ 187 | 188 | omit 189 | 190 | weight 191 | 20 192 | 193 | ^PkgInfo$ 194 | 195 | omit 196 | 197 | weight 198 | 20 199 | 200 | ^[^/]+$ 201 | 202 | nested 203 | 204 | weight 205 | 10 206 | 207 | ^embedded\.provisionprofile$ 208 | 209 | weight 210 | 20 211 | 212 | ^version\.plist$ 213 | 214 | weight 215 | 20 216 | 217 | 218 | 219 | 220 | -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/embedded.mobileprovision: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/embedded.mobileprovision -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/MyViewControllerViewController.nib/objects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/MyViewControllerViewController.nib/objects.nib -------------------------------------------------------------------------------- /ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/MyViewControllerViewController.nib/runtime.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/Release-iphoneos/TestApp.app/en.lproj/MyViewControllerViewController.nib/runtime.nib -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/GestureTestViewController-PartialInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/MyViewControllerViewController-PartialInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.d: -------------------------------------------------------------------------------- 1 | dependencies: \ 2 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/GestureTestViewController.m \ 3 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/GestureTestViewController.h 4 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.dia -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.o -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.d: -------------------------------------------------------------------------------- 1 | dependencies: \ 2 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/MyViewControllerViewController.m \ 3 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/MyViewControllerViewController.h \ 4 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/GestureTestViewController.h 5 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.dia -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.o -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.d: -------------------------------------------------------------------------------- 1 | dependencies: \ 2 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/TA2AppDelegate.m \ 3 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/TA2AppDelegate.h \ 4 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/MyViewControllerViewController.h \ 5 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/GestureTestViewController.h 6 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.dia -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.o -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TestApp.LinkFileList: -------------------------------------------------------------------------------- 1 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.o 2 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.o 3 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.o 4 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.o 5 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TestApp_dependency_info.dat: -------------------------------------------------------------------------------- 1 | @(#)PROGRAM:ld PROJECT:ld64-253.9 2 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TestApp.LinkFileList/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/AddressBook.framework/AddressBook.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/AddressBook.framework/AddressBook/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/CoreLocation.framework/CoreLocation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/CoreLocation.framework/CoreLocation/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/MapKit.framework/MapKit.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/MapKit.framework/MapKit/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/UIKit.framework/UIKit.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/UIKit.framework/UIKit/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/Foundation.framework/Foundation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/Foundation.framework/Foundation/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/CoreGraphics.framework/CoreGraphics.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/CoreGraphics.framework/CoreGraphics/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/Foundation.framework/Foundation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/Foundation.framework/Foundation/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libobjc.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libobjc.dylib/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libobjc.so/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libobjc.a/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libSystem.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libSystem.dylib/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libSystem.so/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libSystem.a/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/lib/darwin/libclang_rt.ios.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/lib/darwin/libclang_rt.ios.a/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/lib/darwin/libclang_rt.ios.tbd@/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/TestApp.app/TestApp/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.o/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/TA2AppDelegate.o/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/MyViewControllerViewController.o/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/GestureTestViewController.o/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//AddressBook.framework/AddressBook.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//CoreLocation.framework/CoreLocation.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//MapKit.framework/MapKit.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//UIKit.framework/UIKit.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//Foundation.framework/Foundation.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//CoreGraphics.framework/CoreGraphics.tbd/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libobjc.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libSystem.tbd/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/lib/darwin/libclang_rt.ios.a/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/CoreFoundation.framework/CoreFoundation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/CoreFoundation.framework/CoreFoundation/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libextension.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libextension.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libextension.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libextension.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libextension.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/UIFoundation.framework/UIFoundation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/UIFoundation.framework/UIFoundation/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//UIFoundation.framework/UIFoundation.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks//UIFoundation.framework/UIFoundation/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libkeymgr.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libkeymgr.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libkeymgr.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libkeymgr.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libkeymgr.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcache.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcache.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcache.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcache.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libcache.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcommonCrypto.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcommonCrypto.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcommonCrypto.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcommonCrypto.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libcommonCrypto.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcompiler_rt.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcompiler_rt.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcompiler_rt.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcompiler_rt.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libcompiler_rt.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcopyfile.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcopyfile.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcopyfile.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcopyfile.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libcopyfile.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcorecrypto.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libcorecrypto.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcorecrypto.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libcorecrypto.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libcorecrypto.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libdispatch.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libdispatch.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libdispatch.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libdispatch.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libdispatch.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libdyld.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libdyld.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libdyld.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libdyld.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libdyld.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/liblaunch.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/liblaunch.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/liblaunch.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/liblaunch.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/liblaunch.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libmacho.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libmacho.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libmacho.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libmacho.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libmacho.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libremovefile.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libremovefile.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libremovefile.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libremovefile.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libremovefile.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_asl.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_asl.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_asl.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_asl.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_asl.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_blocks.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_blocks.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_blocks.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_blocks.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_blocks.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_c.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_c.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_c.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_c.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_c.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_configuration.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_configuration.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_configuration.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_configuration.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_configuration.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_containermanager.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_containermanager.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_containermanager.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_containermanager.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_containermanager.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_coreservices.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_coreservices.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_coreservices.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_coreservices.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_coreservices.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_coretls.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_coretls.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_coretls.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_coretls.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_coretls.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_dnssd.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_dnssd.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_dnssd.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_dnssd.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_dnssd.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_info.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_info.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_info.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_info.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_info.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_kernel.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_kernel.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_kernel.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_kernel.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_kernel.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_m.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_m.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_m.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_m.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_m.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_malloc.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_malloc.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_malloc.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_malloc.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_malloc.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_network.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_network.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_network.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_network.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_network.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_networkextension.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_networkextension.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_networkextension.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_networkextension.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_networkextension.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_notify.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_notify.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_notify.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_notify.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_notify.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_platform.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_platform.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_platform.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_platform.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_platform.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_pthread.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_pthread.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_pthread.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_pthread.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_pthread.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_sandbox.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_sandbox.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_sandbox.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_sandbox.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_sandbox.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_trace.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libsystem_trace.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_trace.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libsystem_trace.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libsystem_trace.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libunwind.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libunwind.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libunwind.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libunwind.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libunwind.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libvminterpose.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libvminterpose.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libvminterpose.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libvminterpose.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libvminterpose.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libxpc.dylib.tbd/Users/justin/repos/appium-mobile-grid/ios/TestApp/build/Release-iphoneos/libxpc.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libxpc.dylib.tbd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libxpc.dylib/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/system/libxpc.tbd -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.d: -------------------------------------------------------------------------------- 1 | dependencies: \ 2 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/main.m \ 3 | /Users/justin/repos/appium-mobile-grid/ios/TestApp/Test\ App\ 2/TA2AppDelegate.h 4 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.dia -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/Objects-normal/armv7/main.o -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-all-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-all-target-headers.hmap -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-generated-files.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-own-target-headers.hmap -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-project-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp-project-headers.hmap -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp.app.xcent: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | application-identifier 6 | 2L4NQN3NU9.io.appium.TestApp 7 | com.apple.developer.team-identifier 8 | 2L4NQN3NU9 9 | get-task-allow 10 | 11 | keychain-access-groups 12 | 13 | 2L4NQN3NU9.io.appium.TestApp 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/TestApp.hmap -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/dgph: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/dgph -------------------------------------------------------------------------------- /ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/dgph~: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/TestApp.build/Release-iphoneos/TestApp.build/dgph~ -------------------------------------------------------------------------------- /ios/TestApp/build/release-iphonesimulator/TestApp.app.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/ios/TestApp/build/release-iphonesimulator/TestApp.app.zip -------------------------------------------------------------------------------- /ios/appium.txt: -------------------------------------------------------------------------------- 1 | [caps] 2 | appium-version = "1.4.16" 3 | platformName = "iOS" 4 | platformVersion = "9.2" 5 | deviceName = "iPhone Simulator" 6 | 7 | [appium_lib] 8 | wait = 30 -------------------------------------------------------------------------------- /ios/helpers.rb: -------------------------------------------------------------------------------- 1 | module Helpers 2 | class << self 3 | #puts iOS specific helper methods here... 4 | end 5 | end 6 | 7 | module Kernel 8 | def helper 9 | Helpers 10 | end 11 | end -------------------------------------------------------------------------------- /ios/spec/alert_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe "Validate Alert Popups #{ENV["UDID"]}" do 4 | 5 | it 'Alert popup text', :sauce do 6 | find_element(:id, "show alert").click 7 | expect(texts.first.text).to eq "Cool title" 8 | expect(texts.last.text).to eq "FAIL ON PURPOSE!!!" 9 | end 10 | end -------------------------------------------------------------------------------- /ios/spec/features_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe "Validate Test App Features #{ENV["UDID"]}" do 4 | 5 | it 'Compute Sum' do 6 | a = rand(99); b = rand(99) 7 | find_element(:id, "IntegerA").type a 8 | find_element(:id, "IntegerB").type b 9 | find_element(:id, "ComputeSumButton").click 10 | expect(find_element(:id, "Answer").text).to eq (a + b).to_s 11 | end 12 | 13 | it 'Slide Slidder' do 14 | slider = find_element(:class, "UIASlider") 15 | Appium::TouchAction.new.press(element: slider, x: 60, y: 3).move_to(element: slider, x: 150, y: 3).release.perform 16 | expect(slider.value).to eq "100%" 17 | end 18 | end -------------------------------------------------------------------------------- /ios/spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require_relative "#{ENV["BASE_DIR"]}/common/methods" 2 | 3 | set_udid_environment_variable 4 | 5 | RSpec.configure do |config| 6 | config.color = true 7 | config.tty = true 8 | 9 | config.before :all do 10 | initialize_appium_and_methods "ios" 11 | end 12 | 13 | config.after :each do |e| 14 | update_sauce_status @driver.session_id, e.exception.nil? 15 | unless e.exception.nil? 16 | attach_report_files e 17 | end 18 | end 19 | 20 | config.after :all do 21 | @driver.driver_quit 22 | end 23 | end 24 | 25 | allure_setup -------------------------------------------------------------------------------- /node_configs/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/node_configs/.gitignore -------------------------------------------------------------------------------- /output/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/output/.gitignore -------------------------------------------------------------------------------- /output/.txt: -------------------------------------------------------------------------------- 1 | thread: 1 2 | os: 6.0 3 | manufacturer: unknown 4 | model: Android SDK built for x86 5 | sdk: 23 6 | thread: 2 7 | os: 5.0.2 8 | manufacturer: unknown 9 | model: Android SDK built for x86 10 | sdk: 21 11 | thread: 3 12 | os: 5.1.1 13 | manufacturer: unknown 14 | model: Android SDK built for x86 15 | sdk: 22 16 | thread: 4 17 | os: 4.4.4 18 | manufacturer: unknown 19 | model: Android SDK built for x86 20 | sdk: 19 21 | thread: 5 22 | os: 4.2.2 23 | manufacturer: unknown 24 | model: Android SDK built for x86 25 | sdk: 17 26 | thread: 6 27 | os: 4.3.1 28 | manufacturer: unknown 29 | model: Android SDK built for x86 30 | sdk: 18 31 | thread: 1 32 | os: 6.0 33 | manufacturer: unknown 34 | model: Android SDK built for x86 35 | sdk: 23 36 | thread: 2 37 | os: 5.0.2 38 | manufacturer: unknown 39 | model: Android SDK built for x86 40 | sdk: 21 41 | thread: 3 42 | os: 5.1.1 43 | manufacturer: unknown 44 | model: Android SDK built for x86 45 | sdk: 22 46 | thread: 4 47 | os: 4.4.4 48 | manufacturer: unknown 49 | model: Android SDK built for x86 50 | sdk: 19 51 | thread: 5 52 | os: 4.2.2 53 | manufacturer: unknown 54 | model: Android SDK built for x86 55 | sdk: 17 56 | thread: 6 57 | os: 4.3.1 58 | manufacturer: unknown 59 | model: Android SDK built for x86 60 | sdk: 18 61 | -------------------------------------------------------------------------------- /output/allure/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/output/allure/.gitignore -------------------------------------------------------------------------------- /selenium-server-standalone-2.47.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isonic1/appium-mobile-grid/4a73522064f0adea470c7eee1abb467c00c9d118/selenium-server-standalone-2.47.1.jar -------------------------------------------------------------------------------- /server_launcher.rb: -------------------------------------------------------------------------------- 1 | require 'parallel' 2 | require 'json' 3 | 4 | def get_android_devices 5 | devs = (`adb devices`).split("\n").select { |x| x.include? "\tdevice" }.map.each_with_index { |d,i| { platform: "android", name: "android", udid: d.split("\t")[0], thread: i + 1 } } 6 | devices = devs.map { |x| x.merge(get_android_device_data(x[:udid]))} 7 | ENV["DEVICES"] = JSON.generate(devices) 8 | devices 9 | end 10 | 11 | def get_android_device_data udid 12 | specs = { os: "ro.build.version.release", manufacturer: "ro.product.manufacturer", model: "ro.product.model", sdk: "ro.build.version.sdk" } 13 | hash = {} 14 | specs.each do |key, spec| 15 | value = `adb -s #{udid} shell getprop "#{spec}"`.strip 16 | hash.merge!({key=> "#{value}"}) 17 | end 18 | hash 19 | end 20 | 21 | def get_ios_devices 22 | devs = (`idevice_id -l`).split.uniq.map.each_with_index { |d,i| { udid: d, thread: i + 1 } } 23 | devices = devs.map { |x| x.merge(get_ios_device_data(x[:udid]))} 24 | ENV["DEVICES"] = JSON.generate(devices) 25 | devices 26 | end 27 | 28 | def get_ios_device_data udid 29 | specs = { type: "DeviceClass", name: "DeviceName", arc: "CPUArchitecture", sdk: "ProductType", os: "ProductVersion" } 30 | hash = {} 31 | specs.each do |key, spec| 32 | value = (`ideviceinfo -u #{udid} | grep #{spec} | awk '{$1=""; print $0}'`).strip 33 | hash.merge!({key=> "#{value}"}) 34 | end 35 | hash 36 | end 37 | 38 | def get_devices platform 39 | if platform == "android" 40 | get_android_devices 41 | elsif platform == "ios" 42 | get_ios_devices 43 | end 44 | end 45 | 46 | def save_device_data dev_array 47 | dev_array.each do |device| 48 | device.each do |k,v| 49 | open("output/specs-#{device[:udid]}.log", 'a') do |file| 50 | file << "#{k}: #{v}\n" 51 | end 52 | end 53 | end 54 | end 55 | 56 | def kill_process process 57 | `ps -ef | grep #{process} | awk '{print $2}' | xargs kill >> /dev/null 2>&1` 58 | end 59 | 60 | def appium_server_start(**options) 61 | command = 'appium' 62 | command << " --nodeconfig #{options[:config]}" if options.key?(:config) 63 | command << " -p #{options[:port]}" if options.key?(:port) 64 | command << " -bp #{options[:bp]}" if options.key?(:bp) 65 | command << " --udid #{options[:udid]}" if options.key?(:udid) 66 | command << " --log #{Dir.pwd}/output/#{options[:log]}" if options.key?(:log) 67 | command << " --tmp /tmp/#{options[:tmp]}" if options.key?(:tmp) 68 | Dir.chdir('.') { 69 | pid = spawn(command, :out=>"/dev/null") 70 | puts 'Waiting for Appium to start up...' 71 | sleep 10 72 | if pid.nil? 73 | puts 'Appium server did not start :(' 74 | end 75 | } 76 | end 77 | 78 | def generate_node_config(file_name, appium_port, device) 79 | system "mkdir node_configs >> /dev/null 2>&1" 80 | f = File.new("#{Dir.pwd}/node_configs/#{file_name}", "w") 81 | f.write( JSON.generate( 82 | { capabilities: [{ browserName: device[:udid], maxInstances: 1, platform: device[:platform] }], 83 | configuration: { cleanUpCycle: 2000, 84 | timeout: 180000, 85 | registerCycle: 5000, 86 | proxy: "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 87 | url: "http://127.0.0.1:#{appium_port}/wd/hub", 88 | host: "127.0.0.1", 89 | port: appium_port, 90 | maxSession: 1, 91 | register: true, 92 | hubPort: 4444, 93 | hubHost: "localhost" }})) 94 | f.close 95 | end 96 | 97 | def start_hub 98 | kill_process "selenium" 99 | spawn("java -jar selenium-server-standalone-2.47.1.jar -role hub -log #{Dir.pwd}/output/hub.log &", :out=>"/dev/null") 100 | sleep 3 #wait for hub to start... 101 | spawn("open -a safari http://127.0.0.1:4444/grid/console") 102 | end 103 | 104 | def start_single_appium platform 105 | kill_process "appium" 106 | devices = get_devices(platform)[0] 107 | save_device_data [devices] 108 | appium_server_start udid: devices[:udid], log: "appium-#{devices[:udid]}.log" 109 | end 110 | 111 | def launch_hub_and_nodes platform 112 | kill_process "appium" 113 | start_hub #comment out or remove if you already have a hub running. 114 | devices = get_devices(platform) 115 | save_device_data devices 116 | ENV["THREADS"] = devices.size.to_s 117 | Parallel.map_with_index(devices, in_processes: devices.size) do |device, index| 118 | port = 4000 + index 119 | bp = 2250 + index 120 | config_name = "#{device[:udid]}.json" 121 | generate_node_config config_name, port, device 122 | node_config = "#{Dir.pwd}/node_configs/#{config_name}" 123 | appium_server_start config: node_config, port: port, bp: bp, udid: device[:udid], log: "appium-#{device[:udid]}.log", tmp: device[:udid] 124 | end 125 | end --------------------------------------------------------------------------------