107 votes

Comment trouver des images inutilisées dans un projet XCode?

Quelqu'un a une seule ligne pour trouver des images inutilisées dans un projet XCode? (En supposant que tous les fichiers sont référencés par leur nom dans le code ou les fichiers de projet - pas de code généré des noms de fichiers.)

Ces fichiers ont tendance à s'accumuler sur la durée de vie d'un projet, et il peut être difficile de dire si il est sûr de supprimer tout png.

80voto

Ed McManus Points 3024

C'est une solution plus robuste - il vérifie pour toute référence à la basename dans un fichier texte. Remarque: les solutions ci-dessus n'incluent pas de storyboard fichiers (tout à fait compréhensible, ils n'existaient pas à l'époque).

Ack c'est assez rapide, mais il y a quelques optimisations évidentes à faire si ce script s'exécute fréquemment. Ce code vérifie chaque basename deux fois si vous avez à la fois de la rétine/non-retina actifs, par exemple.

#!/bin/bash

for i in `find . -name "*.png" -o -name "*.jpg"`; do 
    file=`basename -s .jpg "$i" | xargs basename -s .png | xargs basename -s @2x`
    result=`ack -i "$file"`
    if [ -z "$result" ]; then
        echo "$i"
    fi
done

# Ex: to remove from git
# for i in `./script/unused_images.sh`; do git rm "$i"; done

61voto

Roman Points 7430

Pour les fichiers qui ne sont pas inclus dans le projet, mais juste l'accrocher autour de la dans le dossier, vous pouvez appuyer sur Cmd-Opt-Un et ils ne seront pas en grisé.

Pour les fichiers qui ne sont pas référencées ni dans xib, ni dans le code, quelque chose comme ça pourrait fonctionner:


#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]'`

for png in `find . -name '*.png'`
do
    name=`basename $png`
    if ! grep -qhs "$name" "$PROJ"; then
        echo "$png is not referenced"
    fi
done

24voto

rob Points 1459

J'ai essayé Romain de la solution, et j'ai ajouté un peu de bricolage pour gérer les images de la rétine. Il fonctionne bien, mais n'oubliez pas que les noms d'images peuvent être générées par programmation dans le code, et ce script de manière incorrecte la liste de ces images comme non référencées. Par exemple, vous pourriez avoir

NSString *imageName = [NSString stringWithFormat:@"image_%d.png", 1];

Ce script, à tort, pensons image_1.png est non référencées.

Voici le script modifié:

#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]' -o -name '*.storyboard' -o -name '*.mm'`

for png in `find . -name '*.png'`
do
   name=`basename -s .png $png`
   name=`basename -s @2x $name`
   if ! grep -qhs "$name" "$PROJ"; then
        echo "$png"
   fi
done

12voto

Arunachalam Points 155

Peut-être vous pouvez essayer mince, il fait un travail décent.

mise à jour: Avec emcmanus idée, je suis allé de l'avant et de créer un petit util avec aucun accusé de réception n'juste pour éviter d'installation supplémentaires dans une machine.

https://github.com/arun80/xcodeutils

2voto

elpsk Points 4120

Vous pouvez faire un script shell qui grep votre code source et de comparer l'fondé des images avec votre dossier de projet.

Ici l'homme(s) pour GREP et LS

Vous pouvez facilement de la boucle de l'ensemble de votre fichier source, d'enregistrer les images au tableau ou quelque chose d'égal à égal et d'utilisation

cat file.m | grep [-V] myImage.png

Avec cette astuce, vous pouvez rechercher toutes les images de votre projet de code source!!

espérons que cette aide!

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