如果我有使用SwiftUI制作的应用程序,那么它可以在iOS 13以下的iOS上运行吗?
如果我有使用SwiftUI制作的应用程序,那么它可以在iOS 13以下的iOS上运行吗?
Answers:
我刚刚在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-Type,并且由于Opaque-Return-Type(以及其他功能)是在Swift 5.1中实现的,并且由于其实现的性质,因此无法将其回部署到Swift 5.0(与DSL不同)或Property-Wrappers),并且因为iOS 13是最早的iOS SDK,包含OS 中的Swift 5.1运行时,所以问题的答案为否,并且SwiftUI和Combine不能在iOS的早期版本上使用。
除非苹果提供了一种将Swift 5.1运行时(或将来的版本)与以前的Swift版本一样的应用程序捆绑在一起的方法,但是由于它会增加App的大小并再次增加整个系统的开销,因此我怀疑这会不会曾经发生。
Swift 5.1尚未发布,SwiftUI
它使用诸如不透明返回类型,DSL,propertyDelegate(在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发行后,其中一些将被删除,但是我们不能确定SwiftUI
,Combine
除非苹果另行通知。DSL的提案中也提到了这一点:
实施:PR。请注意,Xcode开发人员预览版中的实现使用的转换比此处描述的转换稍微简单一些。链接的PR在预览中反映了实现,但正在积极开发以匹配该建议。
因此,当Swift 5.1发行时,可能会取消向后不兼容的限制,但这确实需要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以及第3代和第4代iPad仍在野外,它们只有10.3.3,无法升级。只要他们的工作正常,人们就不会花400到1000美元购买一部新iPad。
总有空间,需要更新应用程序,使其更好,修复错误,这些错误与iOS 13无关。例如,找到以前不知道的错误,这会使很多用户感到不满意。 。不在最新的iOS版本上。而且我们甚至没有谈论很多开发商店支持的企业/公司客户。由于该领域的各种原因,iOS更新有更多的推迟发布。
因此,在回到现实世界之外(在硅谷之外),让iOS 13和SwiftUI(绝对值得,因为它很棒)绝对令人兴奋,这并不能完全满足普通消费者的期望,您需要支持较旧的设备,并且需要这样做,因为您将被疏远了。
不幸的是,根据Apple文档,它仅可从iOS 13开始使用。
它与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
仅适用于ios 13或更高版本
您仍然可以SwiftUI
通过使用附加代码
@available(iOS 13.0, *)
如果您仍在Xcode 11以下使用Xcode并且具有SwiftUI代码,则可以使用
#if canImport(SwiftUI)
...
#endif
使用Xcode 11以下的Xcode编译时,可以解决此问题
正如我之前的所有人所提到的,很明显它将需要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结合在一起。
遗憾的是,SwiftUI仅在iOS 13及更高版本中允许使用。它是在iOS 13框架中引入的。在iOS 13之前,所有内容都是使用Obj-C框架(包括Swift)构建的。
在开发文档的右侧,显示了受支持的iOS,macOS,tvOS,watchOS等版本。
https://developer.apple.com/documentation/swiftui/
希望这可以帮助!