首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FIT iOS库构建C++框架

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

Stack Overflow用户
提问于 2018-06-07 05:09:11
回答 2查看 1.4K关注 0票数 1

我试图为FIT C++ libFitSdkCppiOS.a库创建一个Swift包装器,但实际上不知道如何使用C++、Objective和Swift代码的混合设置。

以下是我到目前为止所做的工作: 1.为FITFramework 2创建了一个新的目标。将libFitSdkCppiOS.a库和相关的cpp头文件复制到Xcode 3中的目标文件夹中。因为在框架中不能使用Bridging-Header文件,所以我想知道下一步该做什么。

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

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

FITFramework.h

代码语言:javascript
复制
//
//  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.如何在不使用桥接头文件的情况下向Swift公开目标-C类?

有几篇文章提到了module.map文件的使用,但这似乎是为了向Swift包装器函数公开C头而不是目标C头。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-08 06:37:44

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

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

XXXFrameworkPrivate文件夹中创建一个带有module.modulemap文件的module.modulemap子目录

将私有头添加到module.modulemap文件中,如下所示

代码语言:javascript
复制
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文件导入头部,而不是使用不能在框架中使用的桥接头文件。

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

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

票数 4
EN

Stack Overflow用户

发布于 2019-02-23 19:00:11

非常感谢!这个答案对我非常有用,因为我有类似的问题(将This而不是c++ fit sdk集成到macOS和iOS应用程序的快速框架中)

我将添加我必须做的以下步骤,以防它对某人有帮助:

在使用Pods的应用程序中使用框架时,我无法包含“私有”框架(这是必要的,因为它包含转换为像FIT_MESG_XXX这样的快速常量的c常量),xcconfig是由Pods框架设置的。编辑Pods xcconfig起了作用,但显然是不好的。

最后,我发现您可以用#include创建一个新的xconfig,并在您想要像这样使用的外部应用程序中使用它(这与构建框架所需的xcconfig是分开的)

代码语言:javascript
复制
#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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50733326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档