Xcode vous permet de (dé) vérifier les paramètres pour les avertissements spécifiques du compilateur qui peuvent vous avertir de certains types de code inutilisé. (Sélectionnez le projet dans la liste source et File> Get Info, puis sélectionnez l'onglet Build.) En voici quelques-uns (qui apparaissent pour Clang et GCC 4.2 pour moi) qui peuvent être intéressants:
- Fonctions inutilisées
- Paramètres inutilisés
- Valeurs inutilisées
Je ne vois aucune option pour détecter les importations inutilisées, mais c'est un peu plus simple - l'approche low-tech consiste simplement à commenter les instructions d'importation jusqu'à ce que vous obteniez une erreur / un avertissement de compilation.
Les méthodes Objective-C inutilisées sont beaucoup plus difficiles à détecter que les fonctions C inutilisées car les messages sont distribués dynamiquement. Un avertissement ou une erreur peut vous indiquer que vous avez un problème potentiel, mais l'absence d'un problème ne garantit pas que vous n'aurez pas d'erreurs d'exécution.
Edit: Un autre bon moyen de détecter les méthodes (potentiellement) inutilisées est d'examiner la couverture du code à partir des exécutions réelles. Cela se fait généralement en tandem avec des tests unitaires automatisés, mais ce n'est pas obligatoire.
Cet article de blog est une introduction décente aux tests unitaires et à la couverture de code à l'aide de Xcode. La section sur gcov
(qui ne fonctionne qu'avec du code généré par GCC, soit dit en passant) explique comment obtenir Xcode pour construire un code instrumenté qui peut enregistrer la fréquence à laquelle il a été exécuté. Si vous prenez une version instrumentée de votre application pour un tour dans le simulateur, puis exécutez gcov dessus, vous pouvez voir quel code a été exécuté en utilisant un outil comme CoverStory (une interface graphique assez simpliste) ou lcov
(des scripts Perl pour créer des rapports HTML) .
J'utilise gcov
et lcov
pour CHDataStructures.framework et je génère automatiquement des rapports de couverture après chaque commit SVN. Encore une fois, rappelez-vous qu'il n'est pas judicieux de traiter la couverture exécutée comme une mesure définitive du code "mort", mais cela peut certainement aider à identifier des méthodes que vous pouvez étudier plus en détail.
Enfin, puisque vous essayez de supprimer le code mort, je pense que vous trouverez cette question SO intéressante également:
id
, ou créez un sélecteur à appeler au moment de l'exécution, l'analyseur statique ne peut pas garantir que le code est vraiment inutilisé. Si le code qui est toujours nécessaire est supprimé, c'est là que vous obtiendrez des erreurs d'exécution. Est-ce que je manque quelque chose?