使用CocoaPods时出现"No such module"错误

106

这是我的步骤。我在项目目录中创建了一个新的 Podfile,然后添加了以下内容:

platform :ios, '9.0'
use_frameworks!

target 'CPod' do
pod 'AFNetworking', '~> 2.5'
pod 'ORStackView', '~> 2.0'
pod 'SwiftyJSON', '~> 2.1'
end 

我输入 pod install 命令后,一切顺利,打开 xcworkspace 文件。然后我转到 ViewController.swift 文件,如果尝试导入 pod 的话,我会得到 No such module 'SwiftyJSON' 的错误提示,即使我使用 import SwiftyJSON 命令也不行。有任何想法吗?


1
可能是重复的问题:Swift: Cannot use library from Pod file - Rugmangathan
那适用于“AFNetworking”,但那是另外一回事。“SwiftyJSON”是一个Swift库,因此该帖子并没有回答这个问题。@Rugmangathan - Idris
你使用的CocoaPods版本是哪个? - Michael Dautermann
@Idris有完全相同的问题。可能是Xcode 6.3.2+的问题。 - rb612
我正在使用Xcode 7运行,所以可能会有问题,但我不太确定。@rb612 - Idris
显示剩余5条评论
28个回答

132

尝试将Pods框架添加到您的构建方案中并构建该框架。构建完成后,构建/运行您的项目。

步骤:

  1. 方案菜单 > 管理方案 > 选中Pods > 关闭 manage

    enter image description here

  2. 从方案菜单中选择Pods
  3. 构建Pods
  4. 从同一个菜单中选择您的项目,然后构建/运行它。

2
你太棒了!谢谢你 :) - Mohsin Khubaib Ahmed
5
在 Xcode 11.0 中,现在将其放在“产品” ->“方案”->“管理方案”下。 - tschumann
8
我没有任何耳机。我该怎么办? - Soorya
同样,另一个提示是要检查您是否为项目选择了正确的方案。我曾经不小心切换到了另一个方案,导致出现了这个错误。 - craft
黑魔法:我的常规方案被打破了。所以我选择了另一个随机的方案,构建没问题,但无法启动模拟器。现在我又切换回常规方案:一切都正常工作了! - leverglowh

42

安装podfile后,您必须重新打开项目的.xcworkspace文件(而不是.xcodeproj文件)。

  1. 使用CocoaPods克隆仓库
  2. 打开YourWorkspace/YourApplication.xcworkspace文件
  3. 选择您要运行的应用程序,在嵌入式二进制文件中添加SwiftyJSON.framework并运行

愉快的编码 :)


1
谢谢!这正是我所需要的。我以前不知道工作区,一直都是打开xcodeproj文件。 - Ira Herman
1
对我来说非常好用!谢谢! - Lynn_Yang
这里的真正诀窍是不要从命令行打开“project .xcworkspace”,并确保Xcode和任何模拟器都已关闭。当您打开Xcode时,您应该看到一个蓝色图标的“your project”以及另一个蓝色项目“Pods”。 - user1094125
@user1094125 我猜他们会感到困惑,因为他们的名字很相似。第一次尝试时,我也遇到了这种情况。 :) - Asil ARSLAN
1
有些解决方案是如此简单,以至于有时我真的认为它们不起作用。在我的情况下,您的解决方案帮助我弄清楚了我没有打开.xcworkspace文件,因为我双击了我的框架目录。这是Xcode的一种有点奇怪的行为,但确实会发生。 - Marcos Rocha
@MarcosRocha 我很高兴听到这个消息。你能否上传我的解决方案。也许我们可以提供更多帮助。 :) - Asil ARSLAN

35

您也可以尝试使用以下方式重新安装Pods:

pod deintegrate

然后

pod install

这对我解决了这个问题。


