得到错误"没有这样的模块"使用Xcode,但框架就在那里

时间:2015-04-07 19:59:33

标签: ios xcode swift

我目前正在Swift编码,但我收到了错误:

  

没有这样的模块社交

但我不明白,因为该模块在我的项目中,在"链接框架和图书馆"和嵌入式二进制文件"。

框架在Objective-C中,所以我为它编写了一个Bridge Header。

请问,如何让Xcode识别框架?

Error module

Project

Linkes Frameworks, Libraries

Header bridge

74 个答案:

答案 0 :(得分:429)

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

打开xcodeproj代替xcworkspace会导致这样的错误......

答案 1 :(得分:269)

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

答案 2 :(得分:35)

我不太清楚为什么Martin R在这个问题的评论中的答案被忽视了:

确保您尝试简单地跳过框架的导入,因为它已经添加了桥接标题

希望这有帮助

答案 3 :(得分:31)

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

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

所以,我所要做的就是将其改为:

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

...... aaand有效:)

答案 4 :(得分:30)

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

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

请参阅我附带的屏幕截图。

Configuration setup in "parent" project

Configuration setup in 1st sub project

Configuration setup in 2nd sub project

答案 5 :(得分:19)

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

Enter image description here

答案 6 :(得分:16)

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

答案 7 :(得分:9)

就我而言,经过多次尝试弄清楚导入框架的错误后,我最终发现框架本身就是问题所在。如果您没有从受信任的源获取框架,则应检查框架并确保它包含一个Modules文件夹,其中包含module.modulemap文件。如果module.modulemap不存在,您将收到“No such module'MyFramework'”错误。

Example showing directory structure of SwiftyJSON.framework

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

答案 8 :(得分:8)

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

答案 9 :(得分:8)

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

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

答案 10 :(得分:8)

以下步骤对我有用。

  1. 退出xcode
  2. 在终端机上运行"pod update"
  3. 打开.xcworkspace,然后重新构建。

答案 11 :(得分:6)

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

错误是"找不到模块"

  • 在根项目目录中创建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(即图书馆名称)

这就是全部。

答案 12 :(得分:5)

如果您正在构建像tvOS这样的平台,请确保选择了Apple TV(即匹配)模拟器。

选择iOS模拟器构建tvOS应用程序给了我这个错误。花了一个小时的时间寻找各种构建问题... doh。

答案 13 :(得分:5)

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

答案 14 :(得分:4)

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

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

在调整框架 iOS部署目标以匹配我的应用程序部署目标后,框架已成功编译和链接。

答案 15 :(得分:4)

我的错误是

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

答案 16 :(得分:4)

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

答案 17 :(得分:3)

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

pod install

没有安装新的pod,只是.xcodeproj文件重新生成并且存档开始工作

答案 18 :(得分:3)

我用

解决了这个问题

目标 - >一般 - >链接的框架和库

添加应位于glm::perspective文件夹顶部的框架。痛苦的屁股。

答案 19 :(得分:3)

TL; DR:检查您的Podfile中特定于目标的shared_pods

在头上碰壁并尝试了上周在这里发布的所有其他答案之后,我终于找到了解决方案。

我有两个单独的目标-一个用于发布,一个用于开发。开发目标是在发布目标之后很久才创建的,这使我忘记了该目标的一些设置步骤。

我能够使用发布目标使项目正确编译,但是我的开发目标遇到了问题。

在第二十次查看我的Podfile之后,我发现在shared_pods定义下,我只有以下内容:

target 'Release' do
  shared_pods
end

我需要做的是将第二个目标添加到Podfile中,并解决了该问题:

target 'Release' do
  shared_pods
end

target 'Development' do
    shared_pods
end

希望这可以为某人节省几天的挫败感。

答案 20 :(得分:3)

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

答案 21 :(得分:3)

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

enter image description here

答案 22 :(得分:2)

一般=>链接框架和库,我添加了./Pods/Pods.xcodeproj并成功了

答案 23 :(得分:2)

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

答案 24 :(得分:2)

对于我来说,仅构建活动体系结构已针对所选配置设置为“是”。这可以解决问题:

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

答案 25 :(得分:1)

我的问题是有多个目标。 我通过以下链接解决了它: configure pod file right wayfix build settings

希望有人会有所帮助。

答案 26 :(得分:1)

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

答案 27 :(得分:1)

这最终对我有用。它非常蹩脚,我不得不做这一切,但这是我能找到的唯一有用的东西。

确保库列在linked framework and libraries下。如果不存在,您可以单击+,并希望看到您的框架/ pod已列出。

enter image description here

点击方案图标中的项目(见下图)

