Xcode 프로젝트에서 사용하지 않는 이미지를 찾는 방법은 무엇입니까?
Xcode 프로젝트에서 사용하지 않는 이미지를 사용하는 한 줄이 있습니까? (모든 파일이 코드 또는 프로젝트 파일의 이름으로 참조된다고 가정하면 코드 생성 파일 이름이 없습니다.)
이 파일은 프로젝트의 수명 동안 쌓이는 경향이 있고 주어진 png를 삭제해도 안전한지 알기 어려운 수 있습니다.
프로젝트에 포함되어 있지 않지만 폴더에있는 파일의 경우
cmd ⌘+ alt ⌥+A
회색으로 표시되지 않습니다.
xib 또는 코드에서 참조되지 않는 파일의 경우 다음과 같이 작동 할 수 있습니다.
#!/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
이보다 강력한 솔루션입니다-그것은 모든 텍스트 파일의 기본 이름을 참조합니다. 스토리 보드를 포함하지 않은 위의 솔루션에 유의하십시오.
Ack는 매우 빨리 만들지 만,이 펼쳐가 자주 실행 몇 가지 명백한 최적화가 있습니다. 예를 들어이 코드는 retina / non-retina 자산이있는 경우 모든 기본 이름을 두 번 확인합니다.
#!/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
나는 Roman의 솔루션을 시도하고 망막 이미지를 처리하기 위해 몇 가지 조정을 추가했습니다. 잘 작동하지만 이미지 이름은 코드에서 프로그래밍 방식으로 생성 될 수 있으며 펼쳐지는 것이 이미지를 참조하지 않습니다. 예를 들어,
NSString *imageName = [NSString stringWithFormat:@"image_%d.png", 1];
펼쳐이 image_1.png
는 참조되지 않은 것으로 잘못 인식 합니다.
수정 된 펼쳐지는 다음과 가변합니다.
#!/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
LSUnusedResources를 사용합니다 .
jeffhodnett의 미사용에 크게 영향을 받지만 솔직히 미사용은 매우 느리고 결과가 제거됩니다. 그래서 성능을 최적화했습니다. 검색 속도가 미사용보다 빠 사용.
날씬한 것을 시도 하고 괜찮은 일을 할 수 있습니다 .
업데이트 : emcmanus 아이디어를 사용하여 컴퓨터에서 추가 설정을 피하기 위해 ack없이 작은 유틸리티를 만들었습니다.
https://github.com/arun80/xcodeutils
이 펼쳐 만이 파일 이름의 공간을 처리하는 나를 위해 작동합니다.
편집하다
지원에 업데이트 swift
파일과 cocoapod
. 기본적으로 Pod 디렉터리를 제외하고 프로젝트 파일 만 확인합니다. 실행하여 포드 폴더도 확인하려면 --pod
attrbiute로 실행 하십시오.
/.finunusedimages.sh --pod
실제 펼쳐지는 다음과 가변합니다.
#!/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
자산 카탈로그를 활용하는 프로젝트를 처리하기 위해 @EdMcManus가 제공 한 훌륭한 답변을 아주 약간 수정했습니다.
#!/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
나는 실제로 bash 스크립트를 작성하지 않으므로 여기서 개선해야 할 사항이 있으면 주석으로 알려 주시면 업데이트하겠습니다.
grep
소스 코드를 작성하고 발견 된 이미지를 프로젝트 폴더와 비교할 수있는 셸 스크립트를 만들 수 있습니다 .
쉽게 모든 소스 파일을 반복하고 이미지를 배열로 저장하거나 동일하게 사용할 수 있습니다.
cat file.m | grep [-V] myImage.png
이 트릭을 사용하면 프로젝트 소스 코드의 모든 이미지를 검색 할 수 있습니다 !!
도움이 되었기를 바랍니다!
루아 스크립트를 작성했는데 직장에서했기 때문에 공유 할 수 있을지 모르겠지만 잘 작동합니다. 기본적으로 다음을 수행합니다.
1 단계-정적 이미지 참조 (다른 답변에서 다루는 쉬운 부분)
- 이미지 디렉토리를 재귀 적으로 살펴보고 이미지 이름을 가져옵니다.
- .png 및 @ 2x의 이미지 이름을 제거합니다 (필수 / imageNamed :에서 사용되지 않음).
- 소스 파일에서 각 이미지 이름을 텍스트로 검색합니다 (문자열 리터럴 내에 있어야 함).
2 단계-동적 이미지 참조 (재미있는 부분)
- 형식 지정자를 포함하는 소스의 모든 문자열 리터럴 목록을 가져옵니다 (예 : % @).
- 이 문자열의 형식 지정자를 정규식으로 대체합니다 (예 : "foo % dbar"는 "foo [0-9] * bar"가됩니다.)
- 이러한 정규식 문자열을 사용하여 이미지 이름을 텍스트로 검색합니다.
그런 다음 두 검색에서 찾지 못한 모든 것을 삭제합니다.
가장 중요한 경우는 서버에서 가져온 이미지 이름이 처리되지 않는다는 것입니다. 이를 처리하기 위해이 검색에 서버 코드를 포함합니다.
Xcode 용 FauxPas 앱을 사용해 볼 수 있습니다 . Xcode 프로젝트와 관련된 누락 된 이미지 및 기타 많은 문제 / 위반을 찾는 데 정말 좋습니다.
다른 답변을 사용하면 이것은 두 디렉토리의 이미지를 무시하고 pbxproj 또는 xcassets 파일에서 이미지 발생을 검색하지 않는 방법에 대한 좋은 예입니다 (앱 아이콘 및 스플래시 화면에주의하십시오). --ignore-dir = *. xcassets에서 *를 디렉토리와 일치하도록 변경합니다.
#!/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
이 프레임 워크를 사용했습니다.
http://jeffhodnett.github.io/Unused/
잘 작동합니다! 내가 문제를 본 두 곳은 이미지 이름이 서버에서 왔고 이미지 자산 이름이 자산 폴더 내의 이미지 이름과 다른 경우입니다.
http://jeffhodnett.github.io/Unused/ 를 사용 하여 사용하지 않는 이미지를 찾으십시오.
참고 URL : https://stackoverflow.com/questions/6113243/how-to-find-unused-images-in-an-xcode-project
'IT' 카테고리의 다른 글
.htaccess 파일에서 $ 1 [QSA, L]은 무엇을 의미합니까? (0) | 2020.08.29 |
---|---|
stdin과 SSL을 연결하는 방법은 무엇입니까? (0) | 2020.08.29 |
Django URL 리디렉션 (0) | 2020.08.29 |
코드 숨김에서 어떤 속성에 액세스하는 방법은 무엇입니까? (0) | 2020.08.29 |
VBA를 사용하여 사용자 지정 리본 탭을 추가하는 방법은 무엇입니까? (0) | 2020.08.29 |