至今,推出swift已经是第三个年头了,小哥本着学习的心态,大胆地尝试在旧项目中用Swift编写。OC与Swift混编后,感觉吊吊地,但某一天要发布应用时,心情就纠结了。本地AD hoc打包30.4M,发布应用到商店并且成功上线,发现APP体积为48.8M,心情非常惊讶。同时产品需求要把APP体积降到10M,一阵….。那么,APP如何瘦身呢?
为什么会突然多了18.4M呢?经过查看包内容,发现里面有个Frameworks文件夹,混编会产生libswiftXXX.dylib的动态库,统计一下这些swift动态库文件的大小,惊讶了:
问题提出:混编有多大影响?
对ipa包解压,观察Frameworks文件夹,如下图:
![]()
![]()
- 除了下划线以外,如AFNetworking,SDWebImage…都是OC编写的第三方库。它们占用的空间大约100KB,而swift语言编程的第三方库,占用的空间1MB以上。
- 值得一提的是,需要在Podfile顶部加上“use_frameworks!”。开启这个选项之后,所有以源码引入的pod都会编译成动态链接库
努力尝试瘦身的过程
一、首先尝试删除YYKit.
结果是:ipa包缩小1.2M(也就是说YYKit占用1.2M)
过程:
(1)未删除之前ipa包大小是26.7M:
![]()
项目中Cocoapods用到YYKit,YYKit的文件大小是个什么情况:
![]()
文件夹里面有Vendor和YYKit,其中Vendor大小是9.2M,YYKit是1.8M。
(2)移除YYKit,打包ipa包发现大小缩小至25.2M:
![]()
(3)看来YYKit是占用空间大小的重要因素。
(4)移除了Rxcocoa,RxSwift,SwiftJson后,ipa缩小至:21.5M
Rxcocoa,RxSwift,SwiftJson共占用3.7M
(5)移除Alamofire,ipa包缩小至:20.6M
Alamofire占用0.9M
二、一些参考资料
基于clang插件的一种iOS包大小瘦身方案
图片压缩工具,(亲测不错)
智图图片优化平台,鹅厂程序猿出