¿SwiftUI es compatible con versiones anteriores de iOS 12.xy versiones anteriores?


123

Si tengo una aplicación creada con SwiftUI, ¿funcionará para iOS por debajo de iOS 13?


1
¿Por qué no lo intentas? Xcode 11 beta está disponible para descargar, y los tutoriales están aquí developer.apple.com/tutorials/swiftui .
Martin R

1
Amigos, ¿alguien sabe por qué mi respuesta fue eliminada por @ Jean-François Fabre
CrazyPro007

10
NO, SwiftUI no funcionará con iOS 12.xy versiones anteriores.
ystack

Respuestas:


89

Acabo de comprobarlo en Xcode 11 y puedo confirmar que no será compatible con versiones anteriores, como se puede ver en la Viewimplementación 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 }
}

7
¿Al menos otros 5 años? ¿Entonces solo usa API disponibles en iOS 7 y versiones anteriores en este momento?
David Monagle

5
Lo más extraño es que puedes crear una aplicación SwiftUI con xcode 11 en Mojave (10.4) que solo se ejecutará en Catalina (10.5)
Túlio Calazans

34

No lo creo, porque todas las bibliotecas ya están anotadas para iOS 13 o superior.

Además, en la documentación , Apple menciona claramente las versiones compatibles:

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

ingrese la descripción de la imagen aquí


32

SwiftUI y Combine usan Opaque-Return-Types en Swift 5.1 y dado que Opaque-Return-Types (junto con otras características) se implementan en Swift 5.1 y debido a la naturaleza de su implementación, no se pueden volver a implementar en Swift 5.0 (a diferencia de DSL o Property-Wrappers ), y debido a que iOS 13 es el primer SDK de iOS que contiene el tiempo de ejecución de Swift 5.1 en el sistema operativo, la respuesta a la pregunta es no y SwiftUI y Combine no se pueden usar en versiones anteriores de iOS.

A menos que Apple proporcione una forma de agrupar el tiempo de ejecución de Swift 5.1 (o versiones futuras) con la aplicación como solía hacerlo con las versiones anteriores de Swift, pero dado que aumentará el tamaño de la aplicación y agregará una sobrecarga a todo el sistema nuevamente, dudo que esto suceda. alguna vez suceda.

Que podría ser compatible con versiones anteriores

Swift 5.1 aún no se ha lanzado y SwiftUIutiliza características como tipos de retorno opacos , DSL , propertyDelegate (introducido en WWDC como propertyWrapper ), etc., que estarán disponibles solo en Swift 5.1. Dado que Swift 5 es binario estable, supongo que no fue posible usar swift-frameworks integrados dentro de Xcode11, por lo tanto, han vuelto a implementar estas características en el núcleo de Cocoa y las han marcado como iOS13 + disponible hasta que se lance Swift 5.1.

Mis suposiciones se basan en el hecho de que Ordered Collection Diffing y DSL estarán disponibles en Swift 5.1 y no tendrán correlaciones con Xcode o el ecosistema de Apple, pero también están marcados como @available(iOS13,...). Esto significa que tuvieron que marcar todo usando las funciones de Swift 5.1 con el atributo de disponibilidad de iOS. Algunos de ellos se eliminan una vez Swift 5.1 se libera, pero no podemos estar seguros acerca SwiftUIy Combinemenos que Apple diga lo contrario. Esto también se menciona en la propuesta de DSL :

Implementación: PR . Tenga en cuenta que la implementación en la vista previa del desarrollador de Xcode usa una transformación algo más simple que la descrita aquí. El RP vinculado refleja la implementación en la vista previa, pero está en desarrollo activo para coincidir con esta propuesta.

Por lo tanto, la limitación de incompatibilidad con versiones anteriores podría eliminarse cuando se lance Swift 5.1, pero el equipo de Apple realmente debe aclararla .


1
¿Algún avance en esto? PR que mencionaste se fusionó, Swift 5.1 se lanzó
user158

@ user158 Acabo de actualizar la respuesta y describí por qué no se admite esta función.
farzadshbfn

15

No. SwiftUI requiere un destino de implementación de iOS 13 o posterior, macOS 10.15 o posterior, tvOS 13 o posterior, o watchOS 6 o posterior. El marco contiene muchos tipos nuevos que no existen en versiones anteriores de los sistemas operativos.


Es posible usar SwiftUI en iOS 13 mientras se admite un objetivo de implementación inferior. Consulte stackoverflow.com/a/58372597/840742
Renatus

13

