[英]Location Updates Not working in iPhone 5 (iOS 7) but working in simulator
[英]Simulating location updates on the iPhone Simulator
我想允許用戶通過GUI在iPhone模擬器上設置GPS信息。
但我不知道如何實現這一點 - 似乎這個名為iSimulate的工具通過安裝自己的SDK以某種方式做到了這一點。 但我無法弄清楚他們是如何“覆蓋”/“破解”模擬器的。
謝謝!
添加了第二個答案,因為Xcode中現在有集成功能(≥4.2)。 有兩種方法可以模擬位置更新:
<wpt>
標記: <?xml version="1.0"?> <gpx version="1.1" creator="Xcode"> <wpt lat="47.52789018096815" lon="7.385249894876031"></wpt> <wpt lat="47.52720984945248" lon="7.382647784661411"></wpt> ... </gpx>
iOS模擬器內置了完整的位置模擬。從“調試”菜單中,您可以瀏覽各種位置選項。
在NDA下發布的原始答案。
查看此頁面右下角的條目。 我在NDA之下所以我不能說什么,除了它為我節省了大量的汽油錢。 :)
據我所知,iSimulate沒有采用任何黑客攻擊。 它是在模擬器上的應用程序中運行的代碼,它通過網絡與設備通信。 當它從設備接收消息(觸摸,GPS,加速)時,它通過調用應用程序的代碼來模擬這些事件,就像系統觸發它們一樣。
例如,要接收GPS位置更新,您必須創建CLLocationManager的實例,然后將其中一個類配置為其委托。 好吧,在iPhone模擬器上,您可以改為啟動代碼,將代碼發送給您的代理。 如果你只是像這樣調用委托的方法:
[delegate locationManager:nil didUpdateToLocation:newLocation fromLocation:oldLocation];
您的代碼不必知道位置更新是假的。 如果你想得到花哨的話,你可以創建一個新的類來實現CLLocationManager的所有公共方法,但是它會發送偽造的消息。 (由於Objective-C是動態類型的,因此它不需要是子類,只要它響應您發送的所有消息。)
作為旁注,您可以使用這些編譯器宏來保持代碼模擬器:
#if TARGET_IPHONE_SIMULATOR
locationManager = (id)[[MyFakeLocationManager alloc] init];
#else
locationManager = [[CLLocationManager alloc] init];
#endif
您可以在http://github.com/futuretap/FTLocationSimulator上查看我的FTLocationSimulator
它會讀取Google地球生成的KML文件,以提供連續的位置更新。 它還使用模擬的位置更新更新MKMapView中的藍色userLocation點。
在Xcode 4.2中我們可以模擬。 調試區域上有一個位置符號(當您運行應用程序時)。 有一些預定義的位置。 我們還可以添加新的GPX文件
Hy stephanos,
GPS的信息無法更改。 它受到保護,我不相信iSimulate可以改變它。
據我所知,iSimulate是一個從設備向iPhone模擬器發送命令的工具,如加速度計,觸摸,方向等,包括當前的GPS位置。
iSimulate的SDK可與該應用程序配合使用。 您必須在設備中安裝該應用程序並將sdk添加到您的項目中,這樣您就不需要在正常運行的情況下將應用程序延伸並運行到設備。
干杯,
VFN
只是為了擴展@Ortwin Gentz答案:
如果您需要進一步配置gpx文件中的每個gps點。 看看這個頁面:
http://www.topografix.com/gpx_manual.asp
它告訴您如何提供更多細節,如特定點的速度和高度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.