85

由于以下错误,我无法运行我的测试用例:

  • 无法加载捆绑包“UITests”,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包。
  • 未加载库:@rpath/Alamofire.framework/Alamofire。
  • 原因:找不到图片

从两天开始尝试搜索和解决,但无法解决此问题,请有人帮忙。

4

20 回答 20

32

我能够使用 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 构建设置中删除了这一行:

MyAppUITests 构建设置

在那次运行pod deintegrate && pod install之后,问题就消失了。可能对于具有更多依赖项的项目(如这里),您需要使用另一个解决方案。

于 2018-09-16T15:02:27.453 回答
22

这是因为您的 pod 仅适用于您的框架目标,而不适用于测试。将测试目标添加到您的 podfile。

例子 :

target 'MyFramework' do
  use_frameworks!
  pod 'Alamofire', '~> 4.5'
end

target 'MyFrameworkTests' do
  use_frameworks!
  pod 'Alamofire', '~> 4.5'
end
于 2017-12-11T14:14:30.963 回答
20

在您的测试中,目标更改inherit! :search_pathsinherit! :complete. 请参阅文档以了解其作用。

于 2019-07-27T22:34:56.513 回答
15

就我而言,我需要将 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
于 2019-03-12T04:26:27.093 回答
15

检查 UITest 目标构建设置中的部署目标是否设置为与您尝试测试的主机应用程序相同。就我而言,我稍后添加了 UITesting 目标,并使用默认部署目标 iOS 12 创建它。如果您尝试在低于 12 的 iOS 上运行 UITest,它会给我问题中提到的错误。

于 2018-10-16T17:29:58.637 回答
9

我必须将我的框架的位置添加到目标> mytestTarget>构建设置>运行路径搜索路径下的运行路径搜索路径

于 2018-06-20T08:36:27.480 回答
7

当我向项目添加一个框架(这也是一个框架本身)并尝试运行测试时,这个错误发生在我身上。我将其设为可选而不是必需,并且测试成功。 在此处输入图像描述

于 2019-07-18T11:40:49.553 回答
2

切换到旧版构建系统修复了 Xcode 10 的问题。

于 2019-01-04T16:30:43.657 回答
2

对于使用 Carthage 遇到此问题的任何人,我通过将/usr/local/bin/carthage copy-frameworks运行脚本阶段添加到 UITest 目标(而不仅仅是我的主应用程序目标)来解决它,并将框架添加为输入文件。

于 2020-03-09T16:12:30.177 回答
1

Xcode 11.2 在另一个框架中使用 Apollo 框架。我没有更改为可选/必需,而是通过设置为嵌入来修复它。

有了这个特定的错误:

无法加载捆绑包“XXX”,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包。未加载库:@rpath/Apollo.framework/Apollo

我不得不嵌入框架

在此处输入图像描述

于 2019-11-12T23:53:34.563 回答
1

我看到了答案,但没有解释,所以决定发布我的。

问题是 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
于 2020-01-05T17:13:30.100 回答
1

就我而言,只需在inherit! :search_paths不更改文件结构或复制任何 pod 的情况下删除即可解决我的问题。

于 2019-12-02T19:02:22.137 回答
1

无法加载捆绑包 UITests,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包

我在尝试运行UI Testing Bundle测试时遇到了这个问题Framework

解决方案很简单:

Build Phases -> + -> New Copy Files Phase -> <select a framework> -> Destination Frameworks 

在此处输入图像描述

结果<UI_Testing_Bundle_name>-Runner.app生成

于 2020-11-13T17:47:27.170 回答
1

解决我的问题的方法如下: 1)从 pod 文件中删除 UITests 目标。最初,我在 pod 文件中有以下内容:

target 'XUITests' do
    inherit! :search_paths   
end

2) 解构 pod(使用 pod deintegrate)

3)安装吊舱(使用吊舱安装)

4) 清理您的项目并运行该项目或您的 UITest

于 2018-12-13T13:42:20.380 回答
1

1

2[![3] 3

  1. 转到构建阶段
  2. 打开 Copy Pods Resources 并复制路径
  3. 粘贴您从 Copy Pods Resources 复制的路径,并使用框架更改标签名称资源
  4. 清洁和建造
  5. 运行你的 UITestsFile
于 2016-11-17T04:12:13.123 回答
0

在我的情况下,只需选择“我的 Mac”而不是“我的 Mac (Mac Catalyst)”就可以运行测试。

于 2021-09-27T08:32:57.090 回答
0

对我来说,错误是在构建 UITests 时。解决方案:Targer 的 iOS 版本错误,我替换为与测试过的 Target 相同的版本,一切正常!!

于 2019-04-16T19:08:34.170 回答
0

对我来说,这个问题是由于我从一个框架中引用了一个 UIKit 类的扩展中的一个属性,该框架没有在引用它的文件中导入。通过不使用该属性来修复。我不确定它为什么首先编译 - 这应该是编译时错误,而不是运行时错误。

于 2019-12-12T12:38:46.097 回答
-1

尝试将应用程序目标的每个 pod 复制到 UI 测试目标。2019 年有效。

于 2019-11-17T15:57:33.730 回答
-5

如果您实际上使用的是 Cocoapods,您可能只需要运行“pod install”,构建设置就会自动更新。

于 2017-12-01T02:38:56.897 回答