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

ale*_*ove 303 xcode ios swift

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

没有这样的模块社交

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

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

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

错误模块

项目

链接框架,库

标题桥

cap*_*kaw 484

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

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

  • 2021年了,这个答案仍然如此正确。哈哈哈 (6认同)
  • 晚上9点使用fastlane,指定健身房(项目:---)而不是健身房(工作区:----)谢谢! (3认同)
  • 我试过这是一个圣杯。有趣的。谁知道但退出然后重新打开工作区实际上也有效。清洁,然后构建。 (2认同)

小智 291

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

  • 我去洗手间修好了.当我回来时它正在工作.我很确定我在这个帖子中尝试了所有内容,不知道该做了什么.我也在某个时候祷告过. (259认同)
  • 不得不在"项目构建设置"而不是"目标构建设置"中执行此操作. (10认同)
  • 我的诀窍是找到框架的路径,以便在框架搜索路径中使用.$ {TARGET_BUILD_DIR} /YourFrameworkName.framework对我很有用.另见http://stackoverflow.com/questions/32816507/how-do-i-create-a-development-framework-in-ios-including-swift (7认同)
  • 谢谢.我必须在我的项目构建设置而不是目标构建设置中执行此操作 (4认同)
  • 注意:$(SRCROOT)仅在我将其添加到PODS PROJECT的框架搜索路径中时对我有用。 (2认同)
  • 我已经尝试了一切……几乎一切。甚至按照 @nmdias 的建议去洗手间:D ...到目前为止还没有解决方案...:( (2认同)

Gro*_*oot 44

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

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

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

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

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

  • 这导致我找到了问题,但是由于不想接触第3方子项目,因此我在自定义配置中添加了框架搜索路径来解决了这个问题:) (2认同)

Mik*_*e K 41

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

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

希望这可以帮助


nbu*_*urk 32

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

# Uncomment this line if you're using Swift
# use_frameworks!
Run Code Online (Sandbox Code Playgroud)

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

# Uncomment this line if you're using Swift
use_frameworks!
Run Code Online (Sandbox Code Playgroud)

... aaand有效:)


Kru*_*tel 19

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

在此输入图像描述


小智 18

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


小智 14

以下步骤对我有用.

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


mcs*_*rey 12

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

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

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

  • 出于某种原因,即使它存在,也不会在xcode 9.1中显示.右键单击框架> Show In Finder>并确保您的模块图存在.如果您在pods项目中使用手动框架,请在刚刚添加新手动框架或更新现有框架时重建您的pod. (2认同)

Bra*_*ton 9

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

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


Saz*_*han 9

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

  1. 请确认您已打开.xcworkspace但未打开.xcodeproj文件。还要确保在构建Social之前先构建TriviaApp
  2. 确保 iOS 部署目标为主应用程序的所有模块设置相同。比如TriviaApps部署目标设置为9.0Socials部署目标也需要设置为9.0
  3. 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.
  4. Please assure that you do not need to import Social in each .swift files when its already added in the Bridging-Header.h.
  5. 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.
  6. If none of the above steps works, delete your derived data folder and try re building.


Vla*_*ica 9

至于 xCode 12 和模拟器,

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


Nik*_*Kov 8

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

  • 你节省了我很多时间。实际上,为了加快我的代码 12 的速度,我根据 stackoverflow 上的一些解决方案取消选中 **查找隐式依赖项**。但在重新开放该项目后,它开始抱怨。 (2认同)

Asf*_*qui 8

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

方法1:只需执行3步:

  1. 打开项目.xcodeproj

  2. 退出 Xcode

  3. 重新打开项目从.xcworkspace

完毕

方法 2:只需执行 3 个步骤:

  1. 打开podfile -> 添加use_frameworks!podfile -> 保存pod文件

  2. 退出 Xcode

  3. 跑步pod install

  4. 重新打开项目从.xcworkspace

全做完了


vik*_*ngh 7

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

错误是"找不到模块"

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

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

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

就这样.


cen*_*ioz 7

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


jol*_*uly 7

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


yoA*_*ex5 7

没有这样的模块编译错误

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

  • .xcodeproj 被打开而不是 .xcworkspace
  • module.modulemap.swiftmodule[关于]

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被关闭时

可可豆

  • 检查目标中是否存在此依赖项
pod deintegrate
pod install
Run Code Online (Sandbox Code Playgroud)

可可豆 UI Test Bundle

用于App Target从 CocoaPods 使用附加依赖项的地方。为了解决它使用inherit![关于]Podfile

[递归路径]


har*_*thk 6

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


zee*_*wan 6

我遇到了同样的错误

import Firebase
Run Code Online (Sandbox Code Playgroud)

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

随着命令

pod init
Run Code Online (Sandbox Code Playgroud)

对于 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
Run Code Online (Sandbox Code Playgroud)

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


boa*_*moa 6

对我来说,对于选定的配置,仅构建活动架构被设置为是。这做到了:

从左侧的项目导航器中选择“Pods”> 选择“Build Settings”>“Build Active Architecture Only”到“ No”


Mag*_*goo 5

我修复了这个问题

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

添加框架,该框架应位于文件夹的顶部Workspace。屁股痛。


Jor*_*ith 5

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

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


小智 5

当我使用添加几个框架时,我遇到了同样的错误Cocoapods。如果我们在项目中使用 Pod,我们应该xcodeworkspace使用xcodeproject. 为了通过 xcodebuild 运行该项目,我-workspace <workspacename>在命令中添加了参数xcodebuild,它运行得很好。


ber*_*bie 5

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

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

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


小智 5

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

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

错误消失了。 在此输入图像描述


avg*_*mer 5

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

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

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

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

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

target 'Release' do
  shared_pods
end
Run Code Online (Sandbox Code Playgroud)

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

target 'Release' do
  shared_pods
end

target 'Development' do
    shared_pods
end
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助某人避免几天的沮丧。


归档时间:

查看次数:

352192 次

最近记录:

5 年,11 月 前