使用静态库的自定义框架 - 在框架模块 Xcode 9 中包含 non-modular header
Custom Framework using static lib - Include of non-modular header inside framework module Xcode 9
我已经看到很多关于这个问题的答案,但没有一个是基于我的情况,而且 "ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES" 也不起作用。
我正在开发一个框架,它是一个 C 库的实现。该库是 OpenHome,编译它并创建胖库后,我有一个包含所有 .a 和 headers.
的文件夹
因为它有一个 "Debug" 和 "Release" 的文件夹,我将这 2 个文件夹复制到我的项目的根目录中,我将 .a 文件导入到我的 "Link binary with libraries" 中,并且,在我的目标 "Build Settings" 中,我将 "Header Search Path" 设置为 headers 文件夹的位置。
为了导入我需要实现的所有 Headers 我使用一个名为 "MyHeaders.hpp & MyHeader.cpp" 的 c++ class,我制作了 .hpp pubic 并像在我的 MyFramework.h(伞文件):
#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 */
错误来自每个包含。我已经替换了机智导入,但它也不起作用。
值得一提的是,这个项目配置是我在开始实施和测试的项目(Single View Application)中使用的。唯一的区别是桥接 header.
的存在
有什么想法吗?
经过研究,我发现了问题和解决方案
当我 #include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"
这个 header 不是 public 或包含非 public headers.
在基于 Swift 的框架中导入此 header 的解决方案是创建一个模块。
我在我的目标文件夹中创建了一个文件夹 "MyModuleFolder",我在里面创建了一个 "module.modulemap" 文件,看起来像
module OHNet[system]{
header "MyHeaders.hpp"
export *
}
之后,在 "Build Settings" -> "Swift Compiler - Search Paths " -> "Import Paths" 中,我添加了 "MyModuleFolder" 的位置。
最后,
import OHNet
在每个 swift 文件中
希望对您有所帮助。
我已经看到很多关于这个问题的答案,但没有一个是基于我的情况,而且 "ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES" 也不起作用。
我正在开发一个框架,它是一个 C 库的实现。该库是 OpenHome,编译它并创建胖库后,我有一个包含所有 .a 和 headers.
的文件夹因为它有一个 "Debug" 和 "Release" 的文件夹,我将这 2 个文件夹复制到我的项目的根目录中,我将 .a 文件导入到我的 "Link binary with libraries" 中,并且,在我的目标 "Build Settings" 中,我将 "Header Search Path" 设置为 headers 文件夹的位置。
为了导入我需要实现的所有 Headers 我使用一个名为 "MyHeaders.hpp & MyHeader.cpp" 的 c++ class,我制作了 .hpp pubic 并像在我的 MyFramework.h(伞文件):
#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 */
错误来自每个包含。我已经替换了机智导入,但它也不起作用。
值得一提的是,这个项目配置是我在开始实施和测试的项目(Single View Application)中使用的。唯一的区别是桥接 header.
的存在有什么想法吗?
经过研究,我发现了问题和解决方案
当我 #include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"
这个 header 不是 public 或包含非 public headers.
在基于 Swift 的框架中导入此 header 的解决方案是创建一个模块。
我在我的目标文件夹中创建了一个文件夹 "MyModuleFolder",我在里面创建了一个 "module.modulemap" 文件,看起来像
module OHNet[system]{
header "MyHeaders.hpp"
export *
}
之后,在 "Build Settings" -> "Swift Compiler - Search Paths " -> "Import Paths" 中,我添加了 "MyModuleFolder" 的位置。
最后,
import OHNet
在每个 swift 文件中
希望对您有所帮助。