我已经看到了很多关于这个问题的答案,但没有一个是基于我的情况的,并且“ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES”也不起作用。
我正在开发一个框架,它是 C 库的实现。图书馆是OpenHome编译并创建 fat libs 后,我有一个包含所有 .a 和 header 的文件夹。
由于它有一个“调试”和“发布”文件夹,我将这两个文件夹复制到项目的根目录中,将 .a 文件导入到“链接二进制文件与库”中,然后在“build设置”中”,我将“标题搜索路径”设置为标题文件夹的位置。
为了导入我需要实现的所有 header ,我使用一个名为“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 */
错误来自每个包含。我已经替换了 wit import 但它也不起作用。
值得一提的是,这个项目配置是我在开始实现和测试的项目(单 View 应用程序)中使用的配置。唯一的区别是桥接头的存在。
有什么想法吗?
最佳答案
经过研究,我找到了问题和解决方案
当我#include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"
时,此 header 不是公开的或包含非公开 header 。
在基于 Swift 的框架中导入此 header 的解决方案是创建一个模块。
我在目标文件夹中创建了一个文件夹“MyModuleFolder”,并在其中创建了一个“module.modulemap”文件,如下所示
module OHNet[system]{
header "MyHeaders.hpp"
export *
}
之后,在“Build Settings”->“Swift Compiler - Search Paths”->“Import Paths”中,我添加了“MyModuleFolder”的位置。
最后,
import OHNet
在每个 swift 文件中
希望对您有所帮助。
关于c++ - 使用静态库的自定义框架 - 在框架模块 Xcode 9 中包含非模块化 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52097437/