使用静态库的自定义框架 - 在框架模块Xcode 9中包含非模块化头文件

问题描述 投票:0回答:1

我已经看到了关于这个问题的大量答案,但不是基于我的情况而且“ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES”也不起作用。

我正在开发一个框架,它是C库的一个实现。该库是OpenHome,在编译它并创建胖库后,我有一个包含所有.a和标题的文件夹。

因为它有一个“Debug”和“Release”的文件夹,我在项目的根目录中复制了这两个文件夹,我将.a文件导入到我的“带库的二进制文件”中,并在我的“构建设置”中目标,我设置“标题搜索路径”与标题文件夹的位置。

为了导入我需要实现的所有Headers,我使用了一个名为“MyHeaders.hpp&MyHeader.cpp”的c ++类,我创建了.hpp公共文件,我将其导入到我的MyFramework.h(Umbrella文件)中:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#import "MyHeaders.hpp"
#pragma clang diagnostic pop

MyHeaders.hpp:

#ifndef MyHeaders_hpp
#define MyHeaders_hpp

#include <stdio.h>


/*** CP -PROXIES- ***/
/** Header That Includes all the CP Related Headers **/
#include "OpenHome/Net/C/CpStack.h"

/** CP Services **/
/*UPnP*/
#include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"
#include "OpenHome/Net/C/CpUpnpOrgRenderingControl1.h"
#include "OpenHome/Net/C/CpUpnpOrgAVTransport1.h"

#endif /* MyHeaders_hpp */

错误来自每个包含。我已经取代了机智导入,但它也无效。

值得一提的是,这个项目配置是我在项目中使用的那个(单视图应用程序)我开始实现和测试。唯一的区别是桥接头的存在。

有任何想法吗?

c++ c xcode ios-frameworks
1个回答
0
投票

经过研究,我发现了问题和解决方案

当我是#include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"时,此标头要么不公开,要么包含非公共标头。

在基于Swift的框架中导入此标头的解决方案是创建一个模块。

我在目标文件夹中创建了一个文件夹“MyModuleFolder”,我在里面创建了一个“module.modulemap”文件,看起来像

module OHNet[system]{

    header "MyHeaders.hpp"

    export *

}

之后,在“Build Settings” - >“Swift Compiler - Search Paths” - >“Import Paths”中,我添加了“MyModuleFolder”的位置。

最后,

import OHNet

在每个swift文件中

我希望它有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.