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

lnulla 发布于 2019-07-01 ios 最后更新 2019-07-01 22:03 105 浏览

我目前正在使用Swift编写代码,并且出现错误:

No such module Social
但我不明白,因为模块在我的项目中,在“链接框架和库”和“嵌入式二进制文件”中声明。 这个框架在Objective-C中,所以我为它写了一个Bridge Header。 请问,我该如何让Xcode识别框架? Error module Project Linkes Frameworks, Libraries Header bridge
已邀请:

wnatus

赞同来自:

请将此屏幕截图与您的构建设置进行比较 这可能是这个工作。 转到框架搜索路径: Enter image description here

eomnis

赞同来自:

确保,Scheme中的Build选项中的Find implicit Dependencies已启用!

gomnis

赞同来自:

我遇到了这个问题,因为我在podfile中设置了错误的目标(项目本身而不是UITests部分)。

xqui

赞同来自:

我得到同样的错误

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添加到任何适当的占位符。

ket

赞同来自:

我得到了同样的错误,因为我使用Cocoapods添加了几个框架。如果我们在项目中使用Pod,我们应该使用xcodeworkspace而不是xcodeproject。 要通过xcodebuild运行项目,我在xcodebuild命令中添加了-workspace <workspacename>参数,它运行正常。

prerum

赞同来自:

在我的情况下,经过多次尝试弄清楚导入框架的错误后,我最终发现框架本身就是问题。如果您没有从受信任的源获取框架,则应检查框架并确保它包含一个Modules文件夹,其中包含module.modulemap文件。如果module.modulemap不存在,您将收到“No such module'MyFramework'”错误。 Example showing directory structure of SwiftyJSON.framework 如果Modules文件夹缺少“MyFramework.swiftmodule”文件夹,那么将找到框架,但Xcode将不知道其内容,因此您将得到不同的错误。

lnon

赞同来自:

1 - 在podfile中,删除产生问题的窗格,然后保存文件 2 - 运行pod安装 3 - 重新添加pod,保存文件 4 - 重新运行pod安装 问题应该解决。 HIH

xatque

赞同来自:

我的解决方案是。在目标内部 - >构建设置 - >框架搜索路径并添加$(继承)。但是,如果它是cocoapods你的答案可能在终端的输出内。

dquia

赞同来自:

假设框架确实存在并且在路径中等等...删除~/ Library / Developer / Xcode / DerivedData / ModuleCache目录(并清理项目并删除项目特定的派生数据以获得良好的衡量标准)。 执行标准清理时,不会重建ModuleCache目录。

kalias

赞同来自:

如果是星期五下午或凌晨1点之后的任何时间: 打开xcodeproj而不是xcworkspace会导致这样的错误......

eet

赞同来自:

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

uid

赞同来自:

在我的情况下,项目在swift 4库中没有编译,因此无法找到它们并导入。 解决方案是将cocoapods库的编译版本设置为swift 3.2 enter image description here

mut

赞同来自:

如果所有上述方法都不适合你,就像我的情况一样。前一天没有问题,但第二天早上我遇到了同样的错误。我刚刚通过删除引用删除了框架并再次添加它们。我知道这可能听起来很傻,但是它有效。

frem

赞同来自:

我使用Cocoapods和Swift也有同样的问题。我没有注意到Podfile中的以下行:

# Uncomment this line if you're using Swift
# use_frameworks!
所以,我所要做的就是将其改为:
# Uncomment this line if you're using Swift
use_frameworks!
... aaand有效:)

uid

赞同来自:

我在开发自定义Pod时遇到了这个问题。发现我只需要在我的Procfile中指定依赖项:

Pod::Spec.new do |s|
   # ... other declarations
s.dependency 'Alamofire', '~> 4.3'
end

pculpa

赞同来自:

如果您正在构建像tvOS这样的平台,请确保选择了Apple TV(即匹配)模拟器。 使用iOS模拟器构建tvOS应用程序给了我这个错误。花了一个小时的大部分时间寻找各种构建问题... doh。

xqui

赞同来自:

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

fet

赞同来自:

对我来说,这发生在RxSwift上,问题是我在Podfile中将其修复为3.0.0。删除版本限制并更新pod将其升级到3.1.0修复它。

psunt

赞同来自:

GUYS我破解了代码!!!!! 好的,你想要做的就是在Finder中找到你的Xcodeproj。 现在右键单击.xcodeproj并单击show package contents。然后将框架拖放到那里。 Like so 现在返回Xcode并单击Linking Binaries with Libraries中的+。单击Add other,它将带您进入Xcodeproj文件,现在添加Bolts和Parse Seen Here 和waboosh!你现在应该可以导入Parse了!

caut

