性能優化-包體積優化

通過實踐,已經調研過并實施的有效方案:
1. 刪除無用的資源庫

結果:刪除無用私有庫代碼,刪除無用的庫,有效果

2. 無用圖片源刪除(手動篩查,較耗時,效果微弱)

過程: LSUnusedResources 查找無用圖片,注意:

 [UIImage imageNamed:[NSString stringWithFormat:"icon_%d.png",index]]

這種使用圖片的方式,可能會被誤刪

結果:使用效果不佳,基本無幫助,選擇手動篩查

3. 項目圖片壓縮

結果:使用壓縮圖片網址,有效果

4. 清理項目中的plist文件

結果:有效果 不明顯

5. 無用三方庫調研,

結果:選擇性刪除,調研后目前沒有可刪除的

6. 無效文件刪除

結果:無效類文件刪除,無效方法刪除,缺少方法檢索工具,手動檢索很耗時,效果微弱

7. 無用import去除(linkMap分析結果)

過程:使用 LinkMap 分析庫的使用情況,效果微弱,可忽略不計

    *   59.27M YXCommonBusiness
    *   23.27M YXExam
    *   12.15M YXCareer
    *   10.90M AgoraRtcEngineKit
    *   9.89M YXPractice
    *   9.43M YXKnowledgeBase
    *   8.08M YXPoints
    *   7.64M YXCourse
    *   5.04M YXFuDaoSDK
    *   4.35M YXFudaoBase
    *   1.51M AgoraRtmKit
    *   1.07M libcrypto.a
    *   1.00M libjcore-ios-2.3.4.a
8.相關配置排查 效果不明顯

過程:
1.配置編譯選項 Generate Debug Symbols 設置為NO
結果:不可用,影響bugly
2.舍棄架構armv7
結果:不影響安裝包大小,build setting 里 DEAD_CODE_STRIPPING = YES(默認已經設置YES)
3.編譯器優化級別 Build Settings->Optimization Level有幾個編譯優化選項,release版應該選擇Fastest, Smalllest[-Os] (默認已經設置)
4.去除符號信息 Strip Debug Symbols During Copy 和 Symbols Hidden by Default 在release版本應該設為yes,可以去除不必要的調試符號 (今天配置設置,看效果)
5.Strip Linked Product:DEBUG下設為NO,RELEASE下設為YES(默認設置)

9. strip - 相關配置項

過程:經過調研,有兩種去除動態庫多余符號(符號表等)的方式:

1.在鏈接時去除,即在動態庫工程中Other Linker Flags中添加-s參數,經過測試:不管是在啟動時加載,還是手動方式加載動態庫都沒問題。于是準備使用這個方案。然而,在執行的時候發現了一個嚴重的問題:加了此參數后,不能生成完整的dsym文件,這會影響崩潰后符號的解析。此方案作罷。

2.使用strip -x命令處理動態庫。因為是對動態庫產物進行處理,所以不會對dsym產生影響,經過測試,strip后的動態庫,也可以使用dsym文件找到符號。于是我們嘗試在工程中添加腳本統一處理工程中的動態庫。在添加腳本的時候遇到個問題:動態庫被拷貝到沙盒的時候會簽名,而我們的strip操作發生在這個后面。在debug環境下,加載動態庫的時候會提示簽名后動態庫被修改的錯誤。而在release導出包的時候會重新對動態庫進行簽名。所以在release下不會有問題。最終,我們修改了腳本,只在release環境下,執行strip操作:
經過strip處理后共計 減少21M瘦身 效果明顯

strip
strip

具體代碼如下 :

