ios - 检查 iOS 框架项目中的 "Allow app extension API only"将内部类和方法暴露给消费者

标签 ios objective-c swift ios-frameworks ios-extensions

我创建了一个简单的 iOS 框架 Swift 项目并添加了一个 Swift 类 Logger 和一个 stub 方法 log(_:)

class Logger: NSObject {

    func log(_ message:String) {
        // ...
    }
}

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

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/

相关文章:

ios - 在 SwiftUI 中对齐包含的 View

ios - 输入 NSDate 的格式

objective-c - 如何开始Cocoa应用程序开发?

ios - 如何重现罕见的 "_CFAutoReleasePoolPop"崩溃?

ios - 我们如何在 Swift 中上传带有嵌套 JSON 参数的多部分表单数据?

ios - GCD = 更好的性能与 UI 无关?

ios - 通过 segue 单击 UITabBar 时如何更改 View ?

ios - Xcode 9 - 无法发出预编译 header

ios - Cocoapods:没有提供足够的参数;要操作的输入文档在哪里?

swift - 使用 UIPanGestureRecognizer 拖动 CGRect