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 应用程序:导入静态库的框架时“缺少必需的模块”的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Objective C 静态库导入 Swift 框架?
AWS Lambda Python 3.7:无法导入模块'lambda_function':缺少必需的依赖项['numpy']