将应用程序更新到iOS6

在苹果开发者论坛上找不到这个问题的准确答案。

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

我知道我不能使用这个XCode版本将应用程序的版本提交给app store,但是:

  1. 如果我使用6.0的部署目标重新编译和构build一个应用程序,并修复所有已知的问题,例如,当Apple发布iOS 6的GM时,不推荐使用的方法等,那么是否所有的构build都可以编译并与iOS5设备一起使用?

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

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

(困惑)。

由于这是一个关于支持多个iOS版本的非常通用的问题,并不包括任何iOS6特定的东西(由NDA涵盖),下面是我的答案:

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

原则上,是的,只要你没有使用任何iOS6function,或者你没有做到这一点(见第三个问题的答案)。 然而,如果你想确保事情正常工作,对运行iOS5 / 4(或模拟器)的实际设备进行testing几乎是必须的。

还有一种机会是,目前在iOS版本下工作的东西只会在iOS6上崩溃(这可能会发生,如果一些错误被添加,但也有一些错误被修复,而且碰巧你的代码有一个错误它自己的反对前者的影响)。 所以,testing是国王。 (感谢rsswtmr对此的评论)。

我应该只是提交一个5.0的部署目标的应用程序,还是将无法运行在iOS6?

如果您的应用程序不使用任何仅支持iOS6的function,则可以指定5.0的部署目标(或稍后再阅读); 换句话说,这个设置不会破坏与iOS6的兼容性;

如果我使用新的iOS6function,我的部署目标应该只是iOS6吗?

它可以,但它不是唯一的方法。

如果您将部署目标指定为iOS6,那么您可以在应用程序中免费使用任何iOS6function。 app store的机制将阻止您的应用程序安装在任何较旧的设备上,您将会安全。

另一方面,如果您将部署目标指定为iOS5或更低版本,那么您仍然可以在应用程序中使用任何iOS6专用function,但是您应该通过“保护”iOS6专用function的任何使用来正确支持较早版本的iOS并为iOS5提供了一个后备。

这意味着以下内容:假设您要使用仅在iOS6上可用的featureA ; 你可以做的是:

  1. 检查function在运行时是否可用(例如class respondsToSelector等);

  2. #ifdef保护你的代码,以便只在可能时编译它;

  3. 如果1.中的检查失败,则为较老的iOS版本定义出路。

看看这个post支持多个iOS版本 。

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

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

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