gpt4 book ai didi

ios - 在 Xcode 机器人上运行单元测试后生成 .gcda 文件

转载 作者:行者123 更新时间:2023-12-01 19:37:04 25 4
gpt4 key购买 nike

我想知道当 iOS 应用程序在 Xcode 机器人上运行单元测试时如何生成 gcda 文件。

我用了this blog配置 Xcode 以生成测试覆盖率文件并使用利用 lcov 的脚本生成报告。我可以在我的开发计算机上一致地创建覆盖率文件和报告,但是当机器人尝试相同的过程时,不会出现 .gcda 文件。在机器人上调用 __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/中有 gcno、o、d 和 dia 文件Debug-iphonesimulator/appName.build/Objects-normal/i386/ (其中应该有 gcda 文件)。

就像我说的,我在本地运行时遇到了零问题。在我的方案中,在 Archive 的后操作阶段调用脚本 XcodeCoverage/getcov。我在我的开发 mac 上使用 Xcode 5.0.2,并通过 CI 服务器上的 Xcode 服务。单元测试正在使用 XCTest 框架运行。

提前感谢您的帮助!

最佳答案

嗯,看起来这确实是一个权限问题。我找到了使用 Xcode 5+ 生成代码覆盖率报告的重要引用:

http://www.bubblefoundry.com/blog/2013/11/code-coverage-revisited/

如上篇文章所述,有两个用户管理 Xcode 机器人:_teamserver 和 _xcstest。 _xctest 与 _teamserver 没有相同的权限,因此 .gcda 文件的目标文件夹的权限必须设置为允许 _xctest 访问(即对该文件夹的组访问)。我按照文章的建议实现了脚本,但我的 CI 服务器在归档期间崩溃了。显然在归档时,文件夹引用不存在。所以我将其更新为:

# Setting these permissions is required to successfully flush
# test coverage data with __gcov_flush();

if [ -d ${OBJECT_FILE_DIR_normal}/i386 ]; then
chmod 775 ${OBJECT_FILE_DIR_normal}/i386
fi

除了成功生成覆盖文件之外,我还将它们复制到另一个文件夹。我的测试覆盖率报告是在存档的操作后阶段生成的,我无法找到在该阶段访问这些文件的方法。原因是它们是在

中生成的

/Library/Server/Xcode/Data/BotRuns/Cache/c0jhd288-c473-c473-2432-f8219hdh98dh89/DerivedData/Build/Intermediates/AppName.build/Debug-iphonesimulator/appName.build/Objects-normal/i386/

但存档运行于:

/Library/Server/Xcode/Data/BotRuns/Cache/c5f4462c-c473-c473-2432-5ac4d0b46nal/DerivedData/Build/Intermediates/ArchiveIntermediates/AppName/BuildProductsPath/Release-iphoneos/

可能有一种聪明的方法可以导出覆盖文件的目录以供稍后引用,但我不确定。最后,我无论如何都不是终端的 super 用户,所以请随意提供建议!

请注意,我还引用了这些博客来帮助完成配置:

http://matt.vlasach.com/xcode-bots-hosted-git-repositories-and-automated-testflight-builds/

http://qualitycoding.org/xcode-code-coverage/

http://ikennd.ac/blog/2013/10/xcode-bots-common-problems-and-workarounds/

关于ios - 在 Xcode 机器人上运行单元测试后生成 .gcda 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22389591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com