Xcode:缺少必需的模块错误

时间:2017-04-09 12:40:17

标签: ios swift frameworks xcode8 swift-package-manager

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

背景

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

  1. 启动Package.swift文件
  2. swift package generate-xcodeproj
  3. 在Xcode中打开项目
  4. 项目:构建设置:基本SDK ==>改为IOS
  5. 编辑:添加目标:( iOS ...单一视图应用程序)
  6. 选择您的项目,查看目标列表,找到新添加的目标:常规:部署信息
  7. 在工具栏上,更改“active scheme”
  8. 一切似乎都很好,我的项目包括MongoKitten和它依赖的一堆其他框架。其中一个叫做“CLibreSSL”。我将所有框架作为目标添加到我新创建的目标中。

    错误消息

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

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

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

    问题

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

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

2 个答案:

答案 0 :(得分:1)

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

转到项目的构建设置。找到标题 Swift编译器 - 搜索路径。在导入路径中,使用$ {SRCROOT}添加C库文件夹的相对路径。如果您的文件夹包含子文件夹,请选择递归选项。

这是来自here

的提示

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

答案 1 :(得分:1)

添加&#34;其他Swift Flags&#34; user3441734建议的构建设置为我修复了它。看起来奇怪的是,依赖于CLibreSSL模块的库(在我的情况下是OpenCloudKit)可以找到它,但我导入OpenCloudKit的应用程序无法提供帮助。作为参考,我的嵌套在SPM生成的Xcode项目(名为&#34; Dependencies&#34;)中导入到我的应用程序中,构建设置为-Xcc -fmodule-map-file=$(SRCROOT)/Dependencies/.build/x86_64-apple-macosx10.10/debug/CLibreSSL.build/module.modulemap。请注意,这似乎有点脆弱,因为它有一个macOS版本硬编码到文件名中,我认为如果它更新到更高版本可能会破坏。另请注意,在我的情况下不需要搜索路径构建设置,只需要其他Swift路径设置。