Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)
En este artículo, me gustaría hablar acerca de iOS 10 y qué necesitas para preparar tus apps para iOS 10.
Como con cada liberación mayor, iOS 10 introduce un montón de cambios y mejoras. Algunos son requeridos, otros recomendados y también hay algunos cuantos cambios que pueden mejorar la experiencia de usuario de tu aplicación. Comencemos con un vistazo a qué es requerido si quieres construir tu app a la par de SDK de iOS 10.
1. Ya Viene el App Security Transport
El cambio más importante no está estrictamente relacionado con iOS 10, pero es lo suficientemente importante que quiero discutirlo primero. Aunque App Transport Security (ATS) ha estado presente desde iOS 9, siempre ha sido fácil optar por quedarse fuera de ATS agregando el siguiente snippet al Info.plist de tu objetivo.
1 |
<key>NSAppTransportSecurity</key> |
2 |
<dict>
|
3 |
<key>NSAllowsArbitraryLoads</key> |
4 |
<true/>
|
5 |
</dict>
|
Pero eso está por cambiar. El 1 de Enero de 2017, toda aplicación enviada a la App Store, incluyendo actualizaciones de aplicaciones existentes, necesitarán cumplir con las directrices de ATS. Esto significa que tu aplicación es requerida para comunicarse de manera segura con servicios web sobre HTTPS.
Si lees mi detallada discusión sobre App Transport Security, entonces recordarás que App Transport Security define un conjunto de reglas. Los servidores con los que se comunica tu aplicación necesitar cumplir con esas esas reglas. En otras palabras, hacer peticiones de red sobre HTTPS no es suficiente. Cada servidor que habla con tu aplicación necesita estar asegurado por y cumplir con estándares modernos de seguridad.
Aún puedes definir excepciones de dominio en el Info.plist del objetivo, pero ya no es permitido optar por dejar fuera el App Security Transport en conjunto.
Conexiones de Red Local
Recientemente me encontré con un problema relacionado con App Transport Security. La aplicación de un cliente necesitaba comunicarse con otros dispositivos en la misma red. Esta habla con otros dispositivos usando sus direcciones IP, lo que no está soportado por las excpciones de dominio de App Transport Security. Y para hacer las cosas más complicadas, la dirección IP de un dispositivo no es fija. Esta puede y cambiará con el pasar del tiempo.
Afortunadamente, con iOS 10 es posible resolver este problema agregando un par adicional key-value al diccionario NSAppTransportSecurity
en el Info.plist del objetivo. Asignando el valor de NSAllowsLocalNetworking
a YES
, es posible deshabilitar App Transport Security para tráfico de red local.
Otras Opciones
Si has estado teniendo problemas con App Transport Security en el pasado, entonces recomiendo echar un vistazo a la documentación actualizada de App Transport Security. Apple ha agregado unas cuantas claves adicionales que hacen que trabajar con ATS sea menos un dolor de cabeza.
Por ejemplo, muchas aplicaciones cargan contenido desde la web en una vista web. Tu aplicación frecuentemente no sabe qué sitios va a visitar el usuario, lo cuál hace imposible definir excepciones de dominio para App Transport Security en el Info.plist del objetivo. En iOS 10, puedes deshabilitar App Transport Security para vistas web asignando NSAllowsArbitraryLoadsInWebContent
a YES
en el Info.plist del objetivo.
App Transport Security Es Requerido
Lo que necesitas recordar es que el App Transport Security es requerido para cada aplicación enviada a la App Store después del 31 de Diciembre. Optar por dejar fuera el App Transport Security ya no es posible. Nota que el equipo de revisión de la App Store requiere una explicación de tu parte si optas por dejar fuera el App Transport Security de manera parcial usando una excepción, tal como NSAllowsLocalNetworking
o NSAllowsArbitraryLoadsInWebContent
. Puedes leer más acerca de esto en la documentación de Apple.
2. Privacidad
Apple continua invirtiendo en proteger la privacidad de sus clientes, y ese compromiso también tiene consecuencias para los desarrolladores. ¿Qué significa eso para ti?
Si tu aplicación accesa a un servicio de sistema o prestación de dispositivo que requiera permiso explícito del usuario, el usuario ve una alerta de sistema en la cuál la aplicación pide el permiso del usuario. El contenido de esa alerta solía ser provisto por el sistema operativo si tu aplicación no especifica una. Esto ha cambiado en iOS 10.



