給iOS App減肥

前言

筆者的項目中,成員變動快,且都是學生開發,無用的東西堆積如山。一堆文件沒引用,一堆方法不會調用也沒有刪掉。且UI時有改動,舊UI也不刪。打包出來31.1M。剛接手的時候只是10多M的孩子,咋忽然就變胖了。並且筆者有點潔癖,看起來好累。最後大小25.8M,減肥了5.3M,關鍵是無用代碼量少了舒服。html

筆者上網找到如下工具,親自嘗試一遍,並把過程記錄下來。不過這些工具並不100%準確,只起輔助做用,最終仍是由咱們判斷能不能刪。因此要作好備份,而且對項目有必定的熟悉度。git

LSUnusedResources

  • 做用

查找無用圖片並刪除。github

  • 使用

勾選的選項中,若是代碼有出現字符串和xcassets中圖片名字同樣,這工具就認爲該圖片是有用到的。該工具默認所有都勾選上了。ruby

image.png

image.png

圖二中圈住部分,能夠識別拼接的字符串,然而,表情包名字沒有其餘前綴,因此這個工具識別不出來它們其實是有用到的。bash

因此名字有數字的圖(例如上面的000,001),不一樣圖片有重複子字符串(如homework_語文做業,homework_美術做業),若是不肯定,保險起見,仍是須要手動搜索一下。工具

同理,若是圖片名稱是全中文,基本能夠肯定是沒有引用的。性能

果不其然,筆者搜索homework_,發現有這麼一段代碼。測試

NSString *string = [NSString stringWithFormat:@"homework_%@",self.subjectLabel.text];
        [self.subjectImageView setImage:[UIImage imageNamed:string]];
複製代碼
  • 效果

通過一番折騰,筆者刪掉了將近100張沒用的圖片。打包測試,這時候包大小變爲26.8M,較原始包減少了4.3M,做用仍是很明顯的。ui

imageoptim

  • 做用 經過刪除圖片部分無用的EXIF等信息來減少PNG、JPEG和GIF圖片的大小。

從Xcode編譯時自帶的「圖片壓縮」提及提到,壓縮過的圖片帶來更高的應用運行速度。又能減小包大小,何樂而不爲呢。spa

  • 使用

選中項目路徑就行。

  • 效果

經筆者測試,多是項目圖片太多,加上電腦性能不怎麼樣,這工具運行了超久!並且底部UI(節省了多少)刷新不一樣步,要點擊一下才能刷新有點不舒服;又沒有進度UI看。

並且Xcode也會對圖片進行壓縮處理,但不必定意味着小上加小,因此該工具對包大小效果可能不怎麼樣。

因此,筆者認爲這一工具用不用都差很少。

最終運行結果截圖以下:

打包測試,大小爲26.1M,較上一步縮小了0.7M。

fui

fui(Find Unused Imports)是開源項目能很好的分析出再也不使用的類,準確率很是高,惟一的問題是它處理不了動態庫和靜態庫裏提供的類,也處理不了C++的類模板。

  • 做用

刪除不用的類。

  • 安裝

運行sudo gem install fui -n /usr/local/bin,筆者出現了下面的狀況,說明gem sources中沒有資源。網上搜不到怎麼解決,折騰了筆者很久。

執行gem sources能查看已有source。

筆者以前裝Cocopods,只剩下一個https://gems.ruby-china.org/,國內連接沒有fui資源。

gem sources -a https://rubygems.org/,添加進去。(順便提一句,安裝完想刪執行- gem sources -r https://rubygems.org/)

這時候執行gem sources應該能看到兩個。

最後再次執行sudo gem install fui -n /usr/local/bin,終於搞定了。

  • 使用

cd 到工程目錄下,執行fui find,筆者建議忽略pod文件引用,執行fui -i $(pod路徑)。(惋惜好像不能同時忽略多個路徑,筆者項目中還有手動拉的第三方庫)

而後等上一段時間,會打印出一個列表。因爲不是100%靠譜,還得咱們本身辨別,而後在Xcode中把文件刪掉。(心大的能夠執行fui delete,但筆者項目中有交換方法的類,是沒有被其餘類引用的,因此仍是本身辨別吧)

該圖就由於沒有忽略,顯示了一堆Pods,影響查看。

若是你發現列表中有些文件找不到,說明在Finder中沒刪。

  • 效果

刪掉一點代碼文件,對包大小沒多大影響。但筆者認爲這一步仍是值得的,代碼沒有以前那麼噁心了。

打包測試,大小爲25.8M,較上一步縮小了0.3M。

靜態庫瘦身

原理:第三方靜態庫 支持的指令集 有交雜部分,刪掉多餘部分。

其可能致使模擬器沒法使用,筆者就不折騰了,怕項目被玩壞了其餘人砍我。解決方法能夠看方法看iOS APP安裝包瘦身實踐。文章做者解決方法是生成兩個.a,精簡版用來發布,原版用來運行在模擬器上。

下面寫點註釋看看就算了。你們注意,這裏git回退都沒用。。。筆者要折騰一下了。不打算弄的就別測試了。

  • 過程

cd到項目目錄。

找到項目中的某個.a文件。執行如下命令。

lipo -info ***.a
複製代碼

i386,x86_64,是模擬器的指令集。armv7能夠兼容armv7s,armv7s也能夠刪了,只保留armv7和arm64。

// 分離出armv7.a
  lipo ***.a -thin armv7 -output ***-armv7.a
  // 分離出arm64.a
  lipo ***.a -thin arm64 -output ***-arm64.a
  // 將前兩者合併爲第三者
  lipo -create ***-armv7.a ***-arm64.a -output ***-device.a

複製代碼
  • 效果

筆者止步了,但那篇文章的做者測試如是說。

AppCode

付費工具。

  • 做用

找到沒使用的方法。事實上這個工具還有不少其餘功能。

  • 使用

emmm...這個工具也不是100%可靠,筆者對項目中的方法不是特別熟悉,因此就不用了(還不是沒錢買)。


參考

相關文章
相關標籤/搜索