|
|
|
|
移动端

3.3.3 处理器差异

《腾讯iOS测试实践》第3章iOS兼容性测试,本章结合过往兼容性的测试实践经验对iPhone上的App兼容性问题进行总结。本节为大家介绍处理器差异。

作者:丁如敏来源:机械工业出版社|2017-09-14 16:02

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


3.3.3 处理器差异

到目前为止,所有iOS设备都使用ARM结构处理器,它与台式机上的x86和PowerPC有些不同。ARM64是ARM处理器的一个指令集,目前iPhone设备的指令集种类如表3-4所示。

表3-4 iPhone设备的指令集

从Xcode 4.5开始不再支持ARMv6指令集。实际上,用户使用的基本上都是iPhone 4以后的机型了,所以我们编译生成的二进制包所支持的指令集只要支持ARMv7以上就可以。苹果公司规定,从2015年2月开始上架App Store的应用必须支持ARM64的编译,所以产品都应完成对ARM64的适配。

设备对指令集的支持可向前兼容,只是会影响运行效率。因此现在编译的版本一个包有两个架构,分别支持ARMv7指令集和ARMv64指令集的架构。选择ARMv7是为了支持iPhone 4~iPhone 5C之间的设备,而编译ARMv64的二进制包一方面是因为苹果公司的规定,另外一方面是为了让高级机型能够更好地运行,提高运行效率。

适配工作的重点在于对参数类型的调整,适配最新版的如目前的ARMv64的指令集。Bug大多集中于参数类型在ARMv64设备上出现的异常。

模拟器并不运行ARM代码,软件会被编译成 x86 可以运行的指令,因此适配不能在模拟器上进行验证。

回顾历史版本,在硬件的兼容上,iPhone一般都做得很好。印象最深的还是32位机升为64位机后做的适配测试,当时要求iOS的32位工程转为64位工程。我们来看一下深层次的原理。

“32位的iOS系统和64位的iOS系统的差别主要有两个:一个是数据类型的差别,一个是过程调用方法的差别。 在数据类型上,主要的变化是指针类型(Pointer)和长整数类型(Long)的长度变化和内存对齐方式的变化,同时也导致了更高级别数据类型的变化,如NSInteger的长度也有变化。在过程调用方法上,因为ARMv8和ARMv7具有不同数量的寄存器与不同的过程调用约定,所以32位系统和64位系统在汇编层级是不同的。”

实际测试中遇到过新版64位安装包在各功能模块上发生闪退、显示混乱、数据错误、性能差等问题。额外强调的一点是,要关注的问题为数据的传输,因为用户会通过网络交换数据,用户保存的数据也可能通过备份等方式在32位系统和64位系统之间切换,所以应用在保存和发送流数据的时候一定要考虑充分,例如32位机保存的书签在64位机上是否能够正确显示和使用。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

大师品软件——软件之痛与应对之道

这并不是一本传统的技术专著,因为它并没有包含一行代码,而更像是一部技术评论。作者通过幽默诙谐而又不失辛辣的语言,从程序员、用户等多...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