En iOS 10, tu aplicación necesita decirle al usuario por qué necesita acceso a un servicio particular del sistema o prestación del dispositivo. Haces esto agregando una clave al Info.plist del objetivo. Si tu aplicación está localizada, entonces también deberías proveer traducción para la descripción en el archivo InfoPlist.strings.
Aquí hay una lista completa de las claves de privacidad disponibles en iOS 10. Muchos de estos deberían lucir familiares, pero algunos son nuevos en iOS 10, como NSSiriUsageDescription
y NSAppleMusicUsageDescription
.
- HealthKit
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
- Location
NSLocationUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSVoIPUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSHomeKitUsageDescription
NSAppleMusicUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSpeechRecognitionUsageDescription
NSSiriUsageDescription
NSVideoSubscriberAccountUsageDescription
Si no agregas una descripción de uso para los servicios de sistema y prestaciones del dispositivo que usa tu aplicación, una advertencia es mostrada en la consola y el sistema de alerta que pide permiso al usuario no se muestra a este. Como resultado, a tu aplicación se le niega el permiso a ese servicio o prestación en particular.
1 |
"This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSLocationAlwaysUsageDescription key with a string value explaining to the user how the app uses this data."
|
No hace falta decir que el equipo de revisión de la App Store rechaza cualquier aplicación que viole esta política. De hecho, compilaciones subidas a la App Store que no cumplan con esta política son automáticamente rechazadas.
Si usas librerías o frameworks de terceros en tu aplicación, entonces asegúrate de que las descripciones de uso correctas sean añadidas al Info.plist del objetivo. Librerías y frameworks para publicidad frecuentemente requieren varios permisos que puedes no esperar o no saber de ellos.
3. Swift 3
Si abres un proyecto existente por primera vez en Xcode 8 y contiene Swift, entonces se te pedirá migrarlo a Swift 3. Si no te sientes listo aún, Xcode te pedirá migrar a Swift 2.3 en su lugar. Tienes que elegir una o la otra ya que Xcode 8 solo soporta estas versiones del lenguaje Swift. Swift 2.2.1 y Swift 2.3 son muy similares. La diferencia más importante es que Swift 2.3 es compatible con iOS 10, tvOS 10, watchOS 3 y macOS 10.12.
¿Deberías Migrar Hoy?
¿Deberías migrar a Swift 3 hoy? Probablemente no. Pero no esperes demasiado. En algún punto, Apple requerirá que los desarrolladores envíen aplicaciones con Xcode 8, el cuál no soporta Swift 2.2.1. Podrías quedarte con Swift 2.3, pero ¿por qué no solo das el brinco?
Es verdad que migrar un proyecto a Swift 3 tiene un impacto dramático en el código base de tu proyecto. Casi toda línea de código cambia en alguna forma. Los cambios en la API son sustanciales. Pero el lado bueno es que puedes usar Swift 3. He usado Swift 3 por varios meses y lo adoro. Es una mejora mayor sobre Swift 2.2.1 y Swift 2.3.
Planea por Adelantado
Si estás trabajando en un proyecto grande para un cliente, asegúrate de que planeas cuidadosamente la migración a Swift 3. Para proyectos complejos, la migración puede tomar varios días. Las ventajas son que puedes comenzar a usar la API de Swift 3 y también beneficiarte del mejorado compilador Swift 3 motorizado por LLVM and Clang.
4. Mejoras y Depreciaciones
Con cada lanzamiento mayor de iOS, Apple mejora la plataforma agregando y removiendo APIs. Varios frameworks han recibido una actualización significativa y la compañía también ha introducido varios frameworks nuevos.
¿Por qué es eso importante? Si quieres resaltar en la App Store, vale la pena mantener tus aplicaciones actualizadas y agregar soporte para nuevas características de la plataforma. De eso trata esta sección.
Notificaciones de Usuario
La clase UILocalNotification
está obsoleta para iOS 10. ¿Qué significa esto para ti? Aún puedes usar UILocalNotification
para programar y administrar notificaciones locales, pero probablemente desaparecerán en algún punto. ¿Pero por qué Apple ha decidido depreciar UILocalNotification
? ¿Funcionaba bien, verdad?
En iOS 10, Apple introdujo el framework de Notificaciones de Usuario. Como su nombre indica, el framework está a cargo de programar, administrar y manejar notificaciones, locales y remotas. Esto es lo que hace al framework grandioso. Tu aplicación ya no necesita distinguir entre notificaciones locales y remotas. El framework de Notificaciones de Usuario ofrece una API unificada para manejar notificaciones locales y remotas.
La API se ve y se siente muy bien. El framework trata a las notificaciones locales y remotas por igual desde el punto de vista de un desarrollador, lo cuál hace que las acciones de agregar una notificación sean fáciles y transparentes. El manejo de las acciones de notificación está centralizado en un protocolo conciso y delegado.
¡Tenemos algunos tutoriales sobre el framework de Notificaiones de Usuario justo aquí en Envato Tuts+!
Una introducción al Framework de Notificaciones de Usuario
iOS 10: Creando Interfaces de Notificación Personalizadas
También podrías estar interesado en mis entradas recientes de blog sobre programar notificaciones locales y acciones de notificación con el framework de Notificaciones de Usuario.
SiriKit
Uno de los anuncios más importantes durante el WWDC de este año fue la posibilidad de integrar tu aplicación con Siri mediante SiriKit. Aunque las opciones son limitadas para el tiempo dado, si tu aplicación encaja en una de las categorías soportadas, es una gran forma de separar a tu aplicación de la competencia. Siri actualmente soporta un número limitado de dominios, incluyendo llamadas VoIP, mensajes y entrenamientos.
Integras Siri agregando una extensión a tu aplicación. Cada aplicación integrándose con Siri necesita agregar una extensión de intents. Esto permite a tu aplicación llevar a cabo una tarea en respuesta a información que Siri manda a tu aplicación. De manera opcional puedes crear una intents UI extension para personalizar el look de la interfaz de usuario resultante que es presentada al usuario después de que la tarea es completada.
Respuesta Háptica
El nuevo motor háptico de iPhone 7 y iPhone 7 }plus ha abierto muchas nuevas posibilidades para los desarrolladores. En iOS 10, es posible usar el motor háptico del dispositivo para proveer al usuario de respuesta háptica mientras realizan una acción específica o cuando un evento particular ocurre.
Tu aplicación puede manejar el motor háptico mediante la clase UIFeedbackGenerator
y sus tres subclases concretas:
UIImpactFeedbackGenerator
UINotificationFeedbackGenerator
UISelectionFeedbackGenerator
Cada subclase de UIFeedbackGenerator
está diseñada para un escenario específico. Si agregas soporte para el motor háptico, seguramente vas a sorprender a los usuarios de tu aplicación. Dale una oportunidad.
Core Data
Core Data es probablemente mi framework Cocoa favorito y Apple lo ha hecho incluso más impresionante en iOS 10 con el lanzamiento de Swift 3. Esta es la actualización más grande que el framework ha visto en los últimos años.
Swift 3 y Xcode 8 unen fuerzas para hacer Core Data más fácil de utilizar que nunca. Apple también introdujo la clase NSPersistentContainer
la cuál hace que configurar y administrar objetos Core Data sea muy fácil.
La compañía incluso modernizó los fundamentos del framework repensando la interacción del framework con SQLite. Los resultados son verdaderamente fantásticos. Es grandioso ver que Apple continua invirtiendo en Core Data, después de más de diez años de su introducción en macOS Tiger.
Para aprender más acerca de Core Data, revisa alguno de nuestros otros cursos y tutoriales aquí en Envato Tuts+.
- iOSComienza Con Core DataMarkus Mühlberger
- Core DataCore Data y Swift: Objetos Core DataBart Jacobs
- iOSValidación de Datos con Core Data: Restricciones ComunesBart Jacobs
¿Qué Deberías Hacer?
Si construyes una aplicación sobre el SDK de iOS 10, lo cuál significa que estás usando Xcode 8, entonces necesitas asegurarte de que cumples con App Transport Security y los lineamientos de privacidad que Apple ha fijado. Asegúrate de marcar esas casillas primero.
Aunque las otras mejoras son opcionales, te aliento a que les eches un vistazo. Por ejemplo, no esperes demasiado para migrar a Swift 3. Podrías sorprender a tus usuarios agregando soporte para el motor háptico. Es opcional, pero es una oportunidad para resaltar en la saturada App Store de hoy en día.
Para aprender más acerca de Swift 3 o iOS 10, revisa algunos de nuestros otros cursos y tutoriales.