我想允许用户通过GUI在iPhone模拟器上设置GPS信息。
但我不确定如何实现这一点 - 似乎这个名为iSimulate的工具以installing an own SDK的方式做到了这一点。但我无法弄清楚他们是如何“覆盖”/“破解”模拟器的。
谢谢!
答案 0 :(得分:46)
添加了第二个答案,因为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>
答案 1 :(得分:12)
iOS模拟器内置完整的位置模拟。从“调试”菜单中,您可以浏览各种位置选项。
根据NDA发布的原始答案。
查看this page上的右下角条目。我在NDA之下所以我不能说什么,除了它为我节省了大量的汽油钱。 :)
答案 2 :(得分:11)
据我所知,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
答案 3 :(得分:7)
您可能想在http://github.com/futuretap/FTLocationSimulator
查看我的FTLocationSimulator它会读取Google地球生成的KML文件,以提供连续的位置更新。它还使用模拟的位置更新来更新MKMapView中的蓝色userLocation点。
答案 4 :(得分:4)
在Xcode 4.2中我们可以模拟。调试区域上有一个位置符号(当您运行应用程序时)。有一些预定义的位置。我们还可以add新的GPX文件
答案 5 :(得分:0)
Hy stephanos,
无法更改GPS的信息。它受到保护,我不相信iSimulate可以改变它。
据我所知,iSimulate是一个从设备向iPhone模拟器发送命令的工具,如加速度计,触摸,方向等,包括当前的GPS位置。
iSimulate的SDK可与该应用程序配合使用。您必须在设备中安装该应用程序并将sdk添加到您的项目中,这样您就不需要在正常运行的情况下将应用程序延伸并运行到设备。
干杯,
VFN
答案 6 :(得分:0)
答案 7 :(得分:0)
只是为了扩展@Ortwin Gentz回答:
如果您需要进一步配置gpx文件中的每个gps点。看看这个页面:
http://www.topografix.com/gpx_manual.asp
它告诉您如何提供更多详细信息,如特定点的速度和高度。