如何使用module.modulemap在Swift框架中导入objC框架?

时间:2019-05-15 05:09:15

标签: ios objective-c swift frameworks

我正在创建一个Swift框架 我必须在Swift框架内使用Objective-C框架。

我们不能使用桥接头,因为目标是Swift框架,而不是Swift应用程序。 相反,我使用module.modulemap文件:

module ObjSDK
{
    header "ObjSDK.framework/Headers/classA.h"
    export *
}

配置文件集中的最新信息:

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

然后构建成功。

在那之后,当尝试在swift框架下的swift类中使用classA时,失败了。

如果有任何遗漏的步骤或任何其他解决方案,请提出建议。

1 个答案:

答案 0 :(得分:0)

请再次仔细检查以下步骤

  • 链接框架和库下添加您的Objective C框架 在您的Swift框架项目中
  • 然后为该项目创建一个 Aggregate 目标,并创建该目标时,将Objective C框架名称指定为产品名称
  • 然后进入构建阶段并添加一个新运行脚本阶段
  • 该脚本的内容应类似于以下内容。但是用您的Objective C框架名称替换 AnujaObjectiveCFramework
  

如果[-d“ $ {BUILT_PRODUCTS_DIR} / AnujaObjectiveCFramework”];然后回声   “ $ {BUILT_PRODUCTS_DIR} / AnujaObjectiveCFramework目录已经   存在,因此跳过脚本的其余部分。” exit 0 fi

     

mkdir -p“ $ {BUILT_PRODUCTS_DIR} / AnujaObjectiveCFramework”猫   << EOF>   “ $ {BUILT_PRODUCTS_DIR} /AnujaObjectiveCFramework/module.modulemap”   模块AnujObjcModule {标头   “ $ {PROJECT_DIR} /AnujaObjectiveCFramework.framework/Headers/AnujaObjectiveCFramework.h”   导出*} EOF

  • 然后通过从方案列表中选择它来构建Aggregate框架
  • 现在,您必须将该内置框架作为Swift框架的目标依赖项
  • 现在是您构建Swift框架的时候了。

其他详细信息:

  • 一旦您在原始项目中引用了Swift框架并以 dyld结尾:库未加载:@rpath / 错误,则必须进行修改您的Swift框架安装目录属性,其值为 @EXECUTABLE_PATH /../ Frameworks ,然后将您的框架添加到Swift项目的Frameworks组中。

  • 请确保您需要在Swift框架内访问的类和函数具有 public open 访问标识符,具体取决于您的需求。

  • 确保在Objective C框架的桥接头中添加必要的头文件。