Xcode 10 UI 测试原因:Cocoapods 未找到图像

Posted

技术标签:

【中文标题】Xcode 10 UI 测试原因:Cocoapods 未找到图像【英文标题】:Xcode 10 UI Tests Reason: Image Not Found with Cocoapods 【发布时间】:2018-10-05 16:27:53 【问题描述】:

我正在尝试在我的应用中运行 UI 测试,但模拟器一启动我就会得到:

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

2018-10-05 11:04:59.772078-0500 AppUITests-Runner[53273:1645870] (dlopen_preflight(/Users/John/Library/Developer/Xcode/DerivedData/app-ios-client-ewtlrcqcxoeiaudgmthymuhcuxfz/Build/Products /Debug-iphonesimulator/AppUITests-Runner.app/PlugIns/AppUITests.xctest/AppUITests):库未加载:@rpath/libswiftSwiftOnoneSupport.dylib 引用自:/Users/John/Library/Developer/Xcode/DerivedData/app-ios-client-ewtlrcqcxoeiaudgmthymuhcuxfz/Build/Products/Debug-iphonesimulator/AppUITests-Runner.app/PlugIns/AppUITests.xctest/Frameworks/Alamofire.framework/阿拉莫菲尔 原因:图片未找到)

我的 UITest 是 Xcode 10 创建的模板,我使用的是 Cocoapods 1.5.3 和 Swift 4.2

我的项目结构:

工作区 自定义框架(Podfile 在这里) App A(我在这里运行 UITests) 应用 B

我的 podfile 如下所示:

platform :ios, '10.0'

inhibit_all_warnings!
use_frameworks!

target 'App Library' do
    use_frameworks!

    pod 'Intercom'
    pod 'Spreedly'
    pod 'Alamofire'
    pod 'IGListKit'
    pod 'CardIO'
    pod 'SwiftKeychainWrapper'
    pod 'OneTimePassword', :git =>   'https://github.com/john/OneTimePassword.git', :branch => 'develop'
    pod 'SnapKit'
    pod 'DateToolsSwift'
    pod 'BetterSegmentedControl'
    pod 'SDWebImage'
    pod 'SwiftLocation'
    pod 'Nuke'
    pod 'Instabug'
    pod 'Mixpanel-swift'


    target 'App LibraryTests' do
        inherit! :search_paths
        # Pods for testing
    end

    target 'App' do
        project '../App/App'
        inherit! :complete

        use_frameworks!

        pod 'FacebookCore'
        pod 'FacebookLogin'

        target 'AppTests' do
            inherit! :search_paths
            # Pods for testing
        end
    end

    target 'App Business' do
         project '../App Business/App Business'
         inherit! :complete

         use_frameworks!

         target 'App BusinessTests' do
             inherit! :search_paths
             # Pods for testing
         end

         target 'App BusinessUITests' do
             inherit! :search_paths
             # Pods for testing
         end
     end

end

# The UI Test target I'm trying to run
target 'AppUITests' do
     inherit! :search_paths
     use_frameworks!
     # Pods for testing
     project '../App/App'
     pod 'Intercom'
     pod 'Spreedly'
     pod 'Alamofire'
     pod 'IGListKit'
     pod 'CardIO'
     pod 'SwiftKeychainWrapper'
     pod 'OneTimePassword', :git => 'https://github.com/john/OneTimePassword.git', :branch => 'develop'
     pod 'SnapKit'
     pod 'DateToolsSwift'
     pod 'BetterSegmentedControl'
     pod 'SDWebImage'
     pod 'SwiftLocation'
     pod 'Nuke'
     pod 'FacebookCore'
     pod 'FacebookLogin'
     pod 'Instabug'
     pod 'Mixpanel-swift'
end

workspace '../app-ios-client'

我尝试使用!inherit:complete!inherit:search_paths 将 UI 测试目标放在目标应用程序中,然后像上面发布的代码一样将其移到外面。我还清理了构建文件夹,删除了派生数据并重新启动了 Xcode,但我仍然遇到这个问题。我也尝试添加import UIKitimport Alamofire,但没有任何效果。在所有这些可能的修复之间,我运行了pod deintegrate,然后是pod install。我认为这个问题可能与我的自定义框架中的 podfile 有关,但老实说我不知道​​。有任何想法吗?谢谢!

【问题讨论】:

这能回答你的问题吗? Xcode 10 - UITests - Reason: image not found 【参考方案1】:

我的修复与https://***.com/a/54034832/883413 类似,只是我没有打扰post_install 部分。

以前我的 podfile 结构与问题中的类似:

platform :ios, '10.0'

target 'AppName' do
  use_frameworks!
  
  pod 'PodName'

  target 'AppNameTests' do
    inherit! :search_paths
  end

  target 'AppNameUITests' do
    inherit! :search_paths
  end
end

将其更改为(较新的?)这样的结构解决了这个问题:

platform :ios, '10.0'
use_frameworks!

def all_pods
  pod 'PodName'
end

target 'AppName' do
  all_pods
end
  
target 'AppNameTests' do
  inherit! :search_paths
  all_pods
end

target 'AppNameUITests' do
  inherit! :search_paths
  all_pods
end

【讨论】:

【参考方案2】:

我通过将 podfile 中的目标更改为这个来修复它:

target 'AppUITests' do
    inherit! :search_paths
    use_frameworks!
    # Pods for testing
    project '../App/App'
end

【讨论】:

【参考方案3】:

尝试添加继承! :search_paths

还在 post_install 中更改 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

【讨论】:

以上是关于Xcode 10 UI 测试原因:Cocoapods 未找到图像的主要内容,如果未能解决你的问题,请参考以下文章

Travis CI 构建 [Cocoapod Swift] 失败,没有“这样的模块...”错误

将单元和 UI 测试添加到 Xcode 中的现有项目

如何在 Xcode10 Ui 测试中点击标签的特定单词?

XCode 7 UI 测试 - 可用的操作

将 Objective-C 框架(CocoaPod)导入 Swift?

从现有的 Xcode 项目制作 CocoaPod