将应用程序更新至iOS6

11

在苹果开发者论坛上还没有找到准确的答案。

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

我知道我不能使用这个XCode版本提交我的应用到应用商店,然而:

  1. 如果我使用6.0部署目标重新编译和构建应用程序,并修复所有已知问题(例如弃用的方法等),当苹果发布iOS6 GM时,任何构建是否都能与iOS5设备一起编译和工作?

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

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

(感到困惑)。

2个回答

14

由于这是一个关于支持多个iOS版本的普遍问题,并且不涉及任何iOS6特定事项(被NDA覆盖),所以以下是我的回答:

  

如果我使用6.0的部署目标重新编译和构建应用程序,并解决所有已知问题,例如弃用方法等。当苹果发布iOS6的GM版本时,任何构建是否都能编译并在iOS5设备上正常运行?

原则上,是的,只要您没有使用任何仅适用于iOS6的功能,或者如果使用了,则必须正确处理(请参见第三个问题的答案)。但是,如果您想确保一切正常工作,测试实际运行iOS5/4设备(或模拟器)几乎是必需的。

也有可能当前在较旧的iOS版本下正常工作的某些内容会在iOS6上出现问题(这可能是因为添加了一些错误,但也可能是因为修复了一些错误,并且发现您的代码存在自己的错误反对前者的影响)。因此,测试至关重要。(感谢rsswtmr的评论)。

  

如果我将部署目标设置为5.0,那么我只需提交应用程序吗?还是那些无法在iOS6上运行?

如果您的应用程序不使用任何仅适用于iOS6的功能(或者您正确处理了它们),则可以指定部署目标为5.0;换句话说,此设置不会破坏与iOS6的兼容性。

  

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

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

如果将部署目标指定为iOS6,则可以自由使用应用程序中的任何iOS6-only功能而不必担心。应用商店机制将防止您的应用安装在任何旧设备上,因此您将是安全的。

另一方面,如果将部署目标指定为iOS5或更早版本,则仍然可以在应用程序中使用任何iOS6-only功能,但是应通过“保护”任何使用iOS6-only功能并为iOS5提供后备方案来正确支持旧版本的iOS。 

这意味着以下内容:假设您要使用只在iOS6上可用的featureA,那么您可以做以下几点:
  1. 检查在运行时功能是否可用(例如,类响应是否存在等);

  2. 使用#ifdef来保护代码,以便只有在可能时才进行编译;

  3. 如果第1步检查失败,则为旧版iOS定义一种退出方式。

请参阅此支持多个iOS版本的文章

我有点了解这个,但还需要再读一遍。很好的解释。 - AntBrown
原则上,是的,只要您没有使用任何iOS6特有的功能或者正确地完成了它(请参见您第三个问题的答案)。但是,如果您想确保一切正常工作,几乎必须针对运行iOS5/4的实际设备(或模拟器)进行测试。反过来也是如此。iOS6中的IPSec问题就是现有代码如何在新的iOS版本中失败的一个很好的例子。 - rsswtmr
@rsswtmr:感谢您的评论,我已经扩展了我的答案以包含它。 - sergio

4

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

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

这份苹果指南中的“条件编码”部分可能有所帮助。另外,请查看 SO 上其他相关问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接