Introducción

Este sistema de mensaje completo, integrado por dispositivos de conexión a Internet, permite a los usuarios encontrar contenido sin abrir su aplicación primero. Core Spotlight API es el marco integrado de Apple para indexar el contenido de la aplicación en la búsqueda global de Spotlight del dispositivo. Cuando un usuario busca desde la pantalla principal o dentro de la vista de búsqueda, los resultados de su aplicación aparecen

Comprender el foco básico y sus beneficios

Core Spotlight es un sistema de indexación ligero y seguro de privacidad. Vive enteramente en el dispositivo – ningún dato deja el teléfono del usuario a menos que use explícitamente CloudKit. Esto lo hace ideal para contenido personal como notas, contactos, documentos o cualquier dato generado por el usuario.

  • Aumento del compromiso – Los usuarios descubren el contenido que podrían haber olvidado, impulsando el uso de repetición.
  • Navegación sin par – El resultado de la búsqueda puede abrir su aplicación directamente a la pantalla relevante.
  • Capacidad de oficina] – Los artículos indizados siguen siendo indescriptibles incluso sin conectividad de Internet.
  • Menor costo de implementación] – La API es pequeña, bien documentada e integra fácilmente con los modelos de datos existentes.

Core Spotlight trabaja junto con NSUserActivity] indexación, pero para contenido estático o actualizado con frecuencia, el indexado directo CSSearchableItem le da un control más fino.

Prerrequisitos y Configuración

Antes de escribir código, asegúrese de que su proyecto está configurado correctamente:

  1. Su aplicación debe apuntar iOS 9 o posterior] (la API debutó con iOS 9).
  2. Habilitar ]Core Spotlight] capacidad en Xcode, bajo ]]Signing & Capabilities añadir el derecho “Core Spotlight” (Core Spotlight) que se incluye automáticamente al importar el marco.
  3. Importar el marco de foco básico y MobileCoreServices (para identificadores de tipo): y .

No se necesita configuración adicional del servidor o permiso del usuario. La indexación ocurre asincrónicamente en el fondo.

Crear e indexar artículos de búsqueda

El núcleo del foco central es el objeto . Cada elemento consta de:

  • Un identificador único] (por ejemplo, ]) – utilizado más tarde para manejar la selección o actualizaciones.
  • Un identificador de dominio ] [grupos relacionados (por ejemplo, ]]]).
  • Un conjunto atributo] (]) – describe el contenido con propiedades como , , , , y más.

Aquí está un ejemplo completo de Swift que indexa una nota única:

import CoreSpotlight
import MobileCoreServices

func indexNote(note: Note) {
 let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
 attributeSet.title = note.title
 attributeSet.contentDescription = note.body
 attributeSet.keywords = [note.title] + note.tags
 if let imageData = note.thumbnail?.pngData() {
 attributeSet.thumbnailData = imageData
 }

 let item = CSSearchableItem(
 uniqueIdentifier: "com.yourapp.note.\(note.id)",
 domainIdentifier: "com.yourapp.notes",
 attributeSet: attributeSet
 )
 // Optionally set expiration date (default is one month)
 // item.expirationDate = Date.distantFuture

 CSSearchableIndex.default().indexSearchableItems([item]) { error in
 if let error = error {
 print("Indexing error: \(error.localizedDescription)")
 } else {
 print("Note indexed successfully.")
 }
 }
}

Propiedades de conjunto de atributos

El hereda de y ofrece docenas de propiedades. Para la mayoría de las aplicaciones, son esenciales:

  • – Texto corto y descriptivo que aparece prominentemente.
  • – Un fragmento más largo que se muestra debajo del título.
  • – Arrede para términos de búsqueda alternativos.
  • o – Previsión visual.
  • – Enlaces de artículos juntos (por ejemplo, notas de padres).

Para el contenido de los medios, use propiedades específicas de tipo como , , o .

Actualización y eliminación de contenidos indexados

Cuando el contenido de su aplicación cambia, debe mantener el índice en sincronización. Utilice los mismos métodos :

Actualización de un artículo

Llame con el mismo identificador único – la API reemplaza automáticamente la entrada antigua.

Eliminar los elementos

Use o para eliminar el contenido de establo:

CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.note.123"]) { error in
 // handle
}

Las operaciones de lotes son eficientes: pasar arrays a o . Para un reinicio completo, utilice (reprobablemente necesario).

Manejo de la actividad de usuario y la conexión profunda

Cuando un usuario graba un resultado de Spotlight, su aplicación recibe una llamada a través de la continuación . Implementar el siguiente método de delegado en su o :

func application(_ application: UIApplication,
 continue userActivity: NSUserActivity,
 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

 if userActivity.activityType == CSSearchableItemActionType {
 if let userInfo = userActivity.userInfo,
 let identifier = userInfo[CSSearchableItemActivityIdentifier] as? String {
 // Navigate to the item with this identifier
 navigateToContent(identifier: identifier)
 return true
 }
 }
 return false
}

