获取错误“No such module&”;使用Xcode,但框架在那里

我目前在Swift编码,我有一个错误:

没有这样的模块

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

框架是在Objective-C中,所以我为它写了一个桥标头。

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

错误模块

项目

链接框架,库

头桥

637449 次浏览

假设框架真的在那里,在道路上,等等……删除~/Library/Developer/Xcode/DerivedData/ModuleCache目录(清理项目并删除项目特定的派生数据)。

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

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

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

如果是周五下午或凌晨1点之后:

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

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

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

示例:我正在使用SwiftyJSON,在项目中拥有SwiftyJSON.swift文件就是我所需要的。using语句实际上给了我“没有这样的模块”错误,并把它解决了,它工作得很好。

我在使用Cocoapods和斯威夫特时也遇到了同样的问题。我没有注意到Podfile中的以下行:

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

所以,我所要做的就是把它改成:

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

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

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

错误是“模块未找到”

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

    • 在Swift编译器下找到Objective-c桥接头-代码生成(如果你在这里没有找到Swift编译器,可能会添加一个新的Swift文件到项目中)
    • 将库头文件从左侧拖放到桥接头(见附图)enter image description here
    • 李< / ul > < / >
    • 创建一个新的桥接头文件:例如TestProject-Bridging-Header.h,并放在Swift Compiler→Objective-C生成的接口头名称下(参考,见上图)

    • 在TestProject-Bridging-Header.h文件中,输入#import "Mixpanel/Mixpanel.h"
    • 在你的Swift文件中,代码应该是: 导入Mixpanel(即库名)

    这是所有。

我只是通过删除引用来删除框架,然后再次添加它们。

以我为例,在多次尝试找出导入框架时哪里做错了之后,我最终发现问题出在框架本身。如果你不是从一个可信的来源获得你的框架,你应该检查框架并确保它包含一个模块的Modules文件夹。其中的Modulemap文件。如果模块。modulemap不存在,你会得到“No such module 'MyFramework'”错误。

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

如果Modules文件夹缺少“MyFramework.”然后框架就会被找到,但是Xcode不会知道它的内容,所以你会得到不同的错误。

我在加载FacebookSDK时遇到了类似的问题,我添加了~ / / FacebookSDK文档(搜索你的框架在哪里)到建立设置中的框架搜索路径,之后我就可以导入FBSDKShareKit模块了

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

请将此截图与您的构建设置进行比较。 这可能会奏效。 进入框架搜索路径:

Enter image description here

我用

链接的框架和库

Workspace文件夹中添加应该在顶部的框架。讨厌鬼。

请确保,Scheme中的Build选项中的Find implicit Dependencies是打开的!

如果你做了以上所有的事情,仍然没有工作,然后尝试在你的目标构建设置的框架搜索路径中添加$(inherited)

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

我的解决办法是。在目标->构建设置->框架搜索路径和添加$(继承)。然而,如果它是一个cocoapods,你的答案可能在输出终端内。

我得到了相同的错误

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

当“查找隐式依赖项”选项未选中时,可能会发生此错误。转到编辑方案->构建。

enter image description here

然后勾选这个选项。

enter image description here

如果你是面向tvOS这样的平台创造游戏,请确保你选择了一个Apple TV模拟器。

使用iOS模拟器创建tvOS应用时,我就犯了这个错误。花了大半个小时寻找各种构建问题……哎。

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

警告:没有为目标'MyFramework'找到伞头,模块映射将不会生成

通过解决这个警告(与框架头不匹配模块名有关),我能够导入框架。

有时你必须安装pod。

  1. 打开终端
  2. cd项目
  3. 圆荚体安装
  4. 打开.xcworkspace和
  5. 构建是成功的

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

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

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


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

我得到了相同的错误,因为我添加了一对框架使用Cocoapods。如果我们在项目中使用Pods,我们应该使用xcodeworkspace而不是xcodeproject。 为了通过xcodebuild运行项目,我在xcodebuild命令中添加了-workspace <workspacename>参数,它工作得很好

  1. 在podfile中,删除产生问题的pod,并保存该文件
  2. 运行pod安装
  3. 重新添加pod,保存文件
  4. 重新运行pod安装

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

也就是说,如果你有一个配置名为“AppStore”的“父”项目,你必须确保所有子项目也有这个配置名称。

请看我所附的截图。

Configuration setup in < / >

Configuration setup in 1st sub project

