Mit Xcode können Sie die Einstellungen für bestimmte Compiler-Warnungen (deaktivieren), die Sie vor bestimmten Arten von nicht verwendetem Code warnen können. (Wählen Sie das Projekt in der Quellliste und Datei> Informationen abrufen und dann die Registerkarte Erstellen aus.) Hier sind einige (die für mich für Clang und GCC 4.2 angezeigt werden), die von Interesse sein können:
- Nicht verwendete Funktionen
- Nicht verwendete Parameter
- Nicht verwendete Werte
Ich sehe keine Optionen zum Erkennen nicht verwendeter Importe, aber das ist etwas einfacher - der Low-Tech-Ansatz besteht nur darin, Importanweisungen auskommentieren, bis Sie einen Kompilierungsfehler / eine Warnung erhalten.
Nicht verwendete Objective-C-Methoden sind viel schwieriger zu erkennen als nicht verwendete C-Funktionen, da Nachrichten dynamisch versendet werden. Eine Warnung oder ein Fehler kann Ihnen sagen, dass Sie ein potenzielles Problem haben, aber das Fehlen eines solchen garantiert nicht, dass Sie keine Laufzeitfehler haben.
Bearbeiten: Eine weitere gute Möglichkeit, (möglicherweise) nicht verwendete Methoden zu erkennen, besteht darin, die Codeabdeckung anhand tatsächlicher Ausführungen zu untersuchen. Dies erfolgt normalerweise zusammen mit automatisierten Unit-Tests, muss es aber nicht sein.
Dieser Blog-Beitrag ist eine anständige Einführung in Unit-Tests und Codeabdeckung mit Xcode. In diesem Abschnitt gcov
(der übrigens nur mit von GCC generiertem Code funktioniert) wird erläutert, wie Xcode instrumentierten Code erstellt, der aufzeichnet, wie oft er ausgeführt wurde. Wenn Sie einen instrumentierten Build Ihrer App für eine Drehung im Simulator verwenden und dann gcov darauf ausführen, können Sie mithilfe eines Tools wie CoverStory (eine ziemlich vereinfachte Benutzeroberfläche ) oder lcov
(Perl-Skripte zum Erstellen von HTML-Berichten) sehen, welcher Code ausgeführt wurde. .
Ich verwende gcov
und lcov
für CHDataStructures.framework und generiere automatisch Berichterstattungsberichte nach jedem SVN-Commit. Denken Sie auch hier daran, dass es unklug ist, die ausgeführte Abdeckung als endgültiges Maß dafür zu betrachten, welcher Code "tot" ist, aber es kann sicherlich helfen, Methoden zu identifizieren, die Sie weiter untersuchen können.
Da Sie versuchen, toten Code zu entfernen, finde ich diese SO-Frage auch interessant:
id
, oder einen Selektor erstellen, der zur Laufzeit aufgerufen werden kann, kann der statische Analysator keine Garantie übernehmen dass der Code wirklich unbenutzt ist. Wenn noch benötigter Code entfernt wird, treten dort Laufzeitfehler auf. Vermisse ich etwas