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

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

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

//先安装homebrew
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" //再安装Silver Searcher
brew 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 = ; i <= ; ++i) {
NSString *imageName = [NSString stringWithFormat:@"image_%d", i];
UIImage *image = [UIImage imageNamed:imageName];
......
}

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

ignores = {r'image_\d+', r'RLineTravelType\d+', r'address_\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- -*-

import os
import glob
import re ignores = {r'image_\d+', r'RLineTravelType\d+', r'address_\d+'} pathI = '/adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Images' def find_un_used():
pics = glob.glob1(pathI, '*.png')
pics = [pic[:-].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 False def 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')
def read_file(path):
print "read file path:", path
path = os.path.normpath(path)
if not os.path.exists(path):
print("文件路径不存在")
sys.exit(1) img_names = []
for line in open(path):
# print line
# print (line.strip())
img_names.append((line.strip()))
# print img_names
return img_names #查找hybrid项目中是否有使用未使用的图片
def find_hy_un_used():
#read file name
img_names = read_file('/adu/WorkSpaceN/QunarRN/car_rn/Car/pics.txt')
# print img_names path = '/adu/QunarGitlab/yexuxianGit/FECar/hybrid_fe/h5/src'
unused_pics = []
for pic_name in set(img_names):
print pic_name
command = 'ag "%s" %s'%(pic_name, path)
result = os.popen(command).read()
if result == '':
unused_pics.append(pic_name) txt_path = 'hypics.txt'
txt = '\n'.join(sorted(unused_pics))
print txt
os.system('echo "%s" > %s'%(txt, txt_path))
print "Done ..." # copy指定文件夹下的文件到新的文件夹中
def sourcecpy():
srcFilePath = '/adu/WorkSpaceN/QunarRN/car_rn/Car/all_unused_pics.txt'
img_names = read_file(srcFilePath)
# print img_names srcFolderPath = '/adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Images/'
desFolderPath = '/adu/WorkSpaceN/QunarRN/car_rn/Car/unusedFiles/'
for name in img_names:
source = srcFolderPath+name
# print source
# shutil.copy2(source, desFolderPath) #第一个参数是文件,第二个参数目录
targetFile = os.path.join(desFolderPath, name)
print targetFile
open(targetFile, "wb").write(open(source, "rb").read())
print "Done ..." #筛选出真正的文件名,@2x等
def findAll():
srcFilePath = '/adu/WorkSpaceN/QunarRN/car_rn/Car/hypics.txt'
img_names = read_file(srcFilePath) unused_pics = []
for file in img_names:
pics = glob.glob1('/adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Images', file+'*')
unused_pics.extend(pics) txt_path = 'all_unused_pics.txt'
txt = '\n'.join(sorted(unused_pics))
os.system('echo "%s" > %s'%(txt, txt_path)) print 'Done!!!!!'

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

清理IOS项目未使用图片脚本的更多相关文章

  1. iOS项目冗余资源扫描脚本

    iOS项目冗余资源扫描脚本 随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身. 使用方法: 1. 运行环境为m ...

  2. 给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片

    [问题] 关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件 过程中,问题转换为,需要给当前iOS项目中,添加一个图片. 类似于Windows开发中的资源文件,其中图片文件属于资源的 ...

  3. 织梦cms/dedecms清理冗余废弃未引用图片方法

    原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台dede\sys_sql_query.php代码 在该文件中搜索如下代 ...

  4. 使用脚本删除ios工程中未使用图片

    使用脚本删除ios工程中未使用图片 最近在读唐巧大神的<iOS开发进阶>,学到了一个大招:使用脚本删除ios中未使用的图片(纸书上有点小问题,参考github上的issue:使用脚本删除i ...

  5. 清理iOS工程里无用的图片,可瘦身ipa

    工程在经过多人后,往往会出现较多的垃圾,导致打包出来的ipa文件偏大,有时候我们会通过清理代码来给程序瘦身,而瘦身ipa效果明显的,主要通过清理程序里的无用图片. 推荐一个清理图片的应用 https: ...

  6. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  7. iOS 项目中用到的一些开源库和第三方组件

    iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...

  8. iOS项目中常用的第三方开源库

    1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...

  9. iOS项目的目录结构和开发流程

    转自无网不剩的博客 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法.   目录结构 AppDelegate Models Ma ...

随机推荐

  1. GMT、UTC、PDT 时间是什么?Linux下如何调整时区

       今天碰到一个时区配置问题,如果服务器时区配置不对,很可能在使用date相关函数时会出现莫名其妙的错误,现将相关时区说明及LINUX下调整时区方法记录如下,以做备忘. GMT GMT 是 Gree ...

  2. vs2012下安装VisualHG

    好久没写东西了.懒了.最近开发用到HG,记录一下.希望对用这个的有用 http://visualhg.codeplex.com/ 这里下载 VisualHG 安装完默认情况下 源代码管理出不来Visu ...

  3. 配置 dovecat 的 log

    关于 dovecot 的日志配置,请检查 conf.d/10-logging.conf 文件, 特别需要提示的是将 错误/信息 文件分开保存,建议分别设置 log_path / info_log_pa ...

  4. Get-ChildItem参数之 -Exclude,Filter,Recurse应用

    $p = "D:\PSScript" gci $p -Exclude "UpdateLog" #排除子目录"UpdateLog",但是后面不 ...

  5. 【转】Installing the libv8 Ruby gem on Centos 5.8

    转自:http://appsintheopen.com/posts/18-installing-the-libv8-ruby-gem-on-centos-5-8 First, Centos 5.8 s ...

  6. Codeforces Round #326 (Div. 2) D. Duff in Beach dp

    D. Duff in Beach Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/588/probl ...

  7. IOS 手绘地图导航

    手绘地图导航 第三方库 NAMapKit, 1)支持在手绘图上标记.缩放 2)支持在单张图片 3)支持瓦片小图片 思路 前提:美工已经切好手绘图,并告知我们当前的缩放级别. 1)确定好手绘图左上角点在 ...

  8. iOS开发技巧系列---详解KVC(我告诉你KVC的一切)

    KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...

  9. PHP做好防盗链的基本思想 防盗链的设置方法

    盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...

  10. Linux 学习笔记 文件权限

    * Linux系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户.这些账户称作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户. 所有运行在后台的服务都需要用一个系统用户账户登 ...