如何使用FIT C ++库

时间:2018-06-07 05:09:12

标签: ios frameworks

我正在尝试为FIT C ++ libFitSdkCppiOS.a库创建一个Swift包装器,但实际上并不知道如何使用C ++,Objective-C和Swift代码进行设置。

这是我到目前为止所做的: 1.为FITFramework创建了一个新目标 2.将libFitSdkCppiOS.a库和关联的cpp头文件复制到Xcode中的targets文件夹中 3.因为您无法在框架中使用Bridging-Header文件,所以我想弄清楚下一步该怎么做。

我已经看过一些关于称为伞形标题的帖子,但不知道它是什么或需要什么才能让它发挥作用。有人可以一步一步地解释我需要做什么来创建这个Swift Wrapper并将其打包成一个可以被其他项目使用的框架。

  1. 伞头是主框架头文件,在本例中是一个名为FITFramework.h
  2. 的头文件
  3. 如果不是如何创建一个伞形头文件,它需要在哪里?
  4. 伞头文件中应包含哪些内容?
  5. 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包装函数

2 个答案:

答案 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"