【问题标题】:How to use module.modulemap for importing objC framework inside swift framework?如何使用 module.modulemap 在 swift 框架中导入 objC 框架?
【发布时间】:2019-10-02 04:05:43
【问题描述】:

我正在创建一个 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,失败了。

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

【问题讨论】:

  • 您能否进一步说明“尝试使用时...失败了”

标签: ios objective-c swift frameworks


【解决方案1】:

请再次仔细检查以下步骤

  • Linked Frameworks 和库下添加您的 Objective C 框架 在你的 Swift 框架项目中
  • 然后为项目创建一个 Aggregate 目标,并在创建该目标时,将 Objective C 框架名称作为 Product Name
  • 然后转到构建阶段并添加一个新的运行脚本阶段
  • 脚本的内容应该类似于下面。但是将 AnujaObjectiveCFramework 替换为您的 Objective C 框架名称

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

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

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

其他细节:

  • 一旦您在原始项目中引用该 Swift 框架并以 dyld: Library not loaded: @rpath/ 错误结束,那么您必须修改将您的 Swift 框架 安装目录 属性设置为 @EXECUTABLE_PATH/../Frameworks,然后将您的框架添加到 Swift 项目的框架组中。

    李>
  • 确保您需要在 Swift 框架内访问的类和函数根据您的需要具有 publicopen 访问标识符。

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

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2015-04-29
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多