SwiftUI向后兼容iOS 12.x和更早版本吗?


Answers:


88

我刚刚在Xcode 11中对其进行了检查,并可以确认它不会向后兼容,如SwiftUI的View实现所示:

/// A piece of user interface.
///
/// You create custom views by declaring types that conform to the `View`
/// protocol. Implement the required `body` property to provide the content
/// and behavior for your custom view.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public protocol View : _View {

    /// The type of view representing the body of this view.
    ///
    /// When you create a custom view, Swift infers this type from your
    /// implementation of the required `body` property.
    associatedtype Body : View

    /// Declares the content and behavior of this view.
    var body: Self.Body { get }
}

7
至少还有5年?因此,您目前仅使用iOS 7及以下版本中可用的API吗?
David Monagle

5
最奇怪的是,你可以在莫哈韦沙漠进行SwiftUI应用程序和Xcode 11(10.4),将只在卡特琳娜(10.5)运行
图略Calazans

34

我不这么认为,因为所有库都已针对iOS 13或更高版本进行了注释。

另外,在文档中,Apple明确提到了受支持的版本:

  • iOS13.0 + Beta
  • macOS10.15 + Beta
  • tvOS 13.0+ Beta
  • watchOS 6.0+ Beta

在此处输入图片说明


32

SwiftUICombine在Swift 5.1中使用Opaque-Return-Type,并且由于Opaque-Return-Type(以及其他功能)是在Swift 5.1中实现的,并且由于其实现的性质,因此无法将其回部署到Swift 5.0(与DSL不同)或Property-Wrappers),并且因为iOS 13是最早的iOS SDK,包含OS 中的Swift 5.1运行时,所以问题的答案为否,并且SwiftUICombine不能在iOS的早期版本上使用。

除非苹果提供了一种将Swift 5.1运行时(或将来的版本)与以前的Swift版本一样的应用程序捆绑在一起的方法,但是由于它会增加App的大小并再次增加整个系统的开销,因此我怀疑这会不会曾经发生。

可能向后兼容

Swift 5.1尚未发布,SwiftUI它使用诸如不透明返回类型DSLpropertyDelegate(在WWDC中作为propertyWrapper引入)等功能,这些功能在Swift 5.1中可用。由于Swift 5是二进制稳定的,我想不可能在Xcode11中使用嵌入式swift-frameworks,因此它们在Cocoa的内核中重新实现了这些功能,并将它们标记为iOS13 +,直到Swift 5.1发布为止。

我的假设基于这样一个事实,即有序集合区分DSL将在Swift 5.1中可用,并且与Xcode或Apple的生态系统没有关联,但也标记为@available(iOS13,...)。这意味着他们必须使用带有iOS可用性属性的Swift 5.1功能标记所有内容。Swift 5.1发行后,其中一些将被删除,但是我们不能确定SwiftUICombine除非苹果另行通知。DSL的提案中也提到了这一点:

实施:PR。请注意,Xcode开发人员预览版中的实现使用的转换比此处描述的转换稍微简单一些。链接的PR在预览中反映了实现,但正在积极开发以匹配该建议。

因此,当Swift 5.1发行时,可能会取消向后不兼容的限制,但这确实需要Apple团队加以澄清


1
这事有进一步更新吗?您提到的PR已合并,Swift 5.1已发布
user158

@ user158我刚刚更新了答案,并描述了为什么不支持此功能。
farzadshbfn


13

如果您打算支持iPhone而不是iPad,那么您可能会期望大多数用户会在12-18个月内(从发布日期开始)升级到iOS 13。也许是85-90%?(我认为苹果公司目前表示,仍有15%的人不在iOS 12上)。尽管距离您将无法立即部署SwiftUI应用程序还有很大的距离,否则还有可能疏远许多用户。

同样取决于其他10-15%的用户,这可能意味着您留下了很多用户(和$$)。

如果您也支持iPad,那么它就比较棘手,因为人们不经常升级他们的iPad。有很多iPad 2以及第3代和第4代iPad仍在野外,它们只有10.3.3,无法升级。只要他们的工作正常,人们就不会花400到1000美元购买一部新iPad。

总有空间,需要更新应用程序,使其更好,修复错误,这些错误与iOS 13无关。例如,找到以前不知道的错误,这会使很多用户感到不满意。 。不在最新的iOS版本上。而且我们甚至没有谈论很多开发商店支持的企业/公司客户。由于该领域的各种原因,iOS更新有更多的推迟发布。

因此,在回到现实世界之外(在硅谷之外),让iOS 13和SwiftUI(绝对值得,因为它很棒)绝对令人兴奋,这并不能完全满足普通消费者的期望,您需要支持较旧的设备,并且需要这样做,因为您将被疏远了。


1
我知道很多人都在使用“不受支持”的iPhone,因此您永远都不可能达到100%的最新iOS版本。我知道我将漫长而艰难的思考我的下一部手机时,我当前的模具
加文

@cspam尽管您的假设可能正确,但它们并没有回答问题。
user1892364

iOS版12没有下降支持的设备,所以很难超过10%的说,如果我们可以期待的iOS 13.同样的采用率
卡斯帕的Zandbergen

SwiftUI将需要支持较旧的设备,并且需要这样做,因为您将被疏远了!拇指
Trevor



6

仅适用于ios 13或更高版本

您仍然可以SwiftUI通过使用附加代码

@available(iOS 13.0, *)

如果您仍在Xcode 11以下使用Xcode并且具有SwiftUI代码,则可以使用

#if canImport(SwiftUI)
...
#endif

使用Xcode 11以下的Xcode编译时,可以解决此问题


4

就像每个人都说过的那样,它将不会与旧的iOS版本向后兼容。但考虑到Apple始终拥有最新iOS的高安装基础,并且考虑到iOS 13需要iPhone 6S或更高版本,iPad Air 2或更高版本,新的iPad mini 4和iPhone SE。绝大多数用户将能够安装iOS 13并享受可爱的SwiftUI应用程序。


3
我的iPad在iOS 13上并没有表现出色,并且鉴于它仍然很强劲,并且可能会在一段时间内被替换(我希望),希望我喜欢/需要的应用不会使较老的设备漂流。
加文

3

正如我之前的所有人所提到的,很明显它将需要iOS 13或更高版本。但是作为一个新的iOS开发人员,我担心与UIKit相比我应该在多大程度上采用SwiftUI。我已经使用UIKit构建了一些小项目,并使用它进行了高级开发。

但是随着SwiftUI的开始,如何将它们结合起来。以下链接中的文章将所有内容置于上下文中:https : //www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

现在,我唯一需要担心的是,我在Xcode 11中注意到Xcode项目无法将Storyboard和SwiftUI结合在一起。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.