WWDC 2020, novedades en el mundo del desarrollo Apple. (1ª parte)

0
193
WWDC 2020

Índice de contenidos

  • 1. Introducción
  • 2. Transición a ARM (Apple Silicon)
  • 3. Xcode 12
  • 4. Mac Catalyst
  • 5. Novedades en SwiftUI
  • 6. Novedades en UIKit
  • 7. Conclusiones

 

1. Introducción.

La navidad para los desarrolladores de entornos Apple ha llegado y este año de una forma totalmente virtual debido a las complicaciones del COVID. Sin público, y todas las sesiones  pre grabadas y con posibilidad de hablar con los ingenieros de Apple mediante un sistema de preselección de las dudas que podemos presentar. Vamos a ver por encima las novedades más destacas desde el punto de vista del desarrollo.

 

2.Transición a ARM (Apple Silicon)

A día 23 de Junio de 2020 Apple ha dado un paso hacia la independencia total de su producción de hardware anunciando la transición en Mac a sus propios procesadores con arquitectura ARM llamados Apple Silicon. 

En la keynote han usado un Mac con un chip A12Z (los que llevan los actuales iPad Pro) en la que mostraban aplicaciones ya corriendo en los mac con esta arquitectura. Apple ya está trabajando con las grandes de la industria del desarrollo para que porten sus aplicaciones a la nueva arquitectura, de todas formas si no se lleva a cabo la importación, Apple ha creado Roseta 2.0 que se encargará de traducir de una arquitectura a otra en tiempo de instalación.

Con este cambio también llegan las apps universales, esto es, que con un solo binario vamos a poder desplegar en todas las plataformas de Apple,  y ya que corren la misma arquitectura, vamos a poder ejecutar aplicaciones de iOS e iPadOS sin modificación alguna en nuestros mac.

Todo indica que Apple tiene muy claro su objetivo de unificar su ecosistema, con el proyecto Catalyst y con SwiftUI cada vez tenemos más fácil los desarrolladores escribir una sola aplicación compatible con todas las plataformas de la manzana.

 

3. Xcode 12

Las novedades de Xcode tampoco han pasado desapercibidas, el nuevo IDE de Apple ahora contiene las siguientes características:

  • Fuentes personalizables en el navegador.
  • Mejoras en el auto completado.
  • Pestañas para documentos.
  • Creación de apps universales, con plantillas multiplataforma.
  • Nuevo Organizer.
  • Mejoras para testar StoreKit en local.
  • Mejoras en la auto-indentación.
  • Previsualización de widgets, App clips y contenido de paquetes (SPM).
  • Soporte a formato SVG en Assets catalogs.
  • Playgrounds ahora soporta Swift Package Manager.

 

4. Mac Catalyst

Las novedades que encontramos en Mac Catalyst son:

  • Mejoras en el escalado de la aplicación.
  • Nuevos frameworks disponibles para la migración(HomeKit y AVCapture).
  • Mejoras en la API de teclado.
  • Adaptación a la apariencia de MacOS Big Sur automática.

 

5. Novedades en SwiftUI

Apple está apostando muy fuerte con esta tecnología, hemos que tener claro que éste es el futuro para ellos y todos los esfuerzos se están enfocando a ello. Los nuevos frameworks de WidgetKit y Appclip están escritos enteramente en SwiftUI para SwiftUI.

Hay muchas, muchísimas novedades en SwiftUI que nos ha traído la WWDC2020, vamos a ver las más destacas:

  • Ahora podemos acceder a la vista vista de debug desde las preview sin necesidad de compilar el código.
  • Las apps escritas en SwiftUI ocupan mucho menos espacio.
  • Podemos despedirnos de los storyboards por completo en una aplicación 100% SwiftUI modificando el nuevo parámetro del plist Launch Screen.

5.1 Nuevos protocolos, estructuras y property wrappers:

  • App: Hasta ahora para iniciar nuestra app construida exclusivamente mediante SwiftUI teníamos que usar UIHostingViewController, ahora ya no es necesario gracias al protocolo App y la anotación @main:

  • Scene: El protocolo Scene es el que deben adoptar las vistas que construyan nuestra escena, que son el análogo de UIScene en UIKit, en el ejemplo del protocolo App, WindowGroup es un tipo que adopta este protocolo para vistas normales, también tenemos DocumentGroup para las escenas de apps basadas en documentos o Settings para dirigir a la pantalla de ajustes de nuestra app. También podemos crear nuestras propias implementaciones de este protocolo:

  • @SceneStorage: Ahora se pueden almacenar los datos específicos de una escena usando SceneStorage. Lo podemos usar por ejemplo para mantener la pestaña seleccionada de un tabView entre sesiones:

  • @StateObject: Un tipo de contenedor de propiedades que crea instancias de un objeto observable. Es como un @ObservableObject pero que se mantendrá vivo durante las actualizaciones de la vista que lo contiene:

  • @AppStorage: Un property wrapper que encapsula el UserDefaults e invalida la vista que lo usa en función a los cambios de éste:

  • @FocusedBinding: Se trata de un property wrapper que nos soluciona el problema de tener varios publicadores que usan la misma key, éste identificará el más cercano al foco:

  • @ScaledMetric: Nos sirve para calcular números con la escala proporcionada por el escalado dinámico del sistema que configura el usuario, es decir, en función al zoom que selecciona un usuario en la configuración de su dispositivo el valor de esta variable cambiará, nosotros solo hemos de poner un valor por defecto:

  • @UIApplicationDelegateAdaptor: Este property wrapper nos va a facilitar el acceso al AppDelegate de nuestra aplicación en caso de que lo necesitemos, si creamos una app 100% swiftUI hemos de crear previamente la clase:

 

