我创建了一个简单的 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/

10-14 21:44
查看更多