答案 0 :(得分:15)
如果要将项目与第三方动态框架集成,则可能需要在构建设置中添加路径。查找 - >构建设置 - >“运行路径搜索路径”并确保它包含框架的路径。
在设置我的项目以使用我的团队一直在研究的框架之后,我自己才刚刚看到这个问题。更新此特定设置后,问题就消失了。在我的例子中,路径与我必须为“框架搜索路径”设置设置的路径相同。
答案 1 :(得分:12)
我解决了这个问题,就像我解决了大多数XCode问题一样:
DerivedData
中的项目文件(Xcode>Preferences>Locations>DerivedData→
以跳到查找器中)Product>Clean
Product>Clean Build Folder
再试一次。 如果它仍然无法工作,请使用另一个模拟器/设备进行几次运行。迟早它会再次在原版上再次发挥作用。
答案 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)
我遇到了完全相同的错误并最终使其正常工作,这些是我采取的步骤。
在清理和删除应用程序后,尝试重新启动Xcode和模拟器,但从未有效。
然后我按照建议重新启动Mac,但仍然没有用。
然后我选择了一个新设备在模拟器中进行测试,以前使用5s并切换到6,这样就可以了。
有趣的是,当我切换到iPhone 6模拟器时,在运行应用程序并运行之前,它显示带有加载栏的Apple徽标。
当切换回5s模拟器时,它完全一样,使用Apple之前没有完成的装载条,然后5s工作。
所以它看起来像是一个模拟器问题,切换到另一个设备工作。重置内容和设置可能是非工作设备的解决方案。
答案 4 :(得分:3)
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目标都构建了两个独立的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)
答案 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)
答案 12 :(得分:0)
根本原因可能是模拟器故障。模拟器的问题很常见,特别是在首次发布时。
如果在成功模拟器启动和连接后出现问题,请发布错误的详细信息。
为了让模拟器启动,我经常要取消第一次运行(在干净地启动Xcode之后),并尝试重新运行几次。
如果这是可重复的,在多个项目中发生,并在重新启动和清理项目后仍然存在,请考虑在Stack Overflow社区无法帮助的情况下向Apple提交缺陷。
答案 13 :(得分:0)
我也面临同样的问题:
为不同的项目尝试了以下事项:
1.对于我有一些第三方框架的项目,问题是测试包无法在运行时找到框架。对于此更新,测试目标的运行路径搜索路径通过添加$(PROJECT_DIR)/Frameworks
来构建设置(假设您将框架保留在该位置)。,它修复了此项目的问题
您可以在以下位置查找:
Project file -> Test target -> Build Settings -> Runpath Search Paths
在其他工作区中,当我将测试设备更改为其他模拟器或更改设备本身时。它有所帮助。
重新启动xcode或mac系统。
答案 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,克隆了存储库瞧!没错。
希望能为某人解决问题。它是核“核”。选项,你永远不应该这样做,但就像我说的,这是唯一对我有用的东西。