关于将 Objective C 代码添加到 swift 动态框架的说明

Clarification on adding Objective C code to a swift dynamic framework

我在 swift 中有一个动态框架,目前正在链接另一个用 Objective C 编写的框架。这行得通,但很烦人,因为 Objective C 框架实际上只有 2 个文件,我想知道是否有办法将其引入我的 swift 框架。

如果这是一个应用程序,我会使用 Bridging-Header,但 swift 框架不支持它。

我的框架名为 GDL90,仅包含 swift 个文件。

我的 Objective-C 框架包括:

真的很简单 - 对吧?所以我想看看是否有办法将这段代码添加到我的 swift 项目中。

尝试 #1 - 将我的代码添加到“umbrella header?” GDL90.h

我添加了我的文件并收到警告 Include of non-modular header inside framework module 'GDL90'

好的,那不是骰子。

尝试 2

我想我需要制作一个模块映射文件。

所以我创建了一个名为 ${SRCROOT}/GDL90/EGM96 的目录,并在其中创建了 EGM96.module.modulemap

module EGM96 {
    header "GeoidCalculator.h"
    export *
}

然后在我的一个 swift 文件中我有 import EGM96 似乎没有找到。

在我的构建设置中我有:

Define Modules 已打开,我正指向我的 模块映射文件 项目

中的 modulemap 文件

我是不是漏掉了什么??

如果正确创建内部框架,则不需要模块映射文件:

  1. 在EGM96项目下创建新的框架目标“EGM96”:
    • 转到 GDL90 项目 -> 添加新目标 -> Cocoa Touch Framework
    • 输入名称和select Objective-C 作为语言
  2. 将 objective-с 文件和 EGM96 的其他来源添加到新目标。

  3. 将GeoidCalculator.h添加为public header:

    • 将 GeoidCalculator.h header 的目标成员从“项目”更改为“Public”
    • 将 headers 导入名为 EGM96.h 的伞文件
    • 确保 EGM96 目标的伞 header EGM96.h 是 public。
  4. 将新框架添加到目标 GDL90 依赖项并将新库添加到 GDL90 的链接二进制文件。
  5. 现在您可以在 EGM96 的任何 swift 文件中导入 EGM96:

import EGM96