从框架总头文件中排除内部头文件

7

在尝试在框架中使用Swift(包括开启模块支持)时,我开始收到以下类似的消息:

[snip]/<module-includes>:1:1: Umbrella header for module 'PressKit' does not include header 'NPKBaseAppearance.h'

问题中的头文件(大约有十个)没有在PressKit.h中列出,但这是有充分理由的——它们包括我不想向大多数我的框架用户公开的内部或很少使用的类和类别。(其中一些我想在选择的地方公开;其他的则永远不应该被公开。)
将头文件标记为私有似乎并没有帮助解决问题。这是我的框架项目中的一个警告,但却是每个使用该框架的目标中的一个错误,所以我不能忽略这个问题。
显然,我可以将这些头文件添加到我的总头文件中,但我不想这样做。当使用模块时,我是否违反了某些框架设计规则?处理这种情况的推荐方法是什么?
2个回答

2

如何处理这种情况是推荐的方式?

不确定是否是推荐的方式,但以下是我消除该警告的方法:

  1. I've created a private module map that lists all internal headers and placed it in the root folder of my framework project, as module.private.modulemap:

    framework module PressKit_Private {
        header "NPKBaseAppearance.h"
        export *
    }
    
  2. I have configured Xcode to use that module map

Screenshot

我已经配置了Xcode,将这些内部头文件视为私有头文件。这将导致Xcode在创建框架时将它们放置在PressKit.framework/PrivateHeaders中。

Screenshot

现在,在Swift或Objective-C中导入PressKit模块时,来自私有模块映射头文件的函数不可用。需要导入PressKit_Private才能使它们可用。

1

不知道您是否已经自行解决了这个问题,但是您尝试过在自定义的.modulemap文件中排除您不想导出的头文件吗?

请参阅: Clang 3.7文档 - 模块


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接