Czy SwiftUI jest wstecznie kompatybilny z iOS 12.xi starszym?

124

Jeśli mam aplikację utworzoną za pomocą SwiftUI, czy będzie działać na iOS poniżej iOS 13?

Przetrząsać
źródło
1
Dlaczego tego nie spróbujesz? Xcode 11 beta jest dostępna do pobrania, a samouczki są dostępne tutaj developer.apple.com/tutorials/swiftui .
Martin R
1
Czy ktoś wie, dlaczego moja odpowiedź została usunięta przez @ Jean-François Fabre
CrazyPro007
10
NIE, SwiftUI nie będzie działać z iOS 12.xi starszymi.
ystack

Odpowiedzi:

90

Właśnie sprawdziłem to w Xcode 11 i mogę potwierdzić, że nie będzie kompatybilny wstecz, jak widać w Viewimplementacji 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 }
}
fredpi
źródło
7
Co najmniej kolejne 5 lat? Czy używasz obecnie tylko interfejsów API dostępnych w iOS 7 i starszych?
David Monagle
5
Najdziwniejsze jest to, że możesz stworzyć aplikację SwiftUI z xcode 11 na Mojave (10.4), która będzie działać tylko na Catalinie (10.5)
Túlio Calazans
34

Nie sądzę, ponieważ wszystkie biblioteki mają już adnotacje dla iOS 13 lub nowszego.

Ponadto w dokumentacji Apple wyraźnie wymienia obsługiwane wersje:

  • iOS 13.0 + beta
  • macOS10.15 + beta
  • tvOS 13.0+ beta
  • watchOS 6.0+ beta

wprowadź opis obrazu tutaj

Kathiresan Murugan
źródło
32

SwiftUI i Combine używają Opaque-Return-Types w Swift 5.1, a ponieważ Opaque-Return-Types (wraz z innymi funkcjami) są zaimplementowane w Swift 5.1 i ze względu na charakter ich implementacji nie mogą być ponownie wdrożone w Swift 5.0 (w przeciwieństwie do DSL lub Property-Wrappers ), a ponieważ iOS 13 jest najwcześniejszym iOS SDK, który zawiera środowisko uruchomieniowe Swift 5.1 w systemie operacyjnym, więc odpowiedź na pytanie brzmi: nie, a SwiftUI i Combine nie mogą być używane we wcześniejszych wersjach iOS.

Chyba że Apple zapewnia sposób na dołączenie Swift 5.1 środowiska (lub przyszłych wersji) z aplikacją, tak jak w przypadku wcześniejszych wersji Swift, ale ponieważ zwiększy to rozmiar aplikacji i ponownie zwiększy obciążenie całego systemu, wątpię, aby tak się stało kiedykolwiek się zdarzyło.

To może być kompatybilny wstecz

Swift 5.1 nie został jeszcze wydany i SwiftUIwykorzystuje funkcje, takie jak nieprzezroczyste typy zwrotów , DSL , propertyDelegate (wprowadzone w WWDC jako propertyWrapper ) itp., Które będą dostępne tylko w Swift 5.1. Ponieważ Swift 5 jest stabilny binarnie, myślę, że nie było możliwe użycie wbudowanych ram Swift wewnątrz Xcode11, dlatego ponownie zaimplementowali te funkcje w rdzeniu Cocoa i oznaczyli je jako iOS13 + dostępne do czasu wydania Swift 5.1.

Moje założenia opierają się na fakcie, że Ordered Collection Diffing i DSL będą dostępne w Swift 5.1 i nie będą miały korelacji z Xcode ani ekosystemem Apple, ale są również oznaczone jako @available(iOS13,...). Oznacza to, że musieli oznaczyć wszystko za pomocą funkcji Swift 5.1 atrybutem dostępności iOS. Niektóre z nich zostaną usunięte po wydaniu Swift 5.1, ale nie możemy być tego pewni SwiftUIi Combinechyba że Apple powie inaczej. Jest to również wspomniane w propozycji DSL :

Realizacja: PR . Zwróć uwagę, że implementacja w podglądzie programisty Xcode wykorzystuje nieco prostszą transformację niż ta opisana tutaj. Połączone żądanie PR odzwierciedla implementację w podglądzie, ale jest w trakcie opracowywania w celu dopasowania do tej propozycji.

Dlatego ograniczenie wstecznej niekompatybilności może zostać zniesione po wydaniu Swift 5.1, ale naprawdę musi zostać wyjaśnione przez zespół Apple .

farzadshbfn
źródło
1
Czy to ma jakieś aktualizacje? PR, o którym wspomniałeś, został połączony, Swift 5.1 został wydany
użytkownik158
@ user158 Właśnie zaktualizowałem odpowiedź i opisałem, dlaczego ta funkcja nie może być obsługiwana.
farzadshbfn
15

Nie. SwiftUI wymaga docelowego wdrożenia systemu iOS 13 lub nowszego, macOS 10.15 lub nowszego, tvOS 13 lub nowszego albo watchOS 6 lub nowszego. Framework zawiera wiele nowych typów, które nie istnieją w starszych wersjach systemów operacyjnych.

rob mayoff
źródło
Możliwe jest używanie SwiftUI na iOS 13, jednocześnie obsługując niższy cel wdrożenia. Sprawdź stackoverflow.com/a/58372597/840742
Renatus
13

Jeśli kręcisz do obsługi iPhone'a, a nie iPada, prawdopodobnie możesz oczekiwać, że większość użytkowników dokona aktualizacji do iOS 13 w ciągu 12-18 miesięcy (począwszy od daty premiery). Może 85-90%? (Myślę, że Apple powiedział, że w tym momencie nadal jest 15% ludzi, którzy nie korzystają z iOS 12) .To jeszcze sporo czasu, gdy nie będziesz w stanie od razu wdrożyć aplikacji SwiftUI, bo inaczej ryzykujesz zrazić wielu użytkowników.

