Ist SwiftUI abwärtskompatibel mit iOS 12.x und älter?

122

Wenn ich eine mit SwiftUI erstellte App habe, funktioniert sie für iOS unter iOS 13?

Ted
quelle
1
Warum versuchst du es nicht? Xcode 11 Beta steht zum Download zur Verfügung. Die Tutorials finden Sie hier unter developer.apple.com/tutorials/swiftui .
Martin R
1
Leute, weiß jemand, warum meine Antwort von @ Jean-François Fabre
CrazyPro007
10
NEIN, SwiftUI funktioniert nicht mit iOS 12.x und älter.
Ystack
Hallo @Ted, nur eine freundliche Erinnerung, um eine der unten vorgeschlagenen Antworten als die richtige Antwort zu markieren. Ich habe Fredpi Antwort ziemlich gut gefunden ... aber es ist dein Anruf;)
Rodrigoelp

Antworten:

88

Ich habe es gerade in Xcode 11 ausgecheckt und kann bestätigen, dass es nicht abwärtskompatibel ist, wie aus der ViewImplementierung von SwiftUI hervorgeht :

/// 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
quelle
7
Mindestens noch 5 Jahre? Sie verwenden also derzeit nur APIs, die in iOS 7 und niedriger verfügbar sind?
David Monagle
5
Das Seltsamste ist, dass Sie eine SwiftUI-Anwendung mit xcode 11 auf Mojave (10.4) erstellen können, die nur auf Catalina (10.5) ausgeführt wird
Túlio Calazans
34

Ich denke nicht, da alle Bibliotheken bereits für iOS 13 oder höher kommentiert sind.

In der Dokumentation erwähnt Apple außerdem deutlich die unterstützten Versionen:

  • iOS13.0 + Beta
  • macOS10.15 + beta
  • tvOS 13.0+ Beta
  • watchOS 6.0+ Beta

Geben Sie hier die Bildbeschreibung ein

Kathiresan Murugan
quelle
32

SwiftUI und Combine verwenden Opaque-Return-Typen in Swift 5.1. Da Opaque-Return-Typen (neben anderen Funktionen) in Swift 5.1 implementiert sind und aufgrund der Art ihrer Implementierung nicht wieder in Swift 5.0 bereitgestellt werden können (im Gegensatz zu DSL) oder Property-Wrapper ) und da iOS 13 das früheste iOS-SDK ist, das Swift 5.1- Laufzeit im Betriebssystem enthält, lautet die Antwort auf die Frage Nein, und SwiftUI und Combine können in früheren Versionen von iOS nicht verwendet werden.

Es sei denn, Apple bietet eine Möglichkeit, die Swift 5.1- Laufzeit (oder zukünftige Versionen) mit der Anwendung zu bündeln, wie dies bei früheren Swift-Versionen der Fall war. Da dies jedoch die App-Größe erhöht und dem gesamten System erneut Overhead hinzufügt, bezweifle ich dies jemals passieren.

Es könnte abwärtskompatibel sein

Swift 5.1 ist noch nicht veröffentlicht und SwiftUIverwendet Funktionen wie undurchsichtige Rückgabetypen , DSL , propertyDelegate (in WWDC als propertyWrapper eingeführt ) usw., die nur in Swift 5.1 verfügbar sein werden . Da Swift 5 binär stabil ist, war es wohl nicht möglich, eingebettete Swift-Frameworks in Xcode11 zu verwenden. Daher haben sie diese Funktionen im Kern von Cocoa erneut implementiert und sie als iOS13 + markiert, bis Swift 5.1 veröffentlicht wird.

Meine Annahmen basieren auf der Tatsache, dass Ordered Collection Diffing und DSL in Swift 5.1 verfügbar sein werden und keine Korrelationen mit Xcode oder Apples Ökosystem aufweisen, aber auch als gekennzeichnet sind @available(iOS13,...). Dies bedeutet, dass sie alles mit Swift 5.1-Funktionen mit dem iOS-Verfügbarkeitsattribut markieren mussten. Einige von ihnen werden entfernt bekommen , sobald Swift 5.1 wird freigegeben, aber wir können nicht sicher sein , über SwiftUIund Combinees sei denn , Apple - sagt etwas anderes. Dies wird auch im Vorschlag von DSL erwähnt :

