在 iOS 框架项目中选中“仅允许应用程序扩展 API”会向消费者公开内部类和方法

sta*_*kri 4 objective-c ios ios-frameworks swift ios-extensions

我创建了一个简单的 iOS 框架 Swift 项目,并添加了一个Logger带有单个存根方法的Swift 类log(_:)

class Logger: NSObject {

    func log(_ message:String) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Loggerlog方法是框架内部的,通常构建不会将它们暴露给ObjC. 但是,如果我在框架目标的常规设置中选中“仅允许应用程序扩展 API”,则生成的内容MyFramework-Swift.h现在包含类和方法声明,这意味着两者对框架的使用者都是可见的,就像它们被声明为公共一样:

SWIFT_CLASS("_TtC9Framework6Logger")
@interface Logger : NSObject
- (void)log:(NSString * _Nonnull)message;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么吗?提前致谢!

Coc*_*ics 5

一旦启用“仅允许应用程序扩展 API”,生成的标头将包含公共类和内部类。

我相信这可能是 Xcode 中的一个错误,因为此设置应该只影响编译发出的警告(如果您引用非扩展 API),而不影响生成的内容Module-Swift.h

我现在正在提交错误报告。