Xcode позволяет вам (отменить) проверку настроек на наличие определенных предупреждений компилятора, которые могут предупредить вас о некоторых типах неиспользуемого кода. (Выберите проект в списке источников и выберите «Файл»> «Получить информацию», затем выберите вкладку «Сборка»). Вот несколько (которые отображаются для меня в Clang и GCC 4.2), которые могут быть интересны:
- Неиспользуемые функции
- Неиспользуемые параметры
- Неиспользованные значения
Я не вижу никаких вариантов для обнаружения неиспользуемого импорта, но это немного проще - низкотехнологичный подход заключается в том, чтобы просто закомментировать операторы импорта, пока вы не получите ошибку / предупреждение компиляции.
Неиспользуемые методы Objective-C гораздо сложнее обнаружить, чем неиспользуемые функции C, потому что сообщения отправляются динамически. Предупреждение или ошибка могут сказать вам, что у вас есть потенциальная проблема, но ее отсутствие не гарантирует, что у вас не будет ошибок времени выполнения.
Изменить: еще один хороший способ обнаружить (потенциально) неиспользуемые методы - изучить покрытие кода от фактических выполнений. Обычно это делается в тандеме с автоматическим модульным тестированием, но это не обязательно.
Это сообщение в блоге - достойное введение в модульное тестирование и покрытие кода с помощью Xcode. В разделе gcov
(который, кстати, работает только с кодом, сгенерированным GCC) объясняется, как заставить Xcode создавать инструментальный код, который может записывать, как часто он выполнялся. Если вы возьмете инструментальную сборку своего приложения для вращения в симуляторе, а затем запустите на нем gcov, вы сможете увидеть, какой код был выполнен с помощью такого инструмента, как CoverStory (довольно упрощенный графический интерфейс) или lcov
(сценарии Perl для создания отчетов в формате HTML). .
Я использую gcov
и lcov
для CHDataStructures.framework и автоматически генерирую отчеты о покрытии после каждой фиксации SVN. Опять же, помните, что неразумно рассматривать выполненное покрытие как окончательную меру того, какой код «мертв», но это, безусловно, может помочь определить методы, которые вы можете исследовать дальше.
Наконец, поскольку вы пытаетесь удалить мертвый код, я думаю, вам также будет интересен этот вопрос SO:
id
, или создаете селектор для вызова во время выполнения, статический анализатор не может гарантировать что код действительно не используется. Если код, который все еще нужен, будет удален, вы получите ошибки времени выполнения. Я что-то упускаю?