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

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

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

  1. //先安装homebrew
  2. ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
  3.  
  4. //再安装Silver Searcher
  5. brew install the_silver_searcher

可以使用ag、base命令等

  1. ag "image" './'
  2.  
  3. os.popen('echo $PATH')
  4.  
  5. //执行bash命令,可以通过os.popen('echo $PATH').read()读取执行的结果。

需要用到的bash命令是ag "image" './'rm -rf './',后者用来删除文件夹。

ignores

可能使用下面的方式来访问图片

  1. for (int i = ; i <= ; ++i) {
  2. NSString *imageName = [NSString stringWithFormat:@"image_%d", i];
  3. UIImage *image = [UIImage imageNamed:imageName];
  4. ......
  5. }

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

  1. ignores = {r'image_\d+', r'RLineTravelType\d+', r'address_\d+'}
  2.  
  3. def is_ignore(str):
  4. for ignore in ignores:
  5. #print ignore, re.match(ignore, str)
  6. if re.match(ignore, str):
  7. return True
  8.  
  9. print "False"
  10. return False

完整代码如下unUserImg.py

  1. # -*- coding : utf- -*-
  2.  
  3. import os
  4. import glob
  5. import re
  6.  
  7. ignores = {r'image_\d+', r'RLineTravelType\d+', r'address_\d+'}
  8.  
  9. pathI = '/adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Images'
  10.  
  11. def find_un_used():
  12. pics = glob.glob1(pathI, '*.png')
  13. pics = [pic[:-].replace('@2x', '') for pic in pics]
  14. print "pnames: ====================>>>>>>>>>>>>>>>"
  15. print pics
  16. print "pnames: <<<<<<<<<<<<<<<===================="
  17.  
  18. path = '/adu/WorkSpaceN/QunarRN/car_rn/Car'
  19. unused_pics = []
  20. for pic_name in set(pics):
  21. if is_ignore(pic_name) == False:
  22. command = 'ag "%s" %s'%(pic_name, path)
  23. result = os.popen(command).read()
  24. if result == '':
  25. unused_pics.append(pic_name)
  26. #os.system('rm -rf %s' % (pic_name))
  27.  
  28. txt_path = 'pics.txt'
  29. txt = '\n'.join(sorted(unused_pics))
  30. os.system('echo "%s" > %s'%(txt, txt_path))
  31.  
  32. print 'Done!!!!!'
  33.  
  34. def is_ignore(str):
  35. for ignore in ignores:
  36. #print ignore, re.match(ignore, str)
  37. if re.match(ignore, str):
  38. return True
  39.  
  40. print "False"
  41. return False
  42.  
  43. def doRm():
  44. path = '/adu/WorkSpaceN/QunarRN/car_rn/Car'
  45.  
  46. txt_path = 'pics.txt'
  47. pics = open(txt_path).readlines()
  48.  
  49. for pic in pics:
  50. pic = pic.strip('\n')
  51. sd_pic = path + pic + '.png'
  52. hd_pic = path + pic + '@2x.png'
  53.  
  54. os.system('rm "%s"'%sd_pic)
  55. os.system('rm "%s"'%hd_pic)
  56.  
  57. print 'rn Done!'
  58.  
  59. if __name__ == '__main__':
  60. find_un_used()
  61. #is_ignore('image3')
  1. def read_file(path):
  2. print "read file path:", path
  3. path = os.path.normpath(path)
  4. if not os.path.exists(path):
  5. print("文件路径不存在")
  6. sys.exit(1)
  7.  
  8. img_names = []
  9. for line in open(path):
  10. # print line
  11. # print (line.strip())
  12. img_names.append((line.strip()))
  13. # print img_names
  14. return img_names
  15.  
  16. #查找hybrid项目中是否有使用未使用的图片
  17. def find_hy_un_used():
  18. #read file name
  19. img_names = read_file('/adu/WorkSpaceN/QunarRN/car_rn/Car/pics.txt')
  20. # print img_names
  21.  
  22. path = '/adu/QunarGitlab/yexuxianGit/FECar/hybrid_fe/h5/src'
  23. unused_pics = []
  24. for pic_name in set(img_names):
  25. print pic_name
  26. command = 'ag "%s" %s'%(pic_name, path)
  27. result = os.popen(command).read()
  28. if result == '':
  29. unused_pics.append(pic_name)
  30.  
  31. txt_path = 'hypics.txt'
  32. txt = '\n'.join(sorted(unused_pics))
  33. print txt
  34. os.system('echo "%s" > %s'%(txt, txt_path))
  35. print "Done ..."
  36.  
  37. # copy指定文件夹下的文件到新的文件夹中
  38. def sourcecpy():
  39. srcFilePath = '/adu/WorkSpaceN/QunarRN/car_rn/Car/all_unused_pics.txt'
  40. img_names = read_file(srcFilePath)
  41. # print img_names
  42.  
  43. srcFolderPath = '/adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Images/'
  44. desFolderPath = '/adu/WorkSpaceN/QunarRN/car_rn/Car/unusedFiles/'
  45. for name in img_names:
  46. source = srcFolderPath+name
  47. # print source
  48. # shutil.copy2(source, desFolderPath) #第一个参数是文件,第二个参数目录
  49. targetFile = os.path.join(desFolderPath, name)
  50. print targetFile
  51. open(targetFile, "wb").write(open(source, "rb").read())
  52. print "Done ..."
  53.  
  54. #筛选出真正的文件名,@2x等
  55. def findAll():
  56. srcFilePath = '/adu/WorkSpaceN/QunarRN/car_rn/Car/hypics.txt'
  57. img_names = read_file(srcFilePath)
  58.  
  59. unused_pics = []
  60. for file in img_names:
  61. pics = glob.glob1('/adu/WorkSpaceN/QunarRN/car_rn/CarBundle/Images', file+'*')
  62. unused_pics.extend(pics)
  63.  
  64. txt_path = 'all_unused_pics.txt'
  65. txt = '\n'.join(sorted(unused_pics))
  66. os.system('echo "%s" > %s'%(txt, txt_path))
  67.  
  68. 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. android知乎小圆圈刷新效果

    前几天看到包括知乎在内的很多应用都使用到了一种小圆圈划动刷新的效果,仔细查了一下,原来是android v7包里面最新的刷新效果.使用起来也是十分简单的. 首先先建立一个activity,在布局文件里 ...

  2. 通过lldb远程调试iOS App

    苹果从Xcode5开始弃用了gcc及gdb, 只能使用llvm用lldb. 在越狱机上虽然仍然可以使用gdb进行调试,但lldb是趋势.下面就介绍一种通过Wifi或者USB,在Mac上使用lldb对i ...

  3. linux常用命令-搜索

    1.find $ find . -name nginx* $ find . -name nginx* -ls $ find . -type f -mmin -10 搜索当前目录中,所有过去10分钟中更 ...

  4. 关于Python中的self

    虽然我现在写过一些Python代码,但实际上几乎还没用过Class,而且一直觉得一个很别扭的事情是,Class中的函数都要写个参数self,虽然实例化调用的时候不需要. 当然,一开始就知道Python ...

  5. 【M7】千万不要重载&&,||和,操作符

    1.C++对于真假值表达式采用“骤死式”评估方法,比如&&,||. if( p!=NULL && strlen(p)>10)   如果p为NULL,后面的strl ...

  6. GLSL实现Fresnel And Chromatic aberration 【转】

    http://blog.csdn.net/a3070173/archive/2008/11/13/3290091.aspx 使用Shader实现菲涅尔和颜色色散效果很简单,在Cg教程和OpenGL S ...

  7. IOS 手绘地图导航

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

  8. fedora 安装lamp

    一.安装apache服务器1.1使用yum进行安装:# yum install httpd1.2配置Apache能够随系统启动而启动#chkconfig --levels 235 httpd on1. ...

  9. c++暂停

    #include<cstdlib> 加入这个 然后  system("pause");

  10. Android基本控件之RadioGroup

    我们在手机上经常看到一堆选项,但是我们只能选择一个,那么在Android中,这个控件就叫做RadioButton,也就是单选按钮的意思,他们之所以能够达到只能选择一个的效果,是因为有一个RadioGr ...