【问题标题】:Import Objective-c framework into Swift framework project将 Objective-c 框架导入 Swift 框架项目
【发布时间】:2015-11-19 07:01:22
【问题描述】:

我正在构建一个框架,我需要在其中导入一些 Objective-C 框架,现在我需要导入“Beaconstac.framework”,但由于我们无法在 swift 框架项目中添加桥接头,所以我的问题是如何我在我的项目中使用了这个框架,这在我尝试过的项目中无法直接访问

导入 Beaconstac

但它给出的错误“没有这样的模块”

有没有其他方法可以做到这一点?

【问题讨论】:

标签: objective-c swift ibeacon beacon


【解决方案1】:

在 swift 框架项目中包含现有 Obj C 框架的步骤

假设我们正在 swift 中创建一个“SwiftProj.framework”项目,该项目内部必须使用一个 Objective C“ObjC.framework”

  1. 将 ObjC.framework 放在 Frameworks 文件夹中,通过 Linked Frameworks and Libraries 链接到 Swift 框架项目,并在同级创建一个 module.modulemap 文件。
  2. 在module.modulemap中
module ObjC{
    header "ObjC.framework/Headers/ClassA.h"
    export *
}
  1. 创建xcconfig文件(文件->新建->iOS->其他->配置设置文件)

  2. 在 xcconfig 文件中

SWIFT_INCLUDE_PATHS = $(SRCROOT)/
MODULEMAP_PRIVATE_FILE = $(SRCROOT)/module.modulemap

现在你可以在 SwiftProj.framework 中访问 ObjC.ClassA

【讨论】:

  • 你有这方面的示例项目吗?
  • @girish,我试过这个,但没有用。你是怎么让它工作的?你能给我一些提示,我需要注意的地方吗?另外,当您创建.xcconfig 文件时,您是否在任何地方设置了配置路径?感谢您的帮助。
  • @Atul,xcconfig 文件放在哪里?项目如何识别 xcconfig 文件呢?您能否提供更多详细信息
  • @Atul 遵循相同的步骤。但是找不到错误标题“ObjC.framework/Headers/ClassA.h”。
  • 如果我们使用 CocoaPods 会怎样? module.modulemap 文件应该放在哪里?
【解决方案2】:

创建一个名为module.modulemap 的文件并包含以下内容:

module ObjCFrameworkName {
    header "ObjCFrameworkName.framework/Headers/ObjCFrameworkNameUmbrellaHeader.h"
    export *
}

请注意,您需要拥有指向 Obj-C 框架的伞头的正确路径,这可能与上面示例中列出的内容略有不同。

如果您仍然卡住,我强烈建议您查看this project

【讨论】:

    【解决方案3】:

    您需要在伞形标题中导入 Beaconstac 框架。也就是说,如果您通常在 Obj-C 桥接头中使用 #import <Beaconstac/Beaconstac.h>,则需要将其放在伞头中。

    有关更多信息,请参阅 Apple 文档中的这一章:

    https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-ID130

    【讨论】:

    • 它给了我错误“在框架模块中包含非模块化标头”
    • @KrishnaVerma 你是怎么解决这个问题的?
    • @KrishnaVerma 我也有同样的问题。你找到解决办法了吗?
    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2018-07-02
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多