清除iOS工程里未使用的图片

时间:2014-08-04 | 分类:优雅的iOS,学习园地 | 浏览:22682 | 评论:9 | 发表评论

一个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!'
标签: , ,
本文链接: 清除iOS工程里未使用的图片
版权所有: 破博客, 转载请注明本文出处。

9个评论

  1. xcode
    2016/04/11 18:03:22

    为什么我编译的时候没有任何的输出呢?

  2. xdnm
    2015/05/17 15:15:55

    对于注释代码中的图片引用代码改如何处理?

    • admin
      2015/05/18 08:54:42

      注释代码里的图片名也是能搜到的,所以不会被删掉

  3. […] 哈哈,添加截图太不方便,就不上图了,不够明白可以看文中的链接。另外,这里附上另一个删除ios中未使用图片的方法,用的是python脚本:传送门 […]

  4. 一块钱的世界
    2014/08/09 07:27:37

    :eek: :cool: 看不懂。求教点基础。

    • admin
      2014/08/10 12:17:54

      :sad: 看看python的基础就看得懂了

  5. 大飞
    2014/08/06 18:42:35

    :!: 博主,请问你的这个网址是在哪里申请到的啊? poboke.duapp.com 这个域名点击后就跳转到你网站了,能告诉我这个网址是在哪里申请的吗,谢谢。

    • admin
      2014/08/06 23:01:47

      poboke.duapp.com是在百度云平台申请的

发表评论

您的昵称: *

您的邮箱: * (显示gravatar头像)

联系方式: