11

未能在 Apple Developer 论坛上找到对此问题的准确回复。

与其他 Apple 开发人员一样,我将升级我们的应用程序以支持 iOS6 设备。我已经下载了支持 iOS6 SDK 的 XCode 4.5。

我知道我无法使用此 XCode 构建将我的应用程序版本提交到应用商店,但是:

  1. 如果我使用 6.0 的部署目标重新编译和构建应用程序并修复所有已知问题,例如不推荐使用的方法等。当 Apple 发布适用于 iOS6 的 GM 时,任何构建是否也可以编译并与 iOS5 设备一起使用?

  2. 我应该只提交部署目标为 5.0 的应用程序,还是无法在 iOS6 中运行?

  3. 如果我使用新的 iOS6 功能,我的部署目标是否应该只是 iOS6?

(使困惑)。

4

2 回答 2

14

由于这是一个关于支持多个 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 上可用;你可以做的是:

  1. 检查该功能在运行时是否可用(例如,类 respondsToSelector 等);

  2. 保护您的代码,#ifdef以便仅在可能的情况下对其进行编译;

  3. 如果 1. 的检查失败,请为旧 iOS 版本定义出路。

看看这篇关于支持多个 iOS 版本的帖子。

于 2012-09-04T09:02:21.943 回答
4

将“Base SDK”设置为最新的 iOS,将“iOS 部署目标”设置为您计划支持的旧版本(例如iOS 5.0)。

添加条件代码以使用最新 iOS 中可用的功能,而不会在支持的旧版本中崩溃。

本 Apple 指南中的“条件编码”部分可能会有所帮助。还要检查 SO 中有关该主题的其他问题。

于 2012-09-04T09:11:52.800 回答