以编程方式通过 USB 模拟 iPhone(真实设备,而非模拟器)位置

Posted

技术标签:

【中文标题】以编程方式通过 USB 模拟 iPhone(真实设备,而非模拟器)位置【英文标题】:Simulate iPhone (real device, NOT simulator) location over USB programmatically 【发布时间】:2016-11-24 15:57:51 【问题描述】:

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

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

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

【问题讨论】:

您是否知道可以在方案管理器中设置默认模拟位置,包括使用自定义 GPX 文件? @markedwardmurray 你读过这个问题吗?我当然知道。我需要一种快速且自动化的方法来做到这一点,这就是整个问题:) 我想,但只是检查 :) 在我看来,您有可能在启动应用程序后从调试窗格设置模拟位置。我不知道从命令行执行此操作的方法,但我很想关注这个线程。 是的,我的直觉告诉我这应该是可能的,除非出于安全/篡改原因,Apple 会严格控制设备。期待从这个线程中学习,虽然 还有这个***.com/a/38632244/4209778。 【参考方案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 文件,其中包含快速步行/跑步速度的路线。根据我自己的研究,更自动化的方法似乎是不可能的。

【讨论】:

是的,我知道,但不幸的是,这不是我所需要的,因为我需要一些可以在运行中连续进行编程的东西。

以上是关于以编程方式通过 USB 模拟 iPhone(真实设备,而非模拟器)位置的主要内容,如果未能解决你的问题,请参考以下文章

在真实 iOS 设备上模拟虚假位置

检查 iPhone 与 USB 连接的应用程序

以编程方式停止 iOS 中的应用升级

以编程方式模拟 iPad 上 iPhone 应用程序的 2 倍模式(或双倍模式)?

以编程方式查找 iPhone 应用程序标识符前缀

使用时以编程方式弹出 USB 设备