Jak znaleźć nieużywane obrazy w projekcie Xcode?
Ma ktoś jedną linię, aby znaleźć nieużywane obrazy w projekcie Xcode? (Zakładając, że wszystkie pliki są odniesione przez nazwę w kodzie lub pliki projektu-Brak nazw plików generowanych kodem.)
Te pliki mają tendencję do gromadzenia się przez cały okres istnienia projektu i może być trudno stwierdzić, czy usunięcie danego png jest bezpieczne.
13 answers
Dla plików, które nie są zawarte w projekcie, ale po prostu pozostają w folderze, możesz nacisnąć
cmd ⌘ + alt ⌥ + A
I nie będą szarawe.W przypadku plików, które nie są wymienione ani w xib, ani w kodzie, coś takiego może działać:
#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]'`
find . -iname '*.png' | while read png
do
name=`basename $png`
if ! grep -qhs "$name" "$PROJ"; then
echo "$png is not referenced"
fi
done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 15:15:16
Jest to bardziej solidne rozwiązanie-sprawdza, czy odnosi się do nazwy bazowej w dowolnym pliku tekstowym. Zwróć uwagę na powyższe rozwiązania, które nie zawierały plików storyboard (całkowicie zrozumiałe, nie istniały w tym czasie).
Ack robi to dość szybko, ale istnieje kilka oczywistych optymalizacji, jeśli ten skrypt działa często. Ten kod sprawdza każdą nazwę podstawową dwa razy, jeśli na przykład masz zarówno zasoby siatkówki, jak i inne.
#!/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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-19 07:59:50
Wypróbowałem rozwiązanie Romana i dodałem kilka poprawek do obsługi obrazów siatkówki. To działa dobrze, ale pamiętaj, że nazwy obrazów mogą być generowane programowo w kodzie, a ten skrypt błędnie wyświetli te obrazy jako nieferencyjne. Na przykład możesz mieć
NSString *imageName = [NSString stringWithFormat:@"image_%d.png", 1];
Ten skrypt błędnie uzna image_1.png
za nieferencyjny.
Oto zmodyfikowany skrypt:
#!/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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 08:11:14
Proszę spróbować LSUnusedResources .
Jest pod silnym wpływem Nieużywany jeffhodnett, ale szczerze mówiąc Nieużywany jest bardzo powolny, a wyniki nie są do końca poprawne. Więc zrobiłem trochę optymalizacji wydajności, szybkość wyszukiwania jest szybsza niż nieużywana.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 02:31:53
Być może Możesz spróbować smukły , robi przyzwoitą robotę.
Update: z emcmanus idea, poszedłem do przodu i stworzyć mały util bez ack tylko po to, aby uniknąć dodatkowej konfiguracji w maszynie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 19:28:35
Działa tylko ten skrypt, który zajmuje się nawet spacją w nazwach plików:
Edytuj
Zaktualizowano do obsługi plików swift
i cocoapod
. Domyślnie wyłącza katalog Pods i sprawdza tylko pliki projektu. Aby uruchomić, aby sprawdzić również folder Pods, Uruchom z --pod
attrbiute:
/.finunusedimages.sh --pod
Oto rzeczywisty skrypt:
#!/bin/sh
#varables
baseCmd="find ."
attrs="-name '*.xib' -o -name '*.[mh]' -o -name '*.storyboard' -o -name '*.mm' -o -name '*.swift'"
excudePodFiles="-not \( -path */Pods/* -prune \)"
imgPathes="find . -iname '*.png' -print0"
#finalize commands
if [ "$1" != "--pod" ]; then
echo "Pod files excluded"
attrs="$excudePodFiles $attrs"
imgPathes="find . $excudePodFiles -iname '*.png' -print0"
fi
#select project files to check
projFiles=`eval "$baseCmd $attrs"`
echo "Looking for in files: $projFiles"
#check images
eval "$imgPathes" | while read -d $'\0' png
do
name=`basename -s .png "$png"`
name=`basename -s @2x $name`
name=`basename -s @3x $name`
if grep -qhs "$name" $projFiles; then
echo "(used - $png)"
else
echo "!!!UNUSED - $png"
fi
done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 09:34:56
Możesz stworzyć skrypt powłoki, który grep
będzie twoim kodem źródłowym i porównać założone obrazy z folderem projektu.
Oto człowiek(ów) dla GREP
oraz LS
Łatwo możesz zapętlić cały plik źródłowy, zapisać obrazy w tablicy lub coś podobnego i użyć
cat file.m | grep [-V] myImage.png
Dzięki tej sztuczce możesz przeszukiwać wszystkie obrazy w kodzie źródłowym projektu!!
Mam nadzieję, że to pomoże!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 16:09:24
Napisałem skrypt lua, nie jestem pewien, czy mogę się nim podzielić, bo zrobiłem to w pracy, ale działa dobrze. Zasadniczo robi to:
Krok pierwszy - statyczne odniesienia do obrazów (Łatwy bit, pokryty innymi odpowiedziami)
- rekurencyjnie przegląda dirs obrazów i wyciąga nazwy obrazów
- usuwa nazwy obrazów .png i @2x (Nie Wymagane/używane w imageNamed:)
- tekstowo wyszukuje każdą nazwę obrazu w plikach źródłowych (musi być wewnątrz łańcucha dosłowne)
Krok drugi-dynamiczne odniesienia do obrazów (The fun bit)
- wyciąga listę wszystkich liter w źródle zawierających specyfikatory formatu (np.%@)
- zastępuje w tych łańcuchach określone formaty wyrażeniami regularnymi (np. "foo%dbar" staje się "Foo[0-9]*bar"
- tekstowo przeszukuje nazwy obrazów za pomocą łańcuchów regex
Następnie usuwa to, czego nie znalazł w żadnym z wyszukiwań.
The edge case is that image nazwy pochodzące z serwera nie są obsługiwane. Aby to zrobić, dołączamy kod serwera w tym wyszukiwaniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-02 15:04:41
Wprowadziłem bardzo niewielką modyfikację do doskonałej odpowiedzi dostarczonej przez @ EdMcManus do obsługi projektów wykorzystujących katalogi aktywów.
#!/bin/bash
for i in `find . -name "*.imageset"`; do
file=`basename -s .imageset "$i"`
result=`ack -i "$file" --ignore-dir="*.xcassets"`
if [ -z "$result" ]; then
echo "$i"
fi
done
Naprawdę nie piszę skryptów bash, więc jeśli są jakieś ulepszenia, które mają być wprowadzone tutaj (prawdopodobnie) daj mi znać w komentarzach, a ja go zaktualizuję.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-17 21:42:56
Użyłem tego frameworka: -
Http://jeffhodnett.github.io/Unused/
Działa cholernie dobrze! Tylko 2 miejsca, które widziałem problemy dotyczą, gdy nazwy obrazów są z serwera i gdy nazwa zasobu obrazu jest inna niż nazwa obrazu w folderze zasobu...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 07:06:47
Możesz wypróbować aplikację FauxPas dla Xcode. To jest naprawdę dobre w ustaleniach brakujące obrazy i wiele innych problemów/ naruszeń związanych z projektem Xcode.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 17:53:23
Korzystając z innych odpowiedzi, ta jest dobrym przykładem, jak ignorować obrazy w dwóch katalogach i nie wyszukiwać wystąpień obrazów w plikach pbxproj lub xcassets (uważaj na ikonę aplikacji i ekrany powitalne). Zmień * w --ignore-dir=*.xcassets pasujące do katalogu:
#!/bin/bash
for i in `find . -not \( -path ./Frameworks -prune \) -not \( -path ./Carthage -prune \) -not \( -path ./Pods -prune \) -name "*.png" -o -name "*.jpg"`; do
file=`basename -s .jpg "$i" | xargs basename -s .png | xargs basename -s @2x | xargs basename -s @3x`
result=`ack -i --ignore-file=ext:pbxproj --ignore-dir=*.xcassets "$file"`
if [ -z "$result" ]; then
echo "$i"
fi
done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 14:07:11
Użyj http://jeffhodnett.github.io/Unused / aby znaleźć nieużywane obrazy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-03 11:41:41