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动态换类代码