代码之家  ›  专栏  ›  技术社区  ›  Ben Gottlieb

在Xcode中抑制不推荐使用的警告

  •  126
  • Ben Gottlieb  · 技术社区  · 14 年前

    由于所有的SDK都在周围浮动,因此可以方便地为多个SDK和平台构建。但是,从3.2跳到3.0,甚至偶尔是2.x,我经常收到一些不推荐使用的警告,这些警告涉及已更改或被取代的方法:

    warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
    

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

    9 回复  |  直到 5 年前
        1
  •  74
  •   Paul R    6 年前

    尝试 -Wno-deprecated-declarations 或其在xcode中的相应设置, GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS (专业提示:只需在生成设置中键入“deprecated”即可找到此警告的特定设置)。

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

    enter image description here


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

    enter image description here

        2
  •  318
  •   manicaesar    10 年前

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

    #pragma GCC diagnostic push 
    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    - (void) methodUsingDeprecatedStuff {
        //use deprecated stuff
    }
    #pragma GCC diagnostic pop
    
        3
  •  139
  •   Andrew Hershberger    11 年前

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

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

    引用Clang manual :

    除了GCC的pragma提供的所有功能之外,clang还允许您推送和弹出当前警告状态。这在编写将由其他人编译的头文件时特别有用,因为您不知道它们使用什么警告标志生成。

        4
  •  39
  •   Joe Trellick    10 年前

    由于我们倾向于支持较旧的操作系统,但要注意我们的警告,我希望有一种更整洁的方式来做到这一点。我把这些放在一起,灵感来自于一些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之前版本设备的支持时,您可以轻松地搜索代码以查找要修复的不推荐使用。

        5
  •  28
  •   samiq    14 年前

    您还可以使用

    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    

    这反过来使它比一次又一次地压制所有警告要好一点。毕竟你要知道你这样做是为了什么。

        6
  •  14
  •   krzysztof    6 年前

    如果你想保持沉默警告 实现弃用的方法 实现不推荐使用的类 ,用途:

        #pragma clang diagnostic push
        #pragma clang diagnostic ignored "-Wdeprecated-implementations"
        // code
        #pragma clang diagnostic pop
    
    
        7
  •  7
  •   SmallChess    8 年前

    在生成设置中,查找 Deprecated Functions .

    enter image description here

        8
  •  0
  •   jarora    5 年前

    如果你想在一段代码中全面检查各种折旧。请使用 -WDE预测 标记如下:

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated"
    - (void) methodUsingDeprecatedStuff {
        //use deprecated stuff
    }
    #pragma clang diagnostic pop
    
        9
  •  -2
  •   harvestli    10 年前

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

    #pragma clang system_header