Xcode umożliwia (anulowanie) sprawdzania ustawień określonych ostrzeżeń kompilatora, które mogą ostrzegać o niektórych typach nieużywanego kodu. (Wybierz projekt z listy źródeł i Plik> Uzyskaj informacje, a następnie wybierz kartę Kompilacja). Oto kilka (które pojawiają się w Clang i GCC 4.2 dla mnie), które mogą być interesujące:
- Nieużywane funkcje
- Nieużywane parametry
- Niewykorzystane wartości
Nie widzę żadnych opcji wykrywania nieużywanych importów, ale jest to nieco prostsze - mało zaawansowane technologicznie podejście polega po prostu na komentowaniu instrukcji importu, dopóki nie pojawi się błąd / ostrzeżenie kompilacji.
Nieużywane metody Objective-C są znacznie trudniejsze do wykrycia niż nieużywane funkcje C, ponieważ komunikaty są wysyłane dynamicznie. Ostrzeżenie lub błąd może powiedzieć, że masz potencjalny problem, ale jego brak nie gwarantuje, że nie wystąpią błędy w czasie wykonywania.
Edycja: Innym dobrym sposobem na wykrycie (potencjalnie) nieużywanych metod jest zbadanie pokrycia kodu z rzeczywistych wykonań. Zwykle odbywa się to w połączeniu z automatycznymi testami jednostkowymi, ale nie musi.
Ten post na blogu to przyzwoite wprowadzenie do testów jednostkowych i pokrycia kodu przy użyciu Xcode. Sekcja on gcov
(która, nawiasem mówiąc, działa tylko z kodem wygenerowanym przez GCC) wyjaśnia, jak zmusić Xcode do zbudowania oprzyrządowanego kodu, który może rejestrować, jak często był wykonywany. Jeśli weźmiesz oprzyrządowaną kompilację swojej aplikacji do obrócenia w symulatorze, a następnie uruchomisz na niej gcov, możesz zobaczyć, jaki kod został wykonany za pomocą narzędzia takiego jak CoverStory (dość uproszczony interfejs GUI) lub lcov
(skrypty Perla do tworzenia raportów HTML) .
Używam gcov
i lcov
dla CHDataStructures.framework i automatycznie generuję raporty pokrycia po każdym zatwierdzeniu SVN. Pamiętaj, że nierozsądne jest traktowanie wykonanego pokrycia jako ostatecznej miary tego, który kod jest „martwy”, ale z pewnością może pomóc w zidentyfikowaniu metod, które możesz zbadać dalej.
Na koniec, skoro próbujesz usunąć martwy kod, myślę, że to pytanie również okaże się interesujące:
id
lub utworzysz selektor do wywołania w czasie wykonywania, analizator statyczny nie może zagwarantować że kod jest naprawdę nieużywany. Jeśli kod, który nadal jest potrzebny, zostanie usunięty, pojawią się błędy w czasie wykonywania. Czy coś mi brakuje?