WWDC 2018 Diario de un desarrollador de iOS
Publicado: 2022-03-10Los límites tradicionales del verano en los EE. UU. son el Día de los Caídos y el Día del Trabajo, pero los desarrolladores de iOS marcan el verano con la WWDC y el lanzamiento del iPhone. A pesar de que el clima es fresco y lluvioso esta semana en Nueva York, tengo ganas de verano y espero con ansias la renovación que prometen el verano y la WWDC.
Es la mañana del 4 de junio y estoy revisando mis notas de la WWDC 2017. El año pasado, escribí que ARKit y Core ML fueron dos de los aspectos más destacados. Fue refrescante ver a Apple enfocarse en Machine Learning (ML), pero no hubo mucho seguimiento en el resto de 2017. ARKit ha generado cierto interés, pero no una aplicación excelente (quizás Pokemon Go, pero era popular antes de ARKit) . Apple no agregó a su biblioteca inicial de modelos descargables Core ML después del anuncio de Core ML.
Apple lanzó Turi Create y Lobe lanzó un nuevo e interesante creador de modelos Core ML el mes pasado. En el espacio de Apple/ML, el creador de Swift, Chris Lattner, está adoptando un enfoque diferente con Swift para TensorFlow. Pero desde el exterior, Core ML parece tener principalmente un uso obvio: la clasificación de imágenes. No parece haber mucha energía en explorar aplicaciones muy diferentes (aunque todos sabemos que el ML es el núcleo de los autos sin conductor y demostraciones geniales como Google Duplex).
Otra forma en que Apple usa ML es en Siri, y a principios de este año, escribí sobre SiriKit y mencioné sus deficiencias percibidas y reales en comparación con Alexa y Google. Un problema que exploré fue cómo el énfasis de Siri en las intenciones predefinidas limita su rango pero no ha producido la precisión prometida que podría obtener de un enfoque acotado.
La presentación de HomePod el año pasado solo destacó los problemas de Siri, y una encuesta de satisfacción del cliente ampliamente difundida mostró un 98 % de satisfacción con el iPhone X, pero solo un 20 % de satisfacción con Siri.
Con todo esto en el fondo de mi mente, personalmente esperaba escuchar que Apple iba a realizar algunas mejoras importantes en AR, ML y Siri. Específicamente, como desarrollador de iOS, quería ver muchos más modelos Core ML, que abarcaran más que solo la clasificación de imágenes y más ayuda para crear modelos. Para Siri, quería ver muchas más intenciones y posiblemente alguna indicación de que las intenciones serían algo que se agregaría durante todo el año. Era una posibilidad remota, pero para AR, el siguiente paso es un dispositivo. Pero mientras tanto, esperaba una mayor precisión espacial.
Finalmente, me encantan los libros de Xcode Playgrounds y iPad Playground, pero deben ser mucho más rápidos y estables, así que también esperaba algo allí.
En la mañana de la WWDC, tuiteé esto:
Esto no fue una predicción. Es solo una lista de cosas que quería usar en 2017, pero me parecieron poco potentes o demasiado difíciles para comenzar, y esperaba que Apple hiciera algunas mejoras.
Mi plan para el día es ver el discurso de apertura en vivo y luego ver el Estado de la Unión de las Plataformas. Esos dan una buena visión general de en qué concentrarse durante el resto de la semana.
Fin del día 1: el discurso principal y las plataformas State Of The Union
El primer día de la WWDC es el discurso principal, que está destinado al consumo público, y el estado de la Unión de las plataformas, que es una descripción general de todo el evento, con algunos detalles para que los desarrolladores puedan elegir a qué sesiones asistir.
Resumen de anuncios destacados de desarrolladores que no son de iOS
WWDC no se trata exclusivamente del desarrollo de iOS, así que aquí hay una lista rápida de otras cosas que le sucedieron a las otras plataformas o que no están muy enfocadas en el desarrollador.
- Para quitarlo del camino, no hubo anuncios de hardware en absoluto . Sin vistas previas ni actualizaciones en Mac Pro. Tendremos que esperar al iPhone y los eventos de seguimiento en el otoño.
- iOS 12 tiene una nueva aplicación de accesos directos que parece ser el resultado de la adquisición de Workflow. Es una forma de "escribir" una serie de pasos arrastrando y soltando . También puede asignar el acceso directo a una palabra clave de Siri, que trataré a continuación.
- iOS agrupará automáticamente las notificaciones que son de la misma aplicación y le permitirá actuar sobre ellas como un grupo.
- Los Animojis ahora pueden imitarte sacando la lengua, y los nuevos Memojis son rostros humanos altamente configurables que puedes personalizar para que se parezcan a ti.
- FaceTime admite chat de video grupal de hasta 32 personas.
- Hay una nueva aplicación Screen Time que le brinda informes sobre su teléfono y el uso de la aplicación (para ayudarlo a controlarse y distraerse menos). También es la base de los nuevos controles parentales.
- Apple TV recibió una pequeña actualización: soporte para Dolby Atmos y nuevos protectores de pantalla tomados de la Estación Espacial Internacional .
- El reloj tiene un modo de competencia para desafiar a otros a desafíos relacionados con el entrenamiento. También intentará detectar automáticamente el comienzo y el final de los entrenamientos en caso de que olvide iniciarlos o detenerlos, y ahora tiene entrenamientos de Senderismo y Yoga.
- El reloj también tiene un nuevo modo Walkie-Talkie que puede habilitar para contactos de confianza.
- Hay más SDK de audio que son nativos en Watch , y la aplicación Podcasts de Apple ya está disponible. Espero que las aplicaciones de podcasts de terceros también aprovechen estos nuevos SDK.
- La Mac obtuvo el punto de anclaje del evento (lo que, con suerte, es una indicación de una atención renovada). Se llamará macOS Mojave y contará con un modo oscuro .
- Hay grandes actualizaciones en la Mac App Store, pero, en particular, ahora recibe el mismo tratamiento visual y de contenido que la iOS App Store recibió el año pasado. Hay suficientes cambios en la zona de pruebas como para que Panic haya decidido trasladar Transit allí .
- Quick Look en el Finder ahora tiene algunas acciones simples que puede realizar en el archivo (por ejemplo, rotar una imagen) y se puede personalizar a través de Automator.
- Mojave será la última versión de macOS compatible con aplicaciones y marcos de 32 bits , lo que significa que Quick Time Framework desaparecerá. Aparentemente ha sido reemplazado con algunas funciones de captura de video en el propio sistema operativo.
- Apple anunció que están utilizando internamente un puerto de UIKit para crear aplicaciones para Mac y mostró puertos de Stocks, News, Home y Voice Memos. El nuevo marco se lanzará en 2019.
Los anuncios de desarrolladores de iOS que más me emocionan
Los desarrolladores de iOS también recibieron buenas noticias. Tocaron las cuatro áreas principales en las que quería ver mejoras:
- SiriKit ahora tiene intenciones personalizadas , lo que abre bastante las posibilidades.
- Create ML es una nueva forma de usar Xcode Playgrounds para entrenar modelos a través del aprendizaje por transferencia , lo que le permite aumentar los modelos existentes con sus propios datos de entrenamiento .
- Los patios de recreo de Xcode ahora le permiten agregar código al final de una página y ejecutarlo sin reiniciar . Es difícil saber si Playgrounds será más estable hasta que tengamos un lanzamiento real en septiembre, pero esto hará que probar el código sea mucho más rápido.
- ARKit 2 se anunció junto con un nuevo formato de archivo de Realidad Aumentada llamado USDZ , que es abierto y fue desarrollado con Adobe y Pixar. Adobe ya anunció algunas herramientas de soporte. Permitirá a los usuarios y desarrolladores almacenar y compartir activos y experiencias de AR. Además, ARKit 2 permite que varios dispositivos estén en el mismo entorno AR y admite la detección de objetos 3D.
No obtuvimos un dispositivo AR, pero parece que pronto tendremos uno. Y debe provenir de Apple (no de terceros) porque ejecutar ARKit requiere un dispositivo iOS.
Configuración de su máquina
Todo lo que necesita está disponible ahora en el portal para desarrolladores. Para usar el código del artículo, necesita Xcode 10 Beta. No recomendaría usar iOS 12 Betas todavía, pero si realmente lo desea, vaya al portal en su dispositivo y descargue el Perfil de configuración de iOS 12 Beta.
Lo único importante para lo que necesita un dispositivo con la versión beta es ARKit 2. Todo lo demás debería funcionar lo suficientemente bien en el simulador de Xcode 10. A partir de la primera versión beta, la compatibilidad con Siri Shortcut en el simulador es limitada, pero hay suficiente para pensar que eso se solucionará en futuras versiones.
Fin del día 2: jugar con las intenciones personalizadas de Siri
El año pasado, escribí cómo necesitabas encajar dentro de una de las intenciones predefinidas de Apple para usar SiriKit en tu aplicación. Este mecanismo se introdujo en 2016 y se agregó en 2017 e incluso entre eventos de la WWDC. Pero estaba claro que el enfoque de intenciones personalizadas de Amazon era superior para llevar el control de voz a aplicaciones más diversas, y Apple lo agregó a SiriKit la semana pasada.
Para ser claros, esta es una primera implementación, por lo que todavía no es tan extensa como Alexa Skills, pero abre bastante las posibilidades de Siri. Como mencioné en el artículo anterior, la principal limitación de las intenciones personalizadas es que el desarrollador debe realizar toda la traducción del idioma. SiriKit soluciona esto un poco al pedirle al usuario que proporcione la frase que le gustaría usar, pero aún se necesita más traducción para intenciones personalizadas que para intenciones predefinidas.
Y se construyeron sobre la misma base que las intenciones predefinidas, por lo que todo lo que cubrí aún se aplica. De hecho, le mostraré cómo agregar una nueva intención personalizada a List-o-Mat, la aplicación que escribí para el artículo original de SiriKit.
(Gratis) Compatibilidad con accesos directos de Siri si ya es compatible con Spotlight
Si usa NSUserActivity
para indicar cosas en su aplicación que su usuario puede iniciar a través de transferencia o búsqueda, entonces es trivial ponerlas a disposición de Siri también.
Todo lo que necesita hacer es agregar la siguiente línea a su objeto de actividad:
activity.isEligibleForPrediction = true
Esto solo funcionará para las actividades habilitadas para Spotlight (donde isEligibleForSearch
es true
).
Ahora, cuando los usuarios hacen esta actividad, se considera donada para su uso en Siri. Siri recomendará actividades muy comunes o los usuarios pueden encontrarlas en la aplicación Atajos. En cualquier caso, el usuario podrá asignar su propia frase hablada para iniciarla. Su apoyo para iniciar la actividad a través de Spotlight es suficiente para permitir que se inicie a través de un acceso directo.
En List-o-Mat, podríamos hacer que las listas individuales estén disponibles para Spotlight y Siri construyendo objetos de actividad y asignándolos a ListViewController
. Los usuarios podían abrirlos a través de Siri con su propia frase.
Es redundante en nuestro caso porque teníamos una intención predefinida para abrir una lista, pero la mayoría de las aplicaciones no tienen tanta suerte y ahora tienen este mecanismo simple. Por lo tanto, si su aplicación tiene actividades que no son compatibles con las intenciones predefinidas de Siri (por ejemplo, reproducir un podcast), puede hacerlas elegibles para la predicción y no preocuparse por las intenciones personalizadas.
Configuración de SiriKit para usar intenciones personalizadas
Si necesita usar una intención personalizada, debe agregar SiriKit a su aplicación, lo que requiere un poco de configuración.
Todos los pasos para configurar SiriKit para intenciones personalizadas son los mismos que para las intenciones predefinidas, que se tratan en detalle en mi artículo de SiriKit aquí en Smashing. Para resumir:
- Está agregando una extensión, por lo que necesita una nueva ID de aplicación, y el perfil de aprovisionamiento y las necesidades de derechos de su aplicación han agregado a Siri.
- Probablemente necesite un grupo de aplicaciones (así es como se comunican la extensión y la aplicación).
- Necesitará una extensión de intenciones en su proyecto
- Hay claves .plist específicas de Siri y derechos de proyecto que debe actualizar.
Todos los detalles se pueden encontrar en mi artículo de SiriKit, por lo que solo cubriré lo que necesita para admitir una intención personalizada en List-o-Mat.
Adición de un comando de lista de copia a List-o-Mat
Las intenciones personalizadas están destinadas a usarse solo donde no hay una intención predefinida, y Siri en realidad ofrece una gran cantidad de listas y soporte de tareas en su Dominio Siri de Listas y Notas.
Pero, una forma de usar una lista es como plantilla para una rutina o proceso repetido. Para hacer eso, querremos copiar una lista existente y desmarcar todos sus elementos. Las intenciones de lista integradas no admiten esta acción.
Primero, necesitamos agregar una forma de hacer esto manualmente. Aquí hay una demostración de este nuevo comportamiento en List-o-Mat:
Para que Siri pueda invocar este comportamiento, "donaremos una intención", lo que significa que le informaremos a iOS cada vez que lo haga. Luego, eventualmente aprenderá que en la mañana le gusta copiar esta lista y ofrecerla como un atajo. Los usuarios también pueden buscar intenciones donadas y asignar frases manualmente.
Crear la intención personalizada
El siguiente paso es crear la intención personalizada en Xcode. Hay una nueva plantilla de archivo, así que:
- Elija Archivo → Nuevo archivo y elija "Archivo de definición de intenciones de SiriKit".
- Asigne un nombre al archivo ListOMatCustomIntents.intentdefinition y elija colocar el archivo en los destinos de aplicación y extensión de intención. Esto generará automáticamente clases en ambos objetivos que implementan los protocolos de intención pero tienen su comportamiento personalizado implementado.
- Abra el archivo de definición .
- Use el botón + en la parte inferior izquierda para agregar una intención y asígnele el nombre "CopyList".
- Establezca la Categoría en "Crear" y complete el título y el subtítulo para describir la intención:
- Agregue un parámetro de cadena llamado "lista".
- Agregue un tipo de acceso directo con el parámetro de lista y asígnele un título llamado "Copiar lista".
Si observa la lista de intenciones, verá que esta intención ya se configuró para usted:
Donando la intención
Cuando hacemos una interacción con el usuario en nuestra aplicación que queremos que Siri sepa, la donamos a Siri. Siri realiza un seguimiento de la información contextual, como la hora, el día de la semana e incluso la ubicación, y si nota un patrón, ofrecerá el acceso directo al usuario.
Cuando tocamos el menú Copiar, agrega este código:
@available(iOS 12, *) func donateCopyListInteraction(listName: String) { let copyListInteraction = CopyListIntent() copyListInteraction.list = listName copyListInteraction.suggestedInvocationPhrase = "Copy \(listName)" let interaction = INInteraction(intent: copyListInteraction, response: nil) interaction.donate { [weak self] (error) in self?.show(error: error) } }
Esto simplemente crea un objeto de la clase CopyListIntent
generada automáticamente y lo dona a Siri. Normalmente, iOS recopilaría esta información y esperaría el momento adecuado para mostrarla, pero para el desarrollo, puede abrir la aplicación Configuración, ir a la sección Desarrollador y activar la configuración de depuración de acceso directo de Siri.
Nota : al momento de escribir este artículo, con las primeras versiones beta, esta configuración de depuración solo funciona en los dispositivos y no en el simulador. Dado que la configuración está ahí, espero que comience a funcionar en versiones beta adicionales.
Cuando haces esto, tu atajo donado aparece en Sugerencias de Siri en Spotlight.
Tocar eso llamará a su extensión Intent porque estamos permitiendo la ejecución en segundo plano. Agregaremos soporte para eso a continuación.
Manejo de la intención personalizada
Ya tenemos una extensión de intenciones y, dado que el archivo de definiciones de intenciones personalizadas ya se agregó al archivo, también tiene las clases de intenciones generadas. Todo lo que tenemos que hacer es agregar un controlador.
El primer paso es agregar una nueva clase, llamada CopyListIntentHandler
a la extensión. Aquí está su código:
import Intents @available(iOS 12, *) class CopyListIntentHandler: ListOMatIntentsHandler, CopyListIntentHandling { func handle(intent: CopyListIntent, completion: @escaping (CopyListIntentResponse) -> Void) { // Find the list var lists = loadLists() guard let listName = intent.list?.lowercased(), let listIndex = lists.index(where: { $0.name.lowercased() == listName}) else { completion(CopyListIntentResponse(code: .failure, userActivity: nil)) return } // Copy the list to the top, and respond with success copyList(from: &lists, atIndex: listIndex, toIndex: 0) save(lists: lists) let response = CopyListIntentResponse(code: .success, userActivity: nil) completion(response) } }
Las intenciones personalizadas solo tienen una fase de confirmación y manejo (no se admite la resolución personalizada de parámetros). Dado que el confirm()
predeterminado devuelve el éxito, solo implementaremos handle()
, que tiene que buscar la lista, copiarla y hacerle saber a Siri si tuvo éxito o no.
También debe enviar a esta clase desde el controlador de intención registrado agregando este código:
if #available(iOS 12, *) { if intent is CopyListIntent { return CopyListIntentHandler() } }
Ahora puedes tocar esa sugerencia de Siri y aparecerá esto:
Y al tocar el botón Crear se copiará la lista. El botón dice "Crear" debido a la categoría que elegimos en el archivo de definición de intención.
Uf, eso fue mucho. Estos nuevos accesos directos de Siri son la característica principal de iOS 12 que tiene una nueva área de superficie grande para desarrolladores para explorar. Además, dado que tenía un buen (y documentado) ejemplo de Siri para trabajar, era razonable intentar agregarle las nuevas funciones esta semana.
Puede ver la actualización List-o-Mat en GitHub. Hasta que se lancen Xcode 10 e iOS 12, está en su propia rama.
En los próximos días, principalmente miraré el código de muestra de Apple o haré proyectos mucho más pequeños.
Fin del día 3: Xcode Playgrounds
Todo el día anterior se pasó en Xcode 10 beta, que no se bloqueó ni una sola vez y parecía estar listo para el desarrollo. Así que ahora quería explorar las nuevas funciones de Playgrounds.
Lo principal que quería de los parques infantiles es hacerlos más estables y mucho más rápidos. Para hacerlos más rápidos, Apple agregó una gran característica: un modo REPL.
Antes de Xcode 10, cuando estaba en un Playground que tenía la ejecución automática activada (que es el valor predeterminado), cada línea de código en realidad reconstruía todo el archivo y lo ejecutaba desde el principio. Si habías construido algún estado, estaba perdido. Pero, el problema real era que esto era demasiado lento para el desarrollo iterativo. Cuando uso Playgrounds, los configuro para que se ejecuten manualmente, pero incluso eso es lento.
En Xcode 10, la ejecución manual es más la norma, pero después de ejecutarlo, puede agregar más líneas en la parte inferior de la página y continuar con la ejecución. Esto significa que puede explorar datos y dibujar vistas de forma iterativa sin tener que reconstruir constantemente y empezar desde cero.
Para comenzar, creé un área de juegos para iOS (Archivo → Nuevo → Área de juegos) con la plantilla Vista única.
Active la ejecución manual bajando el menú debajo del botón Reproducir (el triángulo en la esquina inferior izquierda). Esto coloca una franja vertical a la izquierda que muestra la posición actual del cabezal de reproducción (algo así como puntos de interrupción).
Puede tocar cualquier línea y luego tocar el botón de reproducción a su izquierda. Esto ejecutará el Playground hasta este punto. Luego puede ir más lejos tocando las líneas más abajo en el Playground. Críticamente, puede agregar más líneas en la parte inferior y escribir Shift + Enter después de cada una para mover la cabeza Play a ese punto.
Aquí hay un GIF mío cambiando la etiqueta de una vista sin necesidad de reiniciar Playground. Después de cada línea que escribo, presiono Shift + Enter .
Playgrounds también admite la representación personalizada de sus tipos ahora, y Apple está haciendo un gran esfuerzo para que cada marco Swift incluya un Playground para documentarlo.
Fin del día 4: Crear ML
El año pasado, Apple dio un gran salto al programar Machine Learning para sus dispositivos. Había un nuevo formato de archivo de modelo ML y soporte directo para él en Xcode.
El potencial era que habría una gran biblioteca de estos archivos de modelo, que habría herramientas que los crearían y que muchos más desarrolladores de aplicaciones podrían incorporar ML en sus proyectos sin tener que saber cómo crear modelos.
Esto no se ha materializado del todo. Apple no agregó al repositorio de modelos después de la WWDC y, aunque hay repositorios de terceros, en su mayoría tienen modelos que son variaciones de las demostraciones de clasificación de imágenes. ML se usa para mucho más que la clasificación de imágenes, pero no apareció una amplia selección de ejemplos.
Entonces, quedó claro que cualquier aplicación real necesitaría que sus desarrolladores entrenaran nuevos modelos. Apple lanzó Turi Create para este propósito, pero está lejos de ser simple.
En WWDC 2018, Apple hizo algunas cosas a Core ML:
- Ampliaron la parte de Procesamiento del lenguaje natural (NLP) de Core ML , lo que nos brinda un nuevo dominio principal de ejemplos.
- Agregaron el concepto de Transferencia de aprendizaje a Core ML, que le permite agregar datos de capacitación a un modelo existente . Esto significa que puede tomar modelos de la biblioteca y personalizarlos según sus propios datos (por ejemplo, hacer que reconozcan nuevos objetos en las imágenes que proporcione).
- Lanzaron Create ML, que se implementa dentro de Xcode Playgrounds y le permite arrastrar y soltar datos para entrenar y generar extensiones de modelo (usando Transfer Learning).
Este es otro buen paso en la democratización de ML. No hay mucho código para escribir aquí. Para extender un clasificador de imágenes, solo necesita recopilar y etiquetar imágenes. Una vez que los tenga, simplemente arrástrelos a Create ML. Puede ver la demostración en este video Create ML WWDC.
Fin de semana: juega con las nuevas demostraciones de realidad aumentada
ARKit fue otra gran adición el año pasado y parece aún más claro que se acerca un dispositivo AR.
Mi código ARKit del artículo del año pasado sigue siendo una buena forma de empezar. La mayoría de las nuevas características tratan de hacer que AR sea más preciso y rápido.
Después de eso, si ha instalado una versión beta, definitivamente querrá descargar la nueva aplicación de demostración SwiftShot ARKit. Esta aplicación aprovecha las nuevas funciones de ARKit, especialmente la experiencia multijugador. Dos o más dispositivos en la misma red y en el mismo lugar pueden comunicarse entre sí y ver la misma experiencia AR.
Por supuesto, para jugar esto, necesita dos o más dispositivos que esté dispuesto a poner en iOS 12 beta. Estoy esperando que la versión beta pública haga esto porque solo tengo un dispositivo seguro para la versión beta.
La aplicación AR más fácil de usar es la nueva aplicación Measure, que le permite medir la longitud de los objetos reales que ve en la vista de cámara AR. Ha habido aplicaciones de terceros que hacen esto, pero la de Apple está pulida y preinstalada con iOS 12.
Enlaces a videos de WWDC y código de muestra
Por lo tanto, espero hacer más con Xcode 10 e iOS 12 este verano mientras esperamos los nuevos teléfonos y cualquier dispositivo que Apple pueda lanzar al final del verano. Mientras tanto, los desarrolladores de iOS pueden disfrutar del sol, realizar un seguimiento de nuestras caminatas con nuestro nuevo Watch OS beta y ver estos videos de la WWDC cuando tengamos la oportunidad.
Puede transmitir videos de WWDC 2018 desde el portal para desarrolladores de Apple. También existe esta aplicación Mac no oficial para ver videos de la WWDC.
Estos son los videos a los que se hace referencia en este artículo:
- Discurso de apertura de la WWDC 2018
- WWDC 2018 Plataformas Estado de la Unión
- Introducción a los atajos de Siri
- Sacar el máximo partido de Playgrounds en Xcode
- Presentamos Create ML, y si quieres algo más avanzado, una guía para Turi Create
Para empezar a jugar con Xcode 10 e iOS 12:
- Descarga las betas (visita en un dispositivo para obtener el perfil beta)
- Actualizaciones de List-o-Mat con acceso directo de Siri
- Swift Shot (el juego ARKit 2 multijugador)