Имеет ли SwiftUI обратную совместимость с iOS 12.x и старше?


124

Если у меня есть приложение, созданное с использованием SwiftUI, будет ли оно работать на iOS ниже iOS 13?


1
Почему бы тебе не попробовать? Бета-версия Xcode 11 доступна для загрузки, а руководства находятся здесь developer.apple.com/tutorials/swiftui .
Martin R

1
Народ, кто-нибудь знает, почему мой ответ удален @ Jean-François Fabre
CrazyPro007

10
НЕТ, SwiftUI не будет работать с iOS 12.x и старше.
ystack

Ответы:


90

Я только что проверил его в Xcode 11 и могу подтвердить, что он не будет обратно совместим, как это видно в Viewреализации SwiftUI :

/// 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 лет? То есть вы сейчас используете только API, доступные в iOS 7 и ниже?
Дэвид Монэгл

5
Самое странное, что вы можете создать приложение SwiftUI с xcode 11 на Mojave (10.4), которое будет работать только на Catalina (10.5),
Тулио Каласанс,

34

Я так не думаю, потому что все библиотеки уже аннотированы для iOS 13 и выше.

Также в документации Apple четко упоминает поддерживаемые версии:

  • iOS13.0 + бета
  • macOS10.15 + бета
  • tvOS 13.0+ бета
  • watchOS 6.0+ бета

введите описание изображения здесь


32

SwiftUI и Combine используют Opaque-Return-Types в Swift 5.1, а поскольку Opaque-Return-Types (наряду с другими функциями) реализованы в Swift 5.1, и из-за характера их реализации их нельзя развернуть обратно в Swift 5.0 (в отличие от DSL). или Property-Wrappers ), и поскольку iOS 13 - это самый ранний iOS SDK, содержащий среду выполнения Swift 5.1 в ОС, поэтому ответ на вопрос отрицательный, а SwiftUI и Combine нельзя использовать в более ранних версиях iOS.

Если Apple не предоставляет способ связать среду выполнения Swift 5.1 (или будущие выпуски) с приложением, как это было раньше с более ранними версиями Swift, но поскольку это снова увеличит размер приложения и добавит накладные расходы для всей системы, я сомневаюсь, что это будет когда-либо случится.

Это может быть обратная совместимость

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 .


1
Есть новости по этому поводу? Упомянутый вами PR объединен, выпущен Swift 5.1
user158,

@ user158 Я только что обновил ответ и описал, почему эта функция не может поддерживаться.
farzadshbfn

15

Нет. SwiftUI требует целевого развертывания iOS 13 или новее, macOS 10.15 или новее, tvOS 13 или новее или watchOS 6 или новее. Фреймворк содержит множество новых типов, которых нет в старых версиях ОС.


SwiftUI можно использовать на iOS 13, поддерживая более низкую цель развертывания. Пожалуйста , проверьте stackoverflow.com/a/58372597/840742
Ренатус

13

Если вы снимаете для поддержки iPhone, а не iPad, вы, вероятно, могли ожидать, что большинство пользователей обновятся до iOS 13 в течение 12-18 месяцев (начиная с даты выпуска). Может 85-90%? (Я думаю, Apple заявила, что на данный момент есть еще 15% людей, не использующих iOS 12). Это еще довольно много времени, когда вы не сможете сразу развернуть приложения SwiftUI, иначе рискуете оттолкнуть многих пользователей.

Кроме того, в зависимости от того, каковы остальные 10-15%, это может означать, что много пользователей (и $$) для вас останутся на столе.

Если вы также поддерживаете iPad, это будет сложнее, потому что люди не так часто обновляют свои iPad. Есть много iPad 2, а также iPad 3-го и 4-го поколений, которые все еще находятся в дикой природе, на которых установлена ​​только версия 10.3.3 и которые больше не могут обновляться. Люди просто не собираются вставать и платить от 400 до 1000 долларов за новый iPad, когда их iPad работает отлично.

Всегда есть место и необходимость в обновлении приложения, улучшении его, исправлении ошибок, которые не обязательно имеют какое-либо отношение к iOS 13. т.е. обнаружение ошибки, о которой вы не знали раньше, что недовольно многих пользователей. .не последней версии iOS. и мы даже не говорим о корпоративных / корпоративных клиентах, которых поддерживает множество разработчиков. Есть еще много откатов на обновления iOS по разным причинам в этой области.

Итак, прежде чем вы будете в восторге от iOS 13 и SwiftUI (что вам абсолютно необходимо, потому что это круто), вернувшись в реальный мир, за пределами Кремниевой долины, это не совсем соответствует ожиданиям среднего потребителя, и вам нужно будет поддерживать старые устройства и необходимость, потому что есть слишком много людей, которых вы оттолкнете.


1
Я знаю многих людей, пользующихся «неподдерживаемыми» iPhone, поэтому вы никогда не достигнете 100% для последней версии iOS. Я знаю, что буду долго и усердно думать о своем следующем телефоне, когда умрет мой нынешний
Гэвин

@cspam Хотя ваши предположения могут быть верными, они не отвечают на вопрос.
user1892364

iOS 12 не отказалась от поддержки более 10% устройств, поэтому трудно сказать, можем ли мы ожидать таких же темпов принятия iOS 13,
Каспер Зандберген,

SwiftUI должен будет поддерживать старые устройства, потому что вы оттолкнете слишком много людей! thumb
Тревор

9

К сожалению, согласно документации Apple, он доступен только с iOS 13.

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


Все, что связано с документацией, говорит о том, что вам необходимо использовать iOS 13 SDK (т.е. Xcode 11). Это не означает, что минимальная поддерживаемая версия iOS устройства должна быть iOS 13 ... вы можете отлично поддерживать старые версии iOS ...
scaly


6

работает только с ios 13 и новее

вы все равно можете прикрепить свой SwiftUIкод, используя

@available(iOS 13.0, *)

если вы все еще используете Xcode ниже Xcode 11 и имеете код SwiftUI, вы можете обернуть его

#if canImport(SwiftUI)
...
#endif

Это может решить проблему при компиляции с Xcode ниже Xcode 11.


4

Как все уже говорили, он не будет обратно совместим со старыми версиями iOS. Но учитывая, что Apple постоянно имеет высокую базу установки своей последней iOS, а также учитывая, что iOS 13 требует iPhone 6S или новее, iPad Air 2 или новее, нового iPad mini 4 и iPhone SE. Подавляющее большинство пользователей смогут установить iOS 13 и наслаждаться прекрасными приложениями SwiftUI.


3
Мой iPad не подходит для iOS 13, и, учитывая, что он все еще хорош и не будет заменен на некоторое время (я надеюсь) здесь, в надежде, что приложения, которые мне нравятся / которые мне нужны, не бросят старые устройства на произвол судьбы.
Gavin

3

Как уже упоминали все люди до меня, совершенно очевидно, что для этого потребуется 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.


3

К сожалению, нет, SwiftUI разрешен только в iOS 13 и выше. Он был представлен в среде iOS 13. До iOS 13 все было построено с использованием инфраструктуры Obj-C (включая Swift).

В правой части документации для разработчиков показаны поддерживаемые версии iOS, macOS, tvOS, watchOS и т. Д.

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

Надеюсь это поможет!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.