這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
最近Pokemon Go 火的不行,結果人家伺服器扛不住了,只接受GPS定位資訊在澳洲的用戶端的登陸請求。今天自己搞了個小Demo,在未越獄的iPhone上把系統的GPS定位資訊給改了。
步驟:
在Xcode8-beta
上建立一個空白工程 -> Edit scheme
-> Default Location
選澳洲 -> Device選真機裝置,Run
Paste_Image.png
現在,看看自己手機(我是iOS10系統):
1.:
Paste_Image.png
2.高德地圖:
Paste_Image.png
3.系統相機隨便拍個照,查看位置資訊
Paste_Image.png
4.尋找我的iPhone
Paste_Image.png
現在美中不足是,即使應用刪除,GPS定位資訊還是假的,需要刪除應用重啟手機,才能恢複正常GPS。Demo我放在了Github上https://github.com/sueLan/RYFakeGPS。
用免費開發人員帳號也可以在真機上調試http://www.jianshu.com/p/540e722b8eff
早有Fake GPS這種提供虛擬定位資訊的應用。勞資以前沒有研究過.也有人逆向微博,在運行時修改定位信. 但這些方法的前提是你有個越獄裝置。Quora上早也有討論過,如何未越獄裝置上如何修改GPS定位資訊.各路神招:重載CLLocationManager方法、安裝GPS中繼器假冒GPS訊號、裝置代理程式、iOS模擬器Debug模式的Location類比......
GPS定位原理
我們先來看一個部落格,iOS定位原理.我抄了一段:
GPS定位原理: 這個是美國軍方搞的, 軍民兩用, 但仍然完全受軍方控制(比如可以隨時隨地設定某個地區收到的訊號與否及其精度), 其原理就是:利用天上的衛星(共24顆)不斷地廣播訊號, 地面的GPS接收裝置收到訊號後, 通過分析多個衛星訊號,就可以計算出地球座標, GPS保證全球任何一個地方(98%)都可以同時收到至少4個衛星的訊號, 從而可以準確確定您的經緯度以及海拔位置. GPS定位精度可達10米以內, 不過這是美國軍方控制的, 戰爭時期可能變的不穩定或者誤判. (不過我國也有自己的系統, 北鬥系統, 目前已經亞洲的覆蓋, 還在推廣中)衛星定位必須要能收到衛星訊號,因為衛星訊號都是很微弱的,雖然iPhone 4開始提升了GPS硬體的靈敏度,但仍然需要在窗戶旁,或者戶外使用,才能確保衛星訊號的強度和穩定性。與基站定位和WIFI定位相比,GPS耗電最大,速度最慢,但是精度最高。而iPhone的GPS與純粹的GPS定位不同, 稱為A-GPS, 即輔助GPS.(比GPS更優,不過GPS也分晶片和效能的,不是說所有的AGPS比所有的GPS都好)因為GPS定位中最耗時、最耗電的就是擷取當前天上的衛星資訊,哪些衛星可見、在什麼位置、時鐘是多少等等,這個過程可能花費數十秒甚至幾分鐘,而AGPS就是利用網路,首先將基站定位或者WIFI定位獲得的大概位置發到遠程伺服器,有伺服器進行查詢和計算,得出這個位置下當前衛星資訊,反饋給iOS裝置,iOS裝置就可以直接用這些資訊來接受衛星訊號,不用自己去掃描分析了。這樣可以極大提高定位速度,將初次定位時間縮短到1~2秒完成。A-GPS優點是定位快,缺點是需要網路,但也只是在初次定位時需要網路,因為一旦衛星資訊返回,在有限時間和範圍內,這些資訊無須改變,之後的GPS定位就不再需要連網,都是直接用這些衛星參數接受資訊了。在iOS裝置上,上述定位方式會綜合應用,一般地,可能先按照最快的“無網基站定位”返回一個位置,當有網路連接時,在用有網基站定點更新位置,然後,利用AGPS上網查詢衛星星圖,最後,在能收到GPS訊號的情況下,轉為使用GPS定位。根據當前訊號情況和網路環境,iOS可能在上述方式之間反覆迭代,不一定一致特定步驟或者方式,而且隨著iOS升級,定位順序和規則可能改變。
GPX FILES
GPX(GPS eXchange Format,GPS交換格式)是一個XML格式,為應用軟體設計的通用GPS資料格式。它可以用來描述路點、軌跡、路程。它用來儲存位置,海拔和時間。
Paste_Image.png
Xcode也是用GPX 檔案來儲存位置資訊.所以,我們還可以自訂一個GPX檔案,類比任意的位置資訊。
Paste_Image.png
https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html
https://github.com/whilethis/location-simulation
大多數App取定位資訊的時候,都是調用用系統的Core Location API ,CLLocationManager.
Paste_Image.png
然而在此所有app調用定位服務後,擷取到的都是我在FakeGPS工程中選的Default Location的定位資訊。Why ? 有人說是bughttp://stackoverflow.com/questions/14285453/xcode-default-simulated-location
Paste_Image.png
各種聯想中...
文/藍新(簡書作者)
原文連結:http://www.jianshu.com/p/6b1a2bf25c4c