清除iOS工程里未使用的图片
一个iOS工程经过多次改版之后,往往有很多废弃的图片没有清理掉,如果清理掉这些图片就可以让ipa包的体积大大减小。
我做的项目里有700多张图片,其中没用到的就有200多张,所以清理图片还是很有必要的。
一般iOS项目的目录结构大致如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| /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
命令来搜索内容,但是MacOS系统里没有ack-grep
。
不过MacOS系统可以安装Silver Searcher
来搜索字符串,使用方法和ack-grep
相似,而且搜索速度比ack-grep
快。
打开终端,输入以下命令安装:
1 2 3 4 5
| ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install the_silver_searcher
|
安装完后就可以通过ag
命令(ack-grep
的缩写)来搜索字符串了。
二、搜索iOS工程里没用到的图片
iOS的图片分为标清和高清两种,高清图片的名字是以"@2x"
结尾的。一般代码里不会写上"@2x"
,所以搜索时要先把"@2x"
去掉。如果搜索到的结果为空字符串,说明代码里没有引用该图片。
获取到所有未使用的图片名,排序后保存到pics.txt
文件里,Python代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
import os import glob
path = '/Users/Jobs/Documents/Poboke/Poboke'
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!')
|
三、手动检查图片名
把图片名保存到文本里是为了先确认一下是否有误搜到的图片。
比如搜到了这么几张未使用的图片:
1 2 3 4
| star_01.png star_02.png star_03.png star_04.png
|
而代码是这么写的:
1 2 3 4 5
| for (int i = 1; i <= 4; ++i) { NSString *imageName = [NSString stringWithFormat:@"star_%02i", i]; UIImage *image = [UIImage imageNamed:imageName]; }
|
那么在代码里肯定搜索不到"star_01"
,而实际上用到了这张图片。
所以需要看文本里的图片名有没有含有连续数字,有的话在工程里手动搜索一下关键代码。
如果发现用到图片的话,就手动将图片名从文本里删掉。
四、批量删除图片
用Python代码读取pics.txt
的内容,将里面的图片删掉,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
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!')
|