【问题标题】:Swift and Objective-c framework exposes its internalsSwift 和 Objective-c 框架暴露了它的内部结构
【发布时间】: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,如下所述:stackoverflow.com/questions/34265339/…

标签: ios objective-c swift frameworks clang


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多