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

时间:2018-10-05 12:50:47

标签: ios xcode-ui-testing

我愿意在我的应用程序中添加单元测试和UI测试。

我首先成功配置了单元测试,然后尝试对UI测试进行同样的操作。添加新的UI测试包目标后,这是我的Podfile:

platform :ios, '8.0'
use_frameworks!
inhibit_all_warnings!

def shared_pods
pod 'Bolts'
pod 'Branch'
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'
pod 'GoogleAnalytics'
pod 'GooglePlaces'
pod 'Parse'
pod 'Toast-Swift'
end

target 'MyTarget' do
shared_pods
end

target 'MyTargetUITests' do
shared_pods
end

target 'MyTargetUnitTests' do
shared_pods
end

但是,当我尝试运行自动创建的MyProjectUITests测试用例时,它仅包含基本设置,甚至没有@testable import MyProject

import XCTest

class MyProjectUITests: XCTestCase {

    override func setUp() {
        continueAfterFailure = false
        XCUIApplication().launch()
    }
}

我收到此错误:

  

正在运行测试...   无法加载捆绑包“ MyProjectUITests”,因为它已损坏或缺少必要的资源。尝试重新安装捆绑软件。

     

(dlopen_preflight(/var/containers/Bundle/Application/5A1FE39F-E675-4A47-9BF4-FBCDB96F5821/MyProjectUITests-Runner.app/PlugIns/MyProjectUITests.xctest/MyProjectUITests):库未加载:@ rpath / libswiftSwiftOnoneSupportdy。

     

引用自:/private/var/containers/Bundle/Application/5A1FE39F-E675-4A47-9BF4-FBCDB96F5821/MyProjectUITests-Runner.app/PlugIns/MyProjectUITests.xctest/Frameworks/Toast_Swift.framework/Toast_Swift

     

原因:找不到图片)

怎么了?感谢您的帮助。

编辑:有关信息,当我从UI测试目标中删除该Toast_swift窗格并仅将其放在应用和单元测试目标中时,效果很好。

3 个答案:

答案 0 :(得分:5)

在cocoapods github问题跟踪器上查看this issue

对于为什么会造成问题,我仍然有些困惑,但是使用此脚本将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES设置为YES可以解决这个问题。

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            # This works around a unit test issue introduced in Xcode 10.
            # We only apply it to the Debug configuration to avoid bloating the app size
            if config.name == "Debug" && defined?(target.product_type) && target.product_type == "com.apple.product-type.framework"
                config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = "YES"
            end
        end
    end
end 

答案 1 :(得分:0)

尝试添加继承! :search_paths

,并在安装后更改 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES

use_frameworks!

def shared_pods
    pod 'SomePod'
end

target 'App_name' do
    shared_pods
end

target 'App_nameTests' do
    inherit! :search_paths
    shared_pods
end

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'
        end
    end
end

答案 2 :(得分:0)

我也遇到了这个问题,其他建议都没有奏效。

一段时间后,我发现专门在代码中的任何地方使用print()会以某种方式强制libswiftSwiftOnoneSupport.dylib加载,问题将消失。

我正在使用Xcode 10.1,Swift 4.2,而给我带来此问题的pod是Nimble。

希望这会有所帮助!