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 类别在运行时无法识别