Ios Swift和Objective-c框架公开了其内部结构

Ios Swift和Objective-c框架公开了其内部结构,ios,objective-c,swift,frameworks,clang,Ios,Objective C,Swift,Frameworks,Clang,我试图将Swift集成到现有的objective-c框架中,该框架包含公共、私有和项目文件。为了让swift访问项目文件,我添加了一个modulemap,它定义了一个新模块(例如MyFramework_Internal),包括所有项目标题,如下所述: 该设置在某种程度上是可行的,但我惊讶地看到,现在客户端可以通过导入MyFramework\u internal(@import MyFramework\u internal)来访问内部类。有没有办法隐藏模块,因为它只是框架本身需要的? 模块映射现在

我试图将Swift集成到现有的objective-c框架中,该框架包含公共、私有和项目文件。为了让swift访问项目文件,我添加了一个modulemap,它定义了一个新模块(例如MyFramework_Internal),包括所有项目标题,如下所述:

该设置在某种程度上是可行的,但我惊讶地看到,现在客户端可以通过导入MyFramework\u internal(@import MyFramework\u internal)来访问内部类。有没有办法隐藏模块,因为它只是框架本身需要的? 模块映射现在如下所示:

module MyFramework_Internal {  
   header "Folder1/Baz.h"  
   header "Folder1/Folder2/Bar.h"  
   export *
} 

模块文件用于Objective-C,Objective-C没有
内部的概念。它只知道public(在头文件中声明的内容)和private(仅在实现文件中声明的内容)


因此,模块文件中的任何内容都将公开可用。

对于公共框架程序集,您可以通过将不同的模块映射复制到您的模块中来创建不同的目标后处理程序组装框架,这不会公开私有模块。此外,您可以尝试添加专用模块映射
module.private.modulemap
,如下所述: