[译]如何指定iOS应用程序所支持的设备

免责申明:本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!原文链接:How to Indicate What Devices Are Supported by Your iOS App – http://blog.manbolo.com/2012/05/02/how-to-indicate-what-devices-are-supported-by-your-ios-app,由于本人水平有限,翻译不当之处欢迎留言指出!

Hypercritical n°64 “You Will Die Instantly!”这里,John Siracusa讨论了一个由于应用程序设备兼容性和iTunes信息之间不符导致的iOS问题。这个问题的具体是说有用户抱怨其所下载的游戏不能在iPhone 3G上运行,而iTunes上却声明这个游戏支持包括3G在内的全部设备。用户抱怨的同时,游戏开发人员却争执说应用介绍信息中明确指出了这个游戏不支持iPhone 3G,但是iTunes标签信息中却给出了相反的信息。这么看来,iTunes上的信息和应用描述信息之间似乎却有不一,而系统则应该尽量避免发生此类问题。

John的一个听众反馈说这个不一致的问题不是由开发人员个人造成的,而是由于开发过程中缺少获得应用可运行设备列表的途径。

事实上,这并不完全正确。我将会讲解你作为一名开发人员如何准确定位你的应用程序所支持的设备的方式。

1.硬件能力(Hardware capabilities)

Info.plist文件是在Xcode中你的应用程序资源里的一个非常重要的文件。此文件包含一些你的应用的重要键值信息,如作为应用唯一标识的应用包id,CFBundleIdentifier,控制你的应用在列表中的名字的包显示名称,你的应用所用到的后台模式等等…

在这些键值中,非必须的 UIRequiredDeviceCapabilities 却有着重要作用。这个键值让你能够设置你的应用程序所需要的“貌似硬件“的能力。这个键值可包含一些如:麦克风、陀螺仪、视频摄像、前置摄像头等。我说“貌似硬件”的意思是指这些取值中有些更应归为软件向,比如gamekit(译注:GameCenter等)甚至是opengles-1,但其中大部分还是硬件向的。

通过设置这些能力,你就能够指定你的应用程序能够运行在哪些设备上。iTunesConnect Developer Guide(iTunesConnect开发人员指南)中,这些能力更是以二维表的方式列了出来,让开发人员能够方便的看到哪些设备可以支持哪些能力值的组合。

顺带一提,你是否知道iPhone 3GS有一个不带wifi功能的中国定制版?(译注:天朝的产物- -!)

作者注:当你向App Store应用商店提交你的应用程序后,Apple会添加一个叫iTunesMetadata.plist的文件,这个文件中包含许多你的应用程序的信息,其中就有UIRequiredDeviceCapabilities,这也是另一个此键值作用重大的证明。比如,你可以有如下信息:

<key>UIRequiredDeviceCapabilities</key>
<dict>
    <key>armv7</key>
    <true/>
    <key>opengles-2</key>
    <true/>
</dict>

2.软件能力
你还可以调整你的应用程序所需要的最低iOS系统版本。再说一次,如果你设置了最小系统版本为iOS 3.0,那你就必须得保证你的应用程序能够在此版本系统上可靠的运行(并判断API是否存在,弱链接一些framework,这里有更多相关信息)

要设置最低iOS系统版本,只需要选择你的构建目标,然后找到”Build Settings”,然后设置iOS发布目标为你希望的值。

这样就可以了。当你提交应用到App Store时,Apple会给你的Info.plist文件中添加如下键值:

MinimumOSVersion
4.1

来说明你的应用所需要的最低iOS系统版本。
3.针对之前那苛刻问题的总结
这样看来,为了解决前面提到的那个用户的苛刻问题,惹祸游戏的开发人员应该给Info.plist文件中添加armv7能力来指明需要armv7 cpu支持。在这之后,他的游戏将只能在iPhone 3GS以后的机型上运行,并且iTunes标签信息中也会体现出这点。事实上,armv7能力甚至已经称为用Xcode 4.2及更新IDE创建项目时的磨人plist文件项(Yes, Apple is pushing you to armv7 devices!是的,苹果正在把你推向armv7设备)
这些能力虽然不像具体设备型号列表那样,但是通过设定这些能力值,开发人员可以明确指出他们的应用程序可以运行在哪些设备上。我喜欢Apple的这个做法,而且我发现Apple这可以算是以一种很漂亮的方式解决了如何指定设备兼容性的问题。
UIRequiredDeviceCapabilities可以用于指定硬件能力,这些能力又可以指出你想要支持的设备。因此,你并不需要知道所有iOS设备和他们的能力,你只需要了解哪些软件或硬件特性是你所需要的。恰当的设置此项内容的话,iTunes标签信息将会为你精确适配你的应用程序所支持的设备。
举例来说,看下无尽之剑II的iTunes页面:

看下无尽之剑应用包,你可以看到UIRequiredDeviceCapabilities项是这样的:

UIRequiredDeviceCapabilities

    armv7

    opengles-2

and the iOS version
MinimumOSVersion
4.0

这和iTunes描述完全一致!
顺便说下,如果你不知道Hypercritical其他的5by5播客,读完了我这篇文章后赶快去订阅这些精粹内容吧!
From jc

附上Apple官方关于此键值的文档地址:https://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

博主友情提示:

如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。