SwiftUI обратно совместим с iOS 12.x и старше?
Если у меня есть приложение, созданное с помощью swiftUI, будет ли оно работать на iOS ниже iOS 13?
12 ответов
Я только что проверил это в 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 }
}
Это может быть обратно совместимо
Swift 5.1 еще не выпущен и SwiftUI
использует такие функции, как непрозрачные типы возврата, DSL, propertyDelegate(представленный в WWDC как propertyWrapper) и т. д., которые будут доступны только в Swift 5.1. Поскольку Swift 5 является бинарной стабильной версией, я думаю, что было невозможно использовать встроенные swift-frameworks внутри Xcode11, поэтому они повторно реализовали эти функции в ядре Cocoa и отметили их как iOS13+, доступные до выхода Swift 5.1.
Мои предположения основаны на том факте, что Ordered Collection Diffing и DSL будут доступны в Swift 5.1 и не будут иметь никакого отношения к Xcode или экосистеме Apple, но они также помечены как @available(iOS13,...)
, Это означает, что они должны были пометить все, используя функции Swift 5.1, с атрибутом доступности iOS. Некоторые из них будут удалены после выхода Swift 5.1, но мы не можем быть уверены в SwiftUI
а также Combine
если Apple не скажет иначе. Это также упоминается в предложении DSL:
Реализация: PR. Обратите внимание, что реализация в предварительном просмотре разработчика XCode использует несколько более простое преобразование, чем описанное здесь. Связанный PR отражает реализацию в предварительном просмотре, но находится в стадии активной разработки, чтобы соответствовать этому предложению.
Таким образом, ограничение обратной несовместимости может быть снято, когда выйдет Swift 5.1, но это действительно нужно выяснить командой Apple.
Я так не думаю, потому что все библиотеки уже аннотированы для iOS 13 или выше.
Также в документации Apple четко упоминает поддерживаемые версии:
- iOS13.0 + бета
- macOS10.15+ бета
- tvOS 13.0+ бета
- watchOS 6.0+ бета
Если вы используете iPhone, а не iPad, вы, вероятно, ожидаете, что большинство пользователей обновят iOS 13 в течение 12-18 месяцев (начиная с даты выпуска). Может 85-90%? (Я думаю, что Apple сказала, что на данный момент все еще 15% людей не работают на iOS 12). Это все еще довольно долгое время, когда вы не сможете сразу развернуть приложения SwiftUI, иначе рискуете оттолкнуть многих пользователей.
Кроме того, в зависимости от того, что составляют остальные 10-15%, это может означать, что многие пользователи (и $$) для вас останутся на столе.
Если вы также поддерживаете iPad, то это сложнее, потому что люди не обновляют свои iPad так часто. Theres много iPad 2s, а также iPad 3-го и 4-го поколения все еще в дикой природе, которые имеют только 10.3.3 и не могут больше обновляться. Люди просто не собираются вставать и платить от 400 до 1000 долларов за новый iPad, когда у них отлично работает.
Всегда есть место и нужно обновить приложение, сделать его лучше, исправить ошибки, которые не обязательно имеют какое-либо отношение к iOS 13. т.е. найти ошибку, о которой вы раньше не знали, что делает многих пользователей несчастными. не на последней версии iOS. и мы даже не говорим о корпоративных / корпоративных клиентах, которых поддерживают многие магазины разработчиков. Theres много больше откат на обновления iOS по различным причинам в этой области.
Поэтому, прежде чем вы будете в восторге от iOS 13 и SwiftUI (что вам абсолютно необходимо, потому что это круто) в реальном мире, за пределами Силиконовой долины, это не совсем соответствует тому, что ожидает средний потребитель, и вам нужно будет поддержать старые устройства и нужно, потому что есть слишком много людей, которых вы бы оттолкнули.
Он совместим с iOS 13+. Вот ссылка на его документацию.
https://developer.apple.com/documentation/swiftui/
Даже Xcode 10 не поддерживает это. Вам нужно использовать Xcode 11, который находится в бета-версии (с 3 июня 2019 г.). https://developer.apple.com/tutorials/swiftui/creating-and-combining-views
На основании документации Apple, к сожалению, она доступна только начиная с iOS 13.
Работает только для ios 13 или новее
вы все еще можете прикрепить свой SwiftUI
код с помощью
@available(iOS 13.0, *)
Как все говорили, он не будет обратно совместим со старыми версиями iOS. Но с учетом того, что Apple постоянно имеет высокую инсталляционную базу своих последних версий iOS, а также с учетом того, что для iOS 13 требуется iPhone 6S или более поздняя версия, iPad Air 2 или более поздняя версия, новый iPad mini 4 и iPhone SE. Подавляющее большинство пользователей смогут установить iOS 13 и наслаждаться прекрасными приложениями SwiftUI.
К сожалению, нет, SwiftUI разрешен только в iOS 13 и выше. Он был представлен в среде iOS 13. До iOS 13 все было построено с использованием инфраструктуры Obj-C (включая Swift).
В правой части документации для разработчиков показаны поддерживаемые версии iOS, macOS, tvOS, watchOS и т. Д.
https://developer.apple.com/documentation/swiftui/
Надеюсь это поможет!
Как уже упоминали все люди до меня, совершенно очевидно, что для этого потребуется iOS 13 или новее. Но как новый разработчик iOS я беспокоился о том, в какой степени мне следует принять SwiftUI по сравнению с UIKit. Я уже построил несколько небольших проектов с помощью UIKit и продвинулся с ним.
Но поскольку SwiftUI начался, как их объединить. Статья по следующей ссылке помещает все в контекст:https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both
Меня беспокоит только то, что я заметил с Xcode 11, что проект Xcode не может сочетать как раскадровки, так и SwiftUI.
Создайте две раскадровки, одну с UIKit, а другую с помощью UIHostingController с SwiftUI.
Затем используйте if #available (), чтобы проверить, поддерживает ли ОС SwiftUI.
// SwiftUI
let storyboard_swiftUI = UIStoryboard(name: "Main-SwiftUI", bundle: nil)
let controller_swiftUI = storyboard_swiftUI.instantiateViewController(withIdentifier: "ViewControllerSwiftUI")
// UIKit
let storyboard_UIKit = UIStoryboard(name: "Main-UIKit", bundle: nil)
let controller_UIKit = storyboard_UIKit.instantiateViewController(withIdentifier: "ViewControllerUIKit")
if #available(macCatalyst 14.0, iOS 14.0, *){
// SwiftUI
self.present(controller_swiftUI, animated: true)
} else {
// UIKit
self.present(controller_UIKit, animated: true)
}