【问题标题】:Simulate iPhone (real device, NOT simulator) location over USB programmatically以编程方式通过 USB 模拟 iPhone(真实设备,而非模拟器)位置
【发布时间】:2023-03-11 08:30:01
【问题描述】:

我可以通过 Xcode 模拟位置,方法是准备带有一些坐标的 GPX 文件,将其添加到我的项目中,运行应用程序,并在应用程序运行时选择位置。然后,我的整个 iPhone 的位置都更改为那个位置(不仅仅是那个应用程序)。

换句话说,当 iPhone 使用 Xcode 通过 USB 连接时,它可能通过 Mac 控制 iPhone 的位置。

我想知道有没有办法自动化这种行为?例如,我将以编程方式将命令发送到我的 iPhone 以更改其位置,而无需手动创建 GPX 文件、将其添加到项目、运行虚拟应用程序以及每次从 UI 中选择单个 GPX。有没有办法,也许使用命令行工具?

【问题讨论】:

  • 您是否知道可以在方案管理器中设置默认模拟位置,包括使用自定义 GPX 文件?
  • @markedwardmurray 你读过这个问题吗?我当然知道。我需要一种快速且自动化的方法来做到这一点,这就是整个问题:)
  • 我想,但只是检查 :) 在我看来,您有可能在启动应用程序后从调试窗格设置模拟位置。我不知道从命令行执行此操作的方法,但我很想关注这个线程。
  • 是的,我的直觉告诉我这应该是可能的,除非出于安全/篡改原因,Apple 会严格控制设备。期待从这个线程中学习,虽然

标签: ios iphone xcode location gpx


【解决方案1】:

您可以使用 Instruments 来模拟位置更新:

通过自动化它允许使用javascript编写脚本,这将设置位置并延迟下一次位置更新。

其实简单的设置位置应该是这样的:

var target = UIATarget.localTarget();
var location = {
    latitude: 59.335435,
    longitude: 18.017269
};
var locationOptions = {
    speed: 2.78,
    altitude: 200,
    horizontalAccuracy: 10,
    verticalAccuracy: 15
};
target.setLocationWithOptions(location, locationOptions);

为了能够运行此脚本,您需要从 Xcode 中“分析”您的应用程序。为此,请转到菜单产品 → 配置文件,您的应用程序将与仪器一起开始。在 Instruments 中选择“Automation”,然后使用上面的 body 创建新脚本。

您的应用程序应自动选择为自动化工具左上角的目标。

只需将脚本粘贴到脚本区域,然后按运行按钮。 如果应用程序没有启动,它将被启动。 然后脚本将运行,您应该会看到该位置已在您的应用程序中设置。

您可以创建多个位置和位置选项的数组,然后循环访问它们。想要做一些延迟,你可以使用 delay 命令。

var target = UIATarget.localTarget();

var locationOptions = {speed:2.78, altitude: 200, horizontalAccuracy:10, verticalAccuracy:15};
var locations = [
  {latitude: 59.335435, longitude: 18.017269},
  {latitude: 59.33618, longitude: 18.018288},
  {latitude: 59.337192, longitude: 18.01643},
  ...
  {latitude: 59.335769, longitude: 18.025336} 
];

for (var i = 0; i < locations.length; i++) {
    target.setLocationWithOptions(locations[i], locationOptions);
    target.delay(10);
}

参考:http://sergiinezdolii.blogspot.com/2015/02/ios-simulate-frequent-gps-location.html

【讨论】:

    【解决方案2】:

    您可以使用以下站点设置预定义路线; GPX Generator。这将创建一个 GPX 文件,其中包含快速步行/跑步速度的路线。根据我自己的研究,更自动化的方法似乎是不可能的。

    【讨论】:

    • 是的,我知道,但不幸的是,这不是我所需要的,因为我需要一些可以在运行中连续进行编程的东西。
    猜你喜欢
    • 2011-12-22
    • 2015-05-31
    • 2013-06-30
    • 2012-07-14
    • 2011-08-15
    • 2018-11-20
    • 2018-07-17
    • 2010-11-10
    • 2017-02-05
    相关资源
    最近更新 更多