Como integrar SiriKit en tu app de iOS 10 con Swift

21 06-2016
Como integrar SiriKit en tu app de iOS 10 con Swift

Este tutorial necesita de la versión Xcode 8 y iOS 10 en el dispositivo. Si aún no lo tienes descárgalo del sitio de developers de Apple.

Si vas a compilar usando línea de comando con xcodebuild necesitas cambiar las preferencias de la versión de Xcode a la 8, desde el menú de Xcode > Preferences > Locations y en la parte inferior cambiar la versión de Xcode.

Screen Shot 2016-06-21 at 8.48.56 AM

 

Si estás migrando o integrando SiriKit en un proyecto existente en Swift 2, quizá deberías seleccionar la opción de compilador de Swift a: Use Legacy Swift Language Version seleccionar No. Esto ocasionará más errores comúnmente pero es mejor dado la semántica cambiante de Swift.

Screen Shot 2016-06-21 at 8.54.34 AM

Agregando la Extensión de Siri

Cambiar al folder raíz del proyecto, y en el tab de General dar click en + en la parte inferior de la vista del panel lateral.

Screen Shot 2016-06-21 at 9.06.33 AM

En esta ventana selecciona Intent Extension:

Screen Shot 2016-06-21 at 9.00.07 AM

Y puedes dejar seleccionada agregar UI extension:

Screen Shot 2016-06-21 at 9.08.16 AM

 

Compila y ejecuta el proyecto directo a tu dispositivo. Asegura que seleccionas el target de la App y no las extensiones:

Screen Shot 2016-06-21 at 9.16.20 AM

 

Solo verás una pantalla en blanco en tu teléfono. Está correcto. Puedes presionar el botón de Home y ahora vamos a compilar la extensión directo al dispositivo:

Screen Shot 2016-06-21 at 9.17.46 AM

En el siguiente diálogo puedes seleccionar el nombre de tu App; volverá a aparecer la pantalla en blanco. Puedes presionar el botón de Home en tu dispositivo e ir a habilitar los permisos de la extensión de Siri en Settings.

IMG_6993

 

Ahora ya puedes probar tu App indicándole a Siri: “Iniciar un Workout usando <NombredetuApp>” .

Los templates que agrega Xcode por default son para WorkOut. Para agregar otros Intent es necesario agregar uno por uno, de acuerdo a la documentación de Apple.

Ejemplo, agregaremos el envío de mensaje: INSendMessageIntentHandling

class IntentHandler: INExtension, INSendMessageIntentHandling

Xcode marcará un error dado que no se está implementando el método del protocolo:

Agregar:

func handle(sendMessage intent: INSendMessageIntent, completion: (INSendMessageIntentResponse) -> Void) {
    print("Message intent is being handled.")
    let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent))
    let response = INSendMessageIntentResponse(code: .success, userActivity: userActivity)
    completion(response)
}

Antes de que la App pueda manejar este Intent, es necesario indicarlo en el info.plist de la extensión:

Screen Shot 2016-06-21 at 10.08.30 AM

Para probar, compila y ejecuta nuevamente la aplicación y después la extensión directo al dispositivo, en ese orden.

Falta implementar la lógica del manejo de los Intent, que seguiremos agregando a este tutorial.