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

Ted*_*Ted 89 swift ios12 swiftui

如果我有使用SwiftUI制作的应用程序,那么它可以在iOS 13以下的iOS上运行吗?

fre*_*dpi 63

我刚刚在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 }
}
Run Code Online (Sandbox Code Playgroud)

  • 的确如此:在这方面,Google通过将新的可能性向后移植到较旧的API级别而做得更好。但是我想他们将不得不采取零散的态度。遗憾的是,我们真的不能在iOS13获得重要市场份额之前一两年内认真使用它。 (11认同)
  • 最奇怪的是,你可以在 Mojave (10.4) 上使用 xcode 11 创建一个只能在 Catalina (10.5) 上运行的 SwiftUI 应用程序 (5认同)
  • Google必须向后移植其API。因为API发行版要像iOS 12一样获得85%的份额可能需要数十年的时间。 (4认同)
  • 至少还有5年?因此,您目前仅使用iOS 7及以下版本中可用的API吗? (3认同)

Kat*_*gan 23

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

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

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

在此处输入图片说明


far*_*bfn 17

可能向后兼容

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团队加以澄清


rob*_*off 9

SwiftUI需要iOS 13的部署目标或更高版本,MACOS 15或更高,tvOS 13或更高版本,或watchOS 6或更高。该框架包含许多较旧版本的操作系统不存在的新类型。


csp*_*pam 9

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

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

如果您也支持iPad,那么它就比较棘手,因为人们不经常升级他们的iPad。有很多iPad 2以及第三代和第四代iPad仍在野外,它们只有10.3.3,无法升级。人们只是不会起床去花400至1000美元在新iPad上,而他们的工作状况却很好。

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

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


mah*_*han 8

它与iOS 13+兼容。这里是其文档的链接。

https://developer.apple.com/documentation/swiftui/


甚至Xcode 10也不支持它。您需要使用截至2019年6月3日为beta版本的Xcode 11。 https://developer.apple.com/tutorials/swiftui/creating-and-combining-views


Wen*_*iga 8

仅适用于 ios 13 或更高版本

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

@available(iOS 13.0, *)
Run Code Online (Sandbox Code Playgroud)

如果你仍然使用 Xcode 11 以下的 Xcode 并且有 SwiftUI 代码,你可以用

#if canImport(SwiftUI)
...
#endif
Run Code Online (Sandbox Code Playgroud)

这可以解决在 Xcode 11 以下使用 Xcode 编译时的问题


Arm*_* L. 7

不幸的是,根据Apple文档,它仅可从iOS 13开始使用。

https://developer.apple.com/documentation/swiftui/


小智 5

正如大家所说,它不会向后兼容旧的 iOS 版本。但鉴于 Apple 最新 iOS 的安装基数一直很高,而且 iOS 13 需要 iPhone 6S 或更新版本、iPad Air 2 或更新版本、新 iPad mini 4 和 iPhone SE。绝大多数用户将能够安装 iOS 13 并享受可爱的 SwiftUI 应用程序。

  • 我的 iPad 没有满足 iOS 13 的需求,而且考虑到它仍然很强大并且不会被替换一段时间(我希望)在这里希望我喜欢/需要的应用程序不要抛弃旧设备。 (3认同)