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. CenOS http 安装与运行

    1.yum安装http [root@localhost ~]# yum install httpd -y 2.启动http服务 [root@localhost ~]# systemctl start  ...

  2. 浏览器内核 网址分解 web服务器

    浏览器最核心的部分是渲染引擎(Rendering Engine),我们一般习惯称之为"浏览器内核",其负责解析网页语法(如标准通用标记语言的子集HTML.JavaScript)并渲 ...

  3. phpcms v9栏目列表调用每一篇文章内容方法

    {pc:content action="lists" catid="$catid" num="25" order="id DESC ...

  4. JVM中class文件探索与解析(一)

    一直想成为一名优秀的架构师的我,转眼已经工作快两年了,对于java内核了解甚少,闲来时间,看看JVM,吧自己的一些研究写下来供大家参考,有不对的地方请指正. 废话不多说,一起来看看JVM中类文件是如何 ...

  5. java web数据库(SQL 2008+IDEA 14)环境配置

    废话少说,在之前已经配置过IDEA+Tomcat的环境之后,现在需要进行数据库配置: 1.首先,SQL SERVER2008数据库的安装 (1)将下载的sqlserver 2008数据库进行解压,点击 ...

  6. 在Linux与Windows上获取当前堆栈信息

    在编写稳定可靠的软件服务时经常用到输出堆栈信息,以便用户/开发者获取准确的运行信息.常用在日志输出,错误报告,异常检测. 在Linux有比较简便的函数获取堆栈信息: #include <stdi ...

  7. jquery fadeIn用法

    $("#msgSpan").fadeIn("slow"); setTimeout('$("#msgSpan").hide("slo ...

  8. ajax同步请求JS代码

    ajax同步请求JS代码 <script type="text/javascript"> var txt = document.getElementById('txt' ...

  9. 如何使用VBS脚本给在直播间授权登陆

    直接上代码,看不懂说明你技术不够 set WshShell=WScript.CreateObject("WScript.Shell") Dim ie Set mouse=New S ...

  10. UML中关联(Association)和依赖(Dependency)的区别

    原文转自:http://blog.csdn.net/metasearch/article/details/2334853 在UMLCHINA精华区,看到了一些关联和依赖的讨论,似乎越讲越糊涂.我想谈一 ...