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实现点击copy,可兼容

    在实现功能时写的一个小demo,可以实现点击复制内容(任何你需要copy的文字内容data). 经测试,可兼容 chrome, edge, firefox, ie, opera, safari,至于版 ...

  2. 详解ES6中的 let 和const

      前  言 JRedu ECMAScript 6 是 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性. ES6 与上一个版本 ES5 的所有不同之处,对涉及的语 ...

  3. 《JavaScript高级程序设计》笔记二

    第二章 在HTML中使用JavaScript 要想把JavaScript放到网页中,就必须涉及到Web的核心语言HTML.向HTML页面中插入JavaScript的主要方法,就是使用<scrip ...

  4. PHP htmlspecialchars和htmlspecialchars_decode(函数)

    htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体. 函数原型:htmlspecialchars(string,quotestyle,character-set) 预定 ...

  5. Java程序设计模式系列之适配器模式

    理解适配器设计模式需要从生活中的场景进行联系,在生活当中有那些东西能够称为适配器呢?从字面上理解,"适配"的意思就是让一个东西和另一个东西配对,能够让他们一起工作,比如大家用的笔记 ...

  6. 没有在xml中引入 相关的配置文件

    错误信息如下   严重: Servlet.service() for servlet AutoReplyServlet threw exception org.apache.ibatis.except ...

  7. Vijos 1025 小飞侠的游园方案 0-1背包

    描述 经过抽签选择,小智将军第一个进入考场. 菜虫:(身上散射出华贵(?)的光芒)欢迎你,第一位挑战者!! 小智:--(走到菜虫身后,关灯)女王陛下,虽然我们国家现在很富裕,但也请您不要浪费电来用这么 ...

  8. AddNewsServlet -servlet处理响应请求

    package com.pb.news.web.servlet; import java.io.File;import java.io.IOException;import java.util.Dat ...

  9. Luogu 1090 合并果子(贪心,优先队列,STL运用)

    Luogu 1090 合并果子(贪心,优先队列,STL运用) Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每 ...

  10. MongoDB安全及身份认证

    前面的话 本文将详细介绍MongoDB安全相关的内容 概述 MongoDB安全主要包括以下4个方面 1.物理隔离 系统不论设计的多么完善,在实施过程中,总会存在一些漏洞.如果能够把不安全的使用方与Mo ...