从框架伞标题中排除内部标题

时间:2015-03-17 04:38:16

标签: objective-c macos swift clang

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

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

有问题的标题(其中大约有十个)没有在PressKit.h中列出,但有充分的理由 - 它们包括我不想暴露给大多数的内部或很少使用的类和类别我框架的用户。 (其中一些我想在选定的地方曝光;其他人不应该曝光。)

将标题标记为私有似乎没有帮助。这是我框架项目中的一个警告,但是使用框架的每个目标都有错误,所以我不能忽略这个问题。

显然我可以将这些标题添加到我的伞形标题中,但我不想这样做。在使用模块时,我是否违反了一些框架设计规则?处理这种情况的推荐方法是什么?

2 个答案:

答案 0 :(得分:1)

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

看看: Clang 3.7 documentation - Modules

答案 1 :(得分:0)

处理这种情况的推荐方法是什么?

不确定这是否是推荐的方法,但是这是我摆脱该警告的方法:

  1. 我创建了一个私有模块映射,其中列出了所有内部标头,并将其作为module.private.modulemap放在我的框架项目的根文件夹中:

    framework module PressKit_Private {
        header "NPKBaseAppearance.h"
        export *
    }
    
  2. 我已将Xcode配置为使用该模块映射

Screenshot

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

Screenshot

现在,在Swift或Objective-C中导入PressKit模块时,私有模块映射中的标头中的功能不可用。需要导入PressKit_Private使其可用。