SwiftUI è retrocompatibile con iOS 12.xe versioni precedenti?


123

Se ho un'app realizzata con SwiftUI, funzionerà per iOS inferiore a iOS 13?


1
Perché non lo provi? Xcode 11 beta è disponibile per il download e i tutorial sono qui developer.apple.com/tutorials/swiftui .
Martin R

1
La gente sa che perché la mia risposta è stata cancellata da @ Jean-François Fabre
CrazyPro007

10
NO, SwiftUI non funzionerà con iOS 12.xe precedenti.
ystack

Risposte:


89

L'ho appena verificato in Xcode 11 e posso confermare che non sarà compatibile con le versioni precedenti, come si può vedere nell'implementazione di SwiftUI View:

/// 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
Almeno altri 5 anni? Quindi al momento utilizzi solo le API disponibili su iOS 7 e versioni precedenti?
David Monagle

5
La cosa più strana è che puoi creare un'applicazione SwiftUI con xcode 11 su Mojave (10.4) che verrà eseguita solo su Catalina (10.5)
Túlio Calazans

34

Non credo, perché tutte le librerie sono già annotate per iOS 13 o versioni successive.

Inoltre, nella documentazione , Apple menziona chiaramente le versioni supportate:

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

inserisci qui la descrizione dell'immagine


32

SwiftUI e Combine usano Opaque-Return-Types in Swift 5.1 e poiché Opaque-Return-Types (insieme ad altre funzionalità) sono implementati in Swift 5.1 e data la natura della loro implementazione, non possono essere nuovamente distribuiti su Swift 5.0 (a differenza di DSL o Property-Wrappers ) e poiché iOS 13 è il primo SDK iOS che contiene il runtime Swift 5.1 nel sistema operativo, la risposta alla domanda è no e SwiftUI e Combine non possono essere utilizzati nelle versioni precedenti di iOS.

A meno che Apple non fornisca un modo per raggruppare il runtime di Swift 5.1 (o le versioni future) con l'applicazione come faceva con le versioni precedenti di Swift, ma poiché aumenterà le dimensioni dell'app e aggiungerà di nuovo un sovraccarico all'intero sistema, dubito che lo farà mai accaduto.

Esso potrebbe essere compatibile

Swift 5.1 non è ancora stato rilasciato e SwiftUIutilizza funzionalità come tipi di restituzione opachi , DSL , propertyDelegate (introdotto in WWDC come propertyWrapper ) e così via, che saranno disponibili solo in Swift 5.1. Poiché Swift 5 è binario stabile, immagino che non fosse possibile utilizzare i framework swift incorporati all'interno di Xcode11, quindi hanno reimplementato queste funzionalità nel core di Cocoa e le hanno contrassegnate come iOS13 + disponibili fino al rilascio di Swift 5.1.

Le mie ipotesi si basano sul fatto che, Ordered Collection Diffing e DSL saranno disponibili in Swift 5.1 e non avranno correlazioni con Xcode o l'ecosistema di Apple, ma sono anche contrassegnati come @available(iOS13,...). Ciò significa che dovevano contrassegnare tutto utilizzando le funzionalità di Swift 5.1 con l'attributo di disponibilità di iOS. Alcuni di essi verranno rimossi una volta rilasciato Swift 5.1, ma non possiamo esserne sicuri SwiftUIea Combinemeno che Apple non dica diversamente. Questo è menzionato anche nella proposta di DSL :

Implementazione: PR . Si noti che l'implementazione nell'anteprima per sviluppatori Xcode utilizza una trasformazione un po 'più semplice di quella descritta qui. Il PR collegato riflette l'implementazione nell'anteprima ma è in fase di sviluppo attivo per corrispondere a questa proposta.

Quindi la limitazione dell'incompatibilità con le versioni precedenti potrebbe essere revocata quando Swift 5.1 verrà rilasciato, ma ha davvero bisogno di essere chiarito dal team Apple .


1
Qualche aggiornamento a questo proposito? Il PR che hai menzionato viene unito, Swift 5.1 viene rilasciato
user158

@ user158 Ho appena aggiornato la risposta e descritto perché questa funzione non può essere supportata.
farzadshbfn

15

No. SwiftUI richiede un target di distribuzione di iOS 13 o successivo, macOS 10.15 o successivo, tvOS 13 o successivo o watchOS 6 o successivo. Il framework contiene molti nuovi tipi che non esistono nelle versioni precedenti dei sistemi operativi.


È possibile utilizzare SwiftUI su iOS 13 supportando un obiettivo di distribuzione inferiore. Si prega di controllare stackoverflow.com/a/58372597/840742
Renatus

13

