ios 在Xcode中禁止显示过时警告

mnemlml8  于 2023-03-14  发布在  iOS
关注(0)|答案(9)|浏览(252)

有了这些SDK,可以方便地构建多个SDK和平台,但是,从3.2到3.0,甚至偶尔到2.x,我经常收到一些方法已经改变或被取代的警告:

warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.

既然我仍然想保持与旧操作系统的兼容性,而且我也在努力消除构建时的“噪音”,有没有办法关闭或禁用这些警告?

fruv7luv

fruv7luv1#

由于我还不能给@samiq的帖子添加注解,我想我会扩展它。在函数/方法前面输入提到的指令,在其中你使用了过时的东西。然后你可以在函数定义结束后恢复以前的设置:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma GCC diagnostic pop
vngu2lb8

vngu2lb82#

Clang提供了一个很好的特性,使@manicaesar帖子中的“恢复”步骤独立于初始警告状态:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma clang diagnostic pop

引用Clang手册:
除了GCC的pragma提供的所有功能外,Clang还允许你推送和弹出当前的警告状态,这在编写一个由其他人编译的头文件时特别有用,因为你不知道他们用什么警告标志来编译。

taor4pac

taor4pac3#

尝试-Wno-deprecated-declarations或其在Xcode中的相应设置GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS(专业提示:只需在构建设置中键入“deprecated”即可找到此警告的特定设置)。
Xcode的当前版本(例如Xcode 9.2):

Xcode的旧版本(例如Xcode 2.x、3.x):

62o28rlo

62o28rlo4#

由于我们倾向于支持较旧的操作系统,但请注意我们的警告,我希望有一个更整洁的方式来做到这一点。我把它放在一起,灵感来自一些Mozilla代码:

#define SILENCE_DEPRECATION(expr)                                   \
do {                                                                \
_Pragma("clang diagnostic push")                                    \
_Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")   \
expr;                                                               \
_Pragma("clang diagnostic pop")                                     \
} while(0)

#define SILENCE_IOS7_DEPRECATION(expr) SILENCE_DEPRECATION(expr)
#define SILENCE_IOS8_DEPRECATION(expr) SILENCE_DEPRECATION(expr)

这允许您执行以下操作:

SILENCE_IOS7_DEPRECATION(return [self sizeWithFont:font constrainedToSize:size]);

它还可以处理代码块:

SILENCE_IOS7_DEPRECATION(
    view = [[MKPolylineView alloc] initWithPolyline:self];
    view.lineWidth = self.lineWidth;
    view.strokeColor = self.color;
);

此外,当您删除对iOS 7之前的设备的支持时,您可以轻松地搜索代码,找到要修复的过时用法。

dm7nw8vv

dm7nw8vv5#

您还可以使用以下命令禁止显示每个文件的警告

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

这反过来又使它成为一个更好的做法,而不是仅仅抑制所有的警告一次和一起...毕竟你要知道你这样做是为了什么。

dohp0rv5

dohp0rv56#

如果要使警告实现不推荐使用的方法实现不推荐使用的类静音,请用途:

#pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-implementations"
    // code
    #pragma clang diagnostic pop
kqqjbcuj

kqqjbcuj7#

在构建设置中,找到Deprecated Functions

byqmnocz

byqmnocz8#

如果你想全面检查一段代码中的所有类型的弃用,请使用 -Wdeprecated 标志,如下所示:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma clang diagnostic pop
k5hmc34c

k5hmc34c9#

要禁用来自第三方头文件的警告,请在文件顶部添加以下行

#pragma clang system_header

相关问题