Estado que restablece

Para una experiencia más suave, también implemente para mostrar un estado de carga. En aplicaciones basadas en escena (iOS 13+), utilice el método .

Enlace profundo con NSUserActividad

Core Spotlight también trabaja con el mecanismo . Si ya indiza actividades a través de , puede añadir la bandera . Sin embargo, para el control bien arraigado sobre los títulos y descripciones, utilice directamente.

Buenas prácticas para una indexación efectiva

Siguiendo estas directrices, su contenido indexado sigue siendo relevante y performant:

1. Índice Sólo Contenido Significado

No indexe cada pequeña pieza de datos. Enfóquese en los elementos que los usuarios pueden buscar: documentos recientes, páginas de alto valor o contenido marcado.

2. Establecer fechas de exploración adecuadas

Por defecto, los elementos caducan después de un mes. Para el contenido estático, establece . Para datos sensibles al tiempo (por ejemplo, recordatorios de eventos), utilice una fecha realista.

3. Use los identificadores de dominio con sabiduría

Los identificadores de dominio le permiten eliminar todos los elementos de un grupo a la vez. Por ejemplo, si un usuario elimina una carpeta, llame .

4. Proporcione palabras claves significativas

Incluir sinónimos, faltas comunes y nombres alternativos. Evite el sobresuciamiento; 5-10 palabras clave bien escogidas son suficientes.

5. Evite el índice de contenido duplicado

Si duplicas los elementos (por ejemplo, el mismo título en diferentes dominios), los usuarios ven resultados confusos. Deduplicar a nivel de aplicaciones.

6. Operaciones de lotes para actualizaciones de granulos

Al sincronizar muchos elementos (por ejemplo, después de una restauración de la nube), póngalos en arrays de 50–100 para evitar bloquear el hilo principal. Use con un array, no múltiples llamadas individuales.

Consideraciones de rendimiento y batería

Core Spotlight ejecuta un proceso de fondo de baja prioridad, pero la mala implementación puede drenar batería o degradar el rendimiento del sistema:

  • Frecuencia de reindexación de emisiones – Sólo reindex cuando los datos cambian, no en cada lanzamiento de aplicaciones.
  • Tres operaciones grandes ] – Use y (disponible en ) para actualizaciones atómicas.
  • Evitar imágenes pesadas] – debe ser pequeña (por ejemplo, 64×64 puntos, JPEG comprimido). Las imágenes grandes aumentan la presión de memoria.
  • Use el índice predeterminado – es suficiente para casi todas las aplicaciones. Crear índices personalizados es raramente necesario.

La documentación de Apple Core Spotlight enfatiza que el indexado debe ser tratado como "fuego y olvido" – no espere sincronicamente los callbacks de terminación en el hilo principal.

Pruebas de integración de focos básicos

Debugging Spotlight resultados pueden ser difíciles porque no siempre aparecen inmediatamente. Siga esta estrategia de prueba:

  1. Pruebas simuladoras] – Usar iOS Simulator (iOS 15 o posterior). Después de indexar, espere unos segundos, luego tire hacia abajo la pantalla principal para buscar. Tenga en cuenta que los resultados pueden tardar más en el Simulador.
  2. Pruebas de dispositivos] – Siempre prueba en un dispositivo físico. La indexación de focos se comporta más agresivamente en hardware real.
  3. Reinicie el índice – Use la aplicación Ajustes: General → Destacados Buscar → Retroducir su aplicación de una vez por delante. Esto aclara el índice y obliga a un nuevo comienzo.
  4. Verificar la eliminación] – Después de borrar un artículo, asegurar que el resultado viejo ya no aparezca. A veces el sistema produce caches; dáselo hasta 30 segundos.
  5. ]Comprobar la consola de depuración – Permitir registrar a través de los argumentos de Xcode .

Un recurso útil es WDC 2015 “Introducing Core Spotlight”, que cubre los conceptos fundamentales que todavía se aplican hoy.

Conclusión

La API de Core Spotlight es una herramienta robusta y subutilizada que puede transformar cómo interactúan los usuarios con su aplicación. Al agregar contenido relevante y actualizado al índice de búsqueda del sistema, proporciona una ruta sin fricción de búsqueda a contenido – impulsar el compromiso y la retención. Empieza pequeño: indexa tu contenido más importante primero, prueba a fondo y luego expande para cubrir los elementos secundarios. Recuerda mantener tu índice limpio, usa los primeros pasos de búsqueda de identificación de forma consistente y manejando

Para más lectura, consulte al funcionario Core Spotlight Framework Reference] y la ]App Search Programming Guide.