Avec tous les SDK flottants, il est pratique de pouvoir créer pour plusieurs SDK et plates-formes. Cependant, en passant de la 3.2 à la 3.0 et même occasionnellement à la 2.x, je reçois fréquemment des avertissements obsolètes impliquant des méthodes qui ont changé ou ont été remplacées:
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
Étant donné que je souhaite toujours maintenir la compatibilité avec les anciens systèmes d'exploitation et que je m'efforce également de supprimer le «bruit» lors de la construction, existe-t-il un moyen de désactiver ou de désactiver ces avertissements?
Réponses:
Essayez
-Wno-deprecated-declarations
, ou son paramètre correspondant dans Xcode,GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
(conseil de pro: tapez simplement "obsolète" dans les paramètres de construction pour trouver le paramètre spécifique pour cet avertissement).Versions actuelles de Xcode (par exemple Xcode 9.2):
Anciennes versions de Xcode (par exemple Xcode 2.x, 3.x):
la source
Comme je ne peux pas encore ajouter de commentaire au post @samiq, je pense que je vais le développer. Entrez la directive mentionnée avant une fonction / méthode dans laquelle vous utilisez des éléments obsolètes. Ensuite, vous pouvez restaurer le paramètre précédent après la fin de la définition de la fonction:
la source
#pragma GCC diagnostics push #pragma GCC diagnostics ignored "-Wdeprecated-declarations" .. .. Code here .. .. #pragma GCC diagnostic pop
car cette méthode vous ramène au paramètre défini auparavant. [ Gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html]Clang fournit une fonctionnalité intéressante qui rend l'étape de "restauration" dans le post @manicaesar indépendante de l'état d'avertissement initial:
Pour citer le manuel Clang :
la source
Comme nous avons tendance à avoir besoin de prendre en charge des systèmes d'exploitation plus anciens, mais faites attention à nos avertissements, je voulais une façon plus ordonnée de le faire. J'ai mis cela ensemble, inspiré par du code Mozilla:
Cela vous permet d'effectuer les opérations suivantes:
Cela fonctionne également avec des blocs de code:
En outre, lorsque vous supprimez la prise en charge des appareils pré-iOS 7, vous pouvez facilement rechercher dans le code pour trouver les utilisations obsolètes à corriger.
la source
do { ... } while(0);
requis?do{...}while(0);
est requis ici en particulier? Pourquoi pas juste{...}
? Pourquoi pasif(true){...}
? etc.Vous pouvez également supprimer les avertissements par fichier en utilisant
ce qui en fait une pratique un peu meilleure que de simplement supprimer tous les avertissements une fois et ensemble ... après tout, vous devez savoir pourquoi vous le faites.
la source
Si vous souhaitez désactiver l'avertissement Implémentation d'une méthode obsolète ou Implémentation d'une classe obsolète , utilisez:
la source
Dans vos paramètres de construction, recherchez
Deprecated Functions
.la source
Si vous souhaitez une vérification globale de toutes sortes d'obsolescence dans un morceau de code. Veuillez utiliser le drapeau -Wdeprecated comme ci-dessous:
la source
Pour désactiver l'avertissement du fichier d'en-tête tiers, ajoutez la ligne suivante en haut du fichier
la source