所以现在有很多版本的 iOS 在设备上运行,我有一些关于支持不同类型的问题。
如果我要发布一个应用程序,想要使用 iOS 6 中的某些功能,但又不想失去 iOS 5 用户,是否可以在 App Store 上提供的同一个应用程序中同时定位两个版本?
这里的其他选择是什么?要跳过 iOS 6 功能而只针对 iOS 5?在这种情况下,应用程序是否会完全支持 iOS 6?
谢谢你。
iOS 用户的升级速度比其他任何群体都快。除非您有特殊的用户群,否则我不建议您花费大量时间来支持超过 6 个月的 iOS 版本。对于许多类型的应用程序,即使这样也太长了。当 iOS 5 发布时,Matt Gemmell 对此进行了精彩的讨论。
在过渡期间,在切换到最新版本之前,我的建议是针对旧 SDK 进行构建。不要只设置“部署目标”。设置“基础 SDK”。这意味着您需要保留旧的 SDK 并将它们链接到您的 Xcode 副本,因为 Apple 将继续删除它们。Google 四处寻找如何针对旧 SDK 进行构建。有很多讨论。我敢肯定SO上有很多东西。我强烈推荐这个有几个原因(无论您等待升级多长时间):
您实际上可以在最新版本中提供旧版本中没有的功能,这有点罕见。大多数情况下,您最终不得不以某种形式在旧版本中提供它。这意味着您现在有两个版本的代码在做基本相同的事情。大多数时候,旧方法更难,但仍然有效。一旦你编写了 hard 方法,那么还要编写 easy 方法,然后编写额外的代码来在它们之间进行选择有什么意义呢?
交换功能所需的测试非常高。一开始就很难测试功能。现在测试它并测试没有该功能。
当您使用“开发目标”时,编译器不会给您任何帮助。如果您从 iOS 6 调用一个方法而不检查它是否存在,那么您将不会收到任何警告。你只会在 iOS 5 上崩溃。如果你使用 Base SDK,那么编译器会在它不可用时告诉你。我在 WWDC 上与 Xcode 团队讨论过这个问题。他们指出,Apple 建议使用 Deployment Target,但承认在实践中使用它非常脆弱。
所以基本上,我说在你准备好使用 iOS 6 之前,请继续使用 iOS 5 SDK。然后再使用 iOS 6 SDK,永不回头。