iOS上程序打包成的ipa文件包含了该app用到的程序和资源等文件,因此可以用ipa文件衡量app的空间占用。以手机百度为例,资源占59M,可执行文件占116M。Apple Store对于提交的可执行文件的代码段大小限制如下,而整个app大小的限制是4G以内:
MinimumOSVersion <7.0 __TEXT < 80M
MinimumOSVersion 7.x~8.x __TEXT < 60M
MinimumOSVersion >= 9.0 __TEXT < 400M
因此对于app大小的优化要分为资源的优化及可执行文件的优化2方面:
1. 优化资源
包括声音图片、布局文件、配置文件等,优化建议如下:
->对于图片资源,尽可能选择8-bit png,对于32-bit png设置高压缩率
->删除无用资源和文件
->对于压缩率较高的文件可以以压缩方式存储
->对于无需立即使用的资源可以采用动态下载方式
2. (以下的百分比是以ios理财为例编译计算得出)
① 第三方库
通常XCode工程是采用pod等工具管理第三方库;这里分有源码(如AFNetworking)和无源码(如sinaweibo)的第三方库,优化方案如下:
对于有源码的第三方库可以采用下面的XCode配置进行编译优化,也可以手动删除不需要的代码
对于无源码的第三方库,编译阶段无法控制,我们只能链接提供的.a静态库文件,这种.a一般包含很多架构,链接的时候编译器选择对应的架构文件;只要有对代码的引用,就会发生链接,这种情况下无法优化,除非拿到源码
② 符号
即编译时产生的调试符号,Release默认去除,优化方案如下:
->XCode优化级别选择Fastest, Smallest [-OS] +5%
->XCode选择Strip Debug Symbols During Copy=Yes
Strip Linked Product=Yes
Dead Code Stripping=Yes
Make String Read-only=Yes
③ cpu架构支持
一般的ios app store上的app支持armv7 armv7s arm64三种格式,对应ios各个型号的机器,每种架构对应一份代码,因此架构越多可执行程序越大。 +100%
优化方案如下:
->iOS9提供App Thinning,只下载对应设备架构(app variants)的部分;on-demand resources技术可以做到内容在用户使用的时候才下载;asset catalogs技术智能切图节省图片占用空间
④ 代码本身
优化方案如下:
->尽量将资源和数据放在资源文件中而不是可在执行程序中,因为他们更容易压缩
->ARM->MRC +%3(不建议)
->关闭bitcode +%4
->禁用异常处理 +1%
另类方案:JSPatch动态换类代码