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

时间:2016-07-21 07:32:06

标签: ios iphone xcode location gpx

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用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创建新脚本。

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

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

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

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

答案 1 :(得分:0)

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