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

3

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

请提出任何遗漏的步骤或其他解决方案。


你能进一步说明一下“当尝试使用...时失败”的情况吗? - TT--
1个回答

0
请再次仔细检查以下步骤:
  • 在您的 Swift 框架项目中,在链接的框架和库下添加您的 Objective C 框架
  • 然后为该项目创建一个聚合目标,并在创建时将 Objective C 框架名称作为产品名称
  • 然后进入构建阶段并添加一个新的运行脚本阶段
  • 脚本内容应类似于以下内容。但请用您的 Objective C 框架名称替换AnujaObjectiveCFramework

if [ -d "${BUILT_PRODUCTS_DIR}/AnujaObjectiveCFramework" ]; then echo "${BUILT_PRODUCTS_DIR}/AnujaObjectiveCFramework 目录已存在,因此跳过其余脚本。" exit 0 fi

mkdir -p "${BUILT_PRODUCTS_DIR}/AnujaObjectiveCFramework" cat << EOF > "${BUILT_PRODUCTS_DIR}/AnujaObjectiveCFramework/module.modulemap" module AnujObjcModule { header "${PROJECT_DIR}/AnujaObjectiveCFramework.framework/Headers/AnujaObjectiveCFramework.h" export * } EOF

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

附加细节:

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

  • 确保您需要访问的 Swift 框架内的类和函数具有publicopen访问标识符,以满足您的需求。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接