减小ipa体积

原文地址


我遇到了什么问题?

Unity要支持IOS 64位,就要用到IL2CPP。而IL2CPP会将IL代码转换成C++代码。在我的项目中,这些C++代码达到5000万行。没错,5000万行C++代码!具体各个版本IL2CPP生成C++代码对比可参考之前的文章《Unity:IOS可执行程序超过80MB问题及各版本IL2CPP对比》


当向Xcode上传IPA时,就会提示执行文件超过限制,无法上传。

可执行文件(Executable)是什么?

这里不是说IPA!不是说IPA!不是说IPA!
可执行文件大小,并不是指IPA安装包的大小,这个在沟通时经常没搞清楚的问题。

众所周知,iOS开发中,是采用静态库的方式,所以第三方库,都会编译进一个执行文件。所谓可执行文件,是指ipa里的,通过Xcode静态编译Objective-C出来的一个文件。

拿微信的ipa来举例:


用压缩软件打开IPA,Payload/MicroMessenger.app/MicroMessenger就是微信的可执行文件了

如何查看我的ipa的执行文件大小?

千万别以为执行文件大小=可执行文件的解压后大小

可执行文件大小 ≠ 可执行文件的解压后大小
可执行文件大小 ≠ 可执行文件的解压后大小
可执行文件大小 ≠ 可执行文件的解压后大小

这是一个超级重点。要查看苹果所说的可执行文件大小,需要在Mac下使用size命令:

unzip /XXX/AppName.ipa Payload/AppName.app/AppName
size Payload/AppName.app/AppName

可执行文件大小是指其中的__TEXT部分

可以看到,命令会列出32位和64位的程序信息,其中__TEXT部分相加,才是我们所说的执行文件大小。

上图,执行文件大小85MB,因为我们使用最低的iOS版本是6.0,因此在iOS 6下,就是超过限制了。

真相

苹果的规定是怎样的呢?


可执行文件限制

总结:

  • 执行文件大小是指执行文件的__TEXT部分
  • 当IOS最低版本小于7.0,32位+64位最多为80MB;
  • 当IOS大于等于7.0,每个分区是60MB(并不是指32位+64位最多为120MB,当32位分区占用50MB,64位分区占用61MB,总111MB也不行,因为64位分区超出了);
  • 当IOS大于等于9.0,总限制400MB;

起初,我把项目的最低iOS版本设置成7.0,就解决问题了;
但是,3个月后,经过各种版本更新后,我们再一次触犯了大小超过限制的规定,这时候我们针对IL2CPP的机理进行C#代码优化,减少了大量的IL2CPP代码生成。 下回分解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值