有时需要运行这些命令两次... 另外,我已经运行了 rm -rf ~/Library/Developer/Xcode/DerivedData/* 命令。 - mkul
我先执行了这个操作,然后构建了Pod和Library方案,然后它就可以工作了。 - Bhimbim
这是一个如此简单的解决方案,我没想到它会奏效。但它确实奏效了。谢谢。 - shoan
这对我也起作用了。我尝试删除pods、podfile.lock、.wcworkspace,安装较新版本的cocoapods,我已经尝试了所有方法,只有这个有效。谢谢! - Raica Dumitru Cristian

20

按下Command+Option+Shift+K,然后运行您的应用程序,您将看到一个魔法。

或者从菜单->产品中,按下键盘上的Option键,您将看到清除构建文件夹

看起来很有趣,Xcode怎么能这样对我们呢?但我使用Pod使用Swift库时也发生了同样的事情,经过艰难的挣扎后我最终选择了清除构建文件夹。


1
在安装了Pods之后,在Xcode项目中出现“没有这样的模块”错误的数百种解决方案中,这是唯一一个真正适用于我的。+1。 - instanceof
忘记了经典的续篇,你把东西关掉然后再开启它,问题就解决了。叹气。 - SDG

18

不确定这对其他人是否仍然有帮助。但在我的情况下,问题最终是因为我在.podspec文件中没有引用依赖项导致的一个愚蠢错误。

我们有一个具有多个内部库的应用程序,这些库彼此之间也有依赖关系 - 我们在Podfiles中考虑了这些依赖关系...但没有在podspecs中考虑。

因此,即使我们的Podfiles中有:

应用程序/Podfile

# Development Pods
pod 'ConsumingLibrary ', :path => '../ios-consuming-lib'
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

消费库 / Podfile

# Development Pods
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

需要在 .podspec 文件中也进行标注:

ConsumingLibrary / ConsumingLibrary.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'DependentLibrary1', '~> 0.1.0-RC'

DependentLibrary1 / DependentLibrary1.podspec

依赖库1 / 依赖库1.podspec
  # TODO
  # Add here any resources to be exported.

  s.dependency 'CommonCoreLibrary', '~> 0.1.0-RC'

我认为我浪费了大约2个小时的时间,试图弄清楚为什么我可以构建ConsumingLibrary并运行测试,但一旦我构建了使用所有三个库的应用程序,我就不断收到以下错误信息:

找不到模块“DependentLibrary1”


两个库彼此依赖,这不会导致循环依赖问题吗?我目前正在面临这个问题。你知道如何解决吗? - Mohd Haider
@LowAmmo 你真是个救星。这正是我的问题所在。非常感谢你!!! - Patrick

14

我的情况是因为我打开了xcodeproj而不是正确的xcworkspace


是的,那正是我的情况。谢谢! - undefined

9

我也遇到过这个问题。我注意到在产生错误的框架的 Pods/broken_framework_name 文件夹为空,即使执行了 pod install 或 pod update 也是如此。 所以,对于我来说,以下步骤有所帮助:

  1. 完全关闭 XCode
  2. 删除 DerivedData
  3. 移除 Podfile.lock。 在执行此操作之前,请确保您的 pods 已设置为特定版本,并且不会导致不必要的代码更新。
  4. 运行 pod deintegrate
  5. 删除 .xcworkspace 文件
  6. 可能是可选步骤:我在所有目标之前编写了一般行 use_frameworks!,但我还将其包括在发生错误的目标中。
  7. 运行 pod install

完成所有步骤后,我注意到缺失的框架文件最终出现,并且构建工作正常。


小心删除Podfile.lock文件。如果任何pod没有设置使用特定版本,您可能会更新所有的pod,然后需要重构项目。这在新项目中可能没问题,但对于旧项目来说,这可能意味着要花费额外的几个小时来更新代码库。 - Rob Barber
@RobB,感谢您的留言,但是删除Podfile.lock太频繁了,它不应该破坏您的代码库。您的Podfile中的pods版本设置不应该如此糟糕,不应该在没有特别更改的情况下更新到下一个主/次要版本。 - Eridana
我完全同意你的观点。然而,这只是最理想的情况。我遇到的大多数代码库都没有遵循最佳实践,也没有正确设置这些值。在完美的世界里,你不必担心这个问题。 - Rob Barber
嗯,是的,我同意这里的观点。已在帖子中添加了警告。 - Eridana
删除 .xcworkspace 文件,然后调用 pod Install 对我来说是至关重要的一步! - Florian Cremer

6

尝试在pod install命令之后使用pod update,这将解决No such module的问题。我刚刚尝试并且它可以正常工作。

谢谢, Ratneshwar


6

如果您正在处理多个目标,请不要忘记在pods中添加这行代码

def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Target_Name' do
    shared_pods
end

target 'Target_Name_Two' do
    shared_pods
end

3
哦,伙计,你救了我的命。谢谢!注意:如果您创建目标后没有进行任何 pod 修改,则一切都将正常工作,直到您执行 pod 更新为止,这刚刚发生在我身上。 - Keuha

3
有时候,在一个 Swift 项目中使用 obj-c 的 pod(即使你在 .podfile 中使用了 use_frameworks!)会出现问题。
如果你确定已经安装了 pod,但仍然收到 No such module 的错误,请尝试以下步骤:
1. 进入 Xcode 中的 Pods 项目 2. 找到受影响的 pod,右键单击 3. 点击 Show in Finder 4. 在这个文件夹中应该有一个带有 .framework 后缀的包文件。创建一个名为 Modules 的文件夹,并在其中创建一个名为 module.modulemap 的文件,其内容如下:
framework module MODULE_NAME_HERE {
  umbrella header "MODULE_NAME_HERE.h"

  export *
  module * { export * }

  link framework LINKED_FRAMEWORKS_AND_LIBRARIES_THE_POD_NEEDS_HERE
  link framework "AdSupport"
  link "c++"
  link "z"
}

重建并且你应该没问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接