【问题标题】:Simulating location updates on the iPhone Simulator在 iPhone 模拟器上模拟位置更新
【发布时间】:2011-01-04 14:22:31
【问题描述】:

我想让用户通过 GUI 在 iPhone 模拟器上设置 GPS 信息。

但我不知道如何存档 - 似乎这个名为 iSimulate 的工具通过 installing an own SDK 以某种方式完成了这项工作。但我不知道他们是如何“覆盖”/“破解”模拟器的。

谢谢!

【问题讨论】:

    标签: iphone ios xcode ios-simulator core-location


    【解决方案1】:

    添加了第二个答案,因为现在 Xcode 中集成了功能(≥4.2)。有两种方法可以模拟位置更新:

    • 在 iOS 模拟器中,在“调试/位置”下,您可以指定恒定的纬度/经度或选择多个预定义配置文件,例如“City Run”或“Freeway Drive”。
    • 在 Xcode 中,调试器中有一个新的位置图标,就在 Step Out 按钮旁边。它使您可以选择全球多个硬编码城市并将自定义 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>
    

    【讨论】:

      【解决方案2】:

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

        iOS 模拟器内置了完整的位置模拟。从“调试”菜单中,您可以探索各种位置选项。


        在保密协议下发布的原始答案。

        查看this page 右下角的条目。我在 NDA 下,所以我只能说它为我节省了大量的汽油钱。 :)

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

        【讨论】:

        • 两个链接都是404ed
        • 我最初在 iOS 5 处于保密协议下时回答了这个问题。这些页面只是列出了即将推出的主要功能。
        【解决方案4】:

        您可能想通过http://github.com/futuretap/FTLocationSimulator查看我的 FTLocationSimulator

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

        【讨论】:

        【解决方案5】:

        在 Xcode 4.2 中我们可以模拟 .调试区域上有一个位置符号(在您运行应用程序时)。有一些预定义的位置。我们也可以add新的GPX文件

        【讨论】:

          【解决方案6】:

          海斯特法诺斯,

          GPS 的信息无法更改。它受到保护,我不相信 iSimulate 可以改变它。

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

          iSimulate 的 SDK 可与该应用配合使用。您必须在设备中安装应用程序并将 sdk 添加到您的项目中,因此您无需像平时那样一直在设备上构建和运行您的应用程序。

          干杯,
          虚拟现实

          【讨论】:

            【解决方案7】:
            【解决方案8】:

            只是为了扩展@Ortwin Gentz 的答案:

            如果您需要对 gpx 文件中的每个 gps 点进行进一步配置。看看这个页面:

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

            它准确地告诉您如何提供更多详细信息,例如特定点的速度和高度。

            【讨论】:

              猜你喜欢
              • 2013-02-02
              • 2010-12-06
              • 1970-01-01
              • 2010-09-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-01
              相关资源
              最近更新 更多