Поскольку все SDK распространяются по всему миру, удобно иметь возможность создавать для нескольких SDK и платформ. Однако при переходе с 3.2 на 3.0 и даже иногда на 2.x я часто получаю устаревшие предупреждения о методах, которые были изменены или заменены:
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
Поскольку я по-прежнему хочу поддерживать совместимость со старыми ОС, и я также стремлюсь удалить «шум» при сборке, есть ли способ отключить или отключить эти предупреждения?
Ответы:
Попробуйте
-Wno-deprecated-declarations
или соответствующий ему параметр в XcodeGCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
(совет от профессионала: просто введите «устаревшее» в настройках сборки, чтобы найти конкретный параметр для этого предупреждения).Текущие версии Xcode (например, Xcode 9.2):
Древние версии Xcode (например, Xcode 2.x, 3.x):
источник
Поскольку я пока не могу добавить комментарий к посту @samiq, думаю, что расширю его. Введите указанную директиву перед функцией / методом, в котором вы используете устаревший материал. Затем вы можете восстановить предыдущую настройку после определения функции end:
источник
#pragma GCC diagnostics push #pragma GCC diagnostics ignored "-Wdeprecated-declarations" .. .. Code here .. .. #pragma GCC diagnostic pop
как этот метод возвращает вас к тому , что установка была установлена до .. [ gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html]Clang предоставляет удобную функцию, которая делает шаг «восстановления» в сообщении @manicaesar независимым от начального состояния предупреждения:
Цитирую Clang руководство :
источник
Поскольку нам, как правило, необходимо поддерживать старые ОС, но обратите внимание на наши предупреждения, мне нужен более аккуратный способ сделать это. Я собрал это вместе, вдохновленный некоторым кодом Mozilla:
Это позволяет вам сделать следующее:
Он также работает с блоками кода:
Кроме того, когда вы отказываетесь от поддержки устройств до iOS 7, вы можете легко выполнить поиск по коду, чтобы найти устаревшие способы использования, которые нужно исправить.
источник
do { ... } while(0);
требуется?do{...}while(0);
именно здесь требуется? Почему не просто{...}
? Почему нетif(true){...}
? и т.д.Вы также можете подавить предупреждения для каждого файла, используя
что, в свою очередь, делает это немного лучше, чем просто подавление всех предупреждений один раз и вместе ... в конце концов, вы должны знать, для чего вы это делаете.
источник
Если вы хотите отключить предупреждение « Реализация устаревшего метода» или « Реализация устаревшего класса» , используйте:
источник
В настройках сборки найдите
Deprecated Functions
.источник
Если вам нужна полная проверка всех видов устаревших функций в фрагменте кода. Используйте флаг -Wdeprecated, как показано ниже:
источник
Чтобы отключить предупреждение из стороннего файла заголовка, добавьте следующую строку вверху файла
источник