我创建了一个简单的 iOS 框架 Swift 项目,并添加了一个带有单个存根方法的 Swift 类
Logger
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”,生成的标头将包含公共类和内部类。
我相信这可能是 Xcode 中的一个错误,因为此设置应该只影响编译发出的警告(如果您引用非扩展 API),而不影响生成的内容
Module-Swift.h
我现在正在提交错误报告。
Xcode 仅允许应用扩展 API
当您在框架目标上检查
Allow app extension API only
时(现在它不显示在“常规”选项卡上),它会强制编译器检查框架是否未调用任何禁止的系统 API(禁止的 API NS_EXTENSION_UNAVAILABLE
)
//warning
linking against dylib not safe for use in application extensions
所有目标在
Build Settings
中都有此反映。对于 Yes
目标,默认为
app extension
Require Only App-Extension-Safe API APPLICATION_EXTENSION_API_ONLY