SwiftUI est-il rétrocompatible avec iOS 12.x et versions antérieures?

124

Si j'ai une application créée avec SwiftUI, fonctionnera-t-elle pour iOS sous iOS 13?

Ted
la source
1
Pourquoi ne pas l'essayer? Xcode 11 beta est disponible en téléchargement, et les tutoriels sont ici developer.apple.com/tutorials/swiftui .
Martin R
1
Les gens savent-ils pourquoi ma réponse supprimée par @ Jean-François Fabre
CrazyPro007
10
NON, SwiftUI ne fonctionnera pas avec iOS 12.x et plus ancien.
ystack

Réponses:

90

Je viens de le vérifier dans Xcode 11 et je peux confirmer qu'il ne sera pas rétrocompatible, comme on peut le voir dans l' Viewimplémentation de 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
la source
7
Au moins encore 5 ans? Vous n'utilisez donc que des API disponibles dans iOS 7 et inférieurs pour le moment?
David Monagle
5
Le plus étrange est que vous pouvez créer une application SwiftUI avec xcode 11 sur Mojave (10.4) qui ne fonctionnera que sur Catalina (10.5)
Túlio Calazans
34

Je ne pense pas, car toutes les bibliothèques sont déjà annotées pour iOS 13 ou supérieur.

De plus, dans la documentation , Apple mentionne clairement les versions prises en charge:

  • iOS13.0 + bêta
  • macOS10.15 + bêta
  • tvOS 13.0+ bêta
  • watchOS 6.0+ bêta

entrez la description de l'image ici

Kathiresan Murugan
la source
32