enter image description here

然后你应该看到你的焦点框架列出:

enter image description here

点击Manage Schemes.

然后你应该看到这样的事情:

enter image description here

勾选框架的box,点击AutoCreate Schemes now,然后点击close

然后尝试再次导入您的框架/ pod。

它对我有用。

答案 28 :(得分:1)

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

  1. 请确认您已打开.xcworkspace而不是.xcodeproj文件。还要确保在构建Social之前先构建TriviaApp
  2. 确保为带有主应用程序的所有模块的iOS部署目标设置相同。例如,TriviaApp的部署目标设置为9.0Social的部署目标也需要设置为9.0
  3. 确保您的主模块(TriviaApp)和使用的框架(Social)具有相同的配置集。即,如果您的项目具有三个配置DebugReleaseReleasePremium,那么您的社交框架还需要具有三个配置DebugRelease,{{1 }}。另外,请确保ReleasePremiumTriviaApp的存档配置都设置相同。即,如果您的Social的存档方案设置为TriviaApp,则您的ReleasePremium的存档方案也需要设置为Social
  4. 请确保在ReleasePremium中已经添加了Social的情况下,无需在每个.swift文件中导入Bridging-Header.h
  5. 如果问题来自Pod文件,请确保您未将#use_frameworks!的{​​{1}}注释为use_frameworks!。如果Podfile对吊舱有任何依赖性,有时可以重新安装吊舱。
  6. 如果以上步骤均无效,请delete导出的数据文件夹,然后尝试重新构建。

答案 29 :(得分:1)

  1. 检查您是否正在使用最新版本的xcode(如果未更新为设备支持的最新版本)。
  2. 使用sudo gem install cocoapods
  3. 安装可可足类
  4. 运行pod setup

我可以确认上述步骤解决了我的错误:-)

答案 30 :(得分:1)

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

答案 31 :(得分:1)

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

Pod::Spec.new do |s|
   # ... other declarations

   s.dependency 'Alamofire', '~> 4.3'
end

答案 32 :(得分:1)

就我而言,我尝试了上述所有建议,但仍然没有效果。 我只是复制显示错误的文件内容而没有导入内容,然后将其粘贴到具有相同导入的另一个文件中,并注释掉错误文件。 再次运行该项目,使其正常运行,然后删除原始错误文件,并创建一个具有相同名称的文件,并使用相同的导入再次使其内容恢复。 我认为就我而言,我只是想出一种方法,使其能够一次将这些导入链接起来,应该没事。

答案 33 :(得分:1)

令人惊讶的是,它甚至有效。我的解决方法是去...

构建设置->框架搜索路径->突出显示调试->按删除->它应自动填写路径。 ->进行相同的发布

结果: enter image description here

答案 34 :(得分:1)

确保您的项目文件夹不在 iCloud Drive 中。

enter image description here

enter image description here

答案 35 :(得分:1)

只是为了完成另一种可能性,当选项&#34; Find Implicit Dependencies&#34;未经检查。转到编辑方案 - &gt;建立。

enter image description here

然后检查此选项。

enter image description here

答案 36 :(得分:1)

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

$(PROJECT_DIR)/Carthage/Build/iOS

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

就我而言,我已经运行carthage update --platform ios,然后我的问题就解决了。

答案 37 :(得分:0)

Sazzad Hissain Khan 的 3. 选项在应用程序的框架中添加与应用程序中相同的“构建配置”解决了我的“未知模块”问题。

enter image description here

这篇文章帮助我了解了如何添加新的构建配置,因为进入编辑器 -> 添加配置是灰色的

Adding a build configuration in Xcode

答案 38 :(得分:0)

大多数其他答案适用于CocoaPods或迦太基用户。如果您使用这两种方法中的任何一种,而只想在您的项目中放置一个框架并对其进行链接,则它必须位于框架搜索路径中。< / p>

系统框架已经在搜索路径中(即/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${version}.sdk/System/Library/Frameworks/)。如果您要使用的路径不在此路径中,则需要在“构建设置”中将其路径添加到FRAMEWORK_SEARCH_PATHS


即使左侧面板上的框架在右侧面板的“标识和类型”中列出了位置和完整路径,为什么XCode也不知道在没有该位置的情况下如何找到它?那...我不知道。

答案 39 :(得分:0)

我在xcode 10.3中遇到类似的问题。 xCode无法识别Pod中的文件。在这里,我已经通过以下方式解决了:

  • 进入构建阶段
  • 将二进制文件与库链接
  • 从pod中添加框架(在我的示例中为EPSignature.framwork)
  • 清理并构建项目

错误消失了。 enter image description here

