在Xcode中抑制弃用的警告
随着所有SDK的漂移,能够为多个SDK和平台构build方便。 但是,从3.2到3.0甚至偶尔2.x,我经常会得到不合时宜的警告,涉及到已经改变或被取代的方法:
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
由于我仍然希望保持与较老的操作系统的兼容性,并且在构build时还努力去除“噪音”,是否有办法closures或禁用这些警告?
尝试-Wno-deprecated-declarations
,或在Xcode中的相应设置, GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
:
由于我还不能添加评论@samiq文章,我想我会扩大它。 在使用弃用的东西的函数/方法之前input提到的指令。 然后你可以在函数结束定义之后恢复以前的设置:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" - (void) methodUsingDeprecatedStuff { //use deprecated stuff } #pragma GCC diagnostic pop
铿锵提供了一个很好的function,使@manicaesarpost中的“恢复”步骤独立于初始警告状态:
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - (void) methodUsingDeprecatedStuff { //use deprecated stuff } #pragma clang diagnostic pop
引用Clang 手册 :
除了GCC的编译指示提供的所有function外,Clang还允许您推送和popup当前的警告状态。 这在编写由其他人编译的头文件时特别有用,因为您不知道他们使用哪个警告标志。
由于我们倾向于需要支持较老的操作系统,但要注意我们的警告,我想要一个更加整洁的方式来做到这一点。 我把它放在一起,受到一些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之前的设备的支持时,您可以轻松地search代码以查找不合适的用法来修复。
您也可以通过使用禁止每个文件的警告
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
这反过来使它有点更好的做法,而不是只是一次又一次地压制所有的警告……毕竟你知道你在做什么。
在您的构build设置中,findDeprecated Functions
。
要禁用来自第三方头文件的警告,请在文件顶部添加以下行
#pragma clang system_header