将Objective-c框架导入Swift框架项目

时间:2015-11-19 07:01:23

标签: objective-c swift ibeacon beacon

我正在构建一个框架,我需要导入一些objective-c框架,现在我需要导入“Beaconstac.framework”但是因为我们无法在swift框架项目中添加桥接头所以我的问题是如何才能我在我的项目中使用这个框架,这在我试过的项目中无法直接访问

  

导入Beaconstac

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

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

3 个答案:

答案 0 :(得分:14)

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

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

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

    2. 在xcconfig文件中

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

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

答案 1 :(得分:4)

您需要在伞形标题中导入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

答案 2 :(得分:2)

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

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

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

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