代码之家  ›  专栏  ›  技术社区  ›  Duncan Groenewald

如何使用FIT C++库构建IOS框架

  •  0
  • Duncan Groenewald  · 技术社区  · 6 年前

    我正在尝试为FIT C++创建一个快速包装器。 libFitSdkCppiOS.a 库,但不知道如何用C++、ObjaveC和SWIFT代码混合起来。

    以下是我目前所做的: 1。为fitframework创建了一个新目标 2。复制了 libfitsdkcppios.a文件 库和关联的cpp头文件到xcode中的targets文件夹中 三。因为你不能用 Bridging-Header 在框架中归档我想知道下一步该怎么做。

    我看过一些关于伞头的帖子,但是我不知道这是什么,也不知道需要什么才能让它起作用。请有人一步一步地解释一下我需要做什么来创建这个swift包装器,并将其打包成一个框架,供其他项目使用。

    1. 伞形头文件是主框架头文件吗,在本例中称为 FITFramework.h ?
    2. 如果不是,我如何创建一个伞头文件,它需要在哪里?
    3. 伞头文件中应该包含什么?

    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。如何在不使用桥接头文件的情况下将objective-c类公开给swift?

    有几篇文章提到了module.map文件的使用,但这似乎是为了向swift包装函数公开c头而不是objective-c头

    2 回复  |  直到 6 年前
        1
  •  3
  •   Duncan Groenewald    6 年前

    好吧,我想出来了——很难找到任何好的或准确的指南。我会在其他地方写得更详细,并在某个地方添加一个链接。

    同时-假设您的框架是调用 XXXFramework -你需要:

    创建一个 XXXFrameworkPrivate 中的子目录 XXX框架 带有 module.modulemap 文件在其中

    将私有头添加到 modulemap模块 像这样的文件

    module FitFrameworkPrivate {
        header "../XXX.h"
        header "../YYY.h"
        header "../ZZZ.h"
        export *
    }
    

    创建一个 XXX.xcconfig 文件行如下 SWIFT_INCLUDE_PATHS = $(SRCROOT)/XXXFramework/XXXFrameworkPrivate

    将项目配置设置为将此配置文件用于调试和发布

    将此行添加到您的swift类中

    进口 xxx框架专用

    基本上这允许swift类从 modulemap模块 文件,而不是使用无法在框架中使用的桥接头文件。

    注意,尽管我在C++类、Objy-C类和SWIFT类之间有回调,如果公共类使用协议与私有Obj-C类中的一个通信,这会产生问题。为了避免这种情况,添加另一个公共swift类,该类与swift包装器进行对话,并且只有一个公共类。

    如果有人有更好的方法,请告诉我。

        2
  •  1
  •   Brice    5 年前

    谢谢!这个答案对我非常有用,因为我有类似的问题(将C FIT SDK而不是C++FIT SDK集成到Mac OS和iOS应用程序的快速框架中)

    我只需添加以下步骤,以防对某人有所帮助:

    在使用pods的应用程序中使用框架时,我无法包含“private”框架(这是必需的,因为它包含转换为swift常量的c常量,如fit-mesg-xxx),而xcconfig是由pods框架设置的。编辑pods xcconfig是有效的,但显然是错误的。

    最后,我发现你可以用 #include 在你想使用的外部应用中使用它(这与构建框架所需的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"