ios - 如何使用 FIT C++ 库构建 iOS 框架
问题描述
我正在尝试为 FIT C++libFitSdkCppiOS.a
库创建一个 Swift 包装器,但我真的不知道如何混合使用 C++、Objective-C 和 Swift 代码来进行设置。
这是我到目前为止所做的: 1. 为 FITFramework 创建了一个新目标 2. 将libFitSdkCppiOS.a
库和相关的 cpp 头文件复制到 Xcode 中的目标文件夹中 3. 因为你不能Bridging-Header
在我正在尝试的框架中使用文件弄清楚下一步该怎么做。
我看过一些关于称为伞头的帖子,但不知道那是什么或需要在其中做什么才能使其正常工作。有人可以逐步解释我需要做什么来创建这个 Swift Wrapper 并将其打包为一个可供其他项目使用的框架。
- 伞头文件是主要框架头文件,在这种情况下称为
FITFramework.h
? - 如果不是,我如何创建一个伞头文件,它需要在哪里?
- 伞头文件中应该包含什么?
FITFramework.h
//
// FITFramework.h
// FITFramework
//
// Created by xxxx xxxxxxx on 7/6/18.
//
#import <UIKit/UIKit.h>
//! Project version number for FITFramework.
FOUNDATION_EXPORT double FITFrameworkVersionNumber;
//! Project version string for FITFramework.
FOUNDATION_EXPORT const unsigned char FITFrameworkVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <FITFramework/PublicHeader.h>
编辑: 1. 如何在不使用 Bridging-Header 文件的情况下将 Objective-C 类公开给 Swift?
有几篇文章提到了 module.map 文件的使用,但这似乎是将 C 标头而不是 Objective-C 标头暴露给 Swift 包装函数
解决方案
好的,我想通了——很难找到任何好的或准确的指南。我将在别处更详细地写下来,并在某个时候添加一个链接。
与此同时 - 假设你的框架是调用XXXFramework
- 你需要:
在文件夹中创建一个XXXFrameworkPrivate
子目录,其中XXXFramework
包含一个module.modulemap
文件
像这样将私有标头添加到module.modulemap
文件中
module FitFrameworkPrivate {
header "../XXX.h"
header "../YYY.h"
header "../ZZZ.h"
export *
}
XXX.xcconfig
使用以下行
创建一个文件SWIFT_INCLUDE_PATHS = $(SRCROOT)/XXXFramework/XXXFrameworkPrivate
设置项目配置以使用此配置文件进行调试和发布
将此行添加到您的 Swift 类
进口XXXFrameworkPrivate
基本上,这允许 Swift 类从文件中导入头module.modulemap
文件,而不是使用不能在框架中使用的 Bridging-Header 文件。
但请注意 - 我在 C++ 类、Objective-C 类和 Swift 类之间有回调,如果您的公共类使用协议与私有 Obj-C 类之一进行通信,这会产生问题。为了避免这种情况,添加另一个与 Swift 包装器对话的公共 Swift 类,并且只有一个公共类。
如果有人有更好的方法,请告诉我。
推荐阅读
- javascript - 将带有点符号的字符串转换为对象
- c - 如何在C中的二维数组中找到具有相同值的邻居?
- lit-element - LitElement 使用带有绑定的模板
- computer-vision - 为什么 8thWall 会限制图像跟踪的图像纵横比分辨率
- python - 使用 QWebView 绘图
- python - 如何在 VS Code 中为自定义模块设置导入?
- .net - 当用户将“修复应用程序缩放”设置为关闭时,Windows 10 会做什么?我可以检测到该设置并警告用户将其重新打开吗?
- javascript - 在 Ember 2.16 中创建使用 window.confirm() 的集成测试?
- functional-programming - 函数式编程中的全局状态 (F#)
- jestjs - 用 jest 测试一个简单的函数