《影响APP的大小的因素:
第一大因素:看你的APP页面采用的是storyboard,xib,代码那一种方式实现。你代码都是用storyboard实现的,那么的APP达到30M很正常,除非你的页面超少。若你的页面是都是用XIB实现的,你的APP达到20M以上也很正常。你采用纯storyboard或XIB,别抱怨你的APP安装包太大了,你也不看看他们每个文件有多大,接受现实吧。你想用他们的可见既可得,自动布局,快速开发功能,你还能对APP提太高的要求,你的想法有点过了。若你的页面全部是用代码写的恭喜你,你的包低于10M以下不在话下,除非你有大量声音文件和图片,第三方库,不然很难太大。但是你只有运行起来才能看效果,不能使用自动布局了,慢慢开发,自己一个一个的适配吧!注意代码实现页面和XIB,storyboard混用时不支持自动布局。那些要求APP在5M一下的标准找抽,没看到很多APP都直奔60M。
第二大因素:很大的声音文件,很多的声音文件。一个声音文件经常200K到1.5M之间,一个声音文件顶你一堆.M文件。在不影响效果的情况下还是低质量的声音文件代替吧,稍微降低下质量就降低几百K,顶你多少.M文件啊,并且别人还听不出区别。
第三大因素:大量使用第三方库。第三方库都很大,别怕,不像.M,storyboard,XIB,声音文件,图片文件不可以压缩,他很容易压缩的很消息在APP占用的并非恐怖的大。不再使用的第三方库尽量CUT了,别让他占地方。
第四大因素:应用中存在全屏图片页面。要在设计上避免。
你想现在苹果手机存在3.5英寸,4英寸,5英寸,5.5英寸,5.8英寸共5种尺寸,完美的适配手机你要有5种尺寸的图片,有的图片色彩复杂度很高,甚至一个图片可以达到1兆到2兆,这要折合成多少行代码啊?只所以设计上只需要提供2倍图和3倍图图标适配所有手机是因为图标大都相对于全屏尺寸比较少,大约忽略了他们相对于屏幕的差异。而全屏页面就不能简单的一张图包打天下了,会有失真的。
解决方案是:1.应用启动这样的图片资源可以通过文件流的方式一次性下载图片资源;2.应用启动时,根据图片地址下载图片;3.该页面换成h5页面;4. 把这样的页面拆解成小控件和简单背景,从设计上避免这样的页面。
第五大因素:大量图片。把那些以前在使用,现在不在使用的都删掉吧。你换图片是正常,你懒,得到新的不干掉旧的就是一种罪恶了。尽量别支持iPhone4早期版本的一倍图,不然你的图片又要增加三分之一,他们是小门小户就将就着用2倍图吧,不然1倍图,2倍图,3倍图那要3类相同的图片了。现在很多APP都用引导页面滑动动画页面,他们的图片都是超级打的一个顶好多图片那么大。
iphont4,iphont4s是用的1倍图,iphont5,iphont5c,iphont5s,iphont5se,iphont6,iphont7是用的2倍图,iphont6s,iphont7s是用的3倍图。一般现在的应用只出2倍图和3倍图,不再专门出1倍图,毕竟iphont4,iphont4s市场占有率很少了,不再专门关注了。
通过[UIScreen mainScreen].scale可以看到,1倍图的手机它为1;2倍图的手机它为2,3倍图的手机它为3.因此线的高度(1像素)可以用这个宏表示线高(1像素):
//1像素
#define YX_1PX (1.0f / [UIScreen mainScreen].scale)
知道了影响APP的因素了,你就对自己的APP大小就要有一个大致的概念了,别提不可实现的需求,也不看你的APP使用的人对流量的敏感程度,再在这四个环节进行优化就能满足你的胃口。大部分人对安装包太敏感是因为你的app版本升级策略有问题,因为你采用了强制升级的策略,并且经常强制升级,强制升级是苹果严格禁止的,虽然你通过app审核期间不强制升级,等上架后再强制升级,这样绕过苹果的审核体制,但是当你的app下载量很大,被人投诉到苹果商店后,是有可能强制下架或再次发版本是审核被驳回,现在不搞你是因为你太渺小,君不见很多app都不支持强制更新的霸王条款吗?使用强制更新通常是你的业务逻辑大变更,你的应用逻辑经常大变更本身就不合常理,你的能保证你对以前业务数据的向下完美兼容吗?人们版本升级或下载安装包通常在wifi环境下,若你弹出强制更新,一般是逼着使用的人强制在2g,3g,4g环境下进行,先不论是否亲民,仅让别人使用中或打开就看到强制更新按钮,不能立刻使用就让人受不了,更没有理由让别人不对流量不敏感,若网络太差更怨声载道。所以强制更新确实应该,防止由于前期设计可能有漏洞,给后期修改业务逻辑后提供机制上的支持,防止有缺陷的业务逻辑前期app和完善业务逻辑的app同时存在,但是强制更新要慎重,别动不动就强制更新。
具体的强制更新机制见我的文章《app的版本更新 》:http://blog.csdn.net/jia12216/article/details/47018463。
iphont4s 是2倍图 但是你画一个粗为0.5的线,iphont4s显示不出来,iphont5s却可以看到一个像素(从截图上看到的)的线来。
识别手机机型使用的是几倍图,通过这个值来识别:[UIScreen mainScreen].scale。若为1就1倍图(iphone 4/iphone 4s是个例外),若为2就是2倍图,若是3就是3倍图。但是现在iphone 4/iphone 4s都是按照2倍图处理的,并且他们的屏幕截图也是640*960,说明它是2倍图。但是若你在iphone 4/iphone 4s手机上画条0.5像素的线是显示不出来的,但是在iphone 6及更高本本画一条1/([UIScreen mainScreen].scale)(就是0.5或1/3)的线是显示出来的,说明iphone 4/iphone 4s物理分辨率是1像素。
那么准确的倍图计算公式是:屏幕截图(上传苹果商店的屏幕快照或者用手机截屏得到的图片)的宽度(或高度)除以物理宽度(或高度,宽度是[[UIScreen mainScreen] bounds].size.width,高度是[[UIScreen mainScreen] bounds].size.height)的四舍五入的整数。iPhone XR的828/375=2.2.08,四舍五入值是2,它的[UIScreen mainScreen].scale也为2(FULL_WIDTH:375.000000, FULL_HEIGHT:812.000000, [UIScreen mainScreen].scale:2.000000),所以它是用2倍图。
下面是开发中用到的iphone,ipod,ipad对应的实际像素点和图片倍率:
iphont4,iphone4s实际像素点:
3.5英寸屏(320/480)
iphone5,iphone 5s,iphone 5se实际像素点:
4英寸屏 (320/568)
iphont6,iphone7,iphone8实际像素点:
4.7英寸屏(375/667)
iphont6 plus,iphone7 plus,iphone8 plus实际像素点:
5.5英寸屏 (414/736)
iphontX若不设置启动图片相当于iPhone8的放大模式(375/667) ,若设置了启动图片才是他的实际像素,实际像素点:
5.8英寸屏(375/812)
ipod4实际像素点:
4英寸屏(320/568)
iphontX若不设置启动图片相当于iPhone8的放大模式(375/667) ,若设置了启动图片才是他的实际像素,实际像素点:
5.4英寸屏(iPhone 12 mini)(375/812)
5.8英寸屏(iPhone X,iPhone XS,iPhone 11Pro)(375/896)
6.1英寸屏(iPhone XR,iPhone11) (414/896)
6.5英寸屏(iPhone XS Max, iPhone 11 Pro Max)(414/896)
ipod4实际像素点:
4英寸屏(320/568)
iPad 4,5,Air,Air2,mini3,mini4 (1024/768)
iPad Pro (1366/1024)
矢量图的图片倍率
iphont4 2倍图
iphont4s 2倍图
iphont5 2倍图
iphont5s 2倍图
iphont6 2倍图
iphont6 plus 3倍图
iphont7 2倍图
iphont7 plus 3倍图
iphont7s 2倍图
iphont7s plus 3倍图
iphont8 2倍图
iphont8 plus 3倍图
iPhone XR,iPhone 11 2倍图
iphontX,iPhone XS, iPhone XS Max, iPhone 11 Pro, Phone 11 Pro Max, iPhone 12 mini, iPhone 12, iPhone 12 Pro, Phone 12 Pro Max 3倍图
ipod4 2倍图
iphone4,iphone5,iphoneX无放大模式。iphone6,7,8的放大模式屏幕像素是:(320/568)。iphone6 plus,7 plus,8 plus的放大模式屏幕像素是:(375/667)。
下面是iphone的ps像素(手机截图尺寸):
iphont4,iphone4s 像素尺寸:
3.5英寸屏(640/960)
iphone5,iphone 5s,iphone 5se 像素尺寸:
4英寸屏 (640/1136)
iphont6,iphone7,iphone8 像素尺寸:
4.7英寸屏(750/1334)
iphont6 plus,iphone7 plus,iphone8 plus 像素尺寸:
5.5英寸屏 (1242/2208) iPhone 12 mini 5.4英寸屏(1080/2340)
iphontX,iPhone XS
5.8英寸屏(1125/2436)
iPhone XR
6.1英寸屏(828/1792)
iPhone XS Max
6.5英寸屏(1242 / 2688)
iPhone 12 Pro Max
6.7英寸屏`(1284 / 2788)
ios 10以后的系统 字体和ps像素的关系 字体大小是磅不是像素 设计大小时尽量使用有对应关系的字体像素大小。 iOS9的字体比iOS10的文字像素要小些,一般不适配 。这个是ios9及以前版本IOS开发字体大小与UI给的px对应关系:https://www.jianshu.com/p/5aa886a07524
iPhone 12 mini
5.4英寸屏 2340 x 1080 像素分辨率,476 ppi,模拟获取到的物理像素:(812 x 375)[UIScreen mainScreen].scale 倍率:3。可以看到它不是标准的3倍,不知道是模拟器错误,还是它就是这个奇怪的2.88倍