Xcode 7 - 代码覆盖率数据生成失败

时间:2015-08-26 10:20:43

标签: ios xcode swift ios9

当我运行测试时出现错误:

  

代码覆盖率数据生成失败   无法从' UIDevice'。

中检索配置文件数据文件

enter image description here

在控制台上打印警告:

  

模拟器启动等待120秒,当前状态为1。

是什么原因?

19 个答案:

答案 0 :(得分:15)

如果要将项目与第三方动态框架集成,则可能需要在构建设置中添加路径。查找 - >构建设置 - >“运行路径搜索路径”并确保它包含框架的路径。

在设置我的项目以使用我的团队一直在研究的框架之后,我自己才刚刚看到这个问题。更新此特定设置后,问题就消失了。在我的例子中,路径与我必须为“框架搜索路径”设置设置的路径相同。

答案 1 :(得分:12)

我解决了这个问题,就像我解决了大多数XCode问题一样:

  1. 删除DerivedData中的项目文件(Xcode>Preferences>Locations>DerivedData→以跳到查找器中)
  2. Product>Clean
  3. (按住alt-Button键)Product>Clean Build Folder
  4. 退出XCode
  5. 重启XCode
  6. 从您的设备/模拟器中删除您的应用
  7. 再试一次。 如果它仍然无法工作,请使用另一个模拟器/设备进行几次运行。迟早它会再次在原版上再次发挥作用。

答案 2 :(得分:8)

如果您使用的是cocoa pods,请检查Cocoapods存储库中的此主题: https://github.com/CocoaPods/CocoaPods/issues/5385#issuecomment-226269847

这解决了我的问题:

复制@dfleming响应:

  

出于某种原因,似乎CocoaPods没有添加" [CP]   嵌入Pods框架"构建阶段到UI测试目标时   生成项目工作区。

     

我手动添加了这个,并且UI测试再次可以运行。

     

此构建阶段应运行以下脚本:(替换   带有项目名称的{YourProject})

     

"${SRCROOT}/Pods/Target Support Files/Pods-{YourProject}UITests/Pods-{YourProject}UITests-frameworks.sh"

答案 3 :(得分:5)

我遇到了完全相同的错误并最终使其正常工作,这些是我采取的步骤。

  1. 在清理和删除应用程序后,尝试重新启动Xcode和模拟器,但从未有效。

  2. 然后我按照建议重新启动Mac,但仍然没有用。

  3. 然后我选择了一个新设备在模拟器中进行测试,以前使用5s并切换到6,这样就可以了。

  4. 有趣的是,当我切换到iPhone 6模拟器时,在运行应用程序并运行之前,它显示带有加载栏的Apple徽标。

    当切换回5s模拟器时,它完全一样,使用Apple之前没有完成的装载条,然后5s工作。

    所以它看起来像是一个模拟器问题,切换到另一个设备工作。重置内容和设置可能是非工作设备的解决方案。

答案 4 :(得分:3)

Cocoapods link_with方法可能导致此问题!

我在xcode 7.2上得到完全相同的错误 - 没有任何模拟器或设备重置似乎清除了它。完全重建我的UITest目标后,虽然事情很好。在.pbxproj文件的大量git diff中花了很多时间之后,我找到了一个解决方案。我不确定它是否解决了每个看到此错误的人的根本原​​因,但它确实为我解决了问题。

从下面的项目信息"部署目标","配置"将列出您的应用程序的所有可能配置。展开您尝试运行的配置,您应该会看到所有目标的列表。在我的例子中,cocoapods已经自动为UITest目标添加了一个基本配置:

enter image description here

在下拉菜单中将其设置为none 接下来在左侧菜单中选择您的UITest目标,然后选择build phases您需要删除check pods manifest.lock link binary with libraries emebd pods frameworkscopy pods resources

最后转到您的pod文件,检查您的UITest目标或目标的任何提及。就我而言,我一直在podfile的顶部指定:

platform :ios, '8.4'
use_frameworks!

link_with 'My App', 'My UITesting Target' 

pod 'A Pod', '~> 1.0'

而podfile应列出每个目标的特定依赖关系:

platform :ios, '8.4'
use_frameworks!

target 'My App', :exclusive => true do
    pod 'A Pod I want to use in my app', '~> 1.0'
end

假设你没有在你的UITests中使用任何pod,那么目标应该再次构建而不会出现错误,测试将会运行!

我对这个问题根源的理解是每个UITest目标都构建了两个独立的bundle,一个用于app,另一个用于UITest控制器。不幸的是,cocoapods link_with逻辑修改了所有指定的目标,以期在其捆绑包中使用pods.framework。构建阶段脚本将框架添加到应用程序包而不是UITest控制器包,因此当您启动测试时,UITest控制器包似乎缺少框架,xcode中止安装。

如果您在UITests中使用pod,则应该能够以相同的方式指定这些:

target 'My UITesting Target', :exclusive => true do
    pod 'Another Pod I want only for UITesting', '~> 1.0'
end

当你运行pod install时,一切都应该正确链接。

答案 5 :(得分:3)

当您将Cocoapods与缺少某些依赖项的框架一起使用时,也会出现此问题。 例如,如果您使用 Framework A ,并且此框架依赖于 Framework B ,但是在 Framework A 的Podspec中,未声明依赖项。

答案 6 :(得分:2)

我尝试了一堆没有运气的解决方案。我关闭了我的方案测试部分中的代码覆盖率选项,该选项抑制了错误但测试不会运行。然后我在NSLog控制台中注意到了很多东西。在那里的某个地方,它提到了我不再使用并尝试加载的框架的引用。

