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

jbr*_*nan 17 macos cocoa frameworks swift

这是我的设置:

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

在我的应用程序中,我有以下代码:

import Cocoa
import Dyn
...
SomeDynClass().doSomething()
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译时,我得到一个错误import Dyn.错误是

error: missing required module ‘Stat'
Run Code Online (Sandbox Code Playgroud)

看来我的应用程序可以很好地找到我的框架,但它也需要为我的静态库找到一个模块呢?

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

module Stat {
    header "Stat.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

我想我需要指出我的Mac应用程序的框架搜索路径,Stat但我不知道为什么,我不知道如何.我该如何解决这个问题?

l'L*_*L'l 15

选择你Target,然后进入Build Settings并设置Import Paths了内Swift Compiler- Search Paths部分:

${SRCROOT}/Stat
Run Code Online (Sandbox Code Playgroud)

通常情况下,模块的名称与库的名称相同,但是,我不确定您是如何设置目录的module.map(Dyn也许可以命名,在这种情况下,导入路径会反映该名称).

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

在此输入图像描述

按下enter或tab后,$ {SRCROOT} /(带有module.map的目录)应自行解决.

  • 我也是。我有具有 Firebase 依赖项的“@_exported import MyLib”。为导入路径指定“${SRCROOT}/Pods/Firebase/CoreOnly/Sources”修复了“错误:缺少必需的模块“Firebase”” (4认同)
  • 这为我解决了一个类似的问题,我有一个Swift应用程序目标(App)导入了一个动态框架(Core),该框架链接了由伞形模块映射(Firebase)联合的许多静态框架。导入Core时,在App目标中产生了“缺少所需模块:Firebase”错误。当我更新Core构建设置以将模块映射的目录添加到Swift编译器路径-导入路径时,错误消失了。 (2认同)