【问题标题】:How can I achieve backward compatibility from iOS 10 to iOS 8?如何实现从 iOS 10 到 iOS 8 的向后兼容?
【发布时间】:2017-08-23 12:34:35
【问题描述】:

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

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

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

【问题讨论】:

  • 从 iOS 8 到 iOS 10 有一些变化,比如 APNS。你必须检查你在哪里面临问题。只需检查 API 兼容性。这对你来说很容易。看看这个链接的答案stackoverflow.com/questions/32730271/…
  • 您的老板因为他的个人设备而做出支持 EOL OS 版本的商业决策?现在是领导力。
  • 请参阅stackoverflow.com/a/32841791/1187415,了解如何在运行时检查可用性。

标签: ios backwards-compatibility


【解决方案1】:

最好的解决方案是以编程方式检查 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. AFAIK,您可以在以后的更新中更改目标 iOS 版本。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      但是,首先要告诉你的老板如何更新他的手机。

      然后向您的老板展示 97% 的用户使用 9 或 10。 https://developer.apple.com/support/app-store/

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

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

      如果他说是,那就去吧。

      【讨论】:

        猜你喜欢
        • 2018-03-07
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 2014-10-04
        • 1970-01-01
        相关资源
        最近更新 更多