W zależności od tego, jakie jest pozostałe 10-15%, może to oznaczać, że na stole pozostało wielu użytkowników (i $$).

Jeśli wspierasz również iPada, jest to trudniejsze, ponieważ ludzie nie aktualizują swoich iPadów tak często. Istnieje wiele iPadów 2 wraz z iPadami trzeciej i czwartej generacji, które wciąż są dostępne na wolności, które mają tylko 10.3.3 i nie mogą już być aktualizowane. Ludzie po prostu nie zamierzają wstawać i płacić między 400 a 1000 USD za nowego iPada, gdy ich działa idealnie.

Zawsze jest miejsce i potrzeba aktualizacji aplikacji, ulepszania jej, naprawiania błędów, które niekoniecznie mają coś wspólnego z iOS 13. tj. Znalezienie błędu, o którym wcześniej nie wiedziałeś, co sprawia, że ​​wielu użytkowników jest niezadowolonych. . nie w najnowszej wersji iOS. i nawet nie rozmawialiśmy o klientach korporacyjnych / korporacyjnych, których obsługuje wiele sklepów deweloperskich. jest dużo więcej odpowiedzi na aktualizacje iOS z różnych powodów w tym obszarze.

Tak więc, zanim zaczniesz się ekscytować iOS 13 i SwiftUI (które absolutnie powinieneś, ponieważ jest niesamowity), w prawdziwym świecie, poza Doliną Krzemową, nie będzie to dokładnie zgodne z tym, czego oczekuje przeciętny konsument i będziesz musiał wesprzeć starsze urządzenia i trzeba, ponieważ jest tam zbyt wielu ludzi, których zraziłbyś.

cspam
źródło
1
Znam wiele osób na „nieobsługiwanych” iPhone'ach, więc najnowsza wersja iOS nigdy nie osiągnie 100%. Wiem, że będę długo i intensywnie myślał o moim następnym telefonie, gdy mój obecny umrze
Gavin,
@cspam Chociaż Twoje przypuszczenia mogą być słuszne, nie odpowiadają one na pytanie.
user1892364
iOS 12 nie stracił wsparcia dla ponad 10% urządzeń, więc trudno powiedzieć, czy możemy spodziewać się takich samych wskaźników adopcji dla iOS 13.
Casper Zandbergen,
SwiftUI będzie musiał obsługiwać starsze urządzenia i będzie musiał, ponieważ jest tam zbyt wielu ludzi, których możesz zrazić! kciuk
Trevor
9

Bazując na dokumentacji Apple, jest on dostępny niestety dopiero od iOS 13.

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

Armands L.
źródło
Cała ta połączona dokumentacja mówi, że musisz użyć zestawu SDK iOS 13 (tj. Xcode 11). Nie oznacza to, że minimalną obsługiwaną wersją iOS urządzenia musi być iOS 13 ... starsze wersje iOS można obsługiwać w porządku ...
łuskowaty
6

działa tylko na iOS 13 lub nowszym

nadal możesz dołączyć swój SwiftUIkod za pomocą

@available(iOS 13.0, *)

jeśli nadal używasz Xcode poniżej Xcode 11 i masz kod SwiftUI, możesz go opakować

#if canImport(SwiftUI)
...
#endif

Może to rozwiązać problem podczas kompilowania z Xcode poniżej Xcode 11

Wendy Liga
źródło
4

Jak wszyscy powiedzieli, nie będzie kompatybilny wstecz ze starszymi wersjami iOS. Biorąc jednak pod uwagę, że Apple konsekwentnie ma wysoką bazę instalacyjną swojego najnowszego iOS, a także biorąc pod uwagę, że iOS 13 wymaga iPhone'a 6S lub nowszego, iPada Air 2 lub nowszego, nowego iPada mini 4 i iPhone'a SE. Zdecydowana większość użytkowników będzie mogła zainstalować iOS 13 i cieszyć się pięknymi aplikacjami SwiftUI.

welshiebiff
źródło
3
Mój iPad nie działa na iOS 13, a biorąc pod uwagę, że nadal działa i nie zostanie wymieniony na jakiś czas (mam nadzieję), mając nadzieję, że aplikacje, które lubię / potrzebuję, nie rzucają starszych urządzeń.
Gavin
3

Jak wszyscy wcześniej wspomnieli, jest bardzo jasne, że będzie to wymagało iOS 13 lub nowszego. Ale jako nowy programista iOS martwiłem się, do jakiego stopnia powinienem zaadaptować SwiftUI w porównaniu z UIKit. Zbudowałem już kilka małych projektów z UIKit i poszedłem z nim gdzieś zaawansowanym.

Ale gdy rozpoczął się SwiftUI, jak połączyć między nimi. Artykuł pod poniższym linkiem umieszcza wszystko w kontekście: https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

Moim jedynym zmartwieniem jest to, że zauważyłem w Xcode 11, że projekt Xcode nie może łączyć scenorysów i SwiftUI.

Mostafa Al Belliehy
źródło
3

Niestety nie, SwiftUI jest dozwolone tylko w iOS 13 i nowszych. Został wprowadzony we frameworku iOS 13. Przed iOS 13 wszystko było budowane przy użyciu frameworka Obj-C (w tym Swift).

Po prawej stronie dokumentacji deweloperskiej pokazuje obsługiwane wersje iOS, macOS, tvOS, watchOS itp.

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

Mam nadzieję że to pomoże!

Tyler Wasick
źródło