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

时间:2016-11-08 06:40:11

标签: ios swift travis-ci uitest

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

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

尝试搜索和解决,因为两天但无法解决这个问题,有人可以帮助。

20 个答案:

答案 0 :(得分:22)

我能够用Xcode 10.1生成的项目重现此问题。我使用Swift 4.2和CocoaPods作为依赖项管理器。我有以下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!,有关更多详细信息,请参见this link

# 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 build settings

运行pod deintegrate && pod install之后,问题消失了。 可能对于具有更多依赖性的项目(例如here),您需要使用其他解决方案。

答案 1 :(得分:8)

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

示例:

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

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

答案 2 :(得分:7)

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

答案 3 :(得分:6)

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

答案 4 :(得分:6)

就我而言,我需要用use_frameworks!分隔UI测试目标。

如果您在 Podfile 顶部的某个位置全局指定了use_frameworks!,则将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

答案 5 :(得分:1)

我能够通过遵循Roman Podymov的回答然后运行void func1() { char result[256]; func2(result, 256); // after calling, result will carry "a returned string" } void func2(char* result, size_t bufferLen) { strncpy(result, "a returned string", bufferLen); } 然后运行pod deintegrate

来解决此问题

答案 6 :(得分:1)

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

target 'XUITests' do
    inherit! :search_paths   
end

2)解囊(解囊)

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

4)清理项目并运行项目或UITest

答案 7 :(得分:1)

使用Xcode 10切换到旧版构建系统已解决的问题。

答案 8 :(得分:1)

xCode 11.2在另一个框架中使用Apollo框架。我没有将其更改为可选/必需,而是通过设置为embed对其进行了修复。

出现此特定错误:

  

捆绑“ XXX”由于损坏或丢失而无法加载   必要的资源。尝试重新安装捆绑软件。库未加载:   @ rpath / Apollo.framework / Apollo

我必须嵌入框架

enter image description here

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

解决方案很简单:

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

enter image description here

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

问题在于,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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

就我而言,仅删除inherit! :search_paths而无需更改文件结构或复制任何Pod即可解决我的问题。

答案 15 :(得分:0)

尝试将应用目标的每个Pod复制到UI测试目标。 到2019年为止。

答案 16 :(得分:0)

在您的测试目标中,将inherit! :search_paths更改为inherit! :complete。 有关此操作,请参见documentation

答案 17 :(得分:0)

当我向项目中添加框架(也就是框架本身)并尝试运行测试时,发生了此错误。我将其设置为可选而不是必需,并且测试成功。 enter image description here

答案 18 :(得分:0)

1

2[![3] 3

  1. 转到构建阶段
  2. 打开Copy Pods Resources并复制路径
  3. 粘贴您从Copy Pods Resources复制的路径,并使用框架更改标记名称资源
  4. 清理并构建
  5. 运行您的UITestsFile

答案 19 :(得分:-2)

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