有没有人在Xcode项目中找到未使用的图像?(假设代码或项目文件中的所有文件都是由名称引用的 - 没有代码生成的文件名.)
这些文件往往会在项目的整个生命周期中累积,很难判断删除任何给定的png是否安全.
Ed *_*nus 80
这是一个更强大的解决方案 - 它会检查任何文本文件中对basename的任何引用.请注意上面的解决方案不包括故事板文件(完全可以理解,当时它们不存在).
Ack非常快,但如果这个脚本频繁运行,还有一些明显的优化.例如,如果您同时具有视网膜/非视网膜资产,则此代码会检查每个基本名称两次.
#!/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
Run Code Online (Sandbox Code Playgroud)
Rom*_*man 59
对于未包含在项目中但仅在文件夹中挂起的文件,您可以按
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
Run Code Online (Sandbox Code Playgroud)
rob*_*rob 24
我尝试了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
Run Code Online (Sandbox Code Playgroud)
Aru*_*run 12
也许你可以尝试修长,做得不错.
更新:有了emcmanus的想法,我继续创建一个没有确认的小工具,只是为了避免在机器中进行额外的设置.
https://github.com/arun80/xcodeutils
只有这个脚本对我有用,甚至可以处理文件名中的空格:
更新以支持swift文件和cocoapod.默认情况下,它不包括Pods目录并仅检查项目文件.要运行以检查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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33082 次 |
| 最近记录: |