使用静态库的自定义框架 - 在框架模块 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 文件中

希望对您有所帮助。