ios - 如何实现从 iOS 10 向后兼容 iOS 8?

标签 ios backwards-compatibility

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

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

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

最佳答案

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

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

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

  2. 同1。

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

  4. 据我所知,您可以在以后的更新中更改目标 iOS 版本。

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

关于ios - 如何实现从 iOS 10 向后兼容 iOS 8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45839893/

相关文章:

ios - 使用父类(super class)型的引用快速声明子类型的变量

ios - CFStream 类是否符合 IPV6 标准?我正在使用 CFStreamCreatePairWithSocketToHost 连接到套接字而不是低级套接字 api

css - 跨浏览器样式 CSS 表单 ID

python - 最早常用的Python版本

c# - 在 Windows 7 机器上编写/编译的 .NET 4 程序无法在 XP 上运行

javascript - 放弃对 IE6 的支持;我们得到什么? ... HTML/CSS/JavaScript 功能和技术

iPhone SDK :NSScanner crashing randomly

objective-c - 在 iOS 上为 NSFileManager 获取 root 权限(越狱)

java - 如何在向后兼容 android 的同时使用新类?

ios - ASIHTTP请求如何处理帐户注册超时