一个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快。
打开终端,输入以下命令安装:
//先安装homebrew
ruby -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/Jobs/Documents/Poboke/Poboke'
#读取要删除的图片名
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!'
2016/04/11 18:03:22
为什么我编译的时候没有任何的输出呢?
2016/04/11 23:26:35
哪一个步骤的?
2015/05/17 15:15:55
对于注释代码中的图片引用代码改如何处理?
2015/05/18 08:54:42
注释代码里的图片名也是能搜到的,所以不会被删掉
2015/03/02 00:30:31
[…] 哈哈,添加截图太不方便,就不上图了,不够明白可以看文中的链接。另外,这里附上另一个删除ios中未使用图片的方法,用的是python脚本:传送门 […]
2014/08/09 07:27:37
2014/08/10 12:17:54
2014/08/06 18:42:35
2014/08/06 23:01:47
poboke.duapp.com是在百度云平台申请的