Configuration setup in 2nd sub project

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

我刚刚删除了我的cocoapod。然后,我做了一个豆荚安装来移除它。然后,我只是把它添加回我的podfile,并重新安装它。这让它成功了。不知道为什么。

在我的情况下,项目上的swift 4库没有编译,所以不可能找到它们并导入。 解决方案是将cocoapods库的编译版本设置为swift 3.2 enter image description here < / p >

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

在我的例子中,应用IPHONEOS_DEPLOYMENT_TARGET被设置为9.3,而在我新创建的框架中,它被设置为10.2

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

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

这是最后对我有用的方法。我不得不做这一切,这很蹩脚,但这是我能找到的唯一有效的方法。

在确保库被列在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。

这对我很管用。

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

pod install

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

在我的例子中,问题只是一些使用框架的项目在框架的部署目标iOS版本之前有一个部署目标iOS版本。一旦我更改了框架部署目标iOS版本,错误就消失了。 enter image description here < / p >
我的问题是有多个目标。 我用以下链接解决了这个问题: 正确配置pod文件修复构建设置

希望有人会觉得有用。

下面的步骤对我很有效。

  1. xcode辞职
  2. 在终端运行"pod update"
  3. 打开.xcworkspace并重新构建。

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

我使用:

pod 'LBTAComponents', '~> 0.1.9'

这并没有起作用,但当我把它改成:

pod 'LBTAComponents', '~> 1.0.2'

它工作。

如果你使用迦太基,建筑设置中的框架通常是不变的

$(PROJECT_DIR)/Carthage/Build/iOS

如果你运行carthage update --platform ios --no-build(以节省时间),Build文件夹中的文件将不会被重新创建,那么这些模块将对XCode不可用。

在我的情况下,我已经运行carthage update --platform ios,然后我的问题解决了。

我赢得了“没有这样的模块”错误的最愚蠢原因奖。在我的例子中,我手工构建了包含的框架,并将其复制到我的项目目录中。我的框架搜索路径设置正确,框架也被正确地添加到项目中。

当我归档我正在构建的框架时,我使用“Show in Finder”将我带到派生数据中的发布文件夹。但是我没有注意到这个文件夹只包含框架的别名,而不是框架本身。原来的框架仍然在我的派生数据目录中,所以后来当我清除派生数据时,框架被删除了,但是我的项目不知道

重新归档框架,遵循别名到实际框架,并将其复制到我的项目目录中,这是可行的。

如果这只是一个简单的项目,没有可可足类,就像我一样, 你可以尝试移动你的框架到你的项目目录和重新链接。 我把它放在桌面上,但是链接和“导入我的框架”犯了一个错误。在将其移动到项目目录并再次链接后,它工作了。< / p >

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

  1. < p > 向所有项目添加新配置

  2. < p > 产品清洁

  3. < p >删除derived data

  4. pod install在终端

  5. 构建您的项目。

实际上,通过添加到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和相关的构建变量。

在General =>链接框架和库中,我添加了./Pods/Pods.xcodeproj,它成功了

在Xcode 10.1中,我的解决方案是改变文件菜单中工作空间设置上的构建系统。它默认设置为新构建系统,将其更改为遗留构建系统,这就完成了任务。

enter image description here

在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有时会被设置为错误的版本。

在我的情况下,我尝试了上面的每一个建议仍然不工作。 我只是复制文件的内容,显示错误没有导入的东西,并将其粘贴到另一个文件相同的导入和注释错误文件。 再次运行项目,它工作,然后我删除原来的错误文件,并创建一个同名的文件,并使其内容再次使用相同的导入。 我认为在我的情况下,我只是想办法让它能够链接这些导入一次,它应该是好的

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

检查文件>项目设置。现在,单击“Advanced…”并选择“Legacy”以外的内容作为构建路径,例如,“Unique”。在这种情况下,Xcode将把所有构建的组件放到一个文件夹中,它应该能够找到“丢失”的模块。

对我有效的是另一个问题的解决方案。关闭Xcode,重新打开项目作为工作空间。进入项目文件夹,打开.xcodeworkspace 文件。
一旦你打开工作区(而不是项目),Pods应该作为顶级项目出现在project Navigator中。

对我来说,我把它固定为用$(HOME)替换自定义路径中的任何波浪号(~)字符。自定义路径位于Xcode首选项的位置选项卡下。

对于我来说,所选配置的只构建活动架构被设置为Yes。这招奏效了:

