developer apple app iphone xcode macos warnings

iphone - apple - Suprimir advertencias obsoletas en Xcode



itunes connect (8)

Clang proporciona una buena característica que hace que el paso de "restauración" en la publicación @manicaesar sea independiente del estado de advertencia inicial:

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

Para citar el manual Clang:

Además de toda la funcionalidad proporcionada por el pragma de GCC, Clang también le permite presionar y mostrar el estado actual de advertencia. Esto es particularmente útil cuando se escribe un archivo de encabezado que será compilado por otras personas, porque usted no sabe con qué banderas de advertencia se construyen.

Con todos los SDK flotando, es útil poder compilar para múltiples SDK y plataformas. Sin embargo, rebotando de 3.2 a 3.0 e incluso de vez en cuando 2.x, frecuentemente recibo advertencias desaprobadas que involucran métodos que han cambiado o han sido reemplazados:

warning: ''UIKeyboardBoundsUserInfoKey'' is deprecated.

Como todavía quiero mantener la compatibilidad con SO más antiguos, y también me esfuerzo por eliminar el "ruido" al construir, ¿hay alguna forma de desactivar o desactivar estas advertencias?


Como aún no puedo agregar un comentario a la publicación de @samiq, creo que lo ampliaré. Ingrese la directiva mencionada antes de una función / método en el que use elementos obsoletos. Luego puede restaurar la configuración anterior después de la definición del final de la función:

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


Como tendemos a necesitar sistemas operativos más antiguos, pero prestamos atención a nuestras advertencias, quería una forma más ordenada de hacerlo. Puse esto junto, inspirado en algún código de 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)

Esto le permite hacer lo siguiente:

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

También funciona con bloques de código:

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

Además, cuando retire el soporte para dispositivos anteriores a iOS 7, puede buscar fácilmente a través del código para encontrar los usos desaprobados para corregir.


En la configuración de compilación, encuentre Deprecated Functions .


Para desactivar la advertencia del archivo de encabezado de terceros, agregue la siguiente línea en la parte superior del archivo

#pragma clang system_header


Pruebe -Wno-deprecated-declarations , o su configuración correspondiente en Xcode, GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS (sugerencia: simplemente escriba "obsoleto" en la configuración de compilación para encontrar la configuración específica para esta advertencia).

Versiones actuales de Xcode (por ejemplo, Xcode 9.2):

Versiones antiguas de Xcode (por ejemplo, Xcode 2.x, 3.x):


Si desea silenciar la advertencia Implementando el método obsoleto o Implementando la clase obsoleta , use:

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


También puede suprimir las advertencias por archivo mediante el uso de

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

lo que a su vez hace que sea un poco mejor práctica que simplemente suprimir todas las advertencias una vez y juntas ... después de todo tienes que saber para qué lo estás haciendo.