2012-09-28 114 views
2

因此,现在有很多iOS版本在设备上运行,并且我在支持不同种类时遇到了一些问题。如何支持多个iOS版本?

如果我想发布一个应用程序知道,想要使用iOS 6中的某些功能,但不想失去iOS 5用户,是否可以在同一个应用程序中定位两个版本App Store?

这里有什么其他的选择?要跳过iOS 6的功能并只瞄准iOS 5?在这种情况下,应用程序是否会全面支持iOS 6?

谢谢。

+3

非常困难。 –

+0

可以在代码中嵌入测试,以利用iOS 6盒子上的iOS 6功能,并在iOS 5盒子上绕过它们。但是你需要仔细计划你将如何做到这一点,并在iOS 5上提供适当的等效功能(或者至少从菜单中删除相应的选项等)。 –

+0

如果你错过了其中一个测试,你将会崩溃,除非在两个版本上都进行了大量测试(每次更改任何内容时对每个版本进行重新测试),否则无法检查。在iOS上很少值得使用IMO。 –

回答

7

iOS用户的升级速度比任何其他群体都快。除非您有特殊的用户群,否则我不建议花费大量的时间来支持大于6个月的iOS版本。对于很多种类的应用程序来说,即使那样太长了。 Matt Gemmell wrote an excellent discussion of this when iOS 5 came out.

在您过渡期间,在切换到最新版本之前,我的建议是针对旧SDK进行构建。不要只设置“部署目标”。设置“基础SDK”。这意味着您需要保留旧的SDK并将其链接到您的Xcode副本中,因为Apple将继续删除它们。 Google围绕如何针对旧版SDK进行构建。有很多讨论。我确定这里有吨。有几个原因,我强烈建议这个(不管你等多久升级):

  • 这是有点罕见,你实际上可以提供最新版本的功能,你在老版别。大多数时候你需要以某种形式提供旧版本。这意味着你现在有两个版本的代码基本上是一样的。大多数时候,旧的方式更难,但仍然有效。一旦你写出了硬法,还有什么意思?写了简单的方法,然后编写额外的代码来选择它们之间的?

  • 将功能交换进入和退出所需的测试令人难以置信的高。首先测试功能是非常困难的。现在测试测试没有该功能。

  • 当您使用“开发目标”时,编译器不会提供帮助。如果您从iOS 6调用某个方法而未检查它是否存在,那么您将不会收到警告。你只会在iOS 5上崩溃。如果你使用Base SDK,那么编译器会告诉你它何时不可用。我在WWDC与Xcode团队谈过这件事。他们指出,苹果建议使用部署目标,但承认在实践中使用它是非常脆弱的。

所以基本上,我说留在iOS 5 SDK,直到你准备去到iOS 6,然后去了iOS 6 SDK,永不回头。

+0

哇,伟大的答案罗布,欣赏它!您能否详细说明“直到您准备好去iOS 6”?我目前正在学习新的SDK和Objective-C功能,那么现在是否有任何理由不针对iOS 6?谢谢。 – marsrover

+1

如果您现在开始开发应用程序(如果还没有启动应用程序,那么更是如此),那么我将专注于iOS 6的100%。当您准备好发布任何内容时,iOS 5将被考虑古。 –

+0

我一直在为这个决定奋斗这么久。你只是在这里完美地总结出来的。“所以基本上,我说留在iOS 5 SDK,直到你准备好去iOS 6。然后去iOS 6 SDK,永远不要回头” –