[xcode] 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


답변

LSUnusedResources를 사용해보십시오 .

jeffhodnett의 Unused에 크게 영향을 받지만 솔직히 Unused는 매우 느리고 결과가 완전히 정확하지는 않습니다. 그래서 성능을 최적화했습니다. 검색 속도가 미사용보다 빠릅니다.


답변

나는 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


답변

날씬한 것을 시도 하고 괜찮은 일을 할 수 있습니다 .

업데이트 : emcmanus 아이디어를 사용하여 컴퓨터에서 추가 설정을 피하기 위해 ack없이 작은 유틸리티를 만들었습니다.

https://github.com/arun80/xcodeutils


답변

이 스크립트만이 파일 이름의 공간을 처리하는 나를 위해 작동합니다.

편집하다

지원에 업데이트 swift파일과 cocoapod. 기본적으로 Pod 디렉터리를 제외하고 프로젝트 파일 만 확인합니다. 실행하여 Pods 폴더도 확인하려면 --podattrbiute로 실행 하십시오.

/.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 스크립트를 작성하지 않으므로 여기에서 개선해야 할 사항이 있으면 (아마도) 의견으로 알려 주시면 업데이트하겠습니다.