如何实现从iOS 10到iOS 8的向后兼容性?

时间:2017-08-23 12:34:35

标签: ios backwards-compatibility

我开发的应用程序(使用Swift 3和xcode 8)已经为iOS 10做好了准备,但是我的老板希望它可以与iOS 8一起使用,因为他有一部带有8.2的iPhone:当我将他的iPhone插入我的Mac并开始使用时构建项目时,它失败了,因为某些功能仅在iOS 9.0或更高版本上可用。

我做了一些研究并遇到了一些选择,但由于我是初学者,所以我不知道什么会更好。让我与你分享:

  1. 使用Objective-C重写整个应用程序:我认为不太方便,因为我从未研究过这种语言而我的老板希望应用程序尽快上传到商店;
  2. 从Swift for iOS 8调用Obj-C代码需要;
  3. 无论如何都要上传应用:我设法修改了应用并使其与iOS 9兼容,您是否知道Apple提出的任何建议或建议都没有为过多的旧iOS版本开发应用,以便我可以说服我的老板不要痴迷这件事吗? 87% of devices are using iOS 10所以我们不会切断太多人;
  4. 上传应用并在未来的更新中添加iOS 8.0兼容性:我可以在下次更新中更改iOS目标吗?
  5. 使用Appcelerator或React Native

3 个答案:

答案 0 :(得分:1)

最好的解决方案是以编程方式检查iOS版本,并且只有在用户的手机实际支持它们时才调用有问题的方法。否则,请保持对用户隐藏该功能。

这是您可以从代码中检查iOS版本的方法:

if #available(iOS 9, *) {
    // iOS 9 Swift code
} else {
   //Hide the methods from the users on older OS versions
}
  1. 这不会起作用,因为大多数系统API都不依赖于语言。如果仅在某个iOS版本中添加某个API /功能,则无论您使用的是Objective-C还是Swift,该要求都保持不变。

  2. 与1相同。

  3. 当然,这是一个可行的选择。

  4. AFAIK,您可以在以后的更新中更改目标iOS版本。

  5. 如果您想要实现使用仅在iOS9中引入的API的功能,即使混合框架使用内置iOS API,也需要iOS版本。

答案 1 :(得分:0)

要添加iOS 8兼容性,您必须将部署目标版本更改为8.0,并解决在您尝试构建/运行时Xcode为您提供的每个警告/问题。

如果使用在版本8和版本10之间更改的API,则需要使用if #available(iOS 9, *) {}代码。

答案 2 :(得分:0)

您无需在目标c中重写任何内容。对于要调用的功能,研究iOS 8兼容的方式来实现它们(如果可能的话)并在代码中添加iOS版本的检查,以便某些块仅针对某些操作系统执行。 (参见已提供的技术答案)

但是,先向老板展示如何更新手机。

然后告诉你的老板97%的用户正在使用9或10。 https://developer.apple.com/support/app-store/

接下来提醒他,3%的过时用户也是下载应用程序的可能性最低的3%,只有3%的部分用户在iOS 8上。许多人甚至更加过时了。

然后计算支持iOS 8所需的小时数。乘以小时费率。然后问你的老板是否值得用X来扩展你的应用程序的用户群,最多只需要1%。

如果他说是,那就去吧。