Xcode中没有这个模块...

18
我在使用Swift的Xcode中遇到了问题,让我完全感到困惑。我意识到这个问题已经被问答过了,但没有任何答案对我起作用,并且我的情况似乎与其他情况有些不同,因为所有的Pods都失败了(而不仅仅是一个特定的)。它们在一个星期前都很好用。
我使用Cocoapods来使用一些常见的Swift框架(例如Alamofire,Eureka,Kingfisher,SwiftyJSON等)。它们在Xcode 7中都很好用。然而,其中一个(自动)更新升级了我的Xcode版本,之后就成为强制性地在podfile中指定目标。我照做了并运行了pod install。Pods仍然在那里,但现在与这些框架相关的每个导入语句都失败了。
起初,我以为这是Alamofire的问题,因为它是第一个出现"No such module 'Alamofire'"错误的框架。我尝试了一切我可以想到的办法处理Alamofire,包括以下:
- 清理和重建 - 清理构建文件夹 - 重新启动Xcode - 重新启动电脑 - 删除所有派生数据 - 将框架添加到“链接的框架和库” - 将框架添加到“链接二进制文件和库” - 验证我是否打开了工作区而不是项目 - 重新安装CocoaPods - 重新安装Xcode版本7.3.1
没有任何一个能消除"No such module ..."错误。最后,我从Pods中删除了Alamofire并将其项目拖到了我的项目中。这使我能够删除Alamofire的导入语句。然而,令我沮丧的是,现在下一个框架也出现了"No such module"错误。我将接下来的三个框架移动到了我的项目中,看起来它只会继续进行。显然,我的所有Pods框架都不再被识别。我安装了Xcode 8并尝试使用Swift 2.3,但我得到了相同的"No such module"错误。
我真的希望使用Cocoapods,因为它使升级变得更加容易,并带来其他好处。我猜我有一些设置错了,它正在搞乱所有的Pods,但是一直没有找到错误。这是一场灾难,因为它已经关闭了几天的开发工作,没有任何解决的迹象。如果有什么我可以做或提供来帮助找到解决方案的话,就让我知道。如果有人可以提供任何可能的解决方案或尝试的方法,那将不胜感激。我目前正在使用Xcode版本7.3.1。
我的pod文件看起来像这样:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'Y2GOsp' do
    use_frameworks!

    # Pods for Y2GOsp
    pod 'Alamofire', '~> 3.0'
    pod 'AlecrimCoreData', '~> 4.0'
    pod 'Kingfisher', '~> 2.4'
    pod 'Eureka', '~> 1.6'
    pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git', :branch => 'xcode7'
    pod 'PhoneNumberKit', '~> 0.1'
    pod 'PKHUD'
    pod 'Dollar'
end

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

你尝试过重新安装或更新CocoaPods吗? - l'L'l
@l'L'l,是的,我已经重新安装了几次。我甚至尝试了--pre版本。我也重新安装了Xcode,因为我的原始安装升级到了8版。我找到了一个7.3版本的安装程序并重新安装了它,但仍然出现错误。 - Lastmboy
3
当您尝试将框架添加到项目中时,build settings > frameworks search path 设置为什么? - l'L'l
可能是这个问题...尝试设置为 $(SRCROOT)(递归)或 ${TARGET_BUILD_DIR}/YourFrameworkName.framework... - l'L'l
2
@l'L'l,你让我找到了正确的方向。我想我已经解决了这个问题。虽然我还在处理其他迁移问题,但是我不再被导入语句所阻止了。我的框架搜索路径值现在是$(inherited)(非递归)、$(PROJECT_DIR)/build/Debug-iphoneos(非递归)和$(SRCROOT)(递归)。如果你想发布你的答案,我可以将其标记为正确的答案。谢谢。 - Lastmboy
显示剩余2条评论
9个回答

33

来自 @l'L'l 的评论引导了我找到了解决方案。我前往

build settings > frameworks search path

并将其设置为以下内容:

$(inherited) (non-recursive)
$(PROJECT_DIR)/build/Debug-iphoneos (non-recursive)
$(SRCROOT) (recursive)

