require 'sim_launcher' require 'calabash-cucumber/launch/simulator_helper' def quit_sim `echo 'application "iPhone Simulator" quit' | osascript` end def calabash_sim_reset reset_script = File.expand_path("#{@script_dir}/reset_simulator.scpt") launcher = SimLauncher::Simulator.new sdks = ENV['SDK_VERSIONS'] if sdks sdks = sdks.split(",") else sdks = SimLauncher::SdkDetector.new(launcher).available_sdk_versions end sdks.each do |sdk_path_str| launcher.launch_ios_app(app_bundle_path, sdk_path_str, "ipad") system("osascript #{reset_script}") launcher.launch_ios_app(app_bundle_path, sdk_path_str, "iphone") system("osascript #{reset_script}") end quit_sim end def calabash_sim_accessibility dirs = Dir.glob(File.join(File.expand_path("~/Library"),"Application Support","iPhone Simulator","*.*","Library","Preferences")) dirs.each do |sim_pref_dir| fp = File.expand_path("#{@script_dir}/data/") FileUtils.cp("#{fp}/com.apple.Accessibility.plist", sim_pref_dir) end end def calabash_sim_location(args) if args.length == 0 print_usage exit 0 end on_off = args.shift if args.length == 0 print_usage exit 0 end bundle_id = args.shift dirs = Dir.glob(File.join(File.expand_path("~/Library"),"Application Support","iPhone Simulator","*.*","Library","Caches","locationd")) dirs.each do |sim_dir| existing_path = "#{sim_dir}/clients.plist" if File.exist?(existing_path) plist_path = existing_path else plist_path = File.expand_path("#{@script_dir}/data/clients.plist") end plist = CFPropertyList::List.new(:file => plist_path) hash = CFPropertyList.native_types(plist.value) app_hash = hash[bundle_id] if not app_hash app_hash = hash[bundle_id] = {} end app_hash["BundleId"] = bundle_id app_hash["Authorized"] = on_off == "on" ? true : false app_hash["LocationTimeStarted"] = 0 ##Plist edit the template res_plist = CFPropertyList::List.new res_plist.value = CFPropertyList.guess(hash) res_plist.save(existing_path, CFPropertyList::List::FORMAT_BINARY) end end def calabash_sim_locale(args) prefs_path = File.expand_path("#{@script_dir}/data/.GlobalPreferences.plist") plist = CFPropertyList::List.new(:file => prefs_path) hash = CFPropertyList.native_types(plist.value) if args.length == 0 print_usage puts "Options: \n" puts hash['AppleLanguages'].join("\n") exit 0 end lang = args.shift reg = nil if args.length == 1 reg = args.shift end langs = hash['AppleLanguages'] lang_index = langs.find_index {|l| l == lang} if lang_index.nil? puts "Unable to find #{lang}..." puts "Options:\n#{langs.join("\n")}" exit 0 end langs[0],langs[lang_index] = langs[lang_index],langs[0] if reg hash['AppleLocale'] = reg end res_plist = CFPropertyList::List.new res_plist.value = CFPropertyList.guess(hash) dirs = Dir.glob(File.join(File.expand_path("~/Library"),"Application Support","iPhone Simulator","*.*","Library","Preferences")) dirs.each do |sim_pref_dir| res_plist.save("#{sim_pref_dir}/.GlobalPreferences.plist", CFPropertyList::List::FORMAT_BINARY) end end def calabash_sim_device(args) quit_sim options = ["iPad", "iPhone", "iPhone_Retina"] if args.length != 1 or not options.find {|x| x == args[0]} print_usage puts "Unrecognized args: #{args}" puts "should be one of #{options}" exit(0) end path =File.join(File.expand_path("~/Library"),"Preferences","com.apple.iphonesimulator.plist") plist = CFPropertyList::List.new(:file => path) hash = CFPropertyList.native_types(plist.value) hash['SimulateDevice'] = args[0].gsub("iPhone_Retina","iPhone (Retina)") plist.value = CFPropertyList.guess(hash) plist.save(path, CFPropertyList::List::FORMAT_BINARY) end