清理IOS项目未使用图片脚本
项目经过需求的变更,产品迭代,会经过多次的改版,有些以前不再使用的图片不一定能够及时的清理掉,这些无用的图片一方面让项目图片资源的结构更加的复杂,另一方面会导致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项目未使用图片脚本的更多相关文章
- iOS项目冗余资源扫描脚本
iOS项目冗余资源扫描脚本 随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身. 使用方法: 1. 运行环境为m ...
- 给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片
[问题] 关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件 过程中,问题转换为,需要给当前iOS项目中,添加一个图片. 类似于Windows开发中的资源文件,其中图片文件属于资源的 ...
- 织梦cms/dedecms清理冗余废弃未引用图片方法
原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台dede\sys_sql_query.php代码 在该文件中搜索如下代 ...
- 使用脚本删除ios工程中未使用图片
使用脚本删除ios工程中未使用图片 最近在读唐巧大神的<iOS开发进阶>,学到了一个大招:使用脚本删除ios中未使用的图片(纸书上有点小问题,参考github上的issue:使用脚本删除i ...
- 清理iOS工程里无用的图片,可瘦身ipa
工程在经过多人后,往往会出现较多的垃圾,导致打包出来的ipa文件偏大,有时候我们会通过清理代码来给程序瘦身,而瘦身ipa效果明显的,主要通过清理程序里的无用图片. 推荐一个清理图片的应用 https: ...
- 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. ...
- iOS 项目中用到的一些开源库和第三方组件
iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...
- iOS项目中常用的第三方开源库
1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...
- iOS项目的目录结构和开发流程
转自无网不剩的博客 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法. 目录结构 AppDelegate Models Ma ...
随机推荐
- 数据库MySQL常用命令复习
-- 查看数据库 show databases; -- 创建数据库 create database '数据库名'; -- 删除数据库 drop database '数据库名'; -- 选库 use ' ...
- U3D中的协同等待函数
WaitForSeconds.WaitForseconds等待函数; 创建一个yield指令,来等待给定的秒数; using UnityEngine; using System.Collections ...
- python的深拷贝和浅拷贝
import copy list1=[1,2,3,4,5] c_list1=list1 c_list1[0]=-1 for i in list1: print str(i)+' ', #输出的世 -1 ...
- CentOS 6.5部署HTTP WEB服务器和FTP服务器
转载自:http://www.server110.com/linux/201403/8613.html [题记]本文使用CentOS 6.5 minimal快速搭建HTTP服务器和仅供授权用户登陆的F ...
- 使用WPF来创建 Metro UI程序
本文转载:http://www.cnblogs.com/TianFang/p/3184211.html 这个是我以前网上看到的一篇文章,原文地址是:Building a Metro UI with W ...
- stm32上的Lava虚拟机开发进度汇报(3)
感觉遇到一个瓶颈了,这几天都没有什么进度. 前几天把函数和一些最基本的伪指令实现了一下,能跑一点仅使用了绘图函数的lav,但是函数调用的问题一直没解决. 后来发现是粗心漏写了个++,解决了函数调用的问 ...
- SAP BW标准模型简介(BW星形模型 BW Star Schema )
标准星型模型是 数据仓库中一种常用的组织信息和数据的多维数据模型.它由中心的一个事实表(Fact Table)和一些围绕它的维度表(Dimensional Table)组成. 事实(Fact)着眼于 ...
- Codeforces Gym 100203G G - Good elements 暴力
G - Good elementsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- LumiSoft.Net邮件接收乱码问题解决
本文非本人编写,转载自:http://www.cnblogs.com/youngerliu/archive/2013/05/27/3101488.html 今天遇到用LumiSoft.Net这个组件收 ...
- iOS开发——图形编程OC篇&粘性动画以及果冻效果
粘性动画以及果冻效果 在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲 ...