国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

清理ios項目無用的圖片資源

Sike / 1607人閱讀

摘要:及時的清理掉不用的圖片資源很有必要,在項目中使用可以輕松的完成這個任務,而在上沒有找到比較好的清理無用圖片的工具。參考網上的例子,寫了一個清除項目中無用的圖片資源的腳本。

項目經過需求的變更,產品迭代,再多次的改版之后,有些不再使用的圖片不一定能夠及時的清理掉,這些無用的圖片一方面讓項目圖片資源的結構更加的復雜,另一方面會導致ipa包的體積變大。
及時的清理掉不用的圖片資源很有必要,在Android項目中使用Lint可以輕松的完成這個任務,而在ios上沒有找到比較好的清理無用圖片的工具。
參考網上的例子,寫了一個python清除ios項目中無用的圖片資源的腳本。首先介紹下ios中使用圖像資源的方式。

Images Assets

ios中使用 Images Assets管理圖片,項目的圖片資源一般都放在這Image Assets里面,圖片會放到*.imageset目錄里,對應的有1x,2x3x的圖,還有一個Contents.json的描述文件。 清除圖片資源需要把*.imageset清除掉,包括圖片文件和json文件。 想要清除掉不用的圖片資源,就需要知道圖片資源怎么被引用的,再查找到未被引用的圖片資源就可以清除掉了。
ios代碼中調用圖片的方法一般是:

[UIImage imageNamed:@"image"]

xib中調用圖片的方法是用xml的方式描述,圖片資源作為image的名稱:

                 
 

因此清理的思路就是搜索項目中的圖片文件,如果找到對于的"name"xib或者ios代碼中存在,說明該圖片被使用了,不然的話該圖片即可被清理掉。
先看看如何方便的搜索圖片文件有沒有被使用吧!

搜索文件

搜索文件的方式可以使用grep,ack都是不錯的工具,但是有一種更快,更好的搜索文件內容的方式:The Silver SearcherThe Silver Searcher使用起來更方便,更快,更簡單,項目地址:https://github.com/ggreer/the_silver_searcher。 直接安裝The Silver Searcher的命令:

brew install the_silver_searcher

使用ag命令就可以進行文本搜索:

ag "image" "./"

這個命令的意思是搜索到該目錄下以及其子目錄下的所有含有"image"的文件。
使用這個命令就需要在python中執行bash命令。

bash命令

使用bash命令來進行一些搜索文本,刪除文件的工作,在python中可以直接運行bash命令。 在python中直接使用bash命令:

os.popen("echo $PATH")

在執行bash命令的時候,可以通過os.popen("echo $PATH").read()執行并讀取執行的結果。 也可以直接執行bash命令不用關系執行的結果,例如:

os.system("rm -rf dir")

需要用到的bash命令有ag "image" "./"rm -rf "./",前者用來搜索文本有沒有被使用,后者用來刪除文件夾。
下面就看下完整的實現。

清除無用的imageset資源

完整的清理無用的圖片資源的代碼:

path = "ios"
images = glob.glob("ios/images.xcassets/*/*.imageset")
def find_un_used():
    img_names = [os.path.basename(pic)[:-9] for pic in images]
    unused_imgs = []
    for i in range(0, len(images)):
        pic_name = img_names[i]
        command = "ag "%s" %s" % (pic_name, path)
        result = os.popen(command).read()
        if result == "":
            unused_imgs.append(images[i])
            print "remove %s" % (images[i])
            os.system("rm -rf %s" % (images[i]))


    text_path = "unused.txt"
    tex = "
".join(sorted(unused_imgs))
    os.system("echo "%s" > %s" % (tex, text_path))
    print "unuse res:%d" % (len(unused_imgs))
    print "Done!"

這段代碼是從當前文件夾里,遍歷所有的.imageset文件,找到圖片使用的圖片名稱,在文件夾中搜索該名稱的文件有沒有被使用。如果沒有被使用的名稱就可以清除掉該資源。
執行這段之后發現有一些不應該清除圖片資源也被清除了,這里有個例外的情況沒有考慮到。

ignores

有時候會給一些資源文件動態的賦值,使用這樣的代碼:

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

上面的代碼中查找 image1時,發現這個圖片并沒有使用,該圖片資源就會被清除掉,但是該圖片在項目中是動態賦值的并不應該被清除。
我采用ignore的方式來解決這個問題,也就是先提前準備好一個ignore的列表,內容采用正則表達式來定義,被匹配到的文件資源就不進行清除處理,例如ignores為:

ignores = {r"image*d+"}

然后在定義一個檢查ignores的方法:

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

如果一個文件名在ignores中出現就會忽略該文件的清理檢查,這樣就不會清理掉一些動態賦值的圖片資源了。
源碼地址:https://github.com/jjz/script/blob/master/un_used.py

請自行設置好目錄,執行命令:

python un_used.py

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37849.html

相關文章

  • 我是如何優化網站首頁性能

    摘要:分位值解釋分位值目前是我們看性能指標的一個重要參考點。為什么是,因為跟進高的優化經驗,分位值的數據取點最能放大問題。分位值下,一個散文件可能就是的影響。 最近接到一個任務,首頁性能優化。 目標:95分位值下 看到頁面框架主體內容6s(優化前10s左右),優化提升40% 看到操作詳細內容9s(優化前12s左右),優化提升25%。 側面看出我們系統的龐大程度吧,這個不值得驕傲,項目...

    kun_jian 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<