清理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 = 1; i <= 10; ++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-8 -*-

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[:-4].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‘)

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

时间: 09-11

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

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

最近在读唐巧大神的<iOS开发进阶>,学到了一个大招:使用脚本删除ios中未使用的图片(纸书上有点小问题,参考github上的issue:使用脚本删除ios中未使用图片). issue中得到的建议是:将代码保存在一个.sh文件中,在xcode里面执行shell脚本文件.看到这里,头瞬间大了,大学学的shell都还给linux老师了....还有xcode中怎么执行脚本啊??? google一下,找到mac下创建.sh文件的小白方法:教你在mac上面创建可执行脚本文件.当然还有XCode中执行脚本

关于目前自己iOS项目使用的第三方开源库

1.AFNetworking 目前比较推荐的iOS网络请求组件,默认网络请求是异步,通过block回调的方式对返回数据进行处理. 2.FMDB 对sqlite数据库操作进行了封装,demo也比较简单. 3.MBProgressHUD 也是iOS项目常用的一个组件,用于显示过渡效果的,比如网络请求之前显示loading,网络结束隐藏loading.建议封装在BaseViewController中,所有ViewController继承就能使用. 4.MJRefresh 这个是传智播客李明杰老师的作品

ios项目开发汇总

UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www.wufangbo.com/ios-iphone-app/ iOS界面设计切图小结  http://www.apkbus.com/android-140341-1-1.html @2x图片等适应不同分辨率手机   http://blog.sina.com.cn/s/blog_945590aa0101c

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

iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有更多的时间和精力能更加专注的做好自己的产品 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图缓存组件 UICKeyChainStore 存放用户账号密码组件 Reachability 监

iOS项目生成通用Windows应用

WinObjc - 使用iOS项目生成通用Windows应用 Github上一周年的WinObjc项目最近发布了预览版本,终于等到了这一天.WinObjc项目就是Build 2015大会上微软宣布的Project IslandWood项目,致力于将iOS应用快速移植成UWP应用.废话不多说,让我们来看看WinObjc项目到底如何使用. 开始之前 开始转制iOS项目前我们要先部署好WinObjc工具,工具链如下: 一台安装了Visual Studio的Windows 10 PC,2015社区版可以

iOS项目开发实战——自定义设置导航栏和状态栏背景

在iPhone的状态栏顶部,会有很多的信息,如运营商,信号强弱,网络状况,时间,电量等等.我们使用很多的App,如微信,QQ等等,都会发现导航栏的背景或者说图片都是重新设置过的,这样就能增加用户体验,也能更加节省下方的屏幕空间.那如何来设置导航栏的图片呢? (1)首先建立一个iOS项目,语言选择Swift.并且在Images.xcassets中拖入一张图片,大小要自己设置好,用来作为顶部导航栏的背景. (2)在Main.storyboard中选中ViewController,然后选择Editor

iOS 8:【转】iOS项目的目录结构和开发流程

源地址:http://limboy.me/ios/2013/09/23/build-ios-application.html 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法. 目录结构 AppDelegate Models Macro General Helpers Vendors Sections Resources 一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化. AppD

开源 iOS 项目分类索引大全

GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BlocksKit 将Block风格带入UIKit和Founcation cocoa-helpers 一些Cocoa的扩展 2年前的工程 CoconutKit 一系列扩展和一些自定组件 STUtils 一系列扩展包 PSFoundation 一系列扩展 和功能增强 ConciseK

iOS项目开发过程中的目录结构(转)

iOS项目开发过程中的目录结构 我在这个目录结构方面真是吃了不少苦,开始总是觉得快点写快点写,后来发现只有快是不行的,在没有给整个项目的结构有一个清楚的认识和了解之前就匆匆动笔(敲代码啦)是非常冒失的, 好在在后来修改的过程中慢慢琢磨出来一套目录结构,现在发出来给大家参考一下. 项目主目录结构如图: 1.Network主要用于进行网络请求,以及请求完成后对数据进行处理使用, 2.Category:类目,这个文件夹放在这里我觉得是不太准确的,但是具体应该放在哪里我一直无法确实下来 3.Contro

iOS项目开发实战——storyboard设置界面技巧与注意事项

在iOS开发中,使用Main.storyboard来设计界面是每一个iOS开发人员需要面对的问题,使用storyboard相比较Android中使用XML来设置布局,有优点也有缺陷,现在我们来谈谈storyboard的设计技巧. (1)直接使用鼠标右键可以直接缩放storyboard的缩放比例.当然你也可以用触摸板使用2根手指缩放. . (2)拖拽控件绑定到代码中,不一定要从设计界面的控件中进行拖拽,也可以直接从左侧的列表中拖拽,这样会更加清晰方便. . (3)如何添加修改超过一屏的控件.我们把