在 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'
- 如果您过去遇到过类似问题并已解决,请帮助我。
- 也欢迎一些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,以便编译您的框架。
你现在应该做什么?
这样做:
- 删除桥接 header 文件。
- 在框架的构建设置中删除对桥接 header 文件的引用
- 将必要的 header 添加到您的伞文件 ([Name].h)
在其 "Build Phases".
框架的 "Headers" 部分中制作包含文件 public
清理并重建。
注意:"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
正如我在图片中解释的那样,我想在 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'
- 如果您过去遇到过类似问题并已解决,请帮助我。
- 也欢迎一些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,以便编译您的框架。
你现在应该做什么?
这样做:
- 删除桥接 header 文件。
- 在框架的构建设置中删除对桥接 header 文件的引用
- 将必要的 header 添加到您的伞文件 ([Name].h)
在其 "Build Phases".
框架的 "Headers" 部分中制作包含文件 public
清理并重建。
注意:"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