答案 40 :(得分:0)

对我来说,进入“编辑方案”->“运行”,然后将调试配置从“发行版”更改为“调试”,以解决该问题。

答案 41 :(得分:0)

如果您托管自己的库或框架,请确保它具有module.modulemap文件,并且文件头位于Build Phases -> Headers部分

答案 42 :(得分:0)

对我来说,答案是转到目标,首先检查目标名称和项目名称是否匹配,如果匹配,则转到常规 -> 框架并手动添加它们。当我这样做时,我清理构建了应用程序,并且一切正常。不幸的是,在解决我的问题之前没有一个答案,所以也许这也可以帮助你。

enter image description here

答案 43 :(得分:0)

有时候pod deintegrate然后pod install也对我有帮助。

答案 44 :(得分:0)

在极少数情况下,可以通过在此处设置适当的平台[ProjectNavigator]-> [ Project ]-> [ Target ]->(架构)来解决此错误> BaseSDK

enter image description here

在创建框架时,我偶然选择了错误的模板(就像我之前创建macOS框架一样),因为它被设置为喜欢我先前的选择。添加目标时,很容易错过配置平台,因此请仔细检查。

enter image description here

答案 45 :(得分:0)

对于xCode 12和模拟器,

在项目导航器中导航到Pods.xcodeproj时,错误可能会消失, 并在“排除的体系结构”下的构建设置中,对于每个“调试和发行版”,选择值为“ arm64”的“任何iOS Simulator SDK”。

快乐编码:)

答案 46 :(得分:0)

是编译时错误。在很多情况下,您都可以得到它:

  • .xcodeproj已打开,而不是.xcworkspace

  • module.modulemap

Objective-C,库/框架目标。

如果您托管自己的库或框架,请确保它具有module.modulemap文件,并且文件头位于Build Phases -> Headers section

Framework Search Paths

消费者->框架

如果您尝试在未设置Framework Search Paths的情况下构建应用程序。设置Framework Search Path指向框架资源后,Xcode将成功构建项目。但是,当您在模拟器中运行应用程序时,由于以下原因导致崩溃:Image not found about

对于工作区,它可以是绝对路径,也可以是相对路径,例如$(SRCROOT)$(SRCROOT)/..

Import Paths

Swift使用者-> Swift静态库

Import Paths应该指向.swiftmodule

Linked Frameworks and Libraries

消费者->静态框架

在此部分添加Static framework

Find Implicit Dependencies

当您具有隐式依赖项但Find Implicit Dependencies已关闭

Recursive path

答案 47 :(得分:0)

转到项目所在的文件夹并删除导致错误的插件。对我来说,我删除了导致错误的 Google Mobile Ads Sdk 文件夹,问题得到解决。将它包含在 pod 中就足够了。

答案 48 :(得分:0)

在目标的构建设置中,将“框架搜索路径” 设置为 $(继承)并递归。 [1]

答案 49 :(得分:0)

我经历了上述解决方案,但不幸的是,没有任何帮助。我后来做什么

  1. 关闭项目。
  2. 从终端进入项目目录并运行以下命令:
  3. git reset --hard origin / master (我想在 master 分支中进行更改)。
  4. git fetch
  5. git checkout master
  6. git pull原始母版
  7. 打开项目(当然是从Xcode打开)
  8. 清理构建并删除派生数据。
  9. 再次构建项目。

是的,我知道有些命令是多余的。但是,花两天时间拔头发比这些步骤差很多。

答案 50 :(得分:0)

我仍然无法从xcode进行存档,但是 fastlane 为我完成了工作

答案 51 :(得分:0)

尝试了该线程上的所有想法之后,当我更新可可足类时它就起作用了。

$ pod --version
$ 1.0.0 // should have been 1.10.0

您应该更新椰壳足纲

gem which cocoapods

答案 52 :(得分:0)

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

问题应该解决。

HIH

答案 53 :(得分:0)

它有什么价值(我是使用Xcode 7.2 / Swift 2的新手),但我注意到只需从项目目录中的库中获取.swift文件就可以自动访问它并不需要using语句。

示例:我使用SwiftyJSON,只需在项目中使用SwiftyJSON.swift文件即可。 using声明实际上是在给我“没有这样的模块&#39;错误并解决它解决了它,它工作正常。

答案 54 :(得分:0)

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

答案 55 :(得分:0)

我在加载FacebookSDK方面遇到了类似的问题,我在构建设置<中添加〜/ Documents / FacebookSDK (搜索框架所在的位置)框架搜索路径 / strong>之后我能够导入FBSDKShareKit模块

答案 56 :(得分:0)

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

答案 57 :(得分:0)

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

