Xcode 7 – 代码覆盖率数据生成失败
当我运行我的testing时,我得到一个错误:
代码覆盖率数据生成失败。
无法从“UIDevice”中检索configuration文件数据文件。
在控制台上打印警告:
超时等待120秒模拟器启动,当前状态为1。
是什么原因?
如果您将项目与第三方dynamic框架集成,则可能需要在构build设置中添加path。 查找 – >构build设置 – >“运行pathsearchpath”,并确保它包含框架的path。
我刚刚看到这个确切的问题后,我设立了一个项目,使用我的团队一直在努力的框架。 更新这个特定的设置后,问题就消失了。 就我而言,path与我已经为“框架searchpath”设置设置的path相同。
如果您使用cocoa豆荚,请在Cocoapods存储库中查看此线程: https : //github.com/CocoaPods/CocoaPods/issues/5385#issuecomment-226269847
这解决了我的问题:
复制@dfleming回应:
出于某种原因,看起来CocoaPods在生成项目工作区时并没有将“[CP] Embed Pods Frameworks”构build阶段添加到UI Tests目标。
我手动添加了这个和UItesting可以再次运行。
此构build阶段应运行以下脚本:(用您的项目名称replace{YourProject})
"${SRCROOT}/Pods/Target Support Files/Pods-{YourProject}UITests/Pods-{YourProject}UITests-frameworks.sh"
我解决了这个问题,就像我解决了大部分XCode问题一样:
- 删除你的
DerivedData
项目文件(Xcode>Preferences>Locations>DerivedData→
在finder中跳转到那里) -
Product>Clean
- (保持altbutton按下)
Product>Clean Build Folder
- 退出XCode
- 重新启动XCode
- 从您的设备/模拟器中删除您的应用程序
再试一次。 如果它仍然不起作用,请使用另一个模拟器/设备进行几次运行。 迟早它会再次在原来的工作。
我经历了完全相同的错误,并最终得到它的工作,这是我采取的步骤。
-
尝试重新启动Xcode和模拟器,清理和删除应用程序后,从来没有工作。
-
然后我按照build议重新启动了Mac,但仍然无法工作。
-
然后我select了一个新的设备在模拟器中进行testing,之前使用5s并切换到6,并且工作。
有趣的是,当我切换到iPhone 6模拟器,它显示了带有加载栏的苹果标志,在运行应用程序和工作之前。
当切换回5s模拟器,它完全一样,苹果加载栏,它没有做过,然后5s工作。
所以它看起来是一个模拟器问题,切换到不同的设备工作。 重置内容和设置可能是非工作设备的解决scheme。
Cocoapods link_with
方法可能会导致这个问题!
我在xcode 7.2上得到了完全相同的错误 – 没有任何模拟器或设备重置似乎清除它。 完全重build我的UITest目标后,虽然工作正常。 在大量的.pbxproj
文件的git diff中花了很多时间后,我find了一个解决scheme。 我不知道是否它解决了每个人看到这个错误的根本原因,但它绝对清除了我的东西。
从“部署目标”下方的项目信息中,“configuration”将列出您的应用程序的所有可能configuration。 展开您尝试运行的configuration,您应该看到所有目标的列表。 在我的情况下,cocoapods自动为UITest目标添加了一个基本configuration:
在下拉菜单中将其设置为none
。
接下来在左边的菜单中select您的UITest目标,然后build phases
您将需要删除check pods manifest.lock
link binary with libraries
emebd pods frameworks
和copy 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
假设你没有在你的UITest中使用任何豆荚,那么目标应该再次build立,没有错误,testing将运行!
我对这个问题的根源的理解是,每个UITest目标都build立了两个独立的bundle,一个用于应用程序,另一个用于UITest控制器。 不幸的是,cocoapods link_with
逻辑会修改所有指定的目标,以期望它们的包中的pods.framework。 构build阶段脚本将该框架添加到应用程序包而不是UITest控制器包,因此,当启动testing时,UITest控制器包似乎缺less框架,xcode会中止安装。
如果你在你的UITest中使用了pod,你应该可以用相同的方式指定它们:
target 'My UITesting Target', :exclusive => true do pod 'Another Pod I want only for UITesting', '~> 1.0' end
而当你运行pod install
一切都应该正确地连接起来。
其中一个原因是,如果testing目标testing的主机应用程序没有链接到正确的依赖关系。 例如,如果您正在testing一个框架,请确保主机应用程序链接到这些框架并embedded。
这个问题也可以出现,当你使用Cocoapods的框架,一些依赖缺失。 例如,如果使用框架A ,并且此框架依赖于框架B,但在框架A的Podspec中,则不声明依赖关系。
我的问题是由unittest目标的不正确部署版本造成的。 testing的应用程序部署版本是7.0,但unittest没有自动正确设置。 它被设置为10.0,而我的模拟器的版本是8.4。 在构build设置中将UT目标的部署版本更改为8.0,然后所有问题都消失了。
就我而言,我已经将Swift文件添加到纯粹Objective-C的框架中(直到那时)。 testing包中没有任何Swift代码。
一旦我将Swift文件添加到testing包中,Xcode自动更新了一些项目设置,错误消失了。
你应该把Swift文件保存在testing包中,即使它不包含任何代码。 Xcode或Cocoapods显然使用testing包中存在的Swift文件来确定是否以“快速模式”运行testing。
我尝试了一堆这些解决scheme,没有运气。 我closures了我的scheme的testing部分中的代码覆盖选项,它抑制了错误,但testing不会运行。 然后我在NSLog控制台中注意到了很多东西。 在那里的某处,它提到了一个我不再使用并试图加载的框架。
我search了它的应用程序,并build立设置 – >其他链接标志试图加载不存在的框架了。
我删除了:-framework 3rd_party_libname
然后再次testing。 这很混乱,但请检查NSLog的消息。 我正在使用XCode 8.3
根本原因可能是模拟器故障。 模拟器的问题很常见,尤其是在首次发布时。
如果在成功模拟器启动并连接后出现问题,请发布错误的详细信息。
为了启动模拟器,我经常必须取消第一次运行(干净地启动Xcode之后),然后尝试重新运行几次。
如果这是可重复的,发生在多个项目上,并且在重新启动和清理项目之后仍然存在,考虑到如果Stack Overflow社区无法帮助,则向Apple提交缺陷。
一个或多个模拟器卡住了。 唯一能解决这个问题的方法是从模拟器菜单重置模拟器的内容和设置。
注意:这将从模拟器中删除所有的应用程序数据。
我也有同样的问题,但是这是由于有一个testing目标,并重新命名应用程序的目标。 确保你有一个有效的主机应用程序集。
- 在项目页面上selecttesting目标
- 在常规选项卡下,应该有一个主机应用程序select框
- select你想testing的目标
经过很长一段时间的研究,结果certificate我必须创造一个全新的testing目标。 然后重新启动设备后,问题不再出现。
我也面临同样的问题:
尝试以下事项为不同的项目:
1.对于我有一些第三方框架的项目,问题是testing包在运行时找不到框架。 对于此更新,testing目标的运行pathsearchpath通过添加$(PROJECT_DIR)/Frameworks
(假设您将框架保留在该位置)来构build设置。它解决了此项目的问题您可以在以下位置查找它:
Project file -> Test target -> Build Settings -> Runpath Search Paths
-
在其他工作区中,当我将testing设备更改为其他模拟器或更改设备本身时。 它帮助。
-
重新启动xcode或您的mac系统。
希望这会对你有所帮助
迦太基用户:
在我添加一个新的框架到我的Cartfile后,这发生在我身上。
我跑了carthage update
但忘了拖动Finder的.framework
文件到我的应用程序目标的embedded式二进制文件部分!
一旦我做到了,问题就消失了。
(注意,这是上面@Mustafa提到的一般问题的一个特例。)
我在Sierra 10.12.4上的Xcode 8.3上遇到了这个问题
我在我的Mac上打开了Keychain Access应用程序
几秒钟后,我得到了几个系统popup窗口要求我的密码,授予钥匙链项目的权限。
我input密码到popup窗口,然后我的testing开始工作。
在我的情况下工作的步骤删除该计划,然后单击pipe理计划 – >自动生成计划解决了我的情况这个问题。
问题是由于在模拟器和钥匙串中安装证书造成的