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


76

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

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

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

Answers:


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之后,问题消失了。可能对于具有更多依赖性的项目(例如here),您需要使用其他解决方案。


如果有多个吊舱,语法是什么?
bshirley

@RomanPodymov我使用CocoaPods 1.5.3遇到了上述问题,这是我的pod文件,# Uncomment the next line to define a global platform for your project platform :ios, '9.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 'SwiftMessages' pod 'IQKeyboardManager' pod 'AlamofireImage' . pod 'Alamofire' target 'MyAppUITests' do inherit! :search_paths # Pods for testing end end
Jibran SiddiQui

1
您好@JibranSiddiQui。尝试删除inherit! :search_pathstarget 'MyAppUITests'。还是需要保留它?
Roman Podymov '19

嗨,谢谢您的评论,@ RomanPodymov我尝​​试了 inherit! :search_paths但没有成功,但除了这些提及之外,我还拥有其他CocoaPods lib。我以前没有任何想法。
Jibran SiddiQui

您好@JibranSiddiQui。我尝试安装所有这些吊舱,但没有任何错误。您正在使用哪个版本的Xcode?您有Objective-C或Swift项目吗?
Roman Podymov '19

17

这是因为您的广告连播仅适用于框架目标,而没有适用于测试目标。将测试目标添加到您的Podfile。

范例:

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

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

3
除了使用该解决方案外,我还发现至少需要对测试目标可见的源文件import <Pod>(在本例中为import Alamofire)才能修复错误。
music_coder

15

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


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

也只有最后一种解决方案对我有效。我不必移动use_frameworks!不过,我将其留在目标内部,并且工作正常。所有其他更改都是必需的。
罗杰·欧巴

15

在测试中,将目标更改inherit! :search_pathsinherit! :complete。请参阅文档以了解其功能。


9

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


5

当我向项目中添加框架(也就是框架本身)并尝试运行测试时,发生了此错误。我将其设为可选而不是必需,测试成功。 在此处输入图片说明



1

1个

2 [![3] 3

  1. 转到构建阶段
  2. 打开“复制Pod资源”并复制路径
  3. 粘贴从“复制容器”资源复制的路径,并使用框架更改标签名称资源
  4. 清洁和建造
  5. 运行您的UITestsFile

2
问题没有提及他们使用可可豆
Max MacLeod

当您使用迦太基时发生了什么,错误的答案。
爱德华多·奥利弗罗斯

1

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

target 'XUITests' do
    inherit! :search_paths   
end

2)拆解豆荚(与豆荚解整合)

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

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


但是,如果您需要在项目中进行UI测试,该怎么办?
Roman Podymov '19


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

1

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

出现此特定错误:

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

我不得不嵌入框架

在此处输入图片说明



0

尝试将应用目标的每个Pod复制到UI测试目标。2019可行。


0

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


0

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


0

当尝试运行UI Testing Bundle测试我已经运行了这个问题Framework

解决方案很简单:

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

在此处输入图片说明

结果是 <UI_Testing_Bundle_name>-Runner.app产生


-5

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.