Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
核对;“仅允许应用程序扩展API”;在iOS框架中,project向使用者公开内部类和方法_Ios_Objective C_Swift_Ios Frameworks_Ios Extensions - Fatal编程技术网

核对;“仅允许应用程序扩展API”;在iOS框架中,project向使用者公开内部类和方法

核对;“仅允许应用程序扩展API”;在iOS框架中,project向使用者公开内部类和方法,ios,objective-c,swift,ios-frameworks,ios-extensions,Ios,Objective C,Swift,Ios Frameworks,Ios Extensions,我创建了一个简单的iOS框架Swift项目,并使用一个存根方法添加了一个Swift类Logger Logger类和log方法是框架内部的,构建通常不会将它们暴露给ObjC。但是,如果我在框架目标的常规设置中选中“仅允许应用程序扩展API”,则生成的MyFramework Swift.h现在同时包含类和方法声明,这意味着框架的使用者可以看到它们,就好像它们被声明为公共的一样: SWIFT_CLASS("_TtC9Framework6Logger") @interface Logger : NSOb

我创建了一个简单的iOS框架Swift项目,并使用一个存根方法添加了一个Swift类
Logger

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中的一个bug,因为此设置只会影响编译发出的警告(如果您引用非扩展API),而不会影响生成的
模块Swift.h


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

当您在框架目标上选中
仅允许应用程序扩展API
时,它会强制编译器检查框架是否未调用任何API(禁止API
NS\u扩展不可用

所有目标在
生成设置中都有此反射。默认情况下,
app extension
目标为
Yes

Require Only App-Extension-Safe API
APPLICATION_EXTENSION_API_ONLY

您不应该使用屏幕截图发布代码片段。
//warning
linking against dylib not safe for use in application extensions
Require Only App-Extension-Safe API
APPLICATION_EXTENSION_API_ONLY