iOSBundle打包UIRequiredDeviceCapabilities引起的bug

    今天测试给我反馈了一个bug,在iOS10的iPhone5手机出现了白屏的现象,先说下我们的项目结构。我们的项目是一个ionic工程,在里面有一个原生的模块,当用户进入原生模块之后,白屏。刚开始是百思不得其解,后来想是不是iOS13的问题,因为之前在info.plist里新加了UIUserInterfaceStyle字段,刚开始在这个方向去找问题,怎么也找不到,后来换了一种思路,白屏说明view没有加载出来,而view是由xib创建的,是不是bundle出了问题?最后通过比对bundle的info.plist文件,最终找到了原因,bundle的plist文件里多了一个UIRequiredDeviceCapabilities字段 o(╥﹏╥)o。
    我们来看下这个字段是什么意思

A key that tells iTunes and the App Store know which device-related features an application requires in order to run. iTunes and the mobile App Store use this list to prevent customers from installing applications on a device that does not support the listed capabilities.

The value of this key is either an array or a dictionary. If you use an array, the presence of a given key indicates the corresponding feature is required. If you use a dictionary, you must specify a Boolean value for each key indicating whether the feature is required. In both cases, not including a key indicates that the feature is not required.

For a list of keys to include in the dictionary, see Information Property List Key Reference. This key is supported in iOS 3.0 and later.

    大概意思是通过添加这个字段,可以对运行这个app加一些限制,比如我添加了arm64,这个app就仅能在arm64架构的手机上运行,所有armv7的手机就不能运行。


iOSBundle打包UIRequiredDeviceCapabilities引起的bug_第1张图片
UIRequiredDeviceCapabilities的一些字段名.png

还有一些其他的字段,感兴趣的可以在下面的引用文件找到。

    再来说下我的bug是怎么造成的,在我打包bundle的时候,是在DEBUG模式下打的,而在Buidl Setting-Build Active Architecture Onli字段下,DEBUG为YES,而且当前的设备选择是一台iPhone 6的手机,所以就导致在编译的过程中自动添加了UIRequiredDeviceCapabilities,这个字段,且当前的限制为arm64(iPhone 6是arm64的手机),至此导致了这个bug。

iOSBundle打包UIRequiredDeviceCapabilities引起的bug_第2张图片
033B2FC4-EEAA-402B-81F5-67D06AD7B8AE.png

iOSBundle打包UIRequiredDeviceCapabilities引起的bug_第3张图片
生成的UIRequiredDeviceCapabilities字段.png

    不过还有一个很奇怪的是,添加了这个字段之后不管是xcode打包还是通过下发蒲公英的app,运行在iPhone 5的手机都是没有问题的,只有下载AppStore上的app才是有问题的。

Bundle Programming Guide

Information Property List Key Reference

你可能感兴趣的:(iOSBundle打包UIRequiredDeviceCapabilities引起的bug)