使用Xcode遇到错误“没有这样的模块”,但是框架在那里


344

我目前正在使用Swift进行编码,但出现错误:

没有这样的模块社交

但是我不明白,因为该模块在我的项目中,在“链接的框架和库”和“嵌入式二进制文件”中声明。

这些框架位于Objective-C中,因此我为此编写了一个桥头。

请,如何使Xcode识别框架?

错误模块

项目

链接框架,库

头桥


20
不要太先生。很明显,但是您是否尝试过完全清洁和建造?
Kalel Wade 2015年

28
如果框架头文件已包含在桥接头文件中,则不必将其导入Swift源文件中。
Martin R

2
此外,您可能还必须在导入时使用引号:#import "Social/Social.h"
Martin R

3
Xcode中与CocoaPods相同的错误“无此模块错误”。
AsimRazaKhan 2016年

1
我将Deployment Target从11更改为10,但在Podfile中忘记了它platform :ios, '10.0'。那是解决方案。
Artur Guseynov

Answers:


320

我不确定为什么会发生这种情况,但是解决您的问题的一种方法是进入构建设置,然后将Framework Search Paths定义到包含相关框架的文件夹中。如果将框架放置在项目目录中,只需将框架搜索路径$(SRCROOT)设置为并将其设置为递归。


5
谢谢。我必须在项目构建设置中而不是在目标构建设置中执行此操作
Pulsar 2015年

8
对我来说,诀窍是在Framework搜索路径中找到要使用的框架路径。$ {TARGET_BUILD_DIR} /YourFrameworkName.framework对我来说效果很好。另请参阅stackoverflow.com/questions/32816507/…–
克里斯·普林斯

11
不得不这样做Project Build Settings而不是Target Build Settings
Maxim Mikheev '16

377
我去洗手间解决了这个问题。当我回来时,它正在工作。我很确定我已经尝试了该线程中的所有操作,不知道该怎么做。我也在某个时候祈祷。
nmdias

2
注意:$(SRCROOT)仅在我将其添加到PODS PROJECT的框架搜索路径中时对我有用。
addzo '17

546

如果是星期五下午或凌晨1点之后的任何时间:

打开xcodeproj而不是xcworkspace将导致这样的错误...


2
我尝试了这作为圣杯。滑稽。谁知道,但是退出然后重新打开工作区实际上也可以。清理,然后构建。
mondousage '16

3
晚上9点使用fastlane,指定健身房(项目:---)而不是健身房(工作区:----)谢谢!
RickiG '16

1
Xcode崩溃后,这发生在我身上,我从错误报告中选择了“重新打开”应用程序。下次我会知道的。
邮票

我重新安装了XCODE,但由于正在通过最近打开的项目打开应用程序,因此出现此错误。关闭项目,依次单击“文件”->“打开”->“ xcworkspace”文件,一切正常。
Dpedrinha

也适用于在命令行上构建(我们的问题):xcodebuild -workspace yourproject.workspace。
Ben Butzer

57

确保子项目中的配置命名与“父”项目的命名匹配。如果配置命名不完全匹配(区分大小写),则Xcode将中止存档过程并显示错误“ No such module ...”。

也就是说,如果您的“父”项目的配置名为“ AppStore”,则必须确保所有子项目也都具有此配置名称。

查看我所附的屏幕截图。

“父”项目中的配置设置

第一个子项目中的配置设置

第二子项目中的配置设置


1
在我的情况下,子项目只有个DebugDistribution其父项目正在尝试为其构建Release。解决方案是Distribution在子项目中制作一个副本并重命名该副本Release
olivaresF

2
这导致我找到了问题,但是我不想在第3
方子

那解决了问题!做得好:)
alicanbatur

谢谢!我的主项目中有3种配置。因此,我对框架做了同样的事情,它有所帮助。
daxh

关于如何使Xcode构建嵌套子项目的特定配置的任何线索?不想重命名子项目配置,因为它与将新配置添加到主项目中的联系太紧密
Dren

44

我不太确定为什么马丁·R在问题评论中的回答如此被忽略:

确保已尝试仅跳过框架的导入,因为该框架已与桥接头一起添加

希望这可以帮助


37

我在使用Cocoapods和Swift时遇到了同样的问题。我在Podfile中没有注意到以下几行:

# Uncomment this line if you're using Swift
# use_frameworks!

因此,我要做的就是将其更改为:

# Uncomment this line if you're using Swift
use_frameworks!

... aa,它起作用了:)


对我来说,use_frameworks甚至不在我的Podfile中,所以我添加了它
PhoenixB,


18

我也遇到了这个问题。对我来说,解决方法是两个项目之间的存档方案不匹配。我有一个带有框架项目和应用程序项目的xcworkspace。问题在于,在我的应用程序的存档方案中,我使用的构建配置与框架在存档方案中使用的配置不同。我将两个“构建​​配置”都设置为“发布”,从而解决了该问题。


这对我有用。我将我的主项目Build Config设置回Release(来自Distribution),因此现在它与子项目匹配。一切正常。谢谢!
查理·塞利格曼

