Xcode:缺少必需的模块错误
Posted
技术标签:
【中文标题】Xcode:缺少必需的模块错误【英文标题】:Xcode: missing required module error 【发布时间】:2017-04-09 12:40:17 【问题描述】:我已经查看了类似问题的答案,但我仍然感到困惑。
背景
我有一个项目正在运行,但我正试图在 Xcode 8.3.1 中重新创建它。我首先使用具有一个依赖项的 Swift 包管理器:[.Package(url: "https://github.com/OpenKitten/MongoKitten.git", majorVersion: 3)]。然后我按照我的笔记从 Cocoa 转换到 ios(因为 SPM 不直接支持 iOS),这在以前的项目开始时工作:
-
制作启动Package.swift文件
swift package generate-xcodeproj
在 Xcode 中打开项目
项目:构建设置:基础 SDK ==> 更改为 IOS
编辑器:添加目标:(iOS ...单视图应用程序)
选择你的项目,查看目标列表,找到你新添加的目标:General : Deployment Info
在工具栏上,更改“活动方案”
一切似乎都很好,我的项目包括 MongoKitten 和它所依赖的一堆其他框架。其中之一称为“CLibreSSL”。我将所有框架作为目标添加到我新创建的目标中。
错误信息
我可以将 MongoKitten “导入”到我的视图控制器中(使用自动完成功能)。但是,当我编译时,我会收到此错误消息(即使我个人没有尝试导入 CLibreSSL):
Compile Swift source files
[... bunch of stuff referring to my new target and the viewcontroller ...]
<unknown>:0: error: missing required module 'CLibreSSL'
我不能“导入 CLibreSSL”到我的视图控制器中(没有自动完成识别)。我注意到,当我转到与 MongoKitten 相关的源文件时,它们确实在其导入语句中成功识别了 CLibreSSL。我什至可以删除它们并通过成功的自动完成重新输入。
问题
我意识到当我像我一样创建一个新目标时,我可能需要做一些额外的事情,这可能与搜索路径有关,但我尝试了很多东西,结果并没有改变。有人可以告诉我如何解决这个问题(并且请不要假设我有太多的知识,因为我觉得这些东西令人困惑)?
如果您需要更多信息,请告诉我。谢谢
【问题讨论】:
【参考方案1】:在 iOS 应用程序中包含 Vapor 时,我遇到了同样的问题“缺少必需的模块 'CLibreSSL'”。 修复非常简单,应该也适合您:
转到您项目的构建设置。找到标题Swift Compiler — Search Paths。在 Import Paths 中,使用 $SRCROOT 添加到 C 库文件夹的相对路径。如果您的文件夹包含子文件夹,请选择递归选项。
这是来自here的提示
编辑 2017 年 5 月 26 日:正如 cmets 中所建议的那样 - 在使用真实设备时,我的解决方案也不适用于我。我只是在模拟器中玩耍,这个修复有帮助。很抱歉造成混乱。
在为真实设备编译时,由于缺少头文件(例如<sys/vmmeter.h>
),CLibreSSL/getentropy_osx.c 无法编译 - 所以底线:我的建议仅适用于模拟器。 :-/
【讨论】:
谢谢。我会记住这个答案,但在这种特殊情况下它并没有解决它。 这对我也不起作用......独角鲸,你找到解决方案了吗? 在搜索路径部分设置标题搜索路径是正确的方法。如果框架依赖于其他一些 c 框架(定义为外部依赖),则 c 框架位于单独的模块中。在这种情况下,必须指示编译器如何编译它。检查 c 编译器的 -fmodule-map-files=按照 user3441734 的建议添加“Other Swift Flags”构建设置为我修复了它。依赖 CLibreSSL 模块的库(在我的情况下为 OpenCloudKit)可以找到它似乎很奇怪,但我导入 OpenCloudKit 的应用程序不能没有帮助。作为参考,我的嵌套在导入到我的应用程序中的 SPM 生成的 Xcode 项目(名为“Dependencies”)中,构建设置为-Xcc -fmodule-map-file=$(SRCROOT)/Dependencies/.build/x86_64-apple-macosx10.10/debug/CLibreSSL.build/module.modulemap
。请注意,这似乎有点脆弱,因为它有一个硬编码到文件名中的 macOS 版本,我认为如果它更新到更高版本可能会中断。另请注意,在我的情况下,不需要 Search Paths 构建设置,只需要 Other Swift Paths 设置。
【讨论】:
以供将来参考,这也为我使用包装 C 库的 SPM 项目解决了问题。我一直在按照论坛here 中引用的将 SPM 项目嵌入 Xcode MacOS 项目的建议路线进行操作以上是关于Xcode:缺少必需的模块错误的主要内容,如果未能解决你的问题,请参考以下文章
Xcode - @IBDesignables - X.framework 缺少必需的代码签名
我该如何解决问题:模块/ contrib / redirect / modules / redirect_404中缺少必需的键(核心)?