由于以下错误,我无法运行我的测试用例:
- 无法加载捆绑包“UITests”,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包。
- 未加载库:@rpath/Alamofire.framework/Alamofire。
- 原因:找不到图片
从两天开始尝试搜索和解决,但无法解决此问题,请有人帮忙。
我能够使用 Xcode 10.1 生成的项目重现此问题。我使用 Swift 4.2 和 CocoaPods 1.10.0 作为依赖管理器。我有以下 Podfile:
# Uncomment the next line to define a global platform for your project
platform :ios, '10.0'
target 'MyApp' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for MyApp
pod 'Alamofire', '4.8.1'
target 'MyAppTests' do
inherit! :search_paths
# Pods for testing
end
target 'MyAppUITests' do
inherit! :search_paths
# Pods for testing
end
end
然后我删除了,有关更多详细信息use_frameworks!
,请参阅此链接:
# Uncomment the next line to define a global platform for your project
platform :ios, '10.0'
target 'MyApp' do
# Pods for MyApp
pod 'Alamofire', '4.8.1'
target 'MyAppTests' do
inherit! :search_paths
# Pods for testing
end
target 'MyAppUITests' do
inherit! :search_paths
# Pods for testing
end
end
我还收到了一些这样的警告:
[!] The `MyAppUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-MyApp-MyAppUITests/Pods-MyApp-MyAppUITests.debug.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
这就是为什么我从 MyAppUITests 构建设置中删除了这一行:
在那次运行pod deintegrate && pod install
之后,问题就消失了。可能对于具有更多依赖项的项目(如这里),您需要使用另一个解决方案。
这是因为您的 pod 仅适用于您的框架目标,而不适用于测试。将测试目标添加到您的 podfile。
例子 :
target 'MyFramework' do
use_frameworks!
pod 'Alamofire', '~> 4.5'
end
target 'MyFrameworkTests' do
use_frameworks!
pod 'Alamofire', '~> 4.5'
end
在您的测试中,目标更改inherit! :search_paths
为inherit! :complete
. 请参阅文档以了解其作用。
就我而言,我需要将 UI 测试目标与use_frameworks!
.
如果您use_frameworks!
在Podfile顶部的某处全局指定,将 UI 测试目标从嵌套结构移动到它自己的结构将无济于事。
有错误的Podfile(原始):
platform :ios, '10.0'
inhibit_all_warnings!
use_frameworks!
target 'MyProject' do
pod 'R.swift', '~> 5.0'
pod 'Moya/RxSwift', '~> 12.0'
# and other pods
target 'MyProjectTests' do
inherit! :search_paths
pod 'iOSSnapshotTestCase', '~> 6.0'
end
target 'MyProjectUITests' do
inherit! :search_paths
end
end
Podfile有错误(首先尝试修复):
platform :ios, '10.0'
inhibit_all_warnings!
use_frameworks!
def shared_pods
pod 'R.swift', '~> 5.0'
end
target 'MyProject' do
shared_pods
pod 'Moya/RxSwift', '~> 12.0'
# and other pods
target 'MyProjectTests' do
inherit! :search_paths
pod 'iOSSnapshotTestCase', '~> 6.0'
end
end
target 'MyProjectUITests' do
shared_pods
end
最终的工作Podfile:
platform :ios, '10.0'
inhibit_all_warnings!
def shared_pods
pod 'R.swift', '~> 5.0'
end
target 'MyProject' do
use_frameworks!
shared_pods
pod 'Moya/RxSwift', '~> 12.0'
# and other pods
target 'MyProjectTests' do
inherit! :search_paths
pod 'iOSSnapshotTestCase', '~> 6.0'
end
end
target 'MyProjectUITests' do
shared_pods
end
检查 UITest 目标构建设置中的部署目标是否设置为与您尝试测试的主机应用程序相同。就我而言,我稍后添加了 UITesting 目标,并使用默认部署目标 iOS 12 创建它。如果您尝试在低于 12 的 iOS 上运行 UITest,它会给我问题中提到的错误。
我必须将我的框架的位置添加到目标> mytestTarget>构建设置>运行路径搜索路径下的运行路径搜索路径
切换到旧版构建系统修复了 Xcode 10 的问题。
对于使用 Carthage 遇到此问题的任何人,我通过将/usr/local/bin/carthage copy-frameworks
运行脚本阶段添加到 UITest 目标(而不仅仅是我的主应用程序目标)来解决它,并将框架添加为输入文件。
我看到了答案,但没有解释,所以决定发布我的。
问题是 UI 测试在控制主应用程序的单独应用程序中执行,因此它不能使用主应用程序的框架,因此如果您只是使用 Cocoapods UI 测试继承到框架的路径,应用程序将在启动时崩溃。
要解决此问题,您需要将框架实际复制到 UI 测试应用程序或更新您的 Podfile:
use_frameworks!
target 'App' do
pod 'Alamofire'
target 'App_UnitTests' do
inherit! :search_paths
pod 'Quick'
pod 'Nimble'
end
end
target 'App_UITests' do
pod 'Alamofire'
end
就我而言,只需在inherit! :search_paths
不更改文件结构或复制任何 pod 的情况下删除即可解决我的问题。
解决我的问题的方法如下: 1)从 pod 文件中删除 UITests 目标。最初,我在 pod 文件中有以下内容:
target 'XUITests' do
inherit! :search_paths
end
2) 解构 pod(使用 pod deintegrate)
3)安装吊舱(使用吊舱安装)
4) 清理您的项目并运行该项目或您的 UITest
] 3
在我的情况下,只需选择“我的 Mac”而不是“我的 Mac (Mac Catalyst)”就可以运行测试。
对我来说,错误是在构建 UITests 时。解决方案:Targer 的 iOS 版本错误,我替换为与测试过的 Target 相同的版本,一切正常!!
对我来说,这个问题是由于我从一个框架中引用了一个 UIKit 类的扩展中的一个属性,该框架没有在引用它的文件中导入。通过不使用该属性来修复。我不确定它为什么首先编译 - 这应该是编译时错误,而不是运行时错误。
尝试将应用程序目标的每个 pod 复制到 UI 测试目标。2019 年有效。
如果您实际上使用的是 Cocoapods,您可能只需要运行“pod install”,构建设置就会自动更新。