Se stai scattando per supportare iPhone e non iPad, potresti probabilmente aspettarti che la maggior parte degli utenti effettuerà l'aggiornamento a iOS 13 entro 12-18 mesi (a partire dalla data di rilascio). Forse l'85-90%? (Penso che Apple abbia detto che a questo punto c'è ancora il 15% di persone non su iOS 12) È ancora un bel po 'di tempo, anche se non sarai in grado di distribuire le app SwiftUI immediatamente o rischierai di alienare molti utenti.

Inoltre, a seconda di quale sia il restante 10-15%, ciò potrebbe significare molti utenti (e $$) per te rimasti sul tavolo.

Se stai supportando anche l'iPad, è più complicato perché le persone non aggiornano i loro iPad così spesso. Ci sono molti iPad 2 insieme a iPad di terza e quarta generazione ancora in circolazione, che hanno solo 10.3.3 e non possono più essere aggiornati. Le persone non si alzeranno e pagheranno tra $ 400 e $ 1.000 per un nuovo iPad quando il loro funziona perfettamente.

C'è sempre spazio e necessità di aggiornare l'app, migliorarla, correggere bug, che non hanno necessariamente nulla a che fare con iOS 13. ovvero trovare un bug che prima non conoscevi rende insoddisfatti molti utenti. non sull'ultima versione di iOS. e non abbiamo nemmeno parlato di clienti aziendali / aziendali supportati da molti negozi di sviluppo. c'è molto più pushback sugli aggiornamenti iOS per vari motivi in ​​quell'area.

Quindi, prima di essere tutti entusiasti di iOS 13 e SwiftUI (che dovresti assolutamente perché è fantastico), nel mondo reale, al di fuori della Silicon Valley, questo non si allineerà esattamente con ciò che il consumatore medio si aspetta e dovrai supportare dispositivi più vecchi e ne hai bisogno perché ci sono troppe persone che potresti alienare.


1
Conosco un certo numero di persone su iPhone "non supportati", quindi non raggiungerai mai il 100% per l'ultima versione di iOS. So che penserò a lungo e intensamente al mio prossimo telefono quando quello attuale morirà
Gavin

@cspam Anche se le tue supposizioni forse sono corrette, non rispondono alla domanda.
user1892364

iOS 12 non ha abbandonato il supporto per oltre il 10% dei dispositivi, quindi è difficile dire se possiamo aspettarci gli stessi tassi di adozione per iOS 13.
Casper Zandbergen

SwiftUI dovrà supportare i dispositivi più vecchi e ne avrà bisogno perché ci sono troppe persone che potresti alienare! pollice
Trevor

9

Sulla base della documentazione Apple è disponibile solo a partire da iOS 13, sfortunatamente.

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


Tutto ciò che la documentazione collegata dice è che è necessario utilizzare iOS 13 SDK (cioè Xcode 11). Ciò non significa che la versione iOS minima supportata del dispositivo deve essere iOS 13 ... puoi supportare le versioni iOS precedenti benissimo ...
squamoso


6

funziona solo per ios 13 o versioni successive

puoi comunque allegare il tuo SwiftUIcodice usando

@available(iOS 13.0, *)

se usi ancora Xcode sotto Xcode 11 e hai il codice SwiftUI, puoi avvolgerlo con

#if canImport(SwiftUI)
...
#endif

Questo può risolvere il problema durante la compilazione con Xcode sotto Xcode 11


4

Come tutti hanno detto, non sarà compatibile con le versioni precedenti di iOS. Ma dato che Apple ha costantemente una base di installazione elevata del suo ultimo iOS, e anche dato che iOS 13 richiede iPhone 6S o successivo, iPad Air 2 o successivo, il nuovo iPad mini 4 e iPhone SE. La stragrande maggioranza degli utenti sarà in grado di installare iOS 13 e godere di adorabili app SwiftUI.


3
Il mio iPad non fa il taglio per iOS 13, e dato che sta ancora andando forte e non verrà sostituito per un po '(spero) qui sperando che le app che mi piacciono / di cui ho bisogno non gettino alla deriva i dispositivi più vecchi.
Gavin

3

Come tutte le persone prima di me hanno menzionato, è molto chiaro che richiederà iOS 13 o versioni successive. Ma come nuovo sviluppatore iOS, ero preoccupato di quanto avrei dovuto adottare SwiftUI rispetto a UIKit. Ho già realizzato alcuni piccoli progetti con UIKit e sono andato in qualche modo avanzato con esso.

Ma quando SwiftUI è iniziato, come combinare tra di loro. L'articolo nel seguente link mette tutto nel contesto: https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

La mia unica preoccupazione ora è che ho notato con Xcode 11 che un progetto Xcode non può combinare sia Storyboard che SwiftUI.


3

Purtroppo no, SwiftUI è consentito solo in iOS 13 e versioni successive. È stato introdotto nel framework iOS 13. Prima di iOS 13, tutto veniva creato utilizzando il framework Obj-C (incluso Swift).

Sul lato destro della documentazione dello sviluppatore, mostra le versioni supportate di iOS, macOS, tvOS, watchOS, ecc.

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

Spero che questo ti aiuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.