转自://www.greatytc.com/p/e8d0c998e5c4
App Thinning 应用瘦身技术,这个是WWDC 2015 最新分享的技术。主要分为下面三个部分
App slicing
这个的意思比较简单 就是应用裁剪。我们都知道系统中代码文件一般占用不了多少ipa包的大小,主要是图片资源占用的资源比较多,以前apple的方式是全部从 app store 上面下载下来整个ipa 资源包,使用的时候使用 @1x,@2x,@3x,来区分不同分辨率的图片,这种比较蠢笨的方式早就遭到了众多开发者的诟病,特别是游戏,图片资源占用了大部分ipa包的大小,动不动就是 100M朝上。
有神马好的解决方案呢?正常人肯定是这样想的,我是 iPhone 5s 的手机 我的手机只需要 @2x 的图片,我为啥还要下载一套 @1x 和 @3x 的图片呢? Apple 在WWDC 2015 上面终于把这个蛋疼的地方改了...
具体的解决问题的方法:
这个资源管理文件夹管理图片文件。我们开发一般 都切好多 PDF的图,我让美工妹子,直接给我一张图,除了颜色比较复杂的位图,一般图标类的纯色的图片都是PDF的图片,这样我也方便自己渲染颜色。使用assets 管理你的图片,并且打包上传到 app store 之后,每次用户下载的时候 apple 的后台会根据当前用户的机型生成一套 最适合这个机型的一套图片这样就节省了大量的不必要的图片资源。能节省出来很大一部分空间。
BitCode
这个机制是优化你的最终生成可执行代码的,大体的意思就是说。app 需要运行在多种机型上面,但是 apple 的处理器架构并不是全部一样的,可能这个设备的指令集和其他设备的指令集不是一样的,这个时候我们就需要对多种指令集做处理。
以前当你打包app 的时候 你需要在 ipa 包中生成两套可执行代码,arm-64 一套,arm-32一套,用户也是这样从 app store 下载两套指令集。
用户下载 app 的时候其实是下载了两套指令集,当打开应用,系统加载应用的时候选择一套可用的指令集,去执行。这种机制和上面图片的机制是一样的,蛮力的方法,最简答的方法,我全部给你,你想用哪个你自己选择。
正常人想会会怎样解决这个问题呢? 我的是 iPhone 5s 的手机我只需要 arm-64 的针对iPhone 5s 优化过的可执行代码,我不需要arm-32 的可执行代码了。
bitcode 的机制是开发人员打包的 ipa 包中的代码不是最终的可执行代码,而是一种中间代码(感觉跟 C# 是一个机制呢... 难道apple在下一盘大棋...)用户下载应用的时候同样是 apple 的后台根据当前设备给你生成最适合当前设备的可执行代码传给用户。这些都无需我们开发者操心,苹果会帮助我们优化最终的可执行代码。
On-Demand Resources (ODR技术)
也是图片资源管理技术,这个技术的大致意思是这样的在每个assets管理的图片上面都可以打上一个tags,不同的tags 分别属于不同的组,我可以在程序中分情况下载不同组的图片.这个在游戏场景中用到的很多,比如我用户第一关没有过去是不允许进入第二关的,那这个时候第二关的资源就是没有用的。我不需要下载,当用户到达第二关的时候我才需要下载第二关的资源。apple 将这些下载代码都封装好了 ,用户只需要代用就行了,但是,但是,但是,这个是 iOS 9 的api 需要适配的话 还是不能用到,用一些黑魔法估计可以,这个技术大致就是这样的,我想在 app 开发中也用不到,做游戏的可能能用到,具体的还是参考 apple 的文档吧
ORD BY APPLE