从左边的项目导航器中选择“Pods”,选择“构建设置”,只构建活动架构到没有

对我来说,编辑方案->运行,并将调试配置从发布更改为调试解决问题。

我在xcode 10.3中也遇到了类似的问题。xCode无法识别pod中的文件。这里我是这样解决的:

  • 进入构建阶段
  • 用库链接二进制文件
  • 从pods中添加框架(在我的例子中是epsignature . framework)
  • 清洁,构建项目

错误消失。 enter image description here < / p >

大多数其他答案都是针对CocoaPods或迦太基用户的。如果你是,使用其中任何一个,但只是想在你的项目中删除一个框架并链接它,它将需要在f框架搜索路径中。

系统框架已经在搜索路径中(即/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${version}.sdk/System/Library/Frameworks/)。如果你想要使用的那些不在这个路径中,你需要在你的构建设置中将它们的路径添加到FRAMEWORK_SEARCH_PATHS


为什么XCode不知道在哪里找到它,即使你左边面板上的框架在右边面板的标识和类型中列出了一个位置和完整的路径?那我不知道。

有时候pod deintegratepod install也能帮助我。

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

  1. 请确认您已经打开了.xcworkspace而不是.xcodeproj文件。还要确保在构建TriviaApp之前先构建了Social
  2. 确保iOS部署目标对主应用程序的所有模块设置相同。例如,TriviaApps的部署目标设置为9.0Socials的部署目标也需要设置为9.0
  3. 确保你的主模块(TriviaApp)和你使用的框架(Social)具有相同的配置集。例如,如果你的项目有三个配置,DebugReleaseReleasePremium,那么你的社交框架也需要有三个配置DebugReleaseReleasePremium。还要确保TriviaAppSocial的存档配置设置相同。也就是说,如果你的TriviaApps存档方案被设置为ReleasePremium,你的Socials存档方案也需要被设置为ReleasePremium
  4. 请确保当Bridging-Header.h中已经添加了Social时,不需要在每个.swift文件中导入Social
  5. 如果问题来自Pod文件,请确保你已经从你的Podfile未注释#use_frameworks!use_frameworks!。如果Social对pods有任何依赖,有时重新安装pod也可以。
  6. 如果以上步骤都不起作用,删除你的派生数据文件夹,并尝试重新构建。

在极少数情况下,此错误可以通过在这里设置适当的平台来修复[ProjectNavigator]->[项目]->[目标]->(架构)BaseSDK

enter image description here

当创建一个框架时,我不小心选择了错误的模板(因为我之前创建macOS框架),因为它被设置为喜欢我之前的选择。当添加目标时,很容易忽略配置平台,所以要仔细检查。

enter image description here

No such module编译错误

这是编译时错误。你可以在很多情况下得到它:

Objective-C库/框架目标

确保生成的二进制文件包含module.modulemap文件,并且它的头文件位于Build Phases -> Headers section

Framework Search Paths

消费者→框架

如果你试图构建一个应用程序而不设置Framework Search Paths(消费者)。在将Framework Search Path设置为指向框架资源之后,Xcode将成功构建项目。然而,当你在模拟器中运行应用程序时,有一个崩溃的原因:Image not found<一口>对< /一口>

它可以是一个绝对路径,也可以是相对路径,比如工作空间的$(SRCROOT)$(SRCROOT)/..

Import Paths

Swift消费者>Swift静态库

Import Paths(消费者)应该指向.swiftmodule

Find Implicit Dependencies

当你有一个隐式依赖,但Find Implicit Dependencies被关闭

CocoaPods

  • 检查目标中是否存在此依赖项
pod deintegrate
pod install

CocoaPods UI Test Bundle

用于App Target,其中使用了来自CocoaPods的额外依赖项。要解决它,请使用Podfile中的inherit!<一口>[对]< /一口>

[递归路径] .

  1. 检查你是否使用最新版本的xcode。(如果没有更新到您设备支持的最新版本)。
  2. 使用sudo gem install cocoapods安装cocoapods
  3. 运行pod setup

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

