iOS开发的兼容和适配问题

由于苹果公司的霸道作风,每个iOS开发者都会要面对不同设备和版本的兼容和适配问题。基本上升级一次xcode鸡飞狗跳是非常正常的,稍微总结一下需要注意的几个方面:

architecture

这个直接决定了APP能不能跑在指定设备上。现在常见的ARCH有3种:

armv7,对应iPhone4,iPhone4S,iPad mini,iPad3

armv7s,对应iPhone5,iPhone5C,iPad4

arm64,对应iPhone5S,iPad Air,iPad mini2,iPhone6,iPhone6 Plus

ARCH是向下兼容的,armv7生成的二进制包,可以跑在arm64的设备上,只是有些优化不可用;反之,arm64生成的二进制包,就不能跑在iPhone4和iPhone5上了

同时,build配置项中有一个Build Active Architecture Only的选项,在release中设置成NO,则会编译出混合二进制包。比如Architectures指定了armv7和arm64,则打出的是一个混合二进制包,既可以跑在armv7设备上,也可以优化跑在arm64设备上

鉴于现在armv7的设备还是占有相当的比例,所以build的时候,一定还是需要包含armv7选项的

另外一个问题,就是用armv7和armv7s打出的Library,是无法跟arm64打出的二进制包link的。所以如果是开发SDK供其他开发者使用,那么build的时候也一定要包含arm64。否则如果SDK使用者的build中包含arm64,Library就无法使用了。所以做SDK开发,需要把所有ARCH都选上

iOS SDK版本

另外就是iOS版本的问题,双向都需要考虑兼容

用iOS7 SDK编译的APP,在iOS8平台上,很有可能不能正常运行。比如在几个UIView中共享UIDatePicker,这种行为在iOS7下是OK的,但是在iOS8下就会crash;比如iOS7下的auto sizing,在iOS8下也可能出现显示错误。因此,iOS8操作系统出来,旧的APP基本上需要重新测试,适配,再次发布

反之,iOS8 SDK编译的APP,在iOS7系统上,也经常不能正常运行。比如我使用了UIAlertController类,在iOS7下就会直接飞掉,报错:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target

也有一些iOS8下的API,在iOS7下不会crash,只是毫无反应……所以,经常需要一些版本兼容的代码,例如:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    // for iOS8
}else{
    // for iOS7
}

设备尺寸

即使ARCH和API的适配问题都解决,UI的适配还是一个更大的挑战,一方面是各种设备的尺寸都不同,比如同一个页面,需要考虑在480,568,1024的高度下都正常显示;另一方面,不同的iOS版本,在细节方面也会有细微的差别,比如toolbar和navigation bar的处理等等

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值