1
我们的框架没有用于项目的AdHoc配置-这意味着它没有与项目一起构建。
约翰

15

以下步骤对我有用。

  1. 退出xcode
  2. "pod update"在终端中
  3. 打开.xcworkspace并再次构建。

1
这些步骤对我有用...谢谢...我运行了“ Pod install”,但是没有得到“ Module XXX not found ..”,但是退出XCode然后重新打开Workspace后对我有所帮助..
Aks

我的问题是在添加新的构建配置和方案后,我得到“找不到模块...”,退出Xcode后,pod install它行不通了。
胡锦涛

这对我有用。关于为什么可以解决问题的任何解释?
Nico Cernek

它为我工作。重新打开projectname.xcworkspace后,需要清理并重新构建以使其正常工作。
Prashant

14

就我而言,在尝试找出我在导入框架时做错了什么之后,我最终发现框架本身就是问题所在。如果您不是从受信任的来源获得框架,则应检查框架并确保其包含一个Modules文件夹,其中包含module.modulemap文件。如果不存在module.modulemap,您将收到“ No such module'MyFramework'”错误。

显示SwiftyJSON.framework目录结构的示例

如果Modules文件夹中缺少“ MyFramework.swiftmodule”文件夹,则将找到该框架,但是Xcode不会知道其内容,因此您将得到不同的错误。


2
由于某种原因,即使存在,它也不会在xcode 9.1中显示。右键单击您的框架>在Finder中显示>,并确保您的模块映射在其中。如果您在Pods项目中使用的是手动框架,请在刚刚添加新的手动框架或更新现有框架的情况下重建您的Pod。
Christopher Larsen

1
谢谢!我确实创建了该文件,并且可以正常工作:框架模块NAME {伞形标题“ NAME.h” export *模块* {export *}}
Sjoerd Perfors

12

假设Framework确实存在并且在路径中,依此类推...删除〜/ Library / Developer / Xcode / DerivedData / ModuleCache目录(并清理项目并删除项目特定的派生数据,以备不时之需)。

当您执行标准清理时,不会重建ModuleCache目录。


1
我只是按照您告诉我的那样做,所以它不起作用:/
alexandresecanove 2015年

1
然后,您可能会遇到另一个与我遇到的问题相同的问题。:-/
布莱德·布莱顿

我在Cocoapod上遇到了同样的问题,删除ModuleCache中的文件对我有用。
HolySamosa

10

什么工作对我来说是这样解决的另一个问题。关闭Xcode并重新打开项目作为工作区。
转到您的项目文件夹并打开.xcodeworkspace 文件。
打开工作区(而不是项目)后,Pods在项目浏览器中应显示为顶级项目。



7

几天前我也遇到了同样的错误。这是我解决问题的方法:

错误是“找不到模块”

  • 在根项目目录中创建Podfile
  • 安装cocoapods(Swift和iOS项目的依赖管理器)
  • 运行pod安装
  • 转到项目构建设置:

    • 在Swift编译器-代码生成下找到Objective-c桥接标头(如果您在这里找不到Swift编译器,则可能在项目中添加一个新的Swift文件)
    • 将库头文件从左侧拖放到桥接头(请参见下图)在此处输入图片说明
  • 创建一个新的桥接头文件:例如TestProject-Bridging-Header.h并将其放在Swift Compiler→Objective-C生成的接口头名称下(请参见上图)

  • 在TestProject-Bridging-Header.h文件中,编写#import“ Mixpanel / Mixpanel.h”
  • 在您的Swift文件中,代码应为:Import Mixpanel(即库名)

就这样。


这个答案有所帮助。当尝试为MBProgress设置它时,我最终遵循了ios-support.blogspot.com/2017/04/…上的指示,这非常相似。
维特(Vette)

6

好的,对我来说,解决同一问题的方法是设置相对于工作区目录的派生数据位置,而不是将其保留为默认值。转到xcode中的首选项。转到首选项中的“位置”选项卡,并将“派生数据”设置为“相对”。希望能帮助到你。


它仅工作一次,然后在我运行时遇到了找不到模块的相同问题。
nycdanie '16

5

我收到了同样的错误

import Firebase

但是然后注意到我没有将pod添加到主要目标部分,而只是添加到Podfile中的Test和TestUI目标。

用命令

pod init

对于xcode swift项目,将生成以下Podfile

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

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

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

end

因此,需要确保将Pod添加到任何适当的占位符。


5

如果要为tvOS之类的平台构建,请确保已选择Apple TV(即匹配)模拟器。

使用选定的iOS模拟器构建tvOS应用确实给了我这个错误。花了一个小时的大部分时间来寻找各种各样的构建问题。


1
如果在构建iOS项目时选择“我的Mac”,则同样适用。我不知道为什么Xcode甚至允许这样做……
Klaas

谢谢!现在是如此明显,但是错误却使我寻找更复杂的解决方案!
丹·梅辛

5

在我的情况下,将应用程序IPHONEOS_DEPLOYMENT_TARGET设置为9.3,而在我新创建的框架中将其设置为10.2。

