每当苹果发布新的iOS系统后,每个苹果移动设备上的应用都需要重新考虑它的兼容性,可能有很多功能在使用时会有问题需要调整。距离iOS6发布到现在已 经有一段时间,随着项目新老版本的迭代,断断续续记录了一些在测试兼容iOS6时发现的问题,并与项目的开发人员进行探讨,由于时间问题现在才整理出来, 以下是对它的归纳:
在iOS6上,toast提示和弹框提示连续交替出现时,可能会crash;
在iOS6上,系统按钮没有默认的边框,而iOS6之前的版本,系统按钮会有一个默认的边框;
在iOS6上,系统设置里新增隐私功能,关闭隐私里的照片后,无法下载照片,在这种情况下应该提示用户打开隐私,打开后才能下载;(不光光是照片,访问通讯录也需要隐私控制)
在iOS6上,iPad上调用系统播放器看视频时,大小屏幕切换时会有些问题;(测试时,发现小屏幕播放变成全屏时,会自动暂定,不能自动继续播放,全屏播放完一个课时后,还是会以大屏幕的形式停在那里,不会自动回到课程详情页以小屏幕的形式播放下一课)
在iOS6上,当网络没有连接的时候,不会有一个合适的回调上来告知应用;例如网络断开时播放视频,不能每次都有提醒,可采用程序主动先判断网络的方式处理;
在iOS6上,controller横屏处理和之前版本有所不同;在iPad上要检查横竖屏转换后app的显示和功能是不是正常,尤其是在登录页面旋转屏幕后再登录、登录过程中旋转屏幕的情况;(iOS 6中,如果只是在key window上直接 使用addsubView添加rootController的视图,这种情况下不会调用旋转委托函数,修改方法是将key window的rootViewController设置为rootController)
在iOS6上,背景处理方式和之前有点不一样,所以页面的UI显示可能会不一样,列表背景透明度的设置需要做更改;
某些系统变量只有在iOS高版本上才支持,如果调用那在低版本系统上app可能会crash或者出现其他问题;例如在iOS5以下系统上浏览微博,点击图片查看大图,再点击屏幕退出大图预览时就会crash;
系统不一样,它们在内存警告的时候,处理方式不一样,在iOS6以前的版本,在内存警告时系统会调用viewDidUnload,这个函数通常是把所有的东西清空,不会保存数据,所以在返回上一级页面或重新进入其他页面时,得用其他的方法还原用户之前的操作;
iOS6还有一个很特别的地方就是苹果使用了自己研发的地图, 所以有使用到地图功能app都需要注意一下;(ios6下,地图是用苹果地图,regionThatFits向下兼容有问题,ios6中该api会将传入值的center, span变量设置为nan,如果和setRegion函数配合使用,可能引发潜在的crash)
===========================================================================================
关于系统兼容性问题,之前在测试iOS5时有一个令我印象特别深刻:
关于emoji表情,iOS 5系统新添加了emoji表情键盘,ios里emoji有两种编码,一种叫sb编码, 另一种叫unicode,ios4.x只认识第一种,ios5.0两种都认识,而ios5.1只认识第二种,所以要区分系统版本,将含有emoji表情的字符串进行转码;(这个是ios 5和ios 4的区别)