Xcode дозволяє (не) перевіряти настройки для конкретних попереджень компілятора, які можуть попереджати вас про деякі типи невикористаного коду. (Виберіть проект у списку джерел і Файл> Отримати інформацію, а потім виберіть вкладку Збірка.) Ось декілька (які відображаються для Clang та GCC 4.2 для мене), які можуть представляти інтерес:
- Невикористані функції
- Невикористані параметри
- Невикористані цінності
Я не бачу жодних варіантів виявлення невикористаного імпорту, але це трохи простіше - низькотехнологічний підхід - це просто коментувати заяви про імпорт, поки не з’явиться помилка / попередження про компіляцію.
Невикористані методи Objective-C виявити набагато складніше, ніж невикористані функції C, оскільки повідомлення динамічно розсилаються. Попередження або помилка можуть сказати вам, що у вас є потенційна проблема, але її відсутність не гарантує, що у вас не буде помилок під час виконання.
Редагування: Ще одним хорошим способом виявлення (потенційно) невикористаних методів є вивчення покриття коду від фактичних виконань. Зазвичай це робиться в тандемі з автоматизованим тестуванням одиниць, але цього не повинно бути.
Ця публікація в блозі є гідним вступом до тестування одиниць та охоплення коду за допомогою Xcode. У розділі gcov
(який, до речі, працює лише з кодом, згенерованим GCC), пояснюється, як отримати Xcode для побудови інструментального коду, який може записувати, як часто він виконується. Якщо ви взяли інструментальну збірку своєї програми для спіну в симуляторі, а потім запустіть gcov на ній, ви зможете побачити, який код був виконаний, використовуючи такий інструмент, як CoverStory (досить спрощений графічний інтерфейс) або lcov
(сценарії Perl для створення звітів HTML) .
Я використовую gcov
і lcov
для CHDataStructures.framework та автоматично генерую звіти про покриття після кожної фіксації SVN. Знову ж таки, пам’ятайте, що нерозумно трактувати виконане покриття як остаточну міру того, який код є "мертвим", але це, безумовно, може допомогти визначити методи, які ви можете дослідити далі.
Нарешті, оскільки ви намагаєтесь видалити мертвий код, я думаю, що ви також знайдете це питання ТАК цікавим:
id
, або створюєте селектор для виклику під час виконання, статичний аналізатор не може гарантувати що код справді не використовується. Якщо код, який все ще потрібен, видалено, саме там ви отримаєте помилки під час виконання. Я щось пропускаю?