我在应用中搜索了它,然后构建设置 - >其他Linker Flags试图加载那个不再存在的框架。

我删除了: -framework 3rd_party_libname

然后再次进行测试。这很令人困惑,但请检查NSLog消息。我正在使用XCode 8.3

答案 7 :(得分:2)

这可能发生的原因之一是测试目标正在测试的主机应用程序没有链接到正确的依赖项。例如,如果您正在测试框架,请确保主机应用程序链接到这些框架并嵌入。 enter image description here

答案 8 :(得分:2)

我的问题是由于unittest目标的部署版本不正确造成的。经测试的应用程序部署版本为7.0,但单元测试未自动正确设置。它被设置为10.0,而我的模拟器的版本是8.4。在构建设置中将UT目标的部署版本更改为8.0,然后所有问题都消失了。

答案 9 :(得分:1)

经过很长一段时间试图解决这个问题,结果证明我必须创建一个全新的测试目标。 然后重新启动设备后,问题不再重新出现。

答案 10 :(得分:1)

就我而言,我已经将Swift文件添加到一个框架中(直到那时)纯粹是Objective-C。测试包没有包含任何Swift代码。

一旦我将Swift文件添加到测试包中,Xcode会自动更新一些项目设置,错误就消失了。

您应该将Swift文件保留在测试包中,即使它可能不包含任何代码。 Xcode或Cocoapods显然使用测试包中存在的Swift文件来确定是否以“swift模式”运行测试。

答案 11 :(得分:1)

您的一个或多个模拟器卡住了。对我来说唯一能解决这个问题的方法是从模拟器菜单中重置模拟器内容和设置。

Reset Content and Settings...

注意:这将从模拟器中删除所有应用程序数据。

答案 12 :(得分:0)

根本原因可能是模拟器故障。模拟器的问题很常见,特别是在首次发布时。

如果在成功模拟器启动和连接后出现问题,请发布错误的详细信息。

为了让模拟器启动,我经常要取消第一次运行(在干净地启动Xcode之后),并尝试重新运行几次。

如果这是可重复的,在多个项目中发生,并在重新启动和清理项目后仍然存在,请考虑在Stack Overflow社区无法帮助的情况下向Apple提交缺陷。

答案 13 :(得分:0)

我也面临同样的问题:

为不同的项目尝试了以下事项:

1.对于我有一些第三方框架的项目,问题是测试包无法在运行时找到框架。对于此更新,测试目标的运行路径搜索路径通过添加$(PROJECT_DIR)/Frameworks来构建设置(假设您将框架保留在该位置)。,它修复了此项目的问题 您可以在以下位置查找:

Project file -> Test target -> Build Settings -> Runpath Search Paths
  1. 在其他工作区中,当我将测试设备更改为其他模拟器或更改设备本身时。它有所帮助。

  2. 重新启动xcode或mac系统。

  3. 希望它会帮助你

答案 14 :(得分:0)

我有同样的问题,但这是由于有一个测试目标并重命名应用程序的目标。确保您拥有有效的主机应用程序集。

  • 在项目页面上选择测试目标
  • 在“常规”选项卡下,应该有一个“主机应用程序”选择框
  • 选择您要测试的目标

答案 15 :(得分:0)

迦太基用户:

在我的Cartfile中添加了一个新框架后,发生了这种情况。

我跑了carthage update,但忘记将.framework文件从Finder拖到我的应用目标的嵌入式二进制文件部分!

一旦我这样做,问题就消失了。

(注意这是上面@Mustafa提到的一般问题的具体情况。)

答案 16 :(得分:0)

我在Sierra 10.12.4上的Xcode 8.3上遇到了这个问题

我在Mac上打开了Keychain Access应用程序

几秒钟后,我收到了几个要求输入密码的系统弹出窗口,以授予Keychain项目的权限。

我在弹出窗口中输入了密码,然后我的测试开始工作了。

答案 17 :(得分:0)

在我的案例中有效的步骤 删除方案并单击管理方案 - >自动生成方案解决了我的问题。

问题是由在模拟器和钥匙串中安装证书引起的

答案 18 :(得分:0)

使用Xcode 9.1与多个构建目标和标准编译器,我们正在进行UI测试,我开始看到这个问题。所以,你可能会因为这个答案而讨厌我,我完全相信它会被投票,但这实际上对我有用:我必须从我的机器中完全删除Xcode和我的项目才能使这个错误消失。

我尝试了这个帖子中的每一个建议,多次,尝试清除缓存文件,删除派生数据,修改构建设置,更新podfiles,清理,每次尝试后重建,清理模拟器,手动重新创建模拟器和#39;管理设备'。经过几个小时的挫折之后,为什么这台机器无法构建我们的UI测试仍然是一个完全的谜。它似乎在其他机器和我们的CI上运行良好。除了这个线程中的项目,我还手动修改了pbxproj文件,将与代码覆盖相关的所有选项设置为" NO"。

最后,我距离重新格式化整个机器还有一步之遥。我决定按照以下建议完全删除Xcode:Stackoverflow: How to completely uninstall Xcode

具体来说,我删除了我们的工作区,退出了所有程序,删除了所有列出的文件,清除了模拟器中的内容和设置,删除了模拟器,关闭了机器20分钟,回来了,重新安装了Xcode,克隆了存储库瞧!没错。

希望能为某人解决问题。它是核“核”。选项,你永远不应该这样做,但就像我说的,这是唯一对我有用的东西。