5.2 Nuevos componentes:

  • Toolbar y ToolbarItem: Hay un nuevo modificador toolbar() en la vista NavigationView que nos sirve para poner una barra de herramientas:

  • TextEditor: Es la nueva vista de SwiftUI análoga a UITextView de UIKit, es decir, un componente para poder escribir en varias lineas de texto. Es altamente configurable como el componente Text:

  • Menu: Se trata de una vista que tendrá la apariencia del menú de la plataforma en la que lo ejecutemos y contiene un modificador para darle distintos estilos:

  • SignInWithAppleButton: Es la vista que se encarga de generar el botón de login con Apple, así como de recibir los eventos en ella:

  • ColorPicker: Es un componente para seleccionar colores, se debe almacenar en una variable @State o similar.

  • ProgressView: Una vista para mostrar el progreso de un valor sobre un total, es como el Activity Indicator de UIKit pero vitaminado ya que es altamente configurable, podemos mostrar un progreso lineal o circular:

  • Gauge: Una vista que muestra un valor dentro de un rango:

  • Label: Una vista para mostrar una imagen y una etiqueta:

  • Link: Una vista con la apariencia de un botón que abre una URL, permite personalización como la fuente o los colores y la posibilidad de crearla manualmente con su propio @ViewBuilder:

  • ScrollViewReader: Una vista que nos permite desplazarnos a una determinada posición de un ScrollView:

  • LazyViews y GridItem: Es el análogo a los collection views de iOS, ahora disponemos de una forma de cargar perezosamente nuestras listas, tanto verticales como horizontales, la diferencia con las stack views es que éstas cargan todo el contenido antes de presentarse, ahora las gridViews lo cargan bajo demanda en función a los items que se están mostrando.

  • DisclosureGroup: Una vista desplegable que muestra u oculta otra vista de contenido, basada en el estado de un control de tipo Bool.

  • SceneViewSpriteView: Ahora podemos representar escenas de SceneKit o vistas de SpriteKit directamente en SwiftUI:

  • VideoPlayer: Vista de reproducción de video de AVKit para SwiftUI, puede visualizar tanto local como remoto:

5.3 Cambios destacados en vistas existentes:

  • List: ahora en iOS 14 se comporta de forma «lazy» al igual que los grids.
  • Text: Nuevos constructores para iniciar la vista con una Imagen o fechas (sin DateFormatter ✌️) y modificadores para cambiar a mayúsculas o minúsculas.
  • Group: Muchos modificadores nuevos, por ejemplo, ahora se le puede asignar un navigationTitle para propósitos de navegación.
  • TabView: Ahora retiene el estado de navegación de una pestaña mientras cambias entre ellas.

6. Novedades en UIKit

En Apple no se han olvidado de la veterana UIKit, y lo han demostrado dándola una serie de mejoras que merecen mucho la pena, veamos algunas de ellas:

  • UIDatePicker: El selector de fecha recibe un lavado de cara con un estilo mucho más cómodo mostrando un calendario completo, además permite muchas formas de personalización:

  • UIColorPickerViewController: En nuevo selector de color como el de SwiftUI, pero éste funciona mediante delegación o mediante publicadores con Combine:

  • UIAction: Se ha potenciado el uso de esta clase, incluyéndola en la mayoría de constructores de los componentes de UIKit

  • UIMenu: Ahora los botones (UIButton, UIBarButton…)  aceptan menús, esto es muy practico por ejemplo para casos como poner el historial de navegación en un botón «atrás»:

  • UIListContentView: Se trata de una vista que está pensada para ser insertada en un contenedor tipo UIStackView o UITableView, seguramente sea la nueva forma en la que Apple nos invita a crear «celdas»:

  • UIScribbleInteraction: La novedad más destacada en iPad es la posibilidad de escribir a mano en los campos texto, esta característica la vamos a tener de forma automática, no obstante disponemos de la clase UIScribbleInteraction para poder jugar con la interacción en sí:

 

7. Conclusiones

Una WWDC cargada de contenido muy potente, enfocada al desarrollo (como debe ser), y sin hardware. Con todo lo que han presentado tenemos horas y horas para indagar en la documentación nueva y seguir aprendiendo. En el siguiente artículo veremos el nuevo framework de Widgets, las Apps Clips, las novedades en SFSymbols, y muchos más 😜.

Puedes leer la segunda parte aquí:

WWDC 2020, novedades en el mundo del desarrollo Apple. (Parte 2)

Dejar respuesta

Please enter your comment!
Please enter your name here