隐式依赖解析器忽略了我的新框架,因为目标平台的要求高于应用程序的要求。

调整框架iOS部署目标使其与我的应用程序部署目标匹配后,框架便成功编译和链接。


谢谢。浪费了几个小时后,我发现部署目标是问题所在。
尼克斯18-4-24

4

我在使用时添加了两个框架时遇到了相同的错误Cocoapods。如果我们在项目中使用Pod,则应使用xcodeworkspace代替xcodeproject。为了通过xcodebuild运行项目,我-workspace <workspacename>xcodebuild命令中添加了参数,它运行良好。


如果您有新问题,请单击“ 提问”按钮进行提问。如果您有足够的声誉,则可以反对该问题。或者,将其“收藏”为收藏,您将收到任何新答案的通知。
亚历山德罗·卡丁

@pawan singh您为我节省了几个小时,谢谢!
德米特里·森科维奇

3

我发现Import PathsBuild Settings是错误的自定义(MySQL的)模块。将其指向正确的方向后,消息消失了。


@rplankenhorn好吧,就在您将它们放在计算机上的位置。find如果您不知道,请运行它。
qwerty_so

3

我用这个解决了

目标->常规->链接的框架和库

添加应位于Workspace文件夹顶部的框架。痛苦中。


3

我刚刚删除了我的cocoapod。然后,我安装了一个pod来删除它。然后,我将其重新添加到podfile中并重新安装。这使它起作用。不知道为什么。


3

我已经安装了Pod。当我在设备上构建应用程序时,构建工作没有任何问题,但是存档不起作用。我只是跑:

pod install

没有安装新的Pod,仅重新生成了.xcodeproj文件,存档开始工作


3

在Xcode 10.1中,我的解决方案是在“文件”菜单中的“ 工作区设置”上更改构建系统。默认情况下,将其设置为New Build System,将其更改为Legacy Build System,并且成功了。

在此处输入图片说明


谢谢队友,您拯救了我的一天!+1
DungeonDev '19

3

这个问题可能会导致几种潜在的错误配置,

  1. 请确认您已打开,.xcworkspace但尚未打开.xcodeproj文件。还要确保在构建Social之前先构建TriviaApp
  2. 确保为带有主应用程序的所有模块的iOS部署目标设置相同。例如,将TriviaApp部署目标设置为9.0Social也需要将部署目标设置为9.0
  3. 确保您的主模块(TriviaApp)和使用的框架(Social)具有相同的配置集。即如果你的项目有三种配置,DebugReleaseReleasePremium比你的社会框架,还需要有三种配置DebugReleaseReleasePremium。还要确保为TriviaApp和设置存档配置Social。即,如果您TriviaApp的存档方案设置为ReleasePremium,则您Social的存档方案也需要设置为ReleasePremium
  4. 请确保Social.swift文件中已添加文件时不需要导入每个文件。Bridging-Header.h
  5. 在问题的情况下,从波德文件来了,请确保您的注释去掉,#use_frameworks!变成use_frameworks!由你Podfile。如果有时重新安装pod可以正常工作Social有对Pod的依赖, Pod。
  6. 如果以上步骤均无效,请删除您的派生数据文件夹,然后尝试重建。

哇,没有您的帮助,我永远不会弄清楚。确实,我在主项目中添加了一个自定义配置,但是框架中没有。
Iulian Onofrei

@lulian很高兴知道它有所帮助
Sazzad Hissain Khan

2

如果您使用的是迦太基,那么构建环境中的框架通常会保留在

$(PROJECT_DIR)/Carthage/Build/iOS

如果运行carthage update --platform ios --no-build(以节省时间),将不会重新创建Build文件夹中的文件,因此XCode将无法使用这些模块。

就我而言,我已经跑步了carthage update --platform ios,那么我的问题就解决了。


2

在General => Linked Frameworks and Libraries中,我添加了我的代码./Pods/Pods.xcodeproj并成功了


2

对我而言仅构建主动架构,对于所选配置,将“设置为“是”。这达到了目的:

从左侧的项目导航器中选择“窗格”>选择“构建设置”>仅将活动体系结构构建为


1

如果以上所有方法都不适合您,例如我的情况。前一天没有问题,但第二天早上我遇到了同样的错误。我只是通过删除引用来删除框架,然后再次添加它们。我知道这听起来很愚蠢,但是瞧瞧它奏效了。


1

我在加载FacebookSDK时遇到了类似的问题,我在Build设置中的框架搜索路径中添加了〜/ Documents / FacebookSDK(在您的框架所在的位置进行搜索),之后便能够导入FBSDKShareKit模块


1

对于它的价值(我是Xcode 7.2 / Swift 2的新手),但我注意到,只要从项目目录中的库中获取.swift文件,即可自动访问该文件,并且不需要using语句。

示例:我正在使用SwiftyJSON,仅需要项目中包含SwiftyJSON.swift文件即可。该using语句实际上给了我“ no such module”错误,并将其取出解决了该问题,并且工作正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.