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

问题描述 投票:55回答:19

当我运行我的测试时,我收到一个错误:

代码覆盖率数据生成失败。 无法从“UIDevice”检索配置文件数据文件。

enter image description here

在控制台上打印警告:

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

是什么原因?

ios xcode swift ios9
19个回答
15
投票

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

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


1
投票

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

Reset Content and Settings...

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


1
投票

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


1
投票

在我的例子中,我将Swift文件添加到一个框架中(直到那时)纯粹是Objective-C。测试包中没有任何Swift代码。

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

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


0
投票

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

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

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

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


0
投票

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

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

0
投票

我也面临同样的问题:

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

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

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

希望它会对你有所帮助


0
投票

迦太基用户:

在我向Cartfile添加新框架后,这发生在我身上。

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

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

(注意这是上面@Mustafa提到的一般问题的一个特例。)


0
投票

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

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

几秒钟后,我收到几个系统弹出窗口询问我的密码,以授予Keychain项目的权限。

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


0
投票

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

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


0
投票

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

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

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

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

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


12
投票

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

  1. 删除DerivedData中的项目文件(Xcode>Preferences>Locations>DerivedData→在finder中跳转)
  2. Product>Clean
  3. (保持alt-Button按下)Product>Clean Build Folder
  4. 退出XCode
  5. 重启XCode
  6. 从您的设备/模拟器中删除您的应用程序

再试一次。如果它仍然无法工作,请使用另一个模拟器/设备进行几次运行。迟早它会再次在原来的那个上再次运作。


8
投票

如果您正在使用可可豆荚,请在Cocoapods存储库中查看此主题:https://github.com/CocoaPods/CocoaPods/issues/5385#issuecomment-226269847

这解决了我的问题:

复制@dfleming响应:

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

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

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

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


5
投票

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

  1. 尝试重新启动Xcode和模拟器,清理和删除应用程序,从未工作过。
  2. 然后我按照建议重新启动了Mac,但仍然没有用。
  3. 然后我选择了一个新设备在模拟器中进行测试,以前使用5s并切换到6,这样就可以了。

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

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

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


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时,一切都应该正确连接。


3
投票

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


2
投票

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


2
投票

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


2
投票

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

我在应用程序中搜索了它,并且Build Settings - > Other Linker Flags正试图加载不再存在的框架。

我删除了:-framework 3rd_party_libname

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

© www.soinside.com 2019 - 2024. All rights reserved.