SwiftUI et Combine utilisent Opaque-Return-Types dans Swift 5.1 et puisque les Opaque-Return-Types (avec d'autres fonctionnalités) sont implémentés dans Swift 5.1 et en raison de la nature de leur implémentation, ils ne peuvent pas être redéployés sur Swift 5.0 (contrairement à DSL ou Property-Wrappers ), et parce que iOS 13 est le premier SDK iOS qui contient le runtime Swift 5.1 dans le système d'exploitation, la réponse à la question est donc non et SwiftUI et Combine ne peuvent pas être utilisés sur les versions antérieures d'iOS.

À moins que Apple ne fournisse un moyen de regrouper le runtime Swift 5.1 (ou les versions futures) avec l'application comme il le faisait avec les versions précédentes de Swift, mais comme cela augmentera la taille de l'application et ajoutera à nouveau une surcharge à l'ensemble du système, je doute que cela jamais arriver.

Cela pourrait être rétrocompatible

Swift 5.1 n'est pas encore publié et SwiftUIutilise des fonctionnalités telles que les types de retour opaques , DSL , propertyDelegate (introduit dans WWDC en tant que propertyWrapper ) et etc., qui ne seront disponibles que dans Swift 5.1. Étant donné que Swift 5 est binaire stable, je suppose qu'il n'était pas possible d'utiliser des frameworks swift intégrés dans Xcode11, ils ont donc réimplémenté ces fonctionnalités dans le noyau de Cocoa et les ont marquées comme iOS13 + disponibles jusqu'à la sortie de Swift 5.1.

Mes hypothèses sont basées sur le fait que, Ordered Collection Diffing et DSL seront disponibles dans Swift 5.1 et n'ont aucune corrélation avec Xcode ou l'écosystème d'Apple, mais ils sont également marqués comme @available(iOS13,...). Cela signifie qu'ils devaient tout marquer à l'aide des fonctionnalités de Swift 5.1 avec l'attribut de disponibilité iOS. Certains d'entre eux seront supprimés une fois que Swift 5.1 sera publié, mais nous ne pouvons pas en être sûrs SwiftUIet Combinesauf indication contraire d'Apple. Ceci est également mentionné dans la proposition de DSL :

Mise en œuvre: PR . Notez que l'implémentation dans l'aperçu du développeur Xcode utilise une transformation un peu plus simple que celle décrite ici. Le PR lié reflète la mise en œuvre dans l'aperçu mais est en cours de développement actif pour correspondre à cette proposition.

Donc, la limitation d'incompatibilité vers l'arrière pourrait être levée lorsque Swift 5.1 sera publié, mais elle doit vraiment être clarifiée par l'équipe Apple .

farzadshbfn
la source
1
Une mise à jour pour ceci? PR que vous avez mentionné est fusionné, Swift 5.1 est publié
user158
@ user158 Je viens de mettre à jour la réponse et décrit pourquoi cette fonctionnalité ne peut pas être prise en charge.
farzadshbfn
15

Non. SwiftUI nécessite une cible de déploiement d'iOS 13 ou version ultérieure, macOS 10.15 ou version ultérieure, tvOS 13 ou version ultérieure, ou watchOS 6 ou version ultérieure. Le framework contient de nombreux nouveaux types qui n'existent pas sur les anciennes versions des systèmes d'exploitation.

Rob Mayoff
la source
Il est possible d'utiliser SwiftUI sur iOS 13 tout en prenant en charge une cible de déploiement inférieure. Veuillez vérifier stackoverflow.com/a/58372597/840742
Renatus
13

Si vous prenez des photos pour prendre en charge l'iPhone et non l'iPad, vous pouvez probablement vous attendre à ce que la plupart des utilisateurs passent à iOS 13 dans les 12 à 18 mois (à compter de la date de sortie). Peut-être 85-90%? (Je pense qu'Apple a dit à ce stade qu'il y avait encore 15% de personnes qui ne sont pas sur iOS 12) C'est encore un moment où vous ne serez pas en mesure de déployer des applications SwiftUI tout de suite, sinon vous risquez d'aliéner beaucoup d'utilisateurs.

Selon ce que sont les 10 à 15% restants, cela pourrait signifier que beaucoup d'utilisateurs (et $$) pour vous sont restés sur la table.

Si vous supportez également l'iPad, c'est plus compliqué car les gens ne mettent pas à niveau leur iPad aussi souvent. Il y a beaucoup d'iPad 2 ainsi que d'iPad de 3e et 4e génération encore à l'état sauvage, qui n'ont que 10.3.3 et ne peuvent plus être mis à niveau. Les gens ne vont tout simplement pas se lever et payer entre 400 $ et 1000 $ pour un nouvel iPad lorsque le leur fonctionne parfaitement.

Il y a toujours de la place et un besoin de mettre à jour l'application, de l'améliorer, de corriger des bugs, qui n'ont pas forcément quelque chose à voir avec iOS 13. c'est-à-dire trouver un bogue dont vous n'aviez pas connaissance auparavant, ce qui rend beaucoup d'utilisateurs mécontents. . pas sur la dernière version iOS. et nous n'avons même pas parlé des clients entreprise / entreprise pris en charge par de nombreux ateliers de développement. il y a beaucoup plus de retours sur les mises à jour iOS pour diverses raisons dans ce domaine.

Donc, avant de vous enthousiasmer pour iOS 13 et SwiftUI (ce que vous devriez absolument parce que c'est génial), de retour dans le monde réel, en dehors de la Silicon Valley, cela ne correspondra pas exactement à ce que le consommateur moyen attend et vous devrez le soutenir. appareils plus anciens et en ont besoin, car il y a trop de personnes que vous aliéneriez.

cspam
la source
1
Je connais un certain nombre de personnes sur des iPhones "non pris en charge", donc vous n'atteindrez jamais 100% pour la dernière version iOS. Je sais que je penserai longuement à mon prochain téléphone lorsque mon téléphone actuel mourra
Gavin
@cspam Bien que vos hypothèses soient justes, elles ne répondent pas à la question.
user1892364
iOS 12 n'a pas abandonné la prise en charge de plus de 10% des appareils, il est donc difficile de dire si nous pouvons nous attendre aux mêmes taux d'adoption pour iOS 13.
Casper Zandbergen
SwiftUI devra prendre en charge des appareils plus anciens et le devra car il y a trop de gens que vous aliéneriez! thumb
Trevor
9

Basé sur la documentation Apple, il n'est disponible qu'à partir d'iOS 13, malheureusement.

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

Armands L.
la source
Tout ce que la documentation liée indique, c'est que vous devez utiliser le SDK iOS 13 (c'est-à-dire Xcode 11). Cela ne signifie pas que la version iOS minimale prise en charge de l'appareil doit être iOS 13 ... vous pouvez très bien prendre en charge les anciennes versions iOS ...
scaly
6

fonctionne uniquement pour ios 13 ou version ultérieure

vous pouvez toujours joindre votre SwiftUIcode en utilisant

@available(iOS 13.0, *)

si vous utilisez toujours Xcode sous Xcode 11 et que vous avez un code SwiftUI, vous pouvez l'envelopper avec

#if canImport(SwiftUI)
...
#endif

Cela peut résoudre le problème lors de la compilation avec Xcode sous Xcode 11

Wendy Liga
la source
4

Comme tout le monde l'a dit, il ne sera pas rétrocompatible avec les anciennes versions d'iOS. Mais étant donné qu'Apple a toujours une base d'installation élevée de son dernier iOS, et aussi étant donné qu'iOS 13 nécessite l'iPhone 6S ou une version ultérieure, l'iPad Air 2 ou une version ultérieure, le nouvel iPad mini 4 et l'iPhone SE. La grande majorité des utilisateurs pourront installer iOS 13 et profiter de belles applications SwiftUI.

Welshiebiff
la source
3
Mon iPad ne fait pas la coupe pour iOS 13, et étant donné qu'il fonctionne toujours fort et qu'il va être remplacé pendant un certain temps (j'espère) ici en espérant que les applications que j'apprécie / dont j'ai besoin ne lancent pas d'anciens appareils à la dérive.
Gavin
3

Comme tous les gens avant moi l'ont mentionné, il est très clair que cela nécessitera iOS 13 ou une version ultérieure. Mais en tant que nouveau développeur iOS, je me demandais dans quelle mesure je devrais adopter SwiftUI par rapport à UIKit. J'ai déjà construit quelques petits projets avec UIKit, et je suis allé quelque part avancé avec.

Mais comme SwiftUI a commencé, comment les combiner. L'article du lien suivant met tout en contexte: https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

Ma seule préoccupation maintenant est que j'ai remarqué avec Xcode 11 qu'un projet Xcode ne peut pas combiner à la fois Storyboards et SwiftUI.

Mostafa Al Belliehy
la source
3

Malheureusement non, SwiftUI n'est autorisé que dans iOS 13 et supérieur. Il a été introduit dans le framework iOS 13. Avant iOS 13, tout était construit à l'aide du framework Obj-C (y compris Swift).

Sur le côté droit de la documentation de développement, il montre les versions prises en charge d'iOS, macOS, tvOS, watchOS, etc.

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

J'espère que cela t'aides!

Tyler Wasick
la source