由于这是一个关于支持多个 iOS 版本的非常通用的问题,并且不涵盖任何 iOS6 特定的内容(由 NDA 涵盖),所以我的回答如下:
如果我使用 6.0 的部署目标重新编译和构建应用程序并修复所有已知问题,例如不推荐使用的方法等。当 Apple 发布适用于 iOS6 的 GM 时,任何构建是否也可以编译并适用于 iOS5 设备?
原则上,是的,只要您没有使用任何仅限 iOS6 的功能或您正确使用了它(请参阅第三个问题的答案)。但是,如果您想确保一切正常,对运行 iOS5/4(或模拟器)的实际设备进行测试几乎是强制性的。
也有可能当前在较旧的 iOS 版本下运行的某些东西会在 iOS6 上中断(这可能会发生在添加了一些错误的情况下,但也可能会发生在一些错误已修复并且您的代码有错误的情况下)它自己的反击了前者的影响)。所以,测试才是王道。(感谢 rsswtmr 对此的评论)。
我应该只提交部署目标为 5.0 的应用程序,还是无法在 iOS6 中运行?
如果您的应用不使用任何仅限 iOS6 的功能,您可以指定 5.0 的部署目标(或者您使用正确,稍后阅读);也就是说,这个设置不会破坏与iOS6的兼容性;
如果我使用新的 iOS6 功能,我的部署目标是否应该只是 iOS6?
它可以,但它不是唯一的方法。
如果您将部署目标指定为 iOS6,那么您可以在您的应用程序中自由使用任何仅限 iOS6 的功能而无需担心。应用商店机制将阻止您的应用安装在任何较旧的设备上,您将是安全的。
另一方面,如果您将部署目标指定为 iOS5 或更早版本,那么您仍然可以在应用程序中使用任何仅限 iOS6 的功能,但您应该通过“保护”任何仅限 iOS6 功能的使用来正确支持旧版本的 iOS并为 iOS5 提供后备。
这意味着以下内容:假设您将使用featureA
仅在 iOS6 上可用;你可以做的是:
检查该功能在运行时是否可用(例如,类 respondsToSelector 等);
保护您的代码,#ifdef
以便仅在可能的情况下对其进行编译;
如果 1. 的检查失败,请为旧 iOS 版本定义出路。
看看这篇关于支持多个 iOS 版本的帖子。