我试图为FIT C++ libFitSdkCppiOS.a库创建一个Swift包装器,但实际上不知道如何使用C++、Objective和Swift代码的混合设置。
以下是我到目前为止所做的工作: 1.为FITFramework 2创建了一个新的目标。将libFitSdkCppiOS.a库和相关的cpp头文件复制到Xcode 3中的目标文件夹中。因为在框架中不能使用Bridging-Header文件,所以我想知道下一步该做什么。
我见过一些关于雨伞标题的帖子,但是我不知道这是什么,也不知道需要什么才能让它发挥作用。请有人一步一步地解释我需要做些什么来创建这个Swift包装器,并将其打包成一个框架,供其他项目使用。
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.如何在不使用桥接头文件的情况下向Swift公开目标-C类?
有几篇文章提到了module.map文件的使用,但这似乎是为了向Swift包装器函数公开C头而不是目标C头。
发布于 2018-06-08 06:37:44
好的,我想出来了--很难找到任何好的或准确的指南。我将更详细地写在其他地方,并在某个时候添加一个链接。
同时-假设您的框架是调用XXXFramework -您需要:
在XXXFrameworkPrivate文件夹中创建一个带有module.modulemap文件的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文件导入头部,而不是使用不能在框架中使用的桥接头文件。
不过,注意--我在C++类、Objective类和Swift类之间进行了回调,如果您的公共类使用协议与一个私有Obj类进行通信,就会产生问题。为了避免这种情况,添加另一个公共Swift类,它与Swift包装器对话,并且只有一个公共类。
如果有人有更好的方法,请告诉我。
发布于 2019-02-23 19:00:11
非常感谢!这个答案对我非常有用,因为我有类似的问题(将This而不是c++ fit sdk集成到macOS和iOS应用程序的快速框架中)
我将添加我必须做的以下步骤,以防它对某人有帮助:
在使用Pods的应用程序中使用框架时,我无法包含“私有”框架(这是必要的,因为它包含转换为像FIT_MESG_XXX这样的快速常量的c常量),xcconfig是由Pods框架设置的。编辑Pods 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"https://stackoverflow.com/questions/50733326
复制相似问题