自动化Xcode的Debug > 模拟位置命令

10

有没有以编程方式控制 xcode > 模拟位置 命令的方法?我有外部位置测试脚本需要运行,理想情况下,测试套件可以让 xcode 随意更改连接手机的位置。

如果可能的话,具体怎么做呢?


你能详细说明一下“外部位置测试脚本”是什么吗?它们是Xcode单元测试吗? - InsertWittyName
@InsertWittyName 这些脚本实际上是在 Xcode 之外运行的,执行其他任务。如果我能通过 Automator 或 XCTool 等工具触发 Xcode,那就太理想了。我正在自动化更多需要 iPhone 在不同时间移动和定位的整个系统。 - Stefan Kendall
4个回答

7

我不确定这是否完全符合你的要求,但是你可以通过在方案中设置来使不同的单元测试包使用不同的位置(或GPX文件)。

然后,你可以在每个包中编写单元测试以测试与特定位置有关的内容。

Scheme

xctool也可以使用-only选项仅运行特定目标中的单元测试:

path/to/xctool.sh \
  -workspace YourWorkspace.xcworkspace \
  -scheme YourScheme \
  test -only SomeTestTarget

这个方案可能可行...我可以有一个固定的gpx文件,然后在设备上通过xctool执行单元测试。虽然不是完美的解决方案,但也算是部分解决了问题。 - Stefan Kendall

5
有一个名为 Pokemon-Go-Controller 的GitHub项目,可以做到您想要的事情。
解决方案概述:
  1. 创建一个 gpx 文件
  2. 创建一个空白项目并引用(不是复制)该 gpx 文件,并在设备上运行它
  3. 运行“自动点击器”,该工具将不断点击 Xcode 中的“更新位置”
  4. 使用某些脚本更新 gpx 文件,设备位置将自动更新
除了使用自动点击器之外,您还可以使用这个苹果脚本:
#Will continue update the location to the location name below from Xcode:

property locationName : "pokemonLocation" #name of your gpx filex

###########################
tell application "System Events"
    tell process "Xcode"
        repeat while true
            click menu item locationName of menu 1 of menu item "Simulate Location" of menu 1 of menu bar item "Debug" of menu bar 1
            delay 0.2
        end repeat
    end tell
end tell

我非常喜欢你的答案和自定义苹果脚本,但是当我尝试使用它时,它会提示一个含糊的错误,指出它找不到:locationName、menu 1、菜单项"模拟位置"或语句中的其他任何内容。你能否请检查一下你的答案是否仍然适用?提前谢谢:) - Eric

2
是的,这是可能的。 1. 按照@InsertWittyName的回答设置GPX文件,或者按照此博客文章中所述。 2. 使用Instruments在模拟器中运行您的应用程序,使用不同的GPX文件。
我本想将整个过程写出来,但有人比我更雄辩
作为一个热心的S/O用户,我会很失落地离开这基本上是单链答案的东西。因此,这里提供一些额外的奖励信息。
  1. 您应该绝对考虑安全测试您的位置感知功能。我今年会参加Black Hat,所以如果你在那里,让我们谈谈吧!

  2. 如果您不喜欢之前链接/解释的答案,则可以使用代码使用XCTest模拟不同的位置(像这样)。

  3. 看起来还有苹果脚本解决方案,像这个

我希望至少提供了足够的信息,以符合不仅仅是懒惰的链接答案。祝好运!

0

idevicelocation 是一个命令行工具,用于模拟 iOS 设备的地理位置。

使用方法:
$ idevicelocation [OPTIONS] LATITUDE LONGITUDE

通过传递两个参数,即纬度和经度来设置位置:

$ idevicelocation 48.856614 2.3522219000000177

传递负值:

$ idevicelocation 77.432332 -- -7.008373564

停止位置模拟:

$ idevicelocation --stop

选项:

-d 启用连接调试消息。<br/> -u 指定设备UDID。<br/> -h 帮助。<br/> -s 停止设备上的位置模拟。

它使用libimobiledevice库与进程com.apple.dt.simulatelocation通信,该进程也被Xcode内部用于相同的目的。
构建说明在README文件中。
在随意移动之前,请确保挂载正确的开发者映像。
感谢Angulo编写这个很棒的实用工具。

尽管有一个拉取请求已经等待很久,但此工具目前未随libimobiledevice软件包一起提供。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接