Swift 和 Objective-c 框架暴露了它的内部结构

Posted

技术标签:

【中文标题】Swift 和 Objective-c 框架暴露了它的内部结构【英文标题】:Swift and Objective-c framework exposes its internals 【发布时间】:2019-04-09 23:01:25 【问题描述】:

我正在尝试将 Swift 集成到现有的具有公共、私有和项目文件的 Objective-C 框架中。为了快速访问项目文件,我添加了一个模块映射,该模块映射定义了一个新模块(例如 MyFramework_Internal),包括所有项目标头,如下所述:http://nsomar.com/project-and-private-headers-in-a-swift-and-objective-c-framework/

该设置有点工作,但令我惊讶的是,现在客户端可以通过导入 MyFramework_Internal (@import MyFramework_Internal) 访问内部类。有没有办法隐藏模块,因为它只需要框架本身? 模块图现在看起来像这样:

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

【问题讨论】:

对于公共框架组装,您可以通过将不同的模块映射复制到您的模块中来创建不同的目标、后处理组装的框架,这不会暴露私有模块。 另外,您可以尝试添加私有模块映射module.private.modulemap,如下所述:***.com/questions/34265339/… 【参考方案1】:

模块文件是为Objective-C设计的,Objective-C没有internal的概念。它只知道公共(在头文件中声明的内容)和私有(仅在实现文件中声明的内容)。

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

【讨论】:

以上是关于Swift 和 Objective-c 框架暴露了它的内部结构的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 Swift 框架中的 Objective-C 文件上使用 Swift

无法在框架项目的 Objective-C 代码中导入 Swift 类

将 Objective-C 框架(CocoaPod)导入 Swift?

Objective-C 框架中的 Swift 类别在运行时无法识别

如何在同一框架内访问 Objective-C 中的内部 Swift 类?

在 swift 数据模型中使用来自 Objective-C++ 框架的数据类型