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

没有这样的模块

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

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

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


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

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


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


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


我不太确定为什么Martin R在评论中对这个问题的回答被如此忽视:

确保您尝试简单地跳过导入框架,因为它已经与桥接头一起添加了。

希望这能有所帮助


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

打开xcodeproj而不是xcworkspace将导致如下错误…


我发现构建设置中的导入路径是错误的自定义(MySQL)模块。把它指向正确的方向后,信息就消失了。


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

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


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

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

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

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

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


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

错误是“模块未找到”

Create Podfile in your root project directory Install cocoapods (a dependency manager for Swift and iOS projects) Run pod install Go to Project Build Settings: Find Objective-c bridging Header under Swift compiler - Code Generation (If you don't find Swift compiler here, probably add a new Swift file to the project) Drag and drop the library header file from left side to bridging header (see image attached) Create a new bridging header file: e.g TestProject-Bridging-Header.h and put under Swift Compiler → Objective-C Generated Interface Header Name (ref, see the image above) In TestProject-Bridging-Header.h file, write #import "Mixpanel/Mixpanel.h" In your Swift file the code should be: Import Mixpanel (i.e name of library)

这是所有。


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


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

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


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


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


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


我用

链接的框架和库

将框架添加到Workspace文件夹的顶部。讨厌鬼。


确保Scheme中的“在构建中查找隐式依赖项”选项是打开的!


如果你做了以上所有的事情,仍然没有工作,然后尝试在你的目标构建设置的框架搜索路径中添加$(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添加到任何适当的占位符。


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

然后勾选这个选项。


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

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


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

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

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


有时你必须安装pod。

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


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


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

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

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

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


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


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

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

请看我所附的截图。


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


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


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


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


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

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

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


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

在确保图书馆被列在链接框架和图书馆。如果没有,你可以点击+,希望能看到你的框架/pod。

在方案图标中单击您的项目(见下图)

然后你会看到你的关注点框架:

单击“管理方案”。

然后你会看到如下内容:

勾选框架的方框,单击自动创建方案,然后关闭。

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

这对我很管用。


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

pod install

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


在我的例子中,问题只是一些使用框架的项目在框架的部署目标iOS版本之前有一个部署目标iOS版本。一旦我更改了框架部署目标iOS版本,错误就消失了。


我的问题是有多个目标。 我用以下链接解决了这个问题: 配置pod文件正确的方式和修复构建设置

希望有人会觉得有用。


下面的步骤对我很有效。

xcode辞职 在终端运行“pod update” 打开.xcworkspace并再次构建。


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

我使用:

pod 'LBTAComponents', '~> 0.1.9'

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

pod 'LBTAComponents', '~> 1.0.2'

它工作。


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

$ (PROJECT_DIR) /迦太基/构建/ iOS

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

以我为例,我运行了carthage update平台ios,然后我的问题就解决了。


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

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

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


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


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

向所有项目添加新配置 产品->清洁 删除派生数据 终端吊舱安装 构建您的项目。


实际上,通过添加到build-debug.xconfig的末尾,我更容易地解决了这个问题

#包括“. ./Pods/目标支持文件/Pods- iap /Pods- iap .debug.xcconfig"

一直到build-release.xconfig的末尾

#包括“. ./Pods/目标支持文件/Pods- iap /Pods- iap .release.xcconfig"

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


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


在Xcode 10.1中,我的解决方案是在文件菜单中的工作区设置中改变构建系统。它默认设置为New Build System,将其更改为Legacy Build System,这就成功了。


Another possible cause in XCode 10 can be the Supported Platforms sometimes gets changed to macOS and the Valid Architectures gets changed to i386 x86_64 for the Pods Projects. Assuming the project is for iOS, then select the Pods Project and change the Supported Platforms to iOS and the Valid Architectures to arm64 arm64e armv7 armv7s, You could do each of the Targets, however that takes longer if you have more than one Pod. Also the Swift version of frameworks in written Swift sometimes gets set to the wrong version.


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


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

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


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


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


对我来说,对于所选配置,“仅构建活动体系结构”被设置为“是”。这招奏效了:

从左侧项目导航器中选择“Pods”>选择“构建设置”>仅将活动架构构建为No


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


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

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

错误消失了。


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

系统框架已经在搜索路径(即/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/ sdk/ iPhoneOS${version}.sdk/ system /Library/ frameworks /)。如果您试图使用的文件不在此路径中,则需要将它们的路径添加到Build Settings中的FRAMEWORK_SEARCH_PATHS中。


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


有时豆荚分解,然后豆荚安装也帮助我。


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

Please confirm that you have opened the .xcworkspace but not .xcodeproj file. Also make sure you have build Social first before you build TriviaApp. Make sure that iOS Deployment Target is set same for all modules with main app. For example is TriviaApps deployment target is set to 9.0, Socials deployment target also need to be set to 9.0. Make sure your main module (TriviaApp) and your used framework (Social) have same set of configurations. i.e. If your Project has three configurations, Debug, Release, ReleasePremium than your Social framework also need to have three configurations Debug, Release, ReleasePremium. Also make sure that the archive configuration is set same for both TriviaApp and Social. i.e. if your TriviaApps archive scheme is set to ReleasePremium, your Socials archive scheme also need to be set into ReleasePremium. Please assure that you do not need to import Social in each .swift files when its already added in the Bridging-Header.h. In case of issue came from Pod files, make sure you have uncommented #use_frameworks! into use_frameworks! from you Podfile. Sometime re installing pod works if Social has any dependency on pods. If none of the above steps works, delete your derived data folder and try re building.


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

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


No such module编译错误

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

打开的是.xcodeproj而不是。xcworkspace 模块。modulemap or .swiftmodule[关于]

Objective-C库/框架目标

确保生成的二进制文件包含模块。modulemap文件和它的头文件位于Build Phases -> headers部分

框架搜索路径

Consumer ->框架

如果你试图在没有设置框架搜索路径(消费者)的情况下构建应用程序。在设置框架搜索路径指向框架资源后,Xcode将成功构建项目。然而,当你在模拟器中运行应用程序时,有一个崩溃的原因:Image not foundabout

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

导入路径

Swift消费者-> Swift静态库

导入路径(消费者)应该指向.swiftmodule

寻找隐式依赖关系

当您有一个隐式依赖项,但“查找隐式依赖项”已关闭时

CocoaPods

检查目标中是否存在此依赖项

pod deintegrate
pod install

CocoaPods UI测试包

对于应用程序目标,使用额外的依赖CocoaPods。要解决它使用继承![关于]在Podfile

(递归路径)


检查你是否使用最新版本的xcode。(如果没有更新到您设备支持的最新版本)。 用sudo gem Install cocoapods安装cocoapods 运行吊舱设置

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


在目标的构建设置中,将“框架搜索路径”设置为$(inherited)和递归。 [


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

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

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


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

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

结果:


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中。


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


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

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

在Xcode中添加构建配置


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


对我来说,问题在于项目文件缺少这个文件“coursesX.xcworkspace”

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


解决苹果iOS xcode Version 12.3 (12C33) Webview问题

简单地做3步:

使用.xcodeproj打开项目 Xcode辞职 从.xcworkspace重新打开项目

全部完成


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

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

to

"$(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文件


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

Xcode辞职 在应用程序文件夹中找到Xcode,右键单击它并按下获取信息 使用Rosetta勾选打开,如下图所示 再次打开Xcode并运行你的应用

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


对于那些有多个目标的人,检查是否在正确的目标上添加了框架。(在框架、库和嵌入式内容中)。


我在开发自己的第一款应用时也遇到了同样的问题

使用.xcodeproj打开项目

Xcode辞职

从.xcworkspace重新打开项目