Umsetzung: PR . Beachten Sie, dass die Implementierung in der Xcode-Entwicklervorschau eine etwas einfachere Transformation verwendet als die hier beschriebene. Die verknüpfte PR spiegelt die Implementierung in der Vorschau wider, befindet sich jedoch in der aktiven Entwicklung, um diesem Vorschlag zu entsprechen.

Die Einschränkung der Rückwärtsinkompatibilität wird möglicherweise aufgehoben, wenn Swift 5.1 veröffentlicht wird, muss jedoch vom Apple-Team wirklich geklärt werden .

farzadshbfn
quelle
1
Gibt es hierzu Neuigkeiten? PR, die Sie erwähnt haben, wird zusammengeführt, Swift 5.1 wird veröffentlicht
user158
@ user158 Ich habe gerade die Antwort aktualisiert und beschrieben, warum diese Funktion nicht unterstützt werden kann.
Farzadshbfn
15

Nein. SwiftUI erfordert ein Bereitstellungsziel von iOS 13 oder höher, macOS 10.15 oder höher, tvOS 13 oder höher oder watchOS 6 oder höher. Das Framework enthält viele neue Typen, die in älteren Versionen der Betriebssysteme nicht vorhanden sind.

Rob Mayoff
quelle
Es ist möglich, SwiftUI unter iOS 13 zu verwenden und gleichzeitig ein niedrigeres Bereitstellungsziel zu unterstützen. Bitte überprüfen Sie stackoverflow.com/a/58372597/840742
Renatus
13

Wenn Sie für die Unterstützung des iPhone und nicht des iPad fotografieren, können Sie davon ausgehen, dass die meisten Benutzer innerhalb von 12 bis 18 Monaten (beginnend mit dem Veröffentlichungsdatum) ein Upgrade auf iOS 13 durchführen. Vielleicht 85-90%? (Ich denke, Apple sagte zu diesem Zeitpunkt, dass es immer noch 15% der Leute gibt, die nicht mit iOS 12 arbeiten.) Bis dahin können Sie SwiftUI-Apps jedoch nicht sofort bereitstellen, da sonst die Gefahr besteht, dass viele Benutzer entfremdet werden.

Abhängig von den anderen 10-15% kann dies auch bedeuten, dass viele Benutzer (und $$) für Sie auf dem Tisch liegen bleiben.

Wenn Sie auch das iPad unterstützen, ist es schwieriger, weil die Leute ihre iPads nicht so oft aktualisieren. Es gibt viele iPad 2s zusammen mit iPads der 3. und 4. Generation, die noch in freier Wildbahn sind, nur 10.3.3 haben und nicht mehr upgraden können. Die Leute werden einfach nicht aufstehen und zwischen 400 und 1.000 US-Dollar für ein neues iPad bezahlen, wenn ihr iPad einwandfrei funktioniert.

Es gibt immer Platz und die Notwendigkeit, die App zu aktualisieren, zu verbessern, Fehler zu beheben, die nicht unbedingt etwas mit iOS 13 zu tun haben, dh einen Fehler zu finden, von dem Sie vorher nichts wussten, was viele Benutzer unglücklich macht. . nicht auf der neuesten iOS-Version. und wir haben noch nicht einmal über Unternehmenskunden gesprochen, die von vielen Entwickler-Shops unterstützt werden. In diesem Bereich gibt es aus verschiedenen Gründen viel mehr Pushback für iOS-Updates.

Bevor Sie sich also für iOS 13 und SwiftUI begeistern (was Sie unbedingt tun sollten, weil es fantastisch ist), wird dies in der realen Welt außerhalb des Silicon Valley nicht genau mit den Erwartungen des Durchschnittsverbrauchers übereinstimmen und Sie müssen Unterstützung leisten ältere Geräte und müssen, weil es einfach zu viele Menschen gibt, die Sie entfremden würden.

