【问题标题】:Clarification on adding Objective C code to a swift dynamic framework关于将 Objective C 代码添加到 swift 动态框架的说明
【发布时间】:2015-12-22 18:21:28
【问题描述】:

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

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

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

我的 Objective-C 框架包括:

  • GeoidCalculator.h
  • GeoidCalculator.m
  • EGM96(数据文件)
  • CORCOEF(数据文件)

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

尝试 #1 - 将我的代码添加到“伞形标题?” 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 已打开,我从我的 Module Map File 项中指向 modulemap 文件

我错过了什么吗??

【问题讨论】:

    标签: objective-c xcode swift frameworks


    【解决方案1】:

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

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

    3. 添加 GeoidCalculator.h 作为公共头文件:

      • 将 GeoidCalculator.h 标头的目标成员资格从“项目”更改为“公共”
      • 将标题导入到名为 EGM96.h 的伞形文件中
      • 确保伞头文件 EGM96.h 对于 EGM96 目标是公开的。
    4. 为 GDL90 的目标依赖添加新框架,并将新库添加到 GDL90 的链接二进制文件。
    5. 现在您可以在 EGM96 的任何 swift 文件中导入 EGM96:

    import EGM96

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2018-12-10
      • 2018-07-02
      • 2016-06-02
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2019-06-21
      相关资源
      最近更新 更多