我正在尝试为FIT C ++ libFitSdkCppiOS.a
库创建一个Swift包装器,但实际上并不知道如何使用C ++,Objective-C和Swift代码进行设置。
这是我到目前为止所做的:
1.为FITFramework创建了一个新目标
2.将libFitSdkCppiOS.a
库和关联的cpp头文件复制到Xcode中的targets文件夹中
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包装函数
答案 0 :(得分:2)
好吧我明白了 - 而且很难找到任何好的或准确的指南。我将在其他地方更详细地编写它,并在某些时候添加一个链接。
与此同时 - 假设你的框架是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
文件导入标头,而不是使用不能在Framework中使用的Bridging-Header文件。
注意 - 我在C ++类,Objective-C类和Swift类之间有回调,如果您的公共类使用协议与其中一个私有Obj-C类进行通信,则会产生问题。为了避免这种情况,请添加另一个与Swift包装器对话的公共Swift类,并将其公开。
如果有人有更好的方法,请告诉我。
答案 1 :(得分:0)
非常感谢!这个答案对我来说非常有用,因为我遇到了类似的问题(将c fit sdk而不是c ++ fit sdk集成到适用于macOS和iOS应用程序的快速框架中)
我将添加我必须执行的以下步骤,以防它对某人有所帮助:
在使用Pods的应用中使用框架时,我无法包含“私有”框架(这是必需的,因为它包含将c常量转换为FIT_MESG_XXX之类的快速常量),并且xcconfig由Pods框架设置。编辑Pod xcconfig可以,但是很明显。
最终,我发现您可以使用#include
创建一个新的xconfig并在您要使用的外部应用程序中使用它(这样与构建框架所需的xcconfig分开)
#include "../Pods/Target Support Files/Pods-iOSorMac/Pods-iOSorMacOSApp.debug.xcconfig"
SWIFT_INCLUDE_PATHS="$(SRCROOT)/fit-sdk-swift/RZFitFile/sdk" "$(SRCROOT)/fit-sdk-swift/RZFitFile/src"