Cocoapods link_with 方法会导致这个问题!
我在 xcode 7.2 上遇到了完全相同的错误 - 似乎没有多少模拟器或设备重置可以清除它。在完全重建我的 UITest 目标之后,虽然一切正常。在.pbxproj 文件的大量 git diff 中花费了大量时间后,我为我的项目找到了解决方案。我不确定它是否解决了每个看到此错误的人的根本原因,但它确实为我解决了问题。
从“部署目标”下方的项目信息中,“配置”将列出您的应用程序的所有可能配置。展开您尝试运行的配置,您应该会看到所有目标的列表。在我的例子中,cocoapods 自动为 UITest 目标添加了一个基本配置:
在下拉菜单中将此设置为none。
接下来在左侧的菜单中选择您的 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
假设您没有在 UITests 中使用任何 pod,那么目标应该会再次构建而不会出现错误,并且测试将运行!
我对这个问题根源的理解是,每个 UITest 目标都构建了两个单独的包,一个用于应用程序,一个用于 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 时,所有内容都应该正确链接。