Swift 应用程序:导入静态库的框架时“缺少必需的模块”

Posted

技术标签:

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

这是我的设置:

    名为 Stat 的 Objective C 代码静态库。 一个 Swift 框架,它在自己的类中使用来自 Stat 的代码(此框架称为 Dyn)。静态库和这个框架在同一个 Xcode 项目中。 将上述项目作为子项目并链接到 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 的模块映射以及模块映射文件中应该包含什么? 【参考方案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”

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

【讨论】:

以上是关于Swift 应用程序:导入静态库的框架时“缺少必需的模块”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 和 Cocoapods - 缺少必需的模块

Swift/MySQL/PHP“缺少必需参数”错误

XCode 构建错误 - 缺少必需的模块“算法”

如何将 Objective C 静态库导入 Swift 框架?

AWS Lambda Python 3.7:无法导入模块'lambda_function':缺少必需的依赖项['numpy']

使用 Swift 3 时出现错误“缺少必需的参数:grant_type”