cspam
quelle
1
Ich kenne eine Reihe von Leuten auf "nicht unterstützten" iPhones, daher werden Sie für die neueste iOS-Version nie 100% erreichen. Ich weiß, dass ich lange und intensiv über mein nächstes Telefon nachdenken werde, wenn mein aktuelles stirbt
Gavin
@cspam Obwohl Ihre Annahmen vielleicht richtig sind, beantworten sie die Frage nicht.
user1892364
iOS 12 hat die Unterstützung für mehr als 10% der Geräte nicht eingestellt, daher ist es schwer zu sagen, ob wir für iOS 13 die gleichen Akzeptanzraten erwarten können.
Casper Zandbergen
SwiftUI muss ältere Geräte unterstützen und muss, weil es einfach zu viele Leute gibt, die Sie entfremden würden! thumb
Trevor
9

Basierend auf der Apple-Dokumentation ist es leider erst ab iOS 13 verfügbar.

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

Armands L.
quelle
In der verknüpften Dokumentation heißt es lediglich, dass Sie das iOS 13 SDK (dh Xcode 11) verwenden müssen. Das bedeutet nicht, dass die mindestens unterstützte iOS-Version des Geräts iOS 13 sein muss ... Sie können ältere iOS-Versionen problemlos unterstützen ...
schuppiger
6

funktioniert nur für ios 13 oder höher

Sie können Ihren SwiftUICode weiterhin mit anhängen

@available(iOS 13.0, *)

Wenn Sie weiterhin Xcode unter Xcode 11 verwenden und über SwiftUI-Code verfügen, können Sie diesen umbrechen

#if canImport(SwiftUI)
...
#endif

Dies kann das Problem beim Kompilieren mit Xcode unter Xcode 11 beheben

Wendy Liga
quelle
4

Wie jeder gesagt hat, wird es nicht abwärtskompatibel mit älteren iOS-Versionen sein. Angesichts der Tatsache, dass Apple durchweg eine hohe Installationsbasis für sein neuestes iOS hat und iOS 13 iPhone 6S oder höher, iPad Air 2 oder höher, das neue iPad mini 4 und iPhone SE erfordert. Die überwiegende Mehrheit der Benutzer kann iOS 13 installieren und schöne SwiftUI-Apps genießen.

welshiebiff
quelle
3
Mein iPad macht den Schnitt für iOS 13 nicht, und da es immer noch stark ist und hier für eine Weile nicht ersetzt wird (ich hoffe), in der Hoffnung, dass die Apps, die mir Spaß machen / brauchen, ältere Geräte nicht treiben.
Gavin
3

Wie alle Leute vor mir erwähnt haben, ist es sehr klar, dass iOS 13 oder höher erforderlich sein wird. Als neuer iOS-Entwickler war ich jedoch besorgt darüber, inwieweit ich SwiftUI im Vergleich zu UIKit übernehmen sollte. Ich habe bereits einige kleine Projekte mit UIKit erstellt und bin damit irgendwo weitergekommen.

Aber als SwiftUI begann, wie man sie kombiniert. Der Artikel im folgenden Link stellt alles in einen Kontext: https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

Meine einzige Sorge ist jetzt, dass ich bei Xcode 11 festgestellt habe, dass ein Xcode-Projekt nicht sowohl Storyboards als auch SwiftUI kombinieren kann.

Mostafa Al Belliehy
quelle
3

Leider nein, SwiftUI ist nur in iOS 13 und höher zulässig. Es wurde im iOS 13-Framework eingeführt. Vor iOS 13 wurde alles mit dem Obj-C-Framework (einschließlich Swift) erstellt.

Auf der rechten Seite der Entwicklerdokumentation werden die unterstützten Versionen von iOS, macOS, tvOS, watchOS usw. angezeigt.

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

Hoffe das hilft!

Tyler Wasick
quelle