if [ $CONFIGURATION == Release ]; then 
strip -x ${BUILT_PRODUCTS_DIR}/YYText/YYText.framework/YYText
strip -x ${PODS_ROOT}/YXCharts/Carthage/Build/iOS/Charts.framework/Charts
strip -x ${PODS_ROOT}/QNRTCKit/Pod/iphoneos/QNRTCKit.framework/QNRTCKit
strip -x ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework/Masonry
strip -x ${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework/TZImagePickerController
strip -x ${BUILT_PRODUCTS_DIR}/SVGKit/SVGKit.framework/SVGKit
strip -x ${BUILT_PRODUCTS_DIR}/ZYBannerView/ZYBannerView.framework/ZYBannerView 
strip -x ${BUILT_PRODUCTS_DIR}/YYModel/YYModel.framework/YYModel 
strip -x ${BUILT_PRODUCTS_DIR}/YYImage/YYImage.framework/YYImage 
strip -x ${BUILT_PRODUCTS_DIR}/YYCategories/YYCategories.framework/YYCategories 
strip -x ${BUILT_PRODUCTS_DIR}/YYCache/YYCache.framework/YYCache 
strip -x ${BUILT_PRODUCTS_DIR}/WZLBadge/WZLBadge.framework/WZLBadge 
strip -x ${BUILT_PRODUCTS_DIR}/WebViewJavascriptBridge/WebViewJavascriptBridge.framework/WebViewJavascriptBridge 
strip -x ${BUILT_PRODUCTS_DIR}/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.framework/UITableView+FDTemplateLayoutCell 
strip -x ${BUILT_PRODUCTS_DIR}/TYCyclePagerView/TYCyclePagerView.framework/TYCyclePagerView 
strip -x ${BUILT_PRODUCTS_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/TTTAttributedLabel 
strip -x ${BUILT_PRODUCTS_DIR}/SwipeView/SwipeView.framework/SwipeView 
strip -x ${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework/SSZipArchive 
strip -x ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework/SDWebImage 
strip -x ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework/SDCycleScrollView 
strip -x ${BUILT_PRODUCTS_DIR}/ReactiveCocoa/ReactiveCocoa.framework/ReactiveCocoa 
strip -x ${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework/Reachability 
strip -x ${BUILT_PRODUCTS_DIR}/Qiniu/Qiniu.framework/Qiniu 
strip -x ${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework/Protobuf 
strip -x ${BUILT_PRODUCTS_DIR}/MZFormSheetPresentationController/MZFormSheetPresentationController.framework/MZFormSheetPresentationController 
strip -x ${BUILT_PRODUCTS_DIR}/MZAppearance/MZAppearance.framework/MZAppearance
strip -x ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework/MJRefresh 
strip -x ${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework/MBProgressHUD 
strip -x ${BUILT_PRODUCTS_DIR}/LKDBHelper/LKDBHelper.framework/LKDBHelper
strip -x ${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework/IQKeyboardManager 
strip -x ${BUILT_PRODUCTS_DIR}/HMSegmentedControl/HMSegmentedControl.framework/HMSegmentedControl 
strip -x ${BUILT_PRODUCTS_DIR}/HappyDNS/HappyDNS.framework/HappyDNS 
strip -x ${BUILT_PRODUCTS_DIR}/GCDWebServer/GCDWebServer.framework/GCDWebServer 
strip -x ${BUILT_PRODUCTS_DIR}/FSCalendar/FSCalendar.framework/FSCalendar 
strip -x ${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework/FMDB 
strip -x ${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework/FLAnimatedImage 
strip -x ${BUILT_PRODUCTS_DIR}/FDStackView/FDStackView.framework/FDStackView 
strip -x ${BUILT_PRODUCTS_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework/FDFullscreenPopGesture 
strip -x ${BUILT_PRODUCTS_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework/DZNEmptyDataSet 
strip -x ${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework/CocoaLumberjack 
strip -x ${BUILT_PRODUCTS_DIR}/CocoaAsyncSocket/CocoaAsyncSocket.framework/CocoaAsyncSocket 
strip -x ${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework/AFNetworking 
strip -x "${PODS_ROOT}/CCLivePlaySDK/SDK/Live_iOS_Play_SDK(有連麥)/CCSDK.framework/CCSDK"
strip -x "${PODS_ROOT}/CCLivePlaySDK/SDK/Live_iOS_Play_SDK(有連麥)/DWDrmServer.framework/DWDrmServer"
strip -x "${PODS_ROOT}/CCLivePlaySDK/SDK/Live_iOS_Play_SDK(有連麥)/IJKMediaFramework.framework/IJKMediaFramework"
strip -x "${PODS_ROOT}/CCLivePlaySDK/SDK/Live_iOS_Play_SDK(有連麥)/WebRTC.framework/WebRTC"
fi
10. 后續計劃做的
  • oc與swift混編 ,全部換成oc
  • 重量級三方庫引入是否替換成輕量級,或者自己寫
  • 無效方法檢索工具
  • 合并重復的圖片資源
  • 制定資源文件維護規范
  • 減少項目中的xib、storyboard的使用
參考鏈接

iOS包體積優化

iOS 優化ipa包,減小安裝包大小

iOS 優化ipa包、減小安裝包大小

iOS微信安裝包瘦身

iOS 優化IPA包體積(今日頭條)

iOS 瘦身

LinkMap初探

iOS調優 | 深入理解Link Map File

iOS項目查找無用的圖片資源文件 壓縮APP大小

iOS中.app .dSYM .ipa .xcarchive 文件的區別 以及為什么蘋果商店包與我們產出的ipa大小有差別

iOS開發:Archive、ipa 和 App 包瘦身

iOS APP可執行文件的組成

iOS armv7, armv7s, arm64區別與應用32位、64位配置

iOS 逆向工程-反編譯ipa包

iOS動態庫的那些坑!!

iOS 性能優化

iOS 安裝包瘦身(上篇)

iOS 安裝包瘦身(下篇)

iOS安裝包瘦身

干貨!京東商城iOS App瘦身實踐

iOS ipa包瘦身,iOS8及以下text段超60MB

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374