问题
今天和iOS开发老大终于解决了一个一直遇到的奇怪问题:公司mis环境下的词场App iOS版在iPhone6和iPhone6s的尺寸偏大,大到和iPhone6 plus一样的尺寸,可是一旦上传至AppStore,其顶部icon大小又恢复正常了。
more
问题分析
问题拆解,总共有两个问题,其一:iPhone6和iPhone6s上的mis环境的词场App的icon尺寸不对,偏大;其二:同样的源代码打包上传至AppStore,再再从AppStore安装,这么一来一回,icon大小正常。
猜测:
问题一是由于代码层面,判断机型匹配不同尺寸的icon时,误把iPhone6和iPhone6s与大尺寸的icon匹配。
问题二,是由于虽然代码层面将iPhone6和iPhone6s与大尺寸的icon匹配,但是AppStore对于App的资源和不同版本之间做了对应的匹配,iPhone6和iPhone6s只下载2X的图片,因此显示正常。
修复问题
验证:修改了icon与机型匹配代码之后果然mis包也正常了。同时查看iOS9开发文档得知,针对于Universal App[同一个App适配iPhone和iPad,且只收一份的价格]iOS9推出了App Thinning。
App Thinning
WWDC15推出了该功能。App Thinning(应用瘦身)包含三个部分:应用分割(Slicing)、中间代码(Bitcode)和On-demand资源(Resources)
应用分割(Slicing):AppStore根据设备的不同特性来让其下载不同的资源。当开发将iOS9 app包打包上传到AppStore后,苹果编译该资源和可执行文件,然后为每个设备根据其特性[包含显卡性能(原文单词:graphics capabilities)、内存级别、CPU架构、size classes、屏幕 scaling]生成一个特定的可执行文件。用户的设备根据该可执行文件,下载适应与其特性对应的并且它需要使用的内容。
中间代码(Bitcode,适用于iOS和watchOS):苹果可以在恰当的时候重新优化我们程序的二进制文件。Bitcode是一个已编译程序(Compiled Program)的中间代码(intermediate representation)可以作为你中间产物,在你提交App到AppStore的时候提交。如果你上传到iTunes Connect里的应用包含bitcode的话,就可以被编译和链接到App Store。加入Bitcode可以让苹果在未来对你的应用二进制(app binary)进行再次优化,而不需要你向App Store提交新版本。
On-Demand资源(适用于iOS系统):应用程序的资源只有在需要的时候下载,并且如果其他资源需要这些空间资源可以被移除。你可以通过关键词和命令的方式进行分组归类的资源,比如图像和音频,App Store会把这些资源放在苹果服务器上并且为你管理下载。On-Demand资源可以加快下载速度并缩小应用包体,提高用户的首次登录体验。比如,一款游戏应用可以根据等级和任务的不同把资源分组,在玩家达到下一个等级或者完成一个任务之后才会用到后续的资源,同样,应用也可以只在用户进行IAP购买的时候提供对应的资源。
显然由于App Thinning,我们上传至AppStore的开心词场App,在下载到用户设备的时候,被重新优化和根据设备的不同自动下载不同的资源了。
机型对应icon尺寸
上面提到,iPhone6和iPhone6 plus的尺寸大小是不一样的概念,我们来看看具体的情况是怎么样的。对于iPhone不同的机型来说,icon的大小分为:1x、2x、3x。这里的1x、2x、3x指基于一定屏幕宽度尺寸的像素数。
标注图(以340为宽度尺寸为基准切图)
2x切图(以640为宽度尺寸为基准切图)
3x切图(以1280为宽度尺寸为基准切图)
对应的机型如下:
点和物理像素的区别:
参考
推荐:
更多文章请关注,我的个人博客:pdzhangyi.com