筆者的項目中,成員變動快,且都是學生開發,無用的東西堆積如山。一堆文件沒引用,一堆方法不會調用也沒有刪掉。且UI時有改動,舊UI也不刪。打包出來31.1M。剛接手的時候只是10多M的孩子,咋忽然就變胖了。並且筆者有點潔癖,看起來好累。最後大小25.8M,減肥了5.3M,關鍵是無用代碼量少了舒服。html
筆者上網找到如下工具,親自嘗試一遍,並把過程記錄下來。不過這些工具並不100%準確,只起輔助做用,最終仍是由咱們判斷能不能刪。因此要作好備份,而且對項目有必定的熟悉度。git
查找無用圖片並刪除。github
勾選的選項中,若是代碼有出現字符串和xcassets中圖片名字同樣,這工具就認爲該圖片是有用到的。該工具默認所有都勾選上了。ruby
圖二中圈住部分,能夠識別拼接的字符串,然而,表情包名字沒有其餘前綴,因此這個工具識別不出來它們其實是有用到的。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
從Xcode編譯時自帶的「圖片壓縮」提及提到,壓縮過的圖片帶來更高的應用運行速度。又能減小包大小,何樂而不爲呢。spa
選中項目路徑就行。
經筆者測試,多是項目圖片太多,加上電腦性能不怎麼樣,這工具運行了超久!並且底部UI(節省了多少)刷新不一樣步,要點擊一下才能刷新有點不舒服;又沒有進度UI看。
並且Xcode也會對圖片進行壓縮處理,但不必定意味着小上加小,因此該工具對包大小效果可能不怎麼樣。
因此,筆者認爲這一工具用不用都差很少。
最終運行結果截圖以下:
打包測試,大小爲26.1M,較上一步縮小了0.7M。
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
複製代碼
筆者止步了,但那篇文章的做者測試如是說。
付費工具。
找到沒使用的方法。事實上這個工具還有不少其餘功能。
emmm...這個工具也不是100%可靠,筆者對項目中的方法不是特別熟悉,因此就不用了(還不是沒錢買)。