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?Appcode ma funkcję inspekcji kodu, która znajduje nieużywane importy i kod.
źródło
Używaliśmy własnego kodu Rubiego, teraz wyodrębnionego do klejnotu o nazwie fui: https://github.com/dblock/fui
źródło
Niedawno napisałem skrypt, aby znaleźć nieużywane (lub zduplikowane)
#import
stwierdzenia: https://gist.github.com/Orangenhain/7691314Skrypt pobiera plik ObjC .m i zaczyna komentować każdy
#import
wiersz po kolei i sprawdza, czy projekt nadal się kompiluje. Będziesz musiał zmienić BUILD_DIR i BUILD_CMD.Jeśli używasz
find
polecenia, aby pozwolić skryptowi działać na wielu plikach, upewnij się, że używasz BUILD_CMD, który faktycznie używa wszystkich tych plików (lub zobaczysz plik z wieloma nieużywanymi instrukcjami importu).Napisałem to nie wiedząc, że AppCode ma podobną funkcję, jednak kiedy testowałem AppCode, nie był tak dokładny jak ten skrypt (ale znacznie szybszy [dla całego projektu]).
źródło
Jak powiedział paddydub , AppCode robi to bardzo dobrze. Próbowałem i zajęło mi to zaledwie 10 minut:
Idź do
Code > Optimize Imports...
lub^ + ⌥ + O
Oto film opisujący, jak to zrobić: Wykrywanie nieużywanego importu i metod w AppCode
źródło
Możesz użyć Xcode Analyzer, aby znaleźć to i inne problemy.
http://help.apple.com/xcode/mac/8.0/#/devb7babe820
Możesz także przejść do projektu i docelowej kompilacji oraz dodać preferencje ostrzeżeń o zmianie w ustawieniach kompilacji. Zobacz ten przewodnik:
http://oleb.net/blog/2013/04/compiler-warnings-for-objective-c-developers/
źródło
Ostatnio zmieniłem duży projekt z Carbon na Cocoa. Na końcu było sporo osieroconych plików, które nie były już używane. Napisałem skrypt, aby znaleźć je, które zasadniczo zrobiły to:
Upewnij się, że całe źródło jest wpisane do subversion (tj. Czyste) Upewnij się, że obecnie kompiluje się bez błędów (tj. Xcodebuild zwraca stan 0). Następnie dla każdego pliku źródłowego w katalogu pusty (tj. Usuń zawartość, skróć długość) source i plik nagłówkowy, spróbuj kompilacji, jeśli się nie powiedzie, przywróć pliki, w przeciwnym razie pozostaw je puste.
Po uruchomieniu przywróć, a następnie usuń wszystkie opróżnione pliki, skompiluj, a następnie usuń wszystkie błędne #importy.
Powinienem również dodać, że musisz unikać plików, do których istnieją odniesienia z plików .xib lub .sdef, i mogą istnieć inne przypadki dynamicznego łączenia, ale nadal może to dać ci dobrą wskazówkę co do tego, co można usunąć.
Tej samej techniki można użyć, aby sprawdzić, które #importy mogą zostać usunięte - zamiast obcinania pliku, usuń po kolei każdy #import w pliku i sprawdź, czy kompilacja się nie powiedzie.
źródło