如果我将 UIKit 应用程序更新为 SwiftUI,老 iOS 用户会发生啥?

Posted

技术标签:

【中文标题】如果我将 UIKit 应用程序更新为 SwiftUI,老 iOS 用户会发生啥?【英文标题】:What happens for older iOS users if I update my UIKit app to SwiftUI?如果我将 UIKit 应用程序更新为 SwiftUI,老 iOS 用户会发生什么? 【发布时间】:2021-07-03 06:02:15 【问题描述】:

我有几个基于 UIKit 的 ios 应用程序已经在 AppStore 上分发,我想更新这些应用程序,我正在考虑切换到 SwiftUI。

我的问题是:对于已经拥有该应用但运行的 iOS 版本早于 iOS13 的用户会发生什么?应用程序是否会完全不可用,或者他们会保留使用旧版 UIKit 的能力?

非常感谢!

【问题讨论】:

【参考方案1】:

要在您的应用中允许 SwiftUI,您必须允许支持 iOS 13 及更高版本。您可以通过将应用程序的支持更改为 iOS 13 及更高版本或在新代码周围使用“@available(iOS 13.0, *)”装饰器来实现。 在第一种情况下,用户将保持使用其设备上安装的最新版本的能力。他们将无法更新到较新的版本。 在后一种情况下,作为开发人员,您需要进行更多处理。用户将能够继续和更新应用程序并使用您提供的替代代码

【讨论】:

【参考方案2】:

您可以使用编译器指令为运行 iOS 13 的用户创建 SwiftUI 视图,并为 iOS 12 或更低版本提供 UIKit 替代方案。

例如,您可以将 SwiftUI 视图标记为仅适用于 iOS 13:

@available(iOS 13.0, *)
struct MyView: View 
  // ...

并创建一个 UIKit 替代方案:

class MyViewController: UIViewController 
  // ...

然后,在呈现视图时,您可以有条件地显示正确的版本:

let destinationVC: UIViewController

if #available(iOS 13.0, *) 
  destinationVC = UIHostingController(rootView: MyView())
 else 
  destinationVC = MyViewController()    

self.present(destinationVC, animated: true, completion: nil)

【讨论】:

以上是关于如果我将 UIKit 应用程序更新为 SwiftUI,老 iOS 用户会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何混合 UIKit 和 SpriteKit?

如何在应用 UIKit Dynamics 的重力时获取 UIView 的帧更新?

删除/插入行到 UITableView 时 UIKit 崩溃

值更改时如何在 UIKit 中更新 SwiftUI 视图?

iOS UIKit 控制器显示带有照片的新闻提要

UIKit 支持使用 Apportable