答案 58 :(得分:0)

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

答案 59 :(得分:0)

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

  

警告:找不到目标'MyFramework'的伞头,不会生成模块图

通过解决此警告(related to the framework header not matching the module name),我能够导入框架。

答案 60 :(得分:0)

有时您必须安装Pod。

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

答案 61 :(得分:0)

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

答案 62 :(得分:0)

对于我来说,我已修复了将“自定义路径”中的所有代字号(〜)字符替换为$(HOME)的问题。自定义路径位于位置标签下的Xcode偏好设置中。

答案 63 :(得分:0)

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

答案 64 :(得分:0)

我安装了pod Fakery,pod已添加到我的Pods文件中,但是当我尝试使用它时,我得到了同样的错误。问题是,我没有构建它,在构建之后,swift编译器在Fakery swift文件中抛出了一些错误,某些函数已被重命名,它也为它们提供了修复。解决所有这些编译器问题后,构建成功,我能够使用该模块。因此,在我的案例中,语言兼容性很快。

答案 65 :(得分:0)

就我而言,问题只是使用该框架的一些项目在部署目标iOS版本的框架之前具有部署目标iOS版本。一旦我更改了框架部署目标iOS版本,错误就消失了。 enter image description here

答案 66 :(得分:0)

(这次)我的问题是我在Podfile中使用了过时的库版本。

我用过:

pod 'LBTAComponents', '~> 0.1.9'

没有用,但是当我将其更改为:

pod 'LBTAComponents', '~> 1.0.2'

有效。

答案 67 :(得分:0)

我因“没有此类模块”错误的最直接原因而获奖。以我为例,我手动构建了包含的框架,然后将其复制到我的项目目录中。我的框架搜索路径设置正确,并且框架已正确添加到项目中。

在归档要构建的框架时,我使用“在Finder中显示”将我带到派生数据中的release文件夹。但是我没有注意到该文件夹​​仅包含框架的别名,​​而不包含框架本身。原始框架保留在我的派生数据目录中,所以稍后在清除派生数据时,该框架被删除,但是我的项目不知道

按照实际框架的别名重新存档框架,然后将其复制到我的项目目录中。

答案 68 :(得分:0)

如果这只是一个简单的项目,像我一样没有可可足类, 您可以尝试将框架移到项目目录中并重新链接。 我将其放在台式机上,但是链接并“导入MyFramework”时出错。将其移到项目目录中并再次链接后,它可以工作了。

答案 69 :(得分:0)

如果工作空间中有多个项目,则需要:

1)向所有项目添加新配置

2)产品-> 干净

3)删除derived data

4)pod install在终端

5)建立您的项目。

希望对某人有帮助。

答案 70 :(得分:0)

实际上,通过将build-debug.xconfig的末尾添加到

可以更轻松地解决此问题。

#include "../Pods/Target Support Files/Pods-IAP/Pods-IAP.debug.xcconfig"

直到build-release.xconfig

的末尾

#include "../Pods/Target Support Files/Pods-IAP/Pods-IAP.release.xcconfig"

因为这些文件已经定义了PODS_ROOT和相关的构建变量。

答案 71 :(得分:0)

在XCode 10中,另一个可能的原因可能是Pods项目的Supported Platforms有时更改为macOS,而Valid Architectures更改为i386 x86_64。假设该项目适用于iOS,然后选择Pods项目并将Supported Platforms更改为iOS,将Valid Architectures更改为arm64 arm64e armv7 armv7s,则可以执行每个目标,但是如果您有多个Pod,则需要更长的时间。另外,书面Swift中的Swift version框架有时会设置为错误的版本。

答案 72 :(得分:0)

关于Xcode 10+和1.用Xcode版本<10,2.创建的项目的另一个建议。包含一个子项目,该子项目具有主项目所依赖的框架。问题是Xcode会将编译后的框架放在子项目中指定的目录中,该目录可能与主项目构建目录不同。

检查文件>项目设置。现在,单击“高级...”,然后选择“传统”以外的其他内容作为构建路径,例如“唯一”。在那种情况下,Xcode会将所有构建的组件放到一个文件夹中,并且它应该能够找到“缺失”模块。

答案 73 :(得分:-7)

GUYS我破解了代码!!!!!

好的,你要做的就是在Finder中找到你的Xcodeproj。

现在右键单击.xcodeproj并单击show package contents。然后将框架拖放到那里。 Like so 现在返回Xcode并单击Linking Binaries with Libraries中的+。单击Add other,它将带您进入Xcodeproj文件,现在添加Bolts和Parse Seen Here

和waboosh !!你现在应该可以导入Parse!