Mostrando contenido de Core Data en Spotlight

Spotlight permite a los usuarios buscar rápidamente información en sus dispositivos Apple. Como desarrollador, puedes mostrar información de tu aplicación en Spotlight. En esta oportunidad, veremos cómo podemos hacerlo de manera rápida y fácil utilizando Core Data.

Spotlight y el Core Data Stack

Para configurar Spotlight, debemos modificar la manera en que se inicializa el Core Data stack.

Justo antes de init(inMemory: Bool = false), agrega esta declaración:

var spotlightDelegate: NSCoreDataCoreSpotlightDelegate?

Esta variable contendrá la instancia de NSCoreDataCoreSpotlightDelegate, la cual contiene los métodos necesarios para configurar Spotlight.

Entre las funcionalidades se encuentran:

  • Actualiza automáticamente el índice de Spotlight.
  • Gestiona los índices.
  • Permite personalizar los resultados del índice.

Agrega estas líneas de código antes de la llamada a loadPersistentStores(completionHandler:):

description.type = NSSQLiteStoreType
description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)

La primera línea indica el tipo de base de datos; para que Core Data pueda funcionar, es obligatorio que sea una base de datos SQLite. También debemos habilitar el Historial de Persistencia asignando true a la opción NSPersistentHistoryTrackingKey.

Justo después de loadPersistentStores(completionHandler:), agrega estas líneas:

spotlightDelegate = NSCoreDataCoreSpotlightDelegate(
forStoreWith: description,
coordinator: container.persistentStoreCoordinator
)
spotlightDelegate?.startSpotlightIndexing()

Con este código inicializamos NSCoreDataCoreSpotlightDelegate usando forStoreWith y el persistentStoreCoordinator del Core Data stack. Por último, llamamos startSpotlightIndexing() para indicar que queremos indexar nuestros datos y ponerlos a disposición de Spotlight.

Con este código inicializamos NSCoreDataCoreSpotlightDelegate usando description y el persistentStoreCoordinator del Core Data stack. Por último, llamamos a startSpotlightIndexing() para indicar que queremos indexar nuestros datos y ponerlos a disposición de Spotlight.

El código final debería lucir así:

...
let container: NSPersistentContainer
var spotlightDelegate: NSCoreDataCoreSpotlightDelegate?
init(inMemory: Bool = false) {
container = NSPersistentContainer(name: "EasyReminder")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
}
guard let description = container.persistentStoreDescriptions.first else {
fatalError("###\(#function): Failed to retrieve a persistent store description.")
}
description.type = NSSQLiteStoreType
description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
spotlightDelegate = NSCoreDataCoreSpotlightDelegate(
forStoreWith: description,
coordinator: container.persistentStoreCoordinator
)
spotlightDelegate?.startSpotlightIndexing()
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.automaticallyMergesChangesFromParent = true
}

Configurando la entidad y el atributo

Primero, indica el campo que deseamos mostrar en los resultados de Spotlight. Para hacerlo, seleccionamos la entidad en el editor de Core Data de Xcode y, en el campo Display name, en la sección Spotlight, escribimos el nombre del campo. Para este ejemplo, usamos el campo note.

Vista del editor en Xcode donde indicamos el Display name

Necesitamos indicar que deseamos indexar el campo para que se utilice en Spotlight. Esto se logra seleccionando el atributo y marcando la casilla Index in Spotlight.

Vista del editor en Xcode donde marcamos el atributo a indexar

Ahora, al abrir Spotlight y escribir algún dato que coincida con los valores del campo que hemos marcado para indexar, podremos observar los resultados y seleccionarlos. Por defecto, esto abrirá la aplicación.

Mostrando resultados en Spotlight

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2024 AsyncLearn