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?


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 }
}

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


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 .


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.


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ś.


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



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


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.


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.


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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.