在iPhone模拟器上模拟位置更新

22

我希望能够通过GUI允许用户设置iPhone模拟器上的GPS信息。

但我不确定如何实现这一点-似乎名为iSimulate的工具会通过安装自己的SDK来完成这项任务。但我不知道他们是如何通过此方式“覆盖”/“破解”模拟器的。

谢谢!

8个回答

48
自从Xcode(≥4.2)集成了功能后,我添加了第二个答案。有两种方法可以模拟位置更新:
  • 在iOS模拟器的“调试/位置”下,您可以指定常量纬度/经度或选择几个预定义的配置文件,如“城市跑步”或“高速公路行驶”。
  • Xcode中有一个新的位置图标在调试器旁边,紧挨着“步出”按钮。它允许您选择全球几个硬编码的城市并向项目添加自定义GPX文件。 Xcode中位置模拟的好处是它也适用于设备(只要不要忘记再次关闭它,否则您的自动时区将错误!)。自定义GPX文件也很好,尽管有时如果GPX文件无法识别,则会导致Xcode崩溃。请确保仅使用<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>

12
据我所知,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

12

iOS模拟器内置完整的位置模拟功能。您可以从"调试"菜单中探索各种位置选项。


在签署保密协议的情况下发布原始答案。

请查看此页面右下角的条目。我不能透露任何细节,只能说它为我省了大量汽油费。 :)

1: http://developer.apple.com/technologies/ios5/


两个链接都是404错误。 - Jean-François Beauchamp
我最初回答这个问题时,iOS 5还受到保密协议的限制。那些页面只列出了即将推出的主要功能。 - wjl

7

您可能想要查看我的FTLocationSimulator,网址为http://github.com/futuretap/FTLocationSimulator

它可以读取由Google Earth生成的KML文件,以提供连续的位置更新。 它还会使用模拟位置更新来更新MKMapView中的蓝色userLocation点。


我提供了第二个答案,描述了现在已经集成到Xcode≥4.2中的位置模拟功能:https://dev59.com/TnI95IYBdhLWcg3w_zas#9359093 - Ortwin Gentz

4
在Xcode 4.2中,我们可以模拟位置。在调试区域(运行应用程序时)有一个位置符号。有一些预定义的位置。此外,我们可以添加新的GPX文件。点击此处了解如何添加。

0

仅仅是为了扩展@Ortwin Gentz的回答:

如果您需要在gpx文件中进一步配置每个gps点,请查看此页面:

http://www.topografix.com/gpx_manual.asp

它告诉您如何提供特定点的速度和高度等进一步细节。


0

嗨,Stephanos:

GPS信息无法更改。它是受保护的,我不认为iSimulate可以更改它。

据我所知,iSimulate是一种工具,可以从设备向iPhone模拟器发送命令,例如加速度计、触摸、方向等,包括当前GPS位置。

iSimulate的SDK与应用程序配合使用。您必须在设备上安装应用程序并将SDK添加到您的项目中,这样您就不需要像通常那样一直将应用程序构建和运行到设备上。

祝好,
VFN



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接