我创建了一个简单的 iOS 框架 Swift 项目,并添加了一个带有单个 stub 方法 Logger
的 Swift 类 log(_:)
class Logger: NSObject {
func log(_ message:String) {
// ...
}
}
Logger
类和 log
方法是框架内部的,构建通常不会将它们暴露给 ObjC
。但是,如果我在框架目标的常规设置中选中“仅允许应用程序扩展 API”,则生成的 MyFramework-Swift.h
现在包含类和方法声明,这意味着框架的使用者都可以看到它们,就好像它们被声明为公共(public):SWIFT_CLASS("_TtC9Framework6Logger")
@interface Logger : NSObject
- (void)log:(NSString * _Nonnull)message;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
有人可以解释为什么吗?提前致谢!
最佳答案
一旦您启用“仅允许应用扩展 API”,生成的 header 将同时包含公共(public)类和内部类。
我相信这可能是 Xcode 中的一个错误,因为此设置只会影响编译发出的警告(如果您引用非扩展 API),而不会影响生成的 Module-Swift.h
的内容
我现在正在提交错误报告。
关于ios - 检查 iOS 框架项目中的 "Allow app extension API only"向消费者公开内部类和方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42319892/