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

3
我有一个动态swift框架,目前连接了另一个用Objective C编写的框架。虽然这个方法可行,但很麻烦,因为Objective C框架实际上只有2个文件。我想知道是否有一种方法将它带入我的swift框架中。
如果这是一个应用程序,我会使用Bridging-Header,但这在swift框架中不支持。
我的框架称为GDL90,仅包含swift文件。
我的Objective-C框架由以下组成:
- GeoidCalculator.h - GeoidCalculator.m - EGM96(数据文件) - CORCOEF(数据文件)
非常简单 - 对吧?所以我想知道是否有一种方法将此代码添加到我的swift项目中。
尝试#1 - 将我的代码添加到“总头文件”中,即GDL90.h
我添加了我的文件,得到警告“在GDL90框架模块内包含非模块化标头”。
那么这就不行。
尝试2
我觉得我需要制作一个模块映射文件。
所以我创建了一个名为${SRCROOT}/GDL90/EGM96的目录,并在其中创建了EGM96.module.modulemap。
module EGM96 {
    header "GeoidCalculator.h"
    export *
}

在我的一个Swift文件中,我有import EGM96,但似乎找不到。

在我的构建设置中:

Define Modules已打开,我将指向modulemap文件从我的模块映射文件项。

我是否漏掉了什么?

1个回答

2
如果正确创建内部框架,则不需要模块映射文件:
1. 在EGM96项目下创建新的框架目标"EGM96":
- 进入GDL90项目 -> 添加新目标 -> Cocoa Touch Framework - 输入名称并选择Objective-C作为语言
2. 将EGM96的Objective-C文件和其他源代码添加到新目标中。
3. 将GeoidCalculator.h添加为公共头文件:
- 更改GeoidCalculator.h头文件的目标成员身份,从“Project”更改为“Public” - 将头文件引入到名为EGM96.h的整体文件中 - 确保整体头文件EGM96.h对于EGM96目标是公开的
4. 将新框架添加到GDL90的目标依赖关系,并将新库添加到GDL90的链接二进制文件中。
5. 现在可以在任何EGM96的swift文件中导入EGM96:
``` import EGM96 ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接