现在它能够正确地查找Pod框架。


17

请确保在 Xcode 中打开了 .xcworkspace 文件,而不仅仅是 .xcodeproj 文件。


1
我花了数小时尝试了其他几个StackOverflow中提到的所有方法。这就是答案! - Daniel Tome

9

在 Pod 文件中

取消以下行的注释,以定义项目的全局平台

platform :ios, '10.0'

use_frameworks!

现在在 Xcode 中

a) 清除您的项目

b) 确保所有的 "Pods" > "Build Settings" > "Build Active Architecture Only" 都设置为 "NO"

c) 现在,构建项目


3
有时候我会运行pod deintegrate然后再运行pod install,这也有帮助。

1

我曾经遇到同样的问题,通过确保我的“查找隐式依赖项”已被勾选,我最终解决了它。前往“编辑方案 -> 构建”。之前我取消了这个选项,以便我的xCode运行速度更快。从未意识到它会在后来抛出这个错误。


1
尝试将您的SDK版本降至早期版本。
pod 'Alamofire', '~> 3.0'
pod 'AlecrimCoreData', '~> 4.0'
pod 'Kingfisher', '~> 2.4'
pod 'Eureka', '~> 1.6'
pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git', :branch => 'xcode7'
pod 'PhoneNumberKit', '~> 0.1'
pod 'PKHUD'
pod 'Dollar'

例如将 3.0 更改为可用的先前版本,当我遇到相同问题时,它曾经对我起过作用。
pod 'Alamofire', '~> 2.4' #I am assuming prev available version is 2.4

但不一定要使用“Alamofire”版本,导致出现“没有这个模块”的错误,您可以尝试在pod文件中的列表中使用每个版本。


看起来这可能有用。 反正我已经过了Alamofire了。 现在我在Eureka上遇到了错误。 我打算明天再去仔细研究一下,然后告诉你我的结果。 谢谢。 好名字,顺便说一下...我的名字也是谢尔顿 :) - Lastmboy
嗨,Sheldon。如果你觉得它是正确的,请选择它作为正确答案。 - Developer Sheldon
没有运气:(我以为它在一瞬间就能工作,但后来意识到我已经删除了导入语句,所以它只是继续执行下一个,最终在编译时失败。当我把导入语句放回去时,它又开始失败了。 - Lastmboy

1
尽管这个问题很久以前就有了,但“没有这样的模块”错误让我在 Xcode 13 中苦苦挣扎了三天。我在这里找到了许多不同的解决方案,但仍然无法解决它。直到我尝试将不同的解决方案应用在一起,找到了自己的解决方案。
我的问题是,在设备上可以构建应用程序,但在模拟器上构建时显示“没有这样的模块”。似乎在构建 pods 时出了问题。
因此,我在 Podfile 中添加了 use_frameworks!use_modular_headers!
target 'Application' do

use_frameworks!
use_modular_headers!        

pod 'ChameleonFramework/Swift', :git => 'https://github.com/wowansm/Chameleon', :branch => 'swift5'
pod "BSImagePicker", "~> 3.1"
pod 'FirebaseCoreInternal'

我还改变了Pods的构建设置,以排除在arm64架构中构建Pods。我在我的项目和目标的构建设置中也做了同样的事情。
请注意,如果您将新的Pod安装到项目中,则Pods的构建设置将被重置。您需要手动更改以排除arm64。

Pods的构建设置图像


你可以在pod文件的末尾添加代码,以便为所有pod进行更改,这样你就不必手动更改每个pod。post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '5.1' config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end end - Lastmboy
通过添加 use_modular_headers!,问题得到解决,谢谢。 - Kalpesh Gedia

0
对我来说,问题在于我更新了项目中的一个构建配置的名称,但我没有在使用该构建配置的方案中选择新的构建配置。将方案中的构建配置更新为新名称即可解决问题!

0
你不应该将Architecture排除为空,而且我已经运行了pod install命令来安装pods。

click the link to see the image


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