在 swift 中创建依赖于另一个 objective-c pod 的 pod

Creating pod in swift which have dependency on another objective-c pod

正如我在图片中解释的那样,我想在 swift 中创建 Pod 库,它有另一个在 Objective-c 中编写的 Pod 库依赖项。
现在我知道要在 swift 中使用 objective-c 代码,我们需要桥接文件,我也创建了它。 但是当我将它设置到 Pod 的构建阶段时,我得到了这个错误<unknown>:0: error: using bridging headers with framework targets is unsupported

我在互联网上得到提示,我应该将 .h 文件放入 pod-umbrella.h 文件,但这也给了我错误 Include of non-modular header inside framework module 'DemoPod'

  1. 如果您过去遇到过类似问题并已解决,请帮助我。
  2. 也欢迎一些hint/suggestions

如果你想玩的话,这是我为你准备的 demopod 项目。
Demo Pod Project

编辑 根据 Ashsis 的建议,我将以下代码添加到 DemoPod.modulemap

framework module AdaptiveCard {
  umbrella header "/Users/jageen.shukla/Documents/Project/ai answer/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
  requires ios
  export *
}

但我仍然无法构建项目,因为它在目标项目中给我错误,找不到模块“AdaptiveCard”。

我在 DemoPod.modulemap

中更改代码
framework module DemoPod {
  umbrella header "DemoPod-umbrella.h"
  
  // Solution 2
  framework module AdaptiveCard {
      umbrella header "/Users/jageen.shukla/Downloads/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
      export *
      module * { export * }
  }
  // ----
  
  export *
  module * { export * }
}

现在我可以编译我的项目了。但我不确定我在做什么是好事还是坏事?另外我也不知道为什么要提到自适应卡头文件的“绝对路径”。
最新代码:[Demo_2][4] https://drive.google.com/file/d/1Xve0DUAy4bQ7sx4d3H8WLbJJwTqlJnCt/view?usp=sharing

如错误所述,桥接 header 不允许在框架中使用,只能在应用程序中使用。

详细文档在here

Swift 代码将能够访问 public 框架 header 中包含的 objc 中的所有内容,其中写着

// In this header, you should import all the public headers of your framework using statements like #import <YourFramework/PublicHeader.h>  

您需要从构建设置中添加它的地方删除桥接 header,以便编译您的框架。

你现在应该做什么?

这样做:

  1. 删除桥接 header 文件。
  2. 在框架的构建设置中删除对桥接 header 文件的引用
  3. 将必要的 header 添加到您的伞文件 ([Name].h)
  4. 在其 "Build Phases".

  5. 框架的 "Headers" 部分中制作包含文件 public
  6. 清理并重建。

注意:"umbrella header file" 是一个文件(名为 [ProductName].h),通常代表所有 public header一个框架。它通常只是框架中包含的其他 header 的#import 语句列表。在Xcode中,如果你打开UIKit.h,你会看到一个伞文件的好例子。

仅建议在 App Target 和 App Test 目标上桥接 header 以访问 objective c 和 swift 中的 CPP 文件。当涉及静态库或框架时,您应该使用 modulemap 将 Objc 和 CPP 功能公开给 swift 库。请在此处查看代码实现如何使用 modulemap:https://github.com/ashislaha/Swift-ObjectiveC-Interoperability