在Xcode中抑制已弃用的警告

时间:2010-04-12 12:33:33

标签: iphone xcode macos warnings

随着所有SDK的流动,能够构建多个SDK和平台非常方便。但是,从3.2到3.0甚至偶尔2.x反弹,我经常得到已弃用的警告,涉及已经改变或被取代的方法:

warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.

由于我仍然希望保持与旧操作系统的兼容性,并且我还在努力在构建时消除“噪音”,是否有办法关闭或禁用这些警告?

9 个答案:

答案 0 :(得分:322)

由于我还无法在@samiq帖子中添加评论,我想我会扩展它。在使用弃用的东西的函数/方法之前输入提到的指令。然后,您可以在定义函数结束后恢复先前的设置:

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

答案 1 :(得分:139)

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

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

引用Clang manual

  

除了GCC的pragma提供的所有功能外,Clang还允许您推送和弹出当前的警告状态。这在编写将由其他人编译的头文件时特别有用,因为您不知道他们构建了哪些警告标记。

答案 2 :(得分:76)

尝试-Wno-deprecated-declarations或其在Xcode中的相应设置,GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS(专业提示:只需在构建设置中输入“已弃用”即可找到此警告的具体设置。)

当前版本的Xcode(例如Xcode 9.2):

enter image description here


Xcode的古老版本(例如Xcode 2.x,3.x):

enter image description here

答案 3 :(得分:39)

由于我们倾向于需要支持旧的操作系统,但要注意我们的警告,我想要一个更整洁的方法来做到这一点。我把它放在一起,受到一些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之前的设备的支持时,您可以轻松搜索代码以查找要修复的弃用用法。

答案 4 :(得分:28)

答案 5 :(得分:15)

如果您想要警告实施弃用的方法实施弃用的类,请使用:


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

答案 6 :(得分:8)

在您的构建设置中,找到Deprecated Functions

enter image description here

答案 7 :(得分:1)

如果您希望对一段代码中的所有不赞成使用的内容进行全面检查。请使用 -Wdeprecated 标志,如下所示:

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

答案 8 :(得分:-2)

要禁用第三方标题文件中的警告,请在文件顶部添加以下行

#pragma clang system_header