Si está disparando para admitir iPhone y no iPad, probablemente podría esperar que la mayoría de los usuarios se actualicen a iOS 13 dentro de los 12-18 meses (comenzando con la fecha de lanzamiento). ¿Quizás 85-90%? (Creo que Apple dijo que en este punto todavía hay un 15% de personas que no usan iOS 12). Sin embargo, todavía es bastante tiempo en el que no podrá implementar las aplicaciones SwiftUI de inmediato o de lo contrario se arriesgará a alienar a muchos usuarios.

También dependiendo de lo que sea el 10-15% restante, eso podría significar muchos usuarios (y $$) para ti en la mesa.

Si también es compatible con iPad, entonces es más complicado porque las personas no actualizan sus iPads con tanta frecuencia. Hay una gran cantidad de iPad 2 junto con iPads de tercera y cuarta generación todavía en libertad, que solo tienen 10.3.3 y ya no pueden actualizarse. La gente simplemente no va a ir a pagar entre $ 400 y $ 1,000 por un nuevo iPad cuando el suyo funciona perfectamente bien.

Siempre hay espacio y la necesidad de actualizar la aplicación, mejorarla, corregir errores, que no necesariamente tienen nada que ver con iOS 13. es decir, encontrar un error que no conocías antes y que hace que muchos usuarios se sientan infelices. .no en la última versión de iOS. y ni siquiera hemos hablado de clientes empresariales / corporativos que apoyan muchas tiendas de desarrollo. Hay mucho más rechazo a las actualizaciones de iOS por varias razones en esa área.

Entonces, antes de que se entusiasme con iOS 13 y SwiftUI (lo cual debería porque es increíble), en el mundo real, fuera de Silicon Valley, eso no se alineará exactamente con lo que el consumidor promedio espera y necesitará apoyo. dispositivos más antiguos y es necesario porque hay demasiadas personas a las que estarías alienando.


1
Conozco a varias personas con iPhones "no compatibles", por lo que nunca alcanzará el 100% con la última versión de iOS. Sé que pensaré mucho en mi próximo teléfono cuando el actual muera
Gavin

@cspam Si bien sus suposiciones pueden ser correctas, no responden a la pregunta.
user1892364

iOS 12 no dejó de admitir más del 10% de los dispositivos, por lo que es difícil decir si podemos esperar las mismas tasas de adopción para iOS 13.
Casper Zandbergen

SwiftUI necesitará ser compatible con dispositivos más antiguos y lo necesitará porque ¡hay demasiadas personas a las que estaría alienando! thumb
Trevor

9

Según la documentación de Apple, está disponible solo a partir de iOS 13, desafortunadamente.

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


Todo lo que dice la documentación vinculada es que necesita usar iOS 13 SDK (es decir, Xcode 11). Eso no significa que la versión mínima de iOS compatible del dispositivo tenga que ser iOS 13 ... puede admitir versiones anteriores de iOS perfectamente ...
escamoso


6

solo funciona para ios 13 o posterior

aún puede adjuntar su SwiftUIcódigo usando

@available(iOS 13.0, *)

si todavía usa Xcode debajo de Xcode 11 y tiene el código SwiftUI, puede envolverlo con

#if canImport(SwiftUI)
...
#endif

Esto puede solucionar el problema al compilar con Xcode debajo de Xcode 11


4

Como todos han dicho, no será compatible con versiones anteriores de iOS. Pero dado que Apple siempre tiene una alta base de instalación de su último iOS, y también dado que iOS 13 requiere iPhone 6S o posterior, iPad Air 2 o posterior, el nuevo iPad mini 4 y iPhone SE. La gran mayoría de los usuarios podrá instalar iOS 13 y disfrutar de las encantadoras aplicaciones SwiftUI.


3
Mi iPad no hace el corte para iOS 13, y dado que todavía es fuerte y no será reemplazado por un tiempo (espero) aquí con la esperanza de que las aplicaciones que disfruto / necesito no arrojen dispositivos más antiguos a la deriva.
Gavin

3

Como mencionaron todas las personas antes que yo, está muy claro que requerirá iOS 13 o posterior. Pero como nuevo desarrollador de iOS, me preocupaba hasta qué punto debería adoptar SwiftUI en comparación con UIKit. Ya construí algunos proyectos pequeños con UIKit y fui a algún lugar avanzado con él.

Pero cuando SwiftUI comenzó, cómo combinar entre ellos. El artículo en el siguiente enlace pone todo en contexto: https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

Mi única preocupación ahora es que noté con Xcode 11 que un proyecto de Xcode no puede combinar tanto Storyboards como SwiftUI.


3

Lamentablemente no, SwiftUI solo está permitido en iOS 13 y superior. Se introdujo en el marco de iOS 13. Antes de iOS 13, todo se compilaba con el marco Obj-C (incluido Swift).

En el lado derecho de la documentación del desarrollador, muestra las versiones compatibles de iOS, macOS, tvOS, watchOS, etc.

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

¡Espero que esto ayude!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.