【发布时间】:2011-01-04 14:22:31
【问题描述】:
我想让用户通过 GUI 在 iPhone 模拟器上设置 GPS 信息。
但我不知道如何存档 - 似乎这个名为 iSimulate 的工具通过 installing an own SDK 以某种方式完成了这项工作。但我不知道他们是如何“覆盖”/“破解”模拟器的。
谢谢!
【问题讨论】:
标签: iphone ios xcode ios-simulator core-location
我想让用户通过 GUI 在 iPhone 模拟器上设置 GPS 信息。
但我不知道如何存档 - 似乎这个名为 iSimulate 的工具通过 installing an own SDK 以某种方式完成了这项工作。但我不知道他们是如何“覆盖”/“破解”模拟器的。
谢谢!
【问题讨论】:
标签: iphone ios xcode ios-simulator core-location
添加了第二个答案,因为现在 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>
【讨论】:
据我所知,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
【讨论】:
iOS 模拟器内置了完整的位置模拟。从“调试”菜单中,您可以探索各种位置选项。
在保密协议下发布的原始答案。
查看this page 右下角的条目。我在 NDA 下,所以我只能说它为我节省了大量的汽油钱。 :)
【讨论】:
您可能想通过http://github.com/futuretap/FTLocationSimulator查看我的 FTLocationSimulator
它会读取由 Google 地球生成的 KML 文件,以提供持续的位置更新。它还使用模拟的位置更新更新 MKMapView 中的蓝色 userLocation 点。
【讨论】:
在 Xcode 4.2 中我们可以模拟 .调试区域上有一个位置符号(在您运行应用程序时)。有一些预定义的位置。我们也可以add新的GPX文件
【讨论】:
海斯特法诺斯,
GPS 的信息无法更改。它受到保护,我不相信 iSimulate 可以改变它。
据我所知,iSimulate 是一种从设备向 iPhone 模拟器发送命令的工具,例如加速度计、触摸、方向等,包括当前的 GPS 位置。
iSimulate 的 SDK 可与该应用配合使用。您必须在设备中安装应用程序并将 sdk 添加到您的项目中,因此您无需像平时那样一直在设备上构建和运行您的应用程序。
干杯,
虚拟现实
【讨论】:
只是为了扩展@Ortwin Gentz 的答案:
如果您需要对 gpx 文件中的每个 gps 点进行进一步配置。看看这个页面:
http://www.topografix.com/gpx_manual.asp
它准确地告诉您如何提供更多详细信息,例如特定点的速度和高度。
【讨论】: