清理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 ...
随机推荐
- Java中反射的三种常用方式
Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...
- IDHttp的基本用法(转)
一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...
- Java网页数据采集器[上篇-数据采集]【转载】
开篇 作为全球运用最广泛的语言,Java 凭借它的高效性,可移植性(跨平台),代码的健壮性以及强大的可扩展性,深受广大应用程序开发者的喜爱. 作为一门强大的开发语言,正则表达式在其中的应用当然是必不可 ...
- Educational Codeforces Round 1 B. Queries on a String 暴力
B. Queries on a String Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/59 ...
- hdu 5565 Clarke and baton 二分
Clarke and baton Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- HDU 5514 Frogs 容斥定理
Frogs Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5514 De ...
- HDU 3410 && POJ 3776 Passing the Message 单调队列
题意: 给定n长的数组(下标从1-n)(n个人的身高,身高各不同样 问:对于第i个人,他能看到的左边最矮的人下标.(假设这个最矮的人被挡住了,则这个值为0) 还有右边最高的人下标,同理若被挡住了则这个 ...
- 怎样破解邮箱password
破解邮箱password怎样破解邮箱password邮箱在我们的生活中日益成为一个不可或缺的角色.公司与公司之间的商贸往来,学生与老师间的学习交流,以及占非常大部分的私人信件的往来等等非常难离开它.但 ...
- grunt自动化工具
Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. 安装 CLI 首先,需要先将Grunt命令行(CLI)安装到全局环境中. npm install - ...
- MySQL 5.7: Enhanced Multi-threaded slaves
http://geek.rohitkalhans.com/2013/09/enhancedMTS-deepdive.html 科学上网 Introduction Re-applying binar ...