一个ios工程经过多次改版之后,往往有很多废弃的图片没有清理掉,如果清理掉这些图片就可以让ipa包的体积大大减小。 我做的项目里有700多张图片,其中没用到的就有200多张,所以清理图片还是很有必要的。
一般ios项目的目录结构大致如下:
/Users/Jobs/Documents/Poboke //项目文件夹 │ ├── Poboke.xcodeproj //工程启动文件 │ └── Poboke //资源文件夹 ├── main.m ├── AppDelegate.h ├── AppDelegate.m ├── ViewController.h //代码文件 ├── ViewController.m ├── Poboke-Info.plist ├── Poboke-Prefix.pch │ ├── Icon.png ├── Icon@2x.png ├── Icon-60@2x.png ├── button.png ├── button@2x.png //图片文件 ├── dialog.png ├── dialog@2x.png ├── line@2x.png └── ......
一、安装Silver Searcher。
在linux系统里可以使用ack-grep来搜索内容,但是mac系统里没有
ack-grep
。
不过mac系统可以安装Silver Searcher来搜索字符串,使用方法和ack-grep相似,而且搜索速度比ack-grep快。
打开终端,输入以下命令安装:
//先安装homebrewruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//再安装Silver Searcher brew install the_silver_searcher
安装完后就可以通过ag命令(ack-grep的缩写)来搜索字符串了。
二、搜索ios工程里没用到的图片。
ios的图片分为标清和高清两种,高清图片的名字是以”@2x”结尾的。一般代码里不会写上”@2x”,所以搜索时要先把”@2x”去掉。如果搜索到的结果为空字符串,说明代码里没有引用该图片。
获取到所有未使用的图片名,排序后保存到pics.txt文件里,python代码如下:
# -*- coding : utf-8 -*- import os import glob #资源路径 path = '/Users/Jobs/Documents/Poboke/Poboke' #获取资源路径下所有的png图片名 pics = glob.glob1(path, '*.png') pics = [pic[:-4].replace('@2x', '') for pic in pics] #找出未使用的图片 unused_pics = [] for pic in set(pics): command = 'ag "%s" %s'%(pic, path) result = os.popen(command).read() if result == '': unused_pics.append(pic) #将未使用的图片文件名保存到文本 txt_path = 'pics.txt' txt = '\n'.join(sorted(unused_pics)) os.system('echo "%s" > %s'%(txt, txt_path)) print 'Done!'
三、手动检查图片名。
把图片名保存到文本里是为了先确认一下是否有误搜到的图片。
比如搜到了这么几张未使用的图片:
star_01.png
star_02.png
star_03.png
star_04.png
而代码是这么写的:
for (int i = 1; i <= 4; ++i) { NSString *imageName = [NSString stringWithFormat:@"star_%02i", i]; UIImage *image = [UIImage imageNamed:imageName]; ...... }
那么在代码里肯定搜索不到”star_01″,而实际上用到了这张图片,所以要看文本里的图片名有没有含有连续数字,有的话要再手动搜索一下代码。
四、批量删除图片。
用python代码读取pics.txt的内容,将里面的图片删掉,代码如下:
# -*- coding : utf-8 -*- import os #资源路径 path = '/Users/Nanker/Desktop/Manager/' #读取要删除的图片名 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 'Done!'