8

我有一个 iOS 应用程序,我想把它放在持续集成中。我用来执行此操作的策略是尝试从命令行运行测试。

我正在尝试使用以下脚本来做到这一点:

TRACETEMPLATE="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate"
instruments   -t $TRACETEMPLATE build/Release-iphonesimulator/MyApp.app -e UIACSCRIPT "UnitTests/SomeTest.js"

SomeTest.js 是一个简单的 javascript 文件,我可以在 Xcode 中的 Instrumentation 中运行它并且它可以工作。我使用以下方法构建我的应用程序:

xcodebuild -alltargets -sdk iphonesimulator5.1

这会生成 MyApp.app。我可以在模拟器中从 Xcode 运行应用程序,但是,当我尝试通过仪器运行时,我得到一个框,说存在未知错误,并在命令行中打印:

2012-05-15 15:32:59.928 instruments[17548:1d03] Recording cancelled : At least one target failed to launch; aborting run
Instruments Trace Error : Failed to start trace.

任何人都可以就可能发生的事情给我任何帮助/建议,我该如何解决这个问题?

还有,它总是打开 iPad 模拟器?我可以让它打开我想要的任何模拟器吗?

4

6 回答 6

6

我遇到了同样的错误,几乎把头发拉出来试图解决它。错误消息完全没有帮助。

对我来说最终成为问题的是我指向的 .app 文件。一旦我找到了深埋在 5.1 Simulator 文件夹中的“正确”的 .app 文件,我终于能够使用 Xcode 4.3 从命令行运行 UIAutomation 测试。

对我有用的 .app 路径:

~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}/MyApp.app/

这是我使用 Xcode 4.3 从命令行运行 UIAutomation 测试的完整命令:

instruments -t /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}/MyApp.app/ -e UIASCRIPT /Path/To/TestFile.js

希望这对其他人有所帮助,因为那里的文档非常缺乏。

更新

请注意,从 Xcode 4.5.2 开始,自动化模板位置已与我原来的答案不同:

/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate
于 2012-06-05T22:03:14.217 回答
6

从 Xcode 4.5.2 开始,Automation.tracetemplate 的正确位置是/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate

于 2012-11-05T16:43:28.877 回答
1

UIAutomation 的命令行调用路径在过去几年中略有变化。我已经编写了一些可以协同工作的 bash shell 脚本,它们可以以适用于 Xcode 4.4.1 的方式启动您的 UIAutomation 测试文件。

看到这个要点:https ://gist.github.com/3605692#comments

简而言之,关键命令最终是:

instruments -t $INSTRUMENTS_TEMPLATE $APP_PATH -e UIASCRIPT $SCRIPT_PATH -e UIARESULTSPATH $RESULTS_PATH

我的脚本显示了所需的变量替换。另一个好处是 iOS 模拟器应用程序经常更改 GUID 作为其路径的一部分。我的脚本会找到它们,因此您不必在构建/脚本/命令行调用中硬编码临时 GUID。

于 2012-09-02T23:56:28.510 回答
0

抱歉,我的英语很不好。作为从 Teamtsity 运行此脚本的最简单方法?每个组件 - 数字和字母都不同。不是最简单的方法:

  1. 组装前清洁模拟器
  2. 找到包含程序的文件夹,它包含这些数字和字母,写在变量中。
  3. 这个变量,比如写脚本。

也许有一种更容易从这些数字中获取的方法?

于 2012-08-14T15:03:59.300 回答
0

构建配置应该是调试而不是发布。这就是我的案例中出现错误的原因。您可以在“编辑方案”中更改构建配置并选择配置文件选项卡。验证构建选项卡是否也处于调试模式。

于 2012-12-10T07:36:05.373 回答
0

我执行了ps命令来查看哪些进程正在运行。我发现仪器仍在运行。然后我做了killall instruments,这杀死了仪器进程。然后我做了我的仪器命令,之后它工作得很好。

于 2013-06-13T17:25:17.933 回答