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

How can I achieve backward compatibility from iOS 10 to iOS 8?

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

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

  1. rewrite the whole app with Objective-C: 我觉得不太方便,因为我没学过这门语言而且我老板希望把app上传到商店尽快;
  2. 从 Swift 调用 Obj-C 代码满足 iOS 8 个需求;
  3. 还是上传应用程序:我设法修改了应用程序并使其与iOS9兼容,你知道苹果公司有什么不开发的建议或建议吗?应用程序有太多旧 iOS 版本,这样我就可以说服我的老板不要纠结于这件事? 87% of devices are using iOS 10这样我们就不会砍掉太多人了;
  4. 上传应用程序并在以后的更新中添加 iOS 8.0 兼容性:我可以在下次更新中更改 iOS 目标吗?
  5. 使用 Appcelerator 或 React Native

要添加 iOS 8 兼容性,您必须将部署目标版本更改为 8.0,并在您尝试 build/run 时解决 Xcode 给您的每个 warning/issue。

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

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

您可以通过以下代码检查 iOS 版本:

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

  2. 同1.

  3. 这当然是可行的方案

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

  5. 如果你想实现使用 iOS9 中才引入的 API 的功能,即使是混合框架也需要 iOS 版本,如果它们使用内置 iOS APIs.

您不需要在 objective c 中重写任何内容。对于被调用的功能,研究 iOS 8 兼容的方式来实现它们(如果甚至 possible)并在代码中添加检查 iOS 版本,以便某些块只对某些 os 执行。 (参见已提供的技术答案)

但是,首先向您的 os 展示如何更新他的 phone。

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

接下来提醒他,这 3% 的过时用户也是最不可能下载应用程序的 3%,而这 3% 中只有一部分人在 iOS 8. 许多人甚至更过时日期。

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

如果他说是,那就去吧。