iOS實現虛擬定位的多種玩法

Xcode Simulate Location

蘋果爲開發者提供的在調試模式下,可模擬定位的功能,方便開發者進行地圖定位類APP的功能調試。咱們可藉助此功能實現虛擬定位,具體步驟以下:html

  1. 打開Xcode建立一個新工程,插上手機直接運行。在菜單欄選擇Debug - Simulate Location
    能夠見到已預置了幾個經常使用的模擬地址,咱們直接試試選擇Lodon,England。這個時候直接點Home鍵返回手機桌面,試試微信、百度地圖等等APP發現當前定位已模擬成倫敦了。
  2. 咱們能夠看到最後一項有一個Add GPX File to Project,咱們能夠經過導入gpx文件實現自定義模擬定位。
  3. 接下來咱們建立一個gpx文件,菜單欄-File-New-File..,
    文件名隨便,我這裏使用了默認的Location名稱,接下來打開gpx文件以下:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
    
    <!--
     Provide one or more waypoints containing a latitude/longitude pair. If you provide one
     waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
     Xcode will simulate a route visiting each waypoint.
     -->
    <wpt lat="37.331705" lon="-122.030237">
        <name>Cupertino</name>
        
        <!--
         Optionally provide a time element for each waypoint. Xcode will interpolate movement
         at a rate of speed based on the time elapsed between each waypoint. If you do not provide
         a time element, then Xcode will use a fixed rate of speed.
         
         Waypoints must be sorted by time in ascending order.
         -->
        <time>2014-09-24T14:55:37Z</time>
    </wpt>
    
</gpx>

複製代碼

<wpt lat="37.331705" lon="-122.030237"> 這行即經緯度數據,這裏能夠直接修改爲你想要模擬定位的經緯度,網上有不少網站能夠獲取某個地點的經緯度,這裏你們本身去查找就好了,而後在Simulate Location中選擇咱們gpx的文件名,我這裏的名稱是Location,點擊後便可模擬定位到所在地址。node

斷開手機鏈接線,本次的模擬定位仍然生效。關閉咱們建立的工程運行的APP進程,便可恢復真實定位。想要再次模擬定位,須要從新鏈接手機,使用Xcode運行工程,進行Simulate Locationgit

基於此技術的有趣第三方庫

github.com/kahopoon/Po…github

使用node.js、腳本實現可視化實時修改gpx文件並生效c#

libimobiledevice

一個跨平臺的「溝通」iOS設備的庫。地址:github.com/libimobiled… 安裝此命令行工具後,可以使用命令行獲取設備信息、查看日誌、安裝ipa、關機、重啓等操做。不少iOS助手例如PP助手、iTools、愛思助手等都基於此庫實現的。bash

推薦兩個Mac端的iOS設備管理工具微信

  1. www.thinkskysoft.com/itools/ 提供虛擬定位、路線等。訂購類APP
  2. www.i4.cn/ 愛思助手,提供虛擬定位,免費

這兩個工具實現虛擬定位的原理:app

前面咱們使用的Simulate Location功能,原理是調用iOS設備中的com.apple.dt.simulatelocation服務,咱們能夠經過libimobiledevice的service模塊開啓com.apple.dt.simulatelocation服務來實現脫離經過Xcode來模擬定位。這裏找到網上一篇專門分析此方法的文章,www.secpulse.com/archives/76… 他裏面講到大體實現的代碼以下 ide

這裏還有個第三方庫基於libimobiledevice對模擬定位服務的封裝,使用更簡單。 github.com/JonGabilond…工具

此庫中基於libimobiledevice開啓iOS設備模擬定位的關鍵代碼

if ((lockdownd_start_service(client, "com.apple.dt.simulatelocation",  &service) != LOCKDOWN_E_SUCCESS) || !service) {
複製代碼

github.com/JonGabilond…

相關文章
相關標籤/搜索