【问题标题】:Swift app: “Missing required module” when importing framework that imports static librarySwift 应用程序:导入静态库的框架时“缺少必需的模块”
【发布时间】:2015-10-23 19:07:15
【问题描述】:

这是我的设置:

  1. 名为 Stat 的 Objective C 代码静态库。
  2. 一个 Swift 框架,它在自己的类中使用来自 Stat 的代码(此框架称为 Dyn)。静态库和这个框架在同一个 Xcode 项目中。
  3. 将上述项目作为子项目并链接到 Dyn 的 Mac 应用程序/项目。

在我的应用中,我的代码如下:

import Cocoa
import Dyn
...
SomeDynClass().doSomething()

但是,当我尝试编译时,当我 import Dyn 时出现错误。错误是

error: missing required module ‘Stat'

我的应用似乎可以很好地找到我的框架,但不知何故它也需要为我的静态库找到一个模块?

Stat 有一个非常基本的模块文件:

module Stat {
    header "Stat.h"
    export *
}

我想我需要将我的 Mac 应用程序的框架搜索路径指向 Stat,但我不知道为什么,也不知道怎么做。我该如何解决?

【问题讨论】:

  • 我知道它已有一年多的历史了,但是您找到解决方案了吗?我现在对 OpenSSL 也有类似的问题。我构建了自己的 .a 文件 libcrypto 和 libssl 并为它们创建了 module.modulemap(模块名称:COpenSSL)。我可以在我的 swift 框架中使用它(测试也在工作)但是当我在应用程序中使用这个框架时,我得到:缺少所需的模块:COpenSSL
  • @leizeQ 您是否也尝试在您的应用程序中链接到COpenSSL?我不确定这是否可行,但值得一试!
  • @jbrennan 就我而言,Stat 和 Dyn 都很迅速。 Stat 我假设我现在可以使用 XCODE 9.1 构建(它支持 swift 静态库)。问题是在哪里包含 stat 的模块映射以及模块映射文件中应该包含什么?

标签: macos swift cocoa frameworks


【解决方案1】:

选择您的Target,然后进入Build Settings 并在Swift Compiler - Search Paths 部分中设置Import Paths:

${SRCROOT}/Stat

通常,模块的名称与库相同,但是,我不确定您是如何使用 module.map 设置目录的(它可能被命名为 Dyn,在这种情况下,导入路径将反映该名称。

构建设置 > Swift 编译器 > 搜索路径:

${SRCROOT}/(module.map 的目录) 应该自己解决一次 你按 enter 或 tab ..

【讨论】:

  • 啊开枪!所以我试过这个(根据你的建议)但没有用。但我需要做的是在我的 APP 目标中添加这个(链接到 Dyn 的应用程序,它导入 Stat)。很难记住我上周是否更改了其他设置,但我相信这是我需要做的。谢谢。
  • Drat,我收回了。我在错误的项目中。似乎是一个问题是我的 Dyn 框架和 Stat 库在嵌套项目中。因此,App 将它们作为子项目,这似乎导致事情无法构建,即使使用您在 App 目标中建议的导入路径。
  • @jbrennan:在您的框架构建设置中,您是否定义了快速编译器搜索路径,如果您自己构建框架,是否所有内容都能正确编译?
  • 这为我解决了一个类似的问题,我有一个 Swift 应用程序目标 (App) 导入了一个动态框架 (Core),该框架链接了由伞形模块映射 (Firebase) 联合的多个静态框架.这会在导入 Core 时在 App 目标中产生“缺少所需模块:Firebase”错误。当我更新核心构建设置以将模块映射的目录添加到 Swift 编译器路径 - 导入路径时,错误消失了。
  • 对我来说也一样。我有 @_exported import MyLib 具有 Firebase 依赖项。为导入路径指定 ${SRCROOT}/Pods/Firebase/CoreOnly/Sources 已修复“错误:缺少必需的模块 'Firebase'”
【解决方案2】:

在涉及 SQLite3 包的单元测试项目中,我遇到了同样的错误。添加包后,单元测试总是抛出错误“缺少必需的模块 SQLiteObjc”

我通过在单元测试目标的构建设置中打开和关闭“强制包信息生成”来修复它

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2019-03-19
    • 2021-07-25
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多