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

问题描述 投票:0回答:2

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

有人可以解释一下为什么吗?预先感谢!

ios objective-c swift ios-frameworks ios-extensions
2个回答
5
投票

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

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

Module-Swift.h

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


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.