首页 > 代码库 > 清理IOS项目未使用图片脚本

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

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

因此我们需要清理不再使用的图片资源,在Android项目中使用Lint可以轻松的完成这个任务,iOS中没有太好的工具,借助网上的资源编写了个Python脚本。

 

安装Silver Searcher来搜索字符串,使用方法和ack,grep相似,而且搜索速度比ack,grep快。使用命令行安装:

//先安装homebrewruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"//再安装Silver Searcherbrew install the_silver_searcher

 

可以使用ag、base命令等

ag "image" ./os.popen(echo $PATH)//执行bash命令,可以通过os.popen(‘echo $PATH‘).read()读取执行的结果。

需要用到的bash命令是ag "image" ‘./‘rm -rf ‘./‘,后者用来删除文件夹。

 

ignores

可能使用下面的方式来访问图片

for (int i = 1; i <= 10; ++i) {    NSString *imageName = [NSString stringWithFormat:@"image_%d", i];    UIImage *image = [UIImage imageNamed:imageName];    ......}

因此image_1这样的图片会被脚本给检查为未使用,因此添加了ignores过滤器,包含到此内容中的图片会被忽略掉。

ignores = {rimage_\d+, rRLineTravelType\d+, raddress_\d+}def is_ignore(str):    for ignore in ignores:        #print ignore, re.match(ignore, str)        if re.match(ignore, str):            return True    print "False"    return False

 

完整代码如下unUserImg.py

# -*- coding : utf-8 -*-import osimport globimport reignores = {rimage_\d+, rRLineTravelType\d+, raddress_\d+}pathI = /adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Imagesdef find_un_used():    pics = glob.glob1(pathI, *.png)    pics = [pic[:-4].replace(@2x, ‘‘) for pic in pics]    print "pnames: ====================>>>>>>>>>>>>>>>"    print pics    print "pnames: <<<<<<<<<<<<<<<===================="    path = /adu/WorkSpaceN/QunarRN/car_rn/Car    unused_pics = []    for pic_name in set(pics):        if is_ignore(pic_name) == False:            command = ag "%s" %s%(pic_name, path)              result = os.popen(command).read()              if result == ‘‘:                  unused_pics.append(pic_name)                  #os.system(rm -rf %s % (pic_name))                          txt_path = pics.txt    txt = \n.join(sorted(unused_pics))    os.system(echo "%s" > %s%(txt, txt_path))    print Done!!!!!def is_ignore(str):    for ignore in ignores:        #print ignore, re.match(ignore, str)        if re.match(ignore, str):            return True    print "False"    return Falsedef doRm():    path = /adu/WorkSpaceN/QunarRN/car_rn/Car    txt_path = pics.txt    pics = open(txt_path).readlines()    for pic in pics:        pic = pic.strip(\n)          sd_pic = path + pic + .png          hd_pic = path + pic + @2x.png                os.system(rm "%s"%sd_pic)          os.system(rm "%s"%hd_pic)    print rn Done!if __name__ == __main__:    find_un_used()    #is_ignore(image3)    

 

直接在命令行执行: #python unUserImg.py 即可

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