如果我使用SwiftUI创建了一个应用程序,它能在低于iOS 13的iOS设备上运行吗?
我刚在Xcode 11中检查了一下,并确认它不会向后兼容,因为可以在SwiftUI的View
实现中看到:
我刚在 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 }
}
SwiftUI和Combine使用Swift 5.1的Opaque-Return-Types。由于该特性是在Swift 5.1中实现的,且无法像DSL或Property-Wrappers那样回退到Swift 5.0,因此不能在早期版本的iOS上使用SwiftUI和Combine,因为iOS 13是包含Swift 5.1运行时的最早版本。
除非苹果提供了一种将Swift 5.1运行时(或未来版本)与应用程序捆绑在一起的方式,就像它以前使用早期的Swift版本一样。但因为这会增加应用程序大小并对整个系统增加额外开销,所以我怀疑这将永远不会发生。
SwiftUI
使用了一些特性,例如不透明返回类型、DSL、propertyDelegate(在WWDC中作为propertyWrapper引入)等,这些特性仅在Swift 5.1中可用。由于Swift 5是二进制稳定的,我猜想在Xcode11中无法使用嵌入式swift-frameworks,因此他们已经重新实现了这些功能,并将它们标记为iOS13+可用,直到Swift 5.1发布。@available(iOS13, ...)
。这意味着他们必须使用iOS可用性属性来标记使用Swift 5.1功能的所有内容。其中一些将在Swift 5.1发布后被删除,但我们不能确定SwiftUI
和Combine
是否会被删除,除非苹果另有说明。这也在领域特定语言的提案中提到:
实现:PR。请注意,Xcode开发人员预览版中的实现与此处描述的实现略有不同。链接的PR反映了预览版中的实现,但正在积极开发以匹配此提案。
当 Swift 5.1 发布时,向后不兼容的限制可能会被解除,但真正需要由 Apple 团队澄清。
我不这么认为,因为所有的库都已经为iOS 13或更高版本进行了注释。
此外,在文档中,Apple明确提到支持的版本:
苹果的SwiftUI需要部署到iOS 13或更高版本、macOS 10.15或更高版本、tvOS 13或更高版本或watchOS 6或更高版本。该框架包含许多在旧版操作系统上不存在的新类型。
如果你想支持 iPhone 而不是 iPad,那么你可以预计大多数用户在 12-18 个月内(从发布日期开始)升级到 iOS 13。也许是85-90%?(我认为,目前苹果公司表示还有15%的人没有使用 iOS 12)。尽管如此,在这段时间里,您仍将无法立即部署 SwiftUI 应用程序,否则会冒着疏远很多用户的风险。
此外,取决于剩下的10-15%是什么,这可能意味着您能够获得留给你的许多用户和收益。
如果你也支持iPad,那么情况会更加复杂,因为人们不会经常升级他们的iPad。还有很多iPad 2以及第三代和第四代iPad仍然存在,它们只有10.3.3版本,无法再升级了。当他们的设备完全正常时,人们不会花费 $400 到 $1,000 购买一个新的iPad。
总有更新应用程序、改进应用程序和修复错误等需求,这些需求不一定与iOS 13有任何关系。例如,发现之前不知道的 bug,使得许多用户不高兴,而这些用户未必都使用最新的iOS版本。我们甚至还没有谈到很多开发商支持的企业/公司客户,这些客户对于iOS更新有各种各样的反对意见。
因此,在你对iOS 13和SwiftUI感到非常兴奋之前(你应该这样做,因为它真的很棒),在硅谷以外的现实世界中,这并不完全符合普通消费者的期望。你需要支持旧设备,因为你会排斥太多人。
此工具兼容iOS 13+,以下是其文档链接:
https://developer.apple.com/documentation/swiftui/
即使是Xcode 10也不支持该工具。您需要使用Xcode 11,该版本于2019年6月3日发布beta版。
https://developer.apple.com/tutorials/swiftui/creating-and-combining-views
根据苹果文档,它仅在iOS 13及以上版本可用。
只能在iOS 13或更高版本中使用
您仍然可以通过以下方式附加您的SwiftUI
代码:
@available(iOS 13.0, *)
#if canImport(SwiftUI)
...
#endif
众所周知,它将不向旧版iOS版本兼容。但考虑到苹果始终拥有最新iOS的高安装率,以及iOS 13需要iPhone 6S或更高版本,iPad Air 2或更高版本,新款iPad mini 4和iPhone SE。绝大多数用户都能够安装iOS 13并享受美妙的SwiftUI应用。