105 votes

Comment détecter inutilisés méthodes et #import en Objective-C

Après avoir travaillé longtemps sur une application iPhone, j'ai réalisé que mon code c'est assez sale, contenant plusieurs #import et de méthodes qui ne sont pas appelé ou utile à tous.

Je voudrais savoir si il existe une directive de compilation ou de moyen de détecter ces inutile de lignes de code. Ne Xcode ont aucun outil pour détecter ce?

67voto

Quinn Taylor Points 29688

Xcode permet de (dé)vérifier les paramètres spécifiques des avertissements du compilateur qui peut vous avertir de certains types de code inutilisé. (Sélectionnez le projet dans la liste source et Fichier > lire les informations, puis sélectionnez l'onglet créer.) Voici quelques-uns (qui pour Clang et GCC 4.2 pour moi) qui peut être intéressant:

  • Des Fonctions Inutilisées
  • Les Paramètres Inutilisés
  • Valeurs Inutilisées

Je ne vois pas d'options pour la détection de inutilisés des importations, mais qui est un peu plus simple - le low-tech approche est juste pour commenter les instructions d'importation jusqu'à ce que vous obtenez une erreur de compilation et de mise en garde.

Inutilisés Objective-C méthodes sont beaucoup plus difficiles à détecter que inutilisés fonctions C parce que les messages sont envoyés de façon dynamique. Un avertissement ou une erreur peut vous dire que vous avez un problème potentiel, mais l'absence de l'un ne vous garantit pas de ne pas avoir des erreurs d'exécution.


Edit: un Autre bon moyen de détecter (potentiellement) inutilisé méthodes est d'examiner la couverture de code à partir de véritables exécutions. Ceci est habituellement fait en tandem avec des tests unitaires automatisés, mais n'a pas à être.

Ce blog est un décent introduction aux tests unitaires et de couverture de code à l'aide de Xcode. La section sur l' gcov (qui ne fonctionne qu'avec le code généré par GCC, par la voie) explique comment obtenir Xcode pour construire d'instrumentation de code qui permet d'enregistrer combien de fois il a été exécuté. Si vous prenez un instrumenté version de votre application pour un tour dans le simulateur, puis exécutez gcov, vous pouvez voir ce code a été exécuté à l'aide d'un outil comme CoverStory (assez simpliste GUI) ou lcov (scripts Perl pour créer des rapports HTML).

J'utilise gcov et lcov pour CHDataStructures.cadre et de générer automatiquement des rapports de couverture après chaque SVN commit. Encore une fois, rappelez-vous qu'il est judicieux de traiter exécuté couverture comme une mesure définitive de ce code est "mort", mais il peut certainement aider à identifier les méthodes que vous pouvez étudier plus loin.

Enfin, puisque vous essayez de supprimer du code mort, je pense que vous trouverez ce DONC, la question intéressante:

41voto

paddydub Points 786

Appcode a un code de la fonction d'inspection qui trouve inutilisés des importations et le code.

11voto

dB. Points 2350

Nous avons été en utilisant des endogène du code Ruby, maintenant extrait dans un joyau appelé fui: https://github.com/dblock/fui

6voto

Erzékiel Points 248

Comme paddydub dit, AppCode le faire très bien. J'ai essayé, et il m'a fallu seulement 10 minutes :

Aller à l' Code > Optimize Imports...ou ^ + ⌥ + O

Voici une vidéo décrivant comment le faire : la Détection de la fraction inutilisée de l'importation et de méthodes AppCode

5voto

Orangenhain Points 656

J'ai récemment écrit un script pour trouver inutilisés (ou double) #import déclarations: https://gist.github.com/Orangenhain/7691314

Le script prend un ObjC .m fichier et commence à commenter chaque #import ligne à son tour et de voir si le projet compile. Vous devrez changer de BUILD_DIR & BUILD_CMD.

Si vous utilisez un find commande de laisser le script de s'exécuter sur plusieurs fichiers, assurez-vous d'utiliser un BUILD_CMD qui en fait l'utilise tous ces fichiers (ou vous verrez un fichier avec beaucoup de inutilisés déclarations d'importation).

J'ai écrit sans savoir AppCode une fonctionnalité similaire, cependant quand je l'ai testé AppCode il n'était pas aussi complet que ce script (mais de façon plus rapide de l'ensemble du projet]).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X