Xcode:缺少必需的模块错误

我看过类似问题的答案,我仍然感到困惑。

背景

我有一个项目正在运行,但我正在尝试在Xcode 8.3.1中重新创建它。 我首先使用带有一个依赖项的Swift包管理器:[.Package(url:“ https://github.com/OpenKitten/MongoKitten.git ”,majorVersion:3)]。 然后我按照我的说明从Cocoa转换为iOS(因为SPM不直接支持iOS),这在以前的项目开始时起作用:

  1. 启动Package.swift文件
  2. swift包generate-xcodeproj
  3. 在Xcode中打开项目
  4. 项目:构建设置:基础SDK ==>更改为IOS
  5. 编辑:添加目标:( iOS …单一视图应用程序)
  6. 选择您的项目,查看目标列表,找到新添加的目标:常规:部署信息
  7. 在工具栏上,更改“活动方案”

一切似乎都很好,我的项目包括MongoKitten和它依赖的一堆其他框架。 其中一个叫做“CLibreSSL”。 我将所有框架作为目标添加到我新创建的目标中。

错误信息

我可以“导入MongoKitten”到我的viewcontroller中(自动完成工作)。 但是,当我编译时,我收到此错误消息(即使我个人没有尝试导入CLibreSSL):

Compile Swift source files [... bunch of stuff referring to my new target and the viewcontroller ...] :0: error: missing required module 'CLibreSSL' 

不能 “导入CLibreSSL”到我的viewcontroller(没有自动完成识别)。 我注意到当我转到与MongoKitten相关的源文件时,他们确实在其import语句中成功识别了CLibreSSL。 我甚至可以删除它们并重新键入成功的自动完成function。

我意识到当我像我一样创建一个新目标时,我可能需要做一些额外的事情,而且它可能与搜索路径有关,但我已经尝试了很多东西而且结果没有改变。 有人可以告诉我如何解决这个问题(请不要因为我发现这些东西令人困惑而不能承担太多的知识)?

如果您需要更多信息,请与我们联系。 谢谢

当我在iOS应用程序中包含Vapor时,我遇到了同样的问题“缺少必需的模块’CLibreSSL’”。 修复非常简单,也适用于您:

转到项目的构建设置。 找到标题Swift Compiler – Search Paths 。 在“ 导入路径”中 ,使用$ {SRCROOT}添加C库文件夹的相对路径。 如果您的文件夹包含子文件夹,请选择递归选项。

这是一个提示

编辑5月26,2017:正如评论中所建议的那样 – 当使用真实设备时,我的解决方案对我也不起作用。 我只是在模拟器中玩,这个修复有帮助。 很抱歉这个混乱。 编译真实设备时,由于缺少头文件(例如 ),CLibreSSL / getentropy_osx.c无法编译 – 所以底线:我的建议仅适用于模拟器。 : – /

根据user3441734的建议添加“其他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版本硬编码到文件名中,我认为如果它更新到更高版本可能会破坏。 另请注意,在我的情况下不需要搜索路径构建设置,只需要其他Swift路径设置。