Xcode:缺少必需的模块错误

Nar*_*hal 5 frameworks ios swift swift-package-manager xcode8

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

背景

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

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

一切看起来都很好,我的项目包括 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' 
Run Code Online (Sandbox Code Playgroud)

无法“导入 CLibreSSL”到我的视图控制器中(无法自动完成识别)。我注意到,当我访问 MongoKitten 相关源文件时,它们确实在导入语句中成功识别了 CLibreSSL。我什至可以删除它们并重新输入并成功自动完成。

问题

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

如果您需要更多信息,请告诉我。谢谢

O. *_*oth 3

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

\n\n

转到您的项目\xe2\x80\x99s 构建设置。找到标头Swift Compiler\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8aSearch Paths。在Import Paths中,使用 ${SRCROOT} 添加 C 库\xe2\x80\x99s 文件夹的相对路径。如果您的文件夹包含子文件夹,请选择递归选项。

\n\n

这是来自这里的提示

\n\n

编辑 2017 年 5 月 26 日:正如评论中所建议的 - 当使用真实设备时,我的解决方案也不适合我。我只是在模拟器中玩,这个修复很有帮助。对于造成的混乱,深表歉意。\n在为真实设备进行编译时,由于缺少头文件(例如),CLibreSSL/getentropy_osx.c 无法编译<sys/vmmeter.h>- 所以底线:我的建议仅适用于模拟器。:-/

\n

  • 在搜索路径部分设置标头搜索路径是正确的方法。如果该框架依赖于其他一些 C 框架(定义为外部依赖),则该 C 框架位于单独的模块中。在这种情况下,必须指示编译器如何编译它。检查 C 编译器的 -fmodule-map-files=&lt;value&gt; 参数。使用 swiftc 的 -Xcc 参数将其传递给 c 编译器。在依赖框架中找到 module.modulemap 并将其用作值。示例“-Xcc -fmodule-map-file=$(SRCROOT)/ClibWrapperTest.xcodeproj/GenerateModuleMap/Clib/module.modulemap” (2认同)
  • @User9527 构建设置 -&gt; 其他 Swift 标志 (2认同)