【发布时间】:2014-04-18 20:02:02
【问题描述】:
我想知道当 iOS 应用程序在 Xcode 机器人上运行单元测试时如何生成 gcda 文件。
我使用this blog 配置 Xcode 以生成测试覆盖率文件并使用利用 lcov 的脚本生成报告。我可以在我的开发计算机上始终如一地创建覆盖文件和报告,但是当机器人尝试相同的过程时,不会出现 .gcda 文件。在bot上调用__gcov_flush()时,在日志中可以看到如下错误:
profiling:/Library/Server/Xcode/Data/BotRuns/Cache/c0jhd288-c473-c473-2432-f8219hdh98dh89/DerivedData/Build/Intermediates/AppName.build/Debug-iphonesimulator/appName.build/Objects-normal/i386/ClassName.gcda: cannot open
我知道这是在应用程序的 gcov 刷新期间发生的,因为我直接在调用前后放置了一个日志”
NSLog(@"[application performSelector:@selector(gtm_gcov_flush)]; will be CALLED");
[application performSelector:@selector(gtm_gcov_flush)];
NSLog(@"[application performSelector:@selector(gtm_gcov_flush)]; was CALLED");
注意:gtm_gcov_flush 只调用__gcov_flush(),没有别的。
搜索“profile gcda:无法打开”引导我here,但我已经按照上面的博客链接遵循建议的要求。可能存在一些权限问题,但这似乎不太可能,因为 Xcode 是生成 gcda 文件的那个。
我已经检查了 /Library/Server/Xcode/Data/BotRuns/、/Users/username/Library/Developer/Xcode/DerivedData/ 和 /var/_xcstest 目录及其子目录中的 gcda 文件,但看不到任何内容。不过/Library/Server/Xcode/Data/BotRuns/Cache/c0jhd288-c473-c473-2432-f8219hdh98dh89/DerivedData/Build/Intermediates/AppName.build/Debug-iphonesimulator/appName.build/Objects-normal/i386/里面有gcno、o、d、dia文件(这里应该有gcda文件)。
就像我说的,我在本地运行时遇到的问题为零。脚本 XcodeCoverage/getcov 在我的方案中存档的后操作阶段被调用。我在我的开发 Mac 上以及通过 CI 服务器上的 Xcode 服务使用 Xcode 5.0.2。正在使用 XCTest 框架运行单元测试。
提前感谢您的帮助!
【问题讨论】:
标签: ios xcode unit-testing continuous-integration