案子
一个模块(带有模块映射文件的静态库)在 iOS 应用程序代码库中具有混合代码(Objective-C + Swift)。Swift 代码只需要从模块中使用,所以所有需要的接口都是内部的
这里的文档说
因为生成的标头是框架公共接口的一部分,所以只有标有 public 或 open 修饰符的声明才会出现在框架目标的生成标头中。使用 internal 修饰符标记并在从 Objective-C 类继承的类中声明的方法和属性可供 Objective-C 运行时访问。但是,它们在编译时不可访问,并且不会出现在为框架目标生成的标头中。
在 XCode 上,我能够成功编译项目,但在使用BUCK构建的 CI 机器上失败,因为它无法找到模块内的 Objective C 代码内部定义的 Swift 方法。有效的解决方法是将这些方法公开。
我的疑惑:
- 这是 XCode 中的一个错误,因为文档暗示我们想要从 Objective C 使用的 Swift 方法必须是公共的?
- 我们是否需要将模块中所需的所有接口标记为public,即使我们在模块中使用它?
生成的标头是框架公共接口的一部分
- 即使生成的头文件没有在模块映射(或伞头文件)中声明,它是否仍然是框架的公共接口?如果 Swift 只在模块内使用,我不想将它暴露给其他模块怎么办?