构建失败:没有这样的模块“KIF”

Posted

技术标签:

【中文标题】构建失败:没有这样的模块“KIF”【英文标题】:Build Failed: No such module 'KIF' 【发布时间】:2015-01-30 01:23:05 【问题描述】:

在我的 Swift 项目中尝试引用 KIF 时,我遇到了零星的问题。

在我执行“清理”后,我的项目停止编译,并且一直给我错误:No such module 'KIF'

这是我的 KIF 的 cocoapods 文件条目:

target 'MyProjectTests', :exclusive => true do
    pod 'KIF', '~> 3.0', :configurations => ['Debug','QA']
end

(这是 KIF's readme 推荐的 cocoapods 配置。)

我可以通过将上面的 cocoapods 条目更改为:

pod 'KIF', '~> 3.0'

但项目在尝试运行时崩溃:

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  Referenced from: /Users/albertbori/Library/Developer/CoreSimulator/Devices/29008343-5A97-47FB-B0E6-66D18A331BDA/data/Containers/Bundle/Application/C0E16F80-9A08-4228-96F7-8A24F08AB066/MyProject.app/Frameworks/KIF.framework/KIF
  Reason: image not found

然后,如果我将其切换回原始配置并执行pod install,则使用 KIF 进行测试再次起作用...

如何正确引用 KIF 以确保使用该框架进行稳定的构建和开发?

【问题讨论】:

查看 KIF 的 pod 规范,这似乎是因为它们将 FRAMEWORK_SEARCH_PATHS 覆盖为自定义值。我认为其中不包括 XCTest。 是的,我认为这是因为他们预计您将使用target 'MyProjectTests', :exclusive => true do 条件将其排除在部署之外。我只是无法在该条件下编译它。 【参考方案1】:

在 CocoaPods 问题跟踪器上发布 this issue 后,kylef 帮助我意识到我无意中对 pod 进行了双重链接。

这里是his pull request,用于解决我制作的示例项目中的问题。

总之,Podfile 应该看起来像这样,如果你想链接根项目和测试项目,但有条件地向测试目标添加一个额外的 pod:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

use_frameworks!

pod 'MBProgressHUD', '~> 0.8'
pod 'Locksmith'

target 'catch22Tests' do
  pod 'KIF', '~> 3.0'
end

在这种情况下,您不要想使用:link_with 'catch22', 'catch22Tests',否则它将链接catch22Tests 两次。

【讨论】:

以上是关于构建失败:没有这样的模块“KIF”的主要内容,如果未能解决你的问题,请参考以下文章

模块构建失败:错误:ENOENT:没有这样的文件或目录 - React

“没有这样的模块:AVFAudio”xcode 构建在旧机器上失败,但在新机器上工作正常

由于缺少 KIF 类,项目无法构建

詹金斯 |可可足类 |斯威夫特 |错误:没有这样的模块“RealmSwift”

错误:詹金斯“没有这样的模块 <Swift Cocoapod 名称>”

KIF:KIF 可以访问被测 iOS 应用程序的文件系统吗?