Con las novedades desde el punto de vista de usuario que se analizaron en el anterior post, ahora toca centrarse en todas las funcionalidades y todos esos elementos que significan una mejora o un cambio en el ecosistema del desarrollo en Apple. Junto al lanzamiento de la nueva interfaz y a las nuevas versiones de sistemas, también llegaron las renovaciones en el campo del desarrollo: Xcode 11.4 con sustanciales mejoras y arreglos que la convierten en la versión estable de Xcode 11 que se lleva esperando desde septiembre, así como la llegada de la última versión del lenguaje Swift: la versión 5.2.

Transición a hardware propio

Apple deja claro que quiere hacer un paso hacia una independencia total en lo que se refiere también a su hardware anunciando la transición en los Mac a sus propios procesadores con arquitectura ARM llamados Apple Silicon. A lo largo de toda la conferencia se usó un Mac con un chip A12Z, y se mostraron varias aplicaciones que ya funcionaban en Mac’s con esos procesadores. El objetivo de Apple es que los grandes de la industria del desarrollo hagan una migración a su arquitectura, aún así si no se lleva a cabo la importación, Apple ha implementado 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 como todo estará bajo la misma arquitectura vamos a poder ejecutar aplicaciones de iOS e iPadOS sin ningún problema en nuestros Mac. Todo esto indica que Apple está determinada a unificar todo su desarrollo de aplicaciones o programas bajo las mismas directrices, de tal forma que se de una máxima facilidad a todos los desarrolladores.

Nuevas funcionalidades en Xcode.

Destacan nuevas funcionalidades en Xcode que se podrían resumir en:

  • Previsualización de widgets, App clips y contenido de paquetes (SPM).
  • Soporte a formato SVG en Assets catalogs.
  • Playgrounds ahora soporta Swift Package Manager.
  • Se pueden personalizar las fuentes en el navegador.
  • Mejora en el rendimiento del motor de autocompletado.
  • Pestañas para documentos.
  • Posibilidad de crear aplicativos universales con plantillas.
  • Se puede testear con mayor facilidad el StoreKit en local.
  • Mayor fiabilidad en la auto indentación.

Novedades en SwiftUI.

Parece ser que SwiftUI será el nuevo estándar de Apple, la empresa de Cupertino está centrando todos sus esfuerzos en velar y asentar SwiftUI como un lenguaje fiable. Tanto WidgetKit y Appclip están escritos enteramente en SwiftUI para SwiftUI. Hay muchas, muchísimas novedades en SwiftUI. Pero destacan algunas por encima:

  • 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.
  • Ahora podemos acceder a la vista vista de debug desde las preview sin necesidad de compilar el código.

Junto a eso también destacan nuevas funciones y componentes como los siguientes:

  • App: Hasta ahora para iniciar nuestra app construida exclusivamente mediante SwiftUI era obligatorio usar UIHostingViewController, gracias al protocolo App y la anotación @main se podrá dejar de usar el UIHostingViewController.
  • 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.

Por otro lado tenemos los 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.
  • Map, MapPin, MapMarker y MapAnnotation: MapKit ahora nos provee de vistas específicas para SwiftUI.
  • SceneView y SpriteView: Ahora podemos representar escenas de SceneKit o vistas de SpriteKit directamente en SwiftUI.
  • VideoPlayer: Vista de reproducción de vídeo de AVKit para SwiftUI, puede visualizarse tanto en local como remoto.

Novedades en UIKit.

  • 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éndose 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».
  • UISplitViewController: Ahora se puede configurar un SplitViewController con 3 columnas.
  • 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í.

Autor: Pol Plana