Чи SwiftUI назад сумісний із iOS 12.x та старішими?


123

Якщо у мене є додаток, створене за допомогою SwiftUI, чи буде він працювати для iOS нижче iOS 13?


1
Чому б не спробувати? Бета-версія Xcode 11 доступна для завантаження, а навчальні посібники - тут developer.apple.com/tutorials/swiftui .
Мартін Р

1
Хтось знає, хто чому свою відповідь видалив @ Жан-Франсуа Фабре
CrazyPro007

10
НІ, SwiftUI не працюватиме з iOS 12.x та старішими.
ystack

Відповіді:


89

Щойно я перевірив це в 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), який працюватиме лише на
Каталіні

34

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

Також у документації Apple чітко згадує підтримувані версії:

  • iOS13.0 + бета-версія
  • macOS10.15 + бета-версія
  • tvOS 13.0+ бета-версія
  • watchOS 6.0+ бета

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


32

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

Якщо тільки Apple не надає спосіб зв'язати Swift 5.1 час виконання (або майбутні випуски) за допомогою додатка, як це було раніше у версії Swift, але оскільки він збільшить розмір додатка і знову додасть накладні витрати на всю систему, я сумніваюся, що це буде коли-небудь трапиться.

Це може бути сумісним назад

Swift 5.1 ще не випущено та SwiftUI використовує такі функції, як непрозорі типи повернення , DSL , propertyDelegate (введені в WWDC як propertyWrapper ) та ін., Які будуть доступні лише у Swift 5.1. Оскільки Swift 5 є бінарним стабільним, я думаю, не вдалося використати вбудовані швидкі рамки всередині Xcode11, отже, вони повторно реалізували ці функції в ядрі Cocoa та позначили їх як iOS13 +, доступні до виходу Swift 5.1.

Мої припущення засновані на тому, що, Orders 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
користувач158

@ user158 Я щойно оновив відповідь і описав, чому цю функцію неможливо підтримати.
farzadshbfn

15

Ні. SwiftUI вимагає цілі розгортання iOS 13 або новішої версії, macOS 10.15 або новішої версії, tvOS 13 або новішої версії, або watchOS 6 або новішої версії. Рамка містить багато нових типів, які не існують на старих версіях ОС.


Можна використовувати SwiftUI на iOS 13, підтримуючи нижчу ціль розгортання. Перевірте stackoverflow.com/a/58372597/840742
Renatus

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, коли їхня робота ідеально працює.

Завжди є можливість і оновити додаток, покращити його, виправити помилки, які не обов'язково мають нічого спільного з iOS 13. Тобто знайти помилку, про яку ви раніше не знали, зробивши багато користувачів незадоволеними. . не в останній версії iOS. і ми навіть не говоримо про корпоративних / корпоративних клієнтів, які підтримують багато магазинів розробників. Є набагато більше відкази оновлень iOS з різних причин у цій області.

Тож перш ніж ви захоплюєтеся iOS 13 та SwiftUI (що вам абсолютно слід, бо це дивовижно), назад у реальному світі, поза межами Силіконової долини, це не зовсім узгоджується з тим, що очікує середній споживач, і вам потрібно буде підтримати старі пристрої, і це потрібно, тому що це занадто багато людей, яких ви відчужуєте.


1
Я знаю багатьох людей на "непідтримуваних" айфонах, тому ви ніколи не збираєтесь досягти 100% за останню версію iOS. Я знаю, що буду довго і важко замислюватися над своїм наступним телефоном, коли мій поточний помер
Гавін

@cspam Хоча ваші припущення, можливо, вірні, вони не відповідають на питання.
користувач1892364

iOS 12 не відмовився від підтримки на понад 10% пристроїв, тому важко сказати, чи можна очікувати однакових частот прийняття для iOS 13.
Casper Zandbergen

SwiftUI повинен підтримувати більш старі пристрої, тому що це занадто багато людей, яких ви відчужуєте! thumb
Тревор

9

На основі документації Apple, на жаль, вона доступна лише з iOS 13.

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


Все, що пов'язана документація говорить, що вам потрібно використовувати iOS 13 SDK (тобто Xcode 11). Це не означає, що мінімально підтримувана версія iOS пристрою має бути iOS 13 ... ви можете підтримувати старі версії iOS просто чудово ...
лускатий


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, і, враховуючи, що він все ще сильний, і Isint буде замінено на деякий час (я сподіваюся) тут, сподіваючись, що програми, які мені подобаються / не потребують, не кидають старих пристроїв.
Гевін

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 не може поєднувати і Storyboards, і 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.