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

Ios Xcode 7-代码覆盖率数据生成失败,ios,xcode,swift,ios9,Ios,Xcode,Swift,Ios9,当我运行测试时,我得到一个错误: 代码覆盖率数据生成失败。 无法从“UIDevice”检索配置文件数据文件 控制台上显示警告: 等待模拟器启动120秒超时,当前状态为1 原因是什么?根本原因可能是模拟器故障。模拟器的问题很常见,尤其是在首次发射时 如果在成功启动并连接模拟器后仍出现问题,请发布错误的详细信息 为了让模拟器启动,我通常必须取消第一次运行(在干净地启动Xcode之后),并尝试重新运行几次 如果这是可重复的,发生在多个项目上,并且在项目重新启动和清理之后继续存在,如果堆栈溢出社区无法

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

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

控制台上显示警告:

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


原因是什么?

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

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

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


如果这是可重复的,发生在多个项目上,并且在项目重新启动和清理之后继续存在,如果堆栈溢出社区无法帮助,考虑向苹果提交缺陷。

< P>我经历了完全相同的错误,最终使它生效,这是我采取的步骤。
  • 在清理和删除应用程序后,尝试重新启动Xcode和模拟器,但从未成功

  • 然后,我按照建议重新启动了Mac,但仍然不起作用

  • 然后我选择了一个新的设备在模拟器中进行测试,之前使用5s,然后切换到6,这很有效

  • 有趣的是,当我切换到iPhone6模拟器时,在运行应用程序并开始工作之前,它显示了带有加载条的苹果徽标

    当切换回5s模拟器时,它做了完全相同的操作,使用苹果加载条,这是它以前没有做过的,然后5s开始工作


    因此,这看起来是一个模拟器的问题,切换到不同的设备工作。重置内容和设置可能是非工作设备的解决方案。

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


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

    Cocoapods
    link\u与
    方法可能导致此问题

    我在xcode 7.2上得到了完全相同的错误-没有多少模拟器或设备重置似乎可以清除它。在完全重建我的UITest目标后,尽管一切都很顺利。在
    .pbxproj
    文件的大量git差异中花费了大量时间之后,我为我的项目找到了一个解决方案。我不确定它是否解决了每个看到这个错误的人的根本原因,但它确实为我澄清了问题

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

    在下拉列表中将其设置为
    none

    接下来在左侧的菜单中选择UITest目标,然后
    构建阶段
    您将需要删除
    检查pods清单。锁定
    将二进制文件链接到库
    emebd pods框架
    复制pods资源

    最后转到你的pod文件,检查是否有提到你的UITest目标。在我的案例中,我一直在我的pod文件顶部指定:

    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目标构建两个独立的捆绑包,一个用于应用程序,一个用于UITest控制器。不幸的是,cocoapods
    link_with
    logic会修改所有指定的目标,使其包中包含pods.framework。构建阶段脚本会将框架添加到应用程序包中,但不会添加到UITest控制器包中,因此当您启动测试时,UITest控制器包似乎缺少框架,xcode会中止安装

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

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

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

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

  • 删除
    DerivedData
    Xcode>Preferences>Locations>DerivedData)中的项目文件→在finder中跳转到那里)
  • 产品>清洁
  • (按住alt按钮)
    Product>Clean Build文件夹
  • 退出XCode
  • 重新启动XCode
  • 从设备/模拟器中删除应用程序
  • 再试一次。
    如果仍然无法工作,请使用其他模拟器/设备进行几次运行。它迟早会在原来的框架上再次工作。

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


    在我建立了一个项目,使用我的团队一直在开发的框架之后,我自己也看到了这个问题。更新此特定设置后,问题消失了。在我的例子中,路径与我已经为“框架搜索路径”设置设置的路径相同。

    如果您使用的是Cocoapods,请检查Cocoapods存储库中的以下线程:

    这解决了我的问题:

    正在复制@dfleming响应:

    出于某种原因,CocoaPods似乎没有添加“[CP] 在以下情况下,将Pods框架的构建阶段嵌入到UI测试目标 生成项目工作区

    我手动将其添加到中,UI测试再次可以运行

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

    “${SRCROOT}/Pods/Target S
    
    Project file -> Test target -> Build Settings -> Runpath Search Paths