赞同来自:

缺少模块映射的框架也可能导致此错误。如果您尝试导入的框架是您的,请检查框架本身的编译器警告。在我的情况下,我的框架正在构建并到位,但是有一个构建警告:

warning: no umbrella header found for target 'MyFramework', module map will not be generated
通过解决此警告(related to the framework header not matching the module name),我能够导入框架。

jiusto

赞同来自:

几天前我也遇到了同样的错误。这是我解决问题的方法: 错误是“找不到模块”

  • 在根项目目录中创建Podfile
  • 安装cocoapods(Swift和iOS项目的依赖管理器)
  • 运行pod install
  • 转到项目构建设置:
    • 在Swift编译器下找到Objective-c桥接头 - 代码生成(如果你在这里找不到Swift编译器,可能会在项目中添加一个新的Swift文件)
    • 将库头文件从左侧拖放到桥接标题(参见附图)enter image description here
  • 创建一个新的桥接头文件:例如TestProject-Bridging-Header.h并置于Swift编译器→Objective-C生成的接口头名称下(参见上图)
  • 在TestProject-Bridging-Header.h文件中,编写#import“Mixpanel / Mixpanel.h”
  • 在你的Swift文件中代码应该是: 导入Mixpanel(即图书馆名称)
就这样。

funde

赞同来自:

这是蹩脚和搞笑但我从Github下载了一个示例项目,并从Downloads文件夹运行它。我把它移到桌面并再次进行构建,它工作了!可能是Xcode不喜欢Downloads文件夹作为路径! ;)

jculpa

赞同来自:

有时你必须安装Pods。

  1. 打开终端
  2. cd project
  3. pod install
  4. 打开.xcworkspace和
  5. 构建成功

jiusto

赞同来自:

我修好了 目标 - >常规 - >链接的框架和库 添加应位于Workspace文件夹顶部的框架。痛苦的屁股。

set

赞同来自:

确保子项目中的配置命名与“父”项目的配置相匹配。如果配置命名不完全匹配(区分大小写),Xcode将中止归档过程并显示错误“No such module ...” 也就是说,如果您的“父”项目具有名为“AppStore”的配置,则必须确保所有子项目也具有此配置名称。 请参阅我附带的屏幕截图。 Configuration setup in "parent" project Configuration setup in 1st sub project Configuration setup in 2nd sub project

xest

赞同来自:

如果您已完成上述所有操作,但仍无法为您工作,请尝试在目标构建设置的框架搜索路径中添加$(inherited)

cet

赞同来自:

好吧,我如何解决同样的问题是相对于工作空间目录设置派生数据位置而不是保持默认值。 转到xcode中的首选项。转到首选项中的位置选项卡,并将派生数据设置为相对。 希望能帮助到你。

xminus

赞同来自:

我尝试将部署目标从iOS 11降低到iOS 10时遇到此问题。将其更改为iOS 11允许我存档以进行上载。 为了使用较少的部署目标进行上传,我进行了pod更新并成功归档。

gnihil

赞同来自:

我也遇到了这个问题。对我来说,修复是两个项目之间的档案方案不匹配。我有一个带有框架项目和应用程序项目的xcworkspace。问题是在我的应用程序的存档方案中,我使用的是不同于框架用于存档方案的不同构建配置。我将Build Configurations设置为Release,这解决了问题。

qullam

赞同来自:

只是为了完成另一种可能性,当未选中“Find Implicit Dependencies”选项时,可能会发生此错误。转到编辑方案 - >构建。 enter image description here 然后检查此选项。 enter image description here

aquia

赞同来自:

为了它的价值(我是使用Xcode 7.2 / Swift 2的新手),但我注意到,只需从项目目录中的库中获取.swift文件就可以自动访问它并且不需要using语句。 示例:我正在使用SwiftyJSON,只需要在项目中使用SwiftyJSON.swift文件即可。 using语句实际上给了我'没有这样的模块'错误并将其解析出来,它工作正常。

ueos

赞同来自:

我不太清楚为什么Martin R在问题评论中的答案被忽视了: 确保您尝试简单地跳过框架的导入,因为它已经添加了桥接头。 希望这可以帮助

peum

赞同来自:

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

nautem

赞同来自:

在您的项目Podfile中 你必须取消注释 use_frameworks!platform :ios, '9.0'

isit

赞同来自:

我发现Build Settings中的Import Paths对于自定义(MySQL)模块是错误的。在指向正确的方向后,消息消失了。

psunt

赞同来自:

在我的情况下,我只需要重新加载项目。我曾使用命令行来克隆我的项目,但它没有正确安装子模块。为了补救,我通过XCode克隆了项目,一切正常。只需确保首先备份所有更改。