我已经看到了关于这个问题的大量答案,但不是基于我的情况而且“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 */
错误来自每个包含。我已经取代了机智导入,但它也无效。
值得一提的是,这个项目配置是我在项目中使用的那个(单视图应用程序)我开始实现和测试。唯一的区别是桥接头的存在。
有任何想法吗?
经过研究,我发现了问题和解决方案
当我是#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文件中
我希望它有所帮助。