在目标的构建设置中将“框架搜寻路径”设置为$(继承)并递归。 (< img src = " https://i.stack.imgur.com/1gdqz.png " alt = " 1] " > < / p >

我尝试了以上的解决方案,但不幸的是,没有一个对我有帮助。我后来做了什么

  1. 关闭项目。
  2. 从终端,进入工程目录并运行以下命令:
  3. Git重置-硬源/主(我想在分支中更改。)
  4. git获取
  5. Git checkout master
  6. Git拉源主
  7. 打开项目(当然是从Xcode)
  8. 清除生成和删除派生数据。
  9. 再次构建项目。

是的,我知道有些命令是多余的。但花两天时间揪头发比那些步骤糟糕多了。

没想到这竟然起作用了。我的解决办法是……

构建设置->框架搜索路径->高亮调试->按delete ->它应该自动填写一个路径。->释放时执行同样的操作

< p >结果: enter image description here < / p >

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

在绞尽脑汁尝试了上周贴在这里的每一个答案之后,我终于找到了一个解决方案。

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

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

在第20次查看Podfile后,我注意到在shared_pods定义下,我只有以下内容:

target 'Release' do
shared_pods
end

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

target 'Release' do
shared_pods
end


target 'Development' do
shared_pods
end

希望这能让一些人少受几天的困扰。

我仍然不能从xcode存档,但fastlane为我做了这项工作

在尝试了这个线程上的所有想法后,当我更新cocoapods时,它起作用了。

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

你应该更新cocoapods

gem which cocoapods

至于xCode 12和模拟器,

错误可能会消失,当你导航到Pods。项目导航器中的Xcodeproj, 在“排除架构”下的构建设置中,对于每个调试和发布,选择值为arm64的“任何iOS模拟器SDK”

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

enter image description here

enter image description here

转到项目所在的文件夹,删除导致错误的插件。对我来说,我删除了导致错误的谷歌移动广告Sdk文件夹,问题已经修复。把它和豆荚放在一起就足够了。

Sazzad Hissain Khan是3。选项添加相同的“构建配置”;在App的框架中比在App中解决了我的“未知模块”;问题。

enter image description here

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

在Xcode中添加构建配置

对我来说,答案是去目标,首先检查目标名称和项目名称是否匹配,如果匹配,然后去一般 ->框架并手动添加它们。当我这样做时,我干净地构建了应用程序,一切都运行正常。不幸的是,之前的答案都没有解决我的问题,所以也许这也能帮助你。

enter image description here

对我来说,这个问题是因为项目文件缺少这个文件"

当我添加它并重新打开项目时,一切都工作得很好

解决苹果iOS xcode版本12.3 (12C33)的问题

简单地做3步:

  1. 使用.xcodeproj打开项目

  2. < p > Xcode辞职

  3. .xcworkspace重新打开项目

全部完成

点赞:)

在我的例子中: 该问题只发生在Xcode 12.4,而不是Xcode 13。 测试目标的一个框架在我为arm64模拟器支持重新构建框架后给出了这个错误(在XCFramework格式)。我通过更新Framework Search Paths

中的路径来修复它
"$(SRCROOT)/Carthage/Build/WireTesting.xcframework/ios-x86_64-simulator"

"$(SRCROOT)/Carthage/Build/WireTesting.xcframework/ios-arm64_x86_64-simulator"

当框架没有正确编译时也会发生这种情况。

在Xcode中打开框架项目,看看Product → Build是否成功。

一旦在框架中修复了构建错误,打开主项目,看看是否可以导入框架。

如果你使用CocoaPods,试着注释掉(#)新的pod,运行pod install,把它带回来,然后再次安装pod。有时somewhy pod脚本不能产生正确的依赖关系(或者与运行xCode冲突?)所以它有时确实有帮助

几分钟前我找到了解决我的问题的方法。 该项目是一个使用cocos2d框架的objective c项目。

.

.

.

只是我删除VALID_ARCH行自定义在构建设置和项目开始构建模拟器。

.

您将依赖项(模块)添加到pod中,但没有版本(特定或范围)。 请定义版本,运行pod install,并打开.xcworkspace文件而不是.xcodeproj文件

唯一对我有用的是使用Rosetta运行Xcode。如果没有这个,我只能在真实的设备上运行应用程序,而不能在iOS模拟器上运行。构建应用程序可能会有点慢,但它绝对解决了这个问题 如果你不知道如何打开Rosetta,下面是步骤:

  • Xcode辞职
  • Applications文件夹中找到Xcode,右键单击它并按Get Info
  • 打勾Open using Rosetta,如下图所示
  • 再次打开Xcode并运行你的应用

不确定是否需要删除派生数据和清理项目,但您也可以这样做。

1