iOS刪除項目中未使用的圖片資源

隨著項目版本不斷的迭代開發(fā),項目中的圖片資源文件也不斷的替換拖刃,如果沒有養(yǎng)成一個好的使用習(xí)慣叛甫,時間久了饭望,就會容易產(chǎn)生很多無用圖片資源讨彼,如果手動去查找刪除那么效率會非常低冰寻,于是寫了一個python腳本來自動查找刪除這些沒用的圖片資源撰糠。文本搜索使用的是the silver searcher(ag)验毡,因為使用grep搜索代碼用戶體驗實在太差了升熊。在日常操作中虚青,我們也可以用ag取代grep菱涤。

使用方式很簡單,下面來介紹 the silver searcher的安裝方法和python腳本的使用方法如迟。腳本目前只能清除.xcassets文件中未被使用的圖片

一攻走、安裝 the silver searcher

這里只介紹MacOS安裝方式:

brew install the_silver_searcher

安裝成功之后,系統(tǒng)會新增一個ag指令來使用the silver searcher玲销,使用方式:ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]摘符,例如:

mac:Desktop mac$ ag "record_empty" /Users/mac/Desktop/Demo 
/Users/mac/Desktop/Demo/Demo/ViewController.swift
15:        let image = UIImage(named: "record_empty")
mac:Desktop mac$ 

二策吠、查找 .xcassets 文件夾腳本

find_xcassets()函數(shù)作用是查找路徑root下的所有.xcassets文件夾猴抹,代碼如下:

import os
import re 

root_path = "/Users/mac/Desktop/Code/beijingbus_ios/BJBus"
xcasset_paths = []


def find_xcassets(root):
    items = os.listdir(root)
    for item in items:
        path = os.path.join(root, item)
        if is_xcassets_dir(item):
            xcasset_paths.append(path)
            print '[+] %s' % path
        elif os.path.isdir(path):
            find_xcassets(path)

    return xcasset_paths


def is_xcassets_dir(dir):
    return re.search(r'.xcassets', dir)


if __name__ == '__main__':
    find_xcassets(root_path)

運行腳本會找出出項目中所有的.xcassets文件草讶,例如

mac:Desktop mac$ python find_xcassets.py
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Login/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/BusLines/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Trip/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Order/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Me/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Message/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/ETABus/resources/Image.xcassets
[+] /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/QRCode/resources/Image.xcassets
mac:Desktop mac$ 

三堕战、查找 .xcassets 中未使用的圖片資源腳本

remove_unused_images.py文件中引用了find_xcassets.py文件中的find_xcassets()函數(shù),代碼如下:

import glob
import os
import re
from find_xcassets import *

# 搜索目標(biāo)路徑
path = '/Users/mac/Desktop/Code/beijingbus_ios/BJBus'
# 忽略的圖片名稱正則數(shù)組
ignores = {r'guide_\d+'}


def find_unused_images_at_path(root):
    xcassets = find_xcassets(root)
    unused_images = []
    for xcasset in xcassets:
        images = glob.glob(xcasset + '/*/*.imageset')
        unused_images += find_unused_images(images)

    text_path = 'unused_images.txt'
    text = '\n'.join(sorted(unused_images))
    os.system('echo "%s" > %s' % (text, text_path))
    print 'unused images:%d' % (len(unused_images))
    print 'Done!'


def find_unused_images(images):
    image_names = [os.path.basename(image)[:-len(".imageset")] for image in images]
    unused_images = []
    for i in range(0, len(images)):
        image_name = image_names[i]
        if is_ignore(image_name):
            continue
        command = 'ag "%s" %s' % (image_name, path)
        result = os.popen(command).read()
        if result == '':
            unused_images.append(images[i])
            print 'remove %s' % (images[i])
            os.system('rm -rf %s' % (images[i]))

    return unused_images


def is_ignore(image_name):
    for ignore in ignores:
        if re.match(ignore, image_name):
            return True
    return False


if __name__ == '__main__':
    find_unused_images_at_path(path)

四、腳本使用方式:

1汁政、修改remove_unused_images.py文件中的搜索目標(biāo)路徑path為你的工程路徑缀旁;
2、在文件remove_unused_images.py中設(shè)置要忽略的圖片目木,修改數(shù)組ignores懊渡,元素可以是正則表達(dá)式字符串;
3誓禁、在終端運行腳本:

mac:Desktop mac$ python remove_unused_images.py
remove /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/BusLines/resources/Image.xcassets/BusLines/buslines_search.imageset
remove /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/BusLines/resources/Image.xcassets/BusLines/bus_lines_direction.imageset
remove /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/BusLines/resources/Image.xcassets/BusLines/bus_lines_share.imageset
remove /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Order/resources/Image.xcassets/BusOrder/bus_order_price.imageset
remove /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Order/resources/Image.xcassets/BusOrder/bus_order_score.imageset
remove /Users/mac/Desktop/Code/beijingbus_ios/BJBus/BJBus/Business/Order/resources/Image.xcassets/SubwayOrder/subway_order_time.imageset
unused images:6
Done!
mac:Desktop mac$ 

4摹恰、最后會在當(dāng)前路徑下生成一個日志文件unused_images.txt怒见,內(nèi)容為移除的圖片路徑。

代碼地址:https://github.com/wlFlyingFish/scripts/tree/main/fund_unused_images

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姜盈,一起剝皮案震驚了整個濱河市馏颂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌救拉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異派昧,居然都是意外死亡蒂萎,警方通過查閱死者的電腦和手機(jī)秆吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門纳寂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泻拦,“玉大人,你說我怎么就攤上這事腋粥÷酱恚” “怎么了金赦?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵夹抗,是天一觀的道長。 經(jīng)常有香客問我杏愤,道長已脓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任画舌,我火速辦了婚禮已慢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佑惠。我一直安慰自己,他們只是感情好旭咽,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布轻专。 她就那樣靜靜地躺著察蹲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宗收。 梳的紋絲不亂的頭發(fā)上亚兄,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天审胚,我揣著相機(jī)與錄音,去河邊找鬼膳叨。 笑死,一個胖子當(dāng)著我的面吹牛菲嘴,可吹牛的內(nèi)容都是我干的饿自。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼龄坪,長吁一口氣:“原來是場噩夢啊……” “哼昭雌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起健田,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤烛卧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妓局,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唱星,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡雳旅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年间聊,在試婚紗的時候發(fā)現(xiàn)自己被綠了攒盈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哎榴,死狀恐怖型豁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尚蝌,我是刑警寧澤迎变,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站飘言,受9級特大地震影響衣形,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姿鸿,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一谆吴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苛预,春花似錦句狼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昔馋,卻和暖如春筹吐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秘遏。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工丘薛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垄提。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓榔袋,卻偏偏與公主長得像周拐,于是被迫代替她去往敵國和親铡俐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容