Com todos os SDKs flutuando, é útil poder construir para vários SDKs e plataformas. No entanto, saltando de 3,2 para 3,0 e até ocasionalmente para o 2.x, frequentemente recebo avisos preteridos envolvendo métodos que foram alterados ou substituídos:
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
Como ainda quero manter a compatibilidade com sistemas operacionais mais antigos, e também estou tentando remover o 'ruído' ao criar, existe uma maneira de desativar ou desativar esses avisos?
Respostas:
Tente
-Wno-deprecated-declarations
, ou sua configuração correspondente no Xcode,GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
(dica profissional: digite "obsoleto" nas configurações de compilação para encontrar a configuração específica para este aviso).Versões atuais do Xcode (por exemplo, Xcode 9.2):
Versões antigas do Xcode (por exemplo, Xcode 2.x, 3.x):
fonte
Como ainda não consigo adicionar um comentário ao post @samiq, acho que o expandirei. Diretiva de entrada mencionada antes de uma função / método no qual você usa itens obsoletos. Em seguida, você pode restaurar a configuração anterior após a definição da função final:
fonte
#pragma GCC diagnostics push #pragma GCC diagnostics ignored "-Wdeprecated-declarations" .. .. Code here .. .. #pragma GCC diagnostic pop
pois esse método o leva de volta para qualquer configuração que tenha sido definida anteriormente. [ Gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html]O Clang fornece um recurso interessante que torna a etapa "restore" no post do @manicaesar independente do estado de aviso inicial:
Para citar o manual Clang :
fonte
Como tendemos a precisar oferecer suporte a sistemas operacionais mais antigos, mas preste atenção aos nossos avisos, eu queria uma maneira mais organizada de fazer isso. Eu montei isso, inspirado em algum código Mozilla:
Isso permite que você faça o seguinte:
Também funciona com blocos de código:
Além disso, quando você dispensa o suporte a dispositivos anteriores ao iOS 7, pode pesquisar facilmente o código para encontrar os usos obsoletos a serem corrigidos.
fonte
do { ... } while(0);
necessário?do{...}while(0);
é necessário aqui em particular? Por que não apenas{...}
? Por que nãoif(true){...}
? etc.Você também pode suprimir avisos por arquivo usando
o que, por sua vez, torna uma prática um pouco melhor do que apenas suprimir todos os avisos de uma vez por todas ... afinal você precisa saber para que está fazendo isso.
fonte
Se você deseja silenciar o aviso Implementando Método Preterido ou Implementando Classe Preterida , use:
fonte
Nas configurações de sua compilação, encontre
Deprecated Functions
.fonte
Se você desejar uma verificação geral, verifique todos os tipos de deprecações em um pedaço de código. Use o sinalizador -Wdeprecated como abaixo:
fonte
Para desativar o aviso do arquivo de cabeçalho de terceiros, adicione a seguinte linha na parte superior do arquivo
fonte