Spotlight es el indexador de búsqueda inteligente de Apple para macOS. Aquí se le mostramos cómo usar sus utilidades de metadatos para obtener más información sobre sus documentos.
Spotlight se ejecuta en segundo plano en tu Mac o dispositivo iOS, indexando y escaneando silenciosamente el contenido de tus documentos, para que cuando buscas algo, lo puedas encontrar rápidamente.
El demonio (Daemon) de fondo principal en Spotlight se llama corespotlightd
, y puede consumir hasta un 8 al 10 % del tiempo de la CPU cuando se ejecuta a todo gas.
En los Mac de Apple Silicon, corespotlightd
puede ejecutar hasta cuatro subprocesos a la vez durante la indexación de fondo.
Si eres un desarrollador de Apple, puedes añadir el marco Core Spotlight a tu aplicación y hacer que indexe el contenido de tu aplicación internamente, para que el contenido esté disponible automáticamente para los usuarios de la aplicación.
Hay APIs adicionales de Spotlight en el marco de Foundation que permiten realizar búsquedas locales en los datos de Spotlight desde la aplicación.
También querrás agregar Core Services.framework
al proyecto de Xcode, ya que es donde residen las API de metadatos de archivo.
Spotlight también tiene funciones de iCloud que no cubriremos aquí.
Índice
Establecer qué volúmenes se indexan
En macOS, puedes indicar qué volúmenes quieres que Spotlight indexe y cuáles no. De forma predeterminada, si no excluyes los volúmenes de Spotlight, todo será indexado.
Si excluyes volúmenes del índice Spotlight, su contenido no se mostrará en las búsquedas de Spotlight.
Si tienes más de un volumen en la unidad de tu Mac, o si tienes unidades externas conectadas, puedes activar o desactivar Spotlight (y Siri) en cada una.
Para ello, primero abre Ajustes del sistema en macOS seleccionando Ajustes del sistema en el menú de Apple en la barra de menús del Finder.
En el lado izquierdo de los ajustes, desplázate hacia abajo y haz clic en Siri & Spotlight. En el panel Siri y Spotlight, puedes activar y desactivar Siri, configurar un atajo de teclado, establecer el idioma y cómo Siri maneja el historial.
Debajo de eso está la sección de Spotlight. Aquí puedes establecer qué tipos de documentos quieres que Spotlight indexe.
Si desactivas un tipo particular de documento o datos en esta sección, Spotlight ignorará todos los documentos o datos de esos tipos durante la indexación.
Si te desplazas hasta la parte inferior del panel, verás un botón etiquetado como Privacidad de Spotlight. Haz clic en él para abrir la hoja de privacidad.
La hoja de privacidad contiene la lista de todos los volúmenes de almacenamiento que Spotlight está excluyendo actualmente de la indexación. En la mayoría de los casos, por defecto, no hay volúmenes o solo el disco de inicio.
Para agregar o eliminar volúmenes a la hoja de privacidad, puedes arrastrarlos dentro o fuera de ella, o puedes hacer clic en los botones + o – debajo de la lista.
Una vez que se agrega un volumen a la lista, Spotlight deja de indexarlo.
Cuando estés satisfecho con la lista de exclusión de privacidad, haz clic en OK para cerrar la hoja. Cierra Ajustes del sistema.
Metadatos de archivos
Cuando corespotlightd
indexa los datos de sus volúmenes, busca el contenido de los archivos, pero también busca e indexa los metadatos. Los metadatos se pueden definir como datos informativos asociados con los archivos, pero no contenidos dentro de los propios archivos.
Los metadatos incluyen (pero no se limitan a) cosas como la creación de archivos y la fecha de la última modificación, el tamaño, la versión, el tipo, el nombre y los comentarios del Finder que se muestran en las ventanas Obtener información.
Spotlight utiliza la API de metadatos de archivos en el marco de servicios principales de Apple para encontrar y leer metadatos.
Hay cuatro tipos de datos principales en la API de metadatos de archivos:
- MDSchema
- MDItem
- MDLabelDomain
- MDQuerySortOptionFlags
No entraremos en todos los detalles de los tipos de datos, pero el tipo principal que almacena una referencia a un elemento del sistema de archivos y sus metadatos es el tipo MDItem
.
Usando las APIs MDItem
y Core Services, puedes recuperar, ordenar y guardar metadatos para archivos que estén en sistemas de archivo locales.
También hay un documento de Apple un poco más antiguo titulado Guía de programación de búsqueda de metadatos de archivos, que documenta cómo usar las API para hacer búsquedas de Spotlight en los metadatos de los archivos.
Importadores destacados
Si abres la carpeta /Library/Spotlight en el disco de inicio de tu Mac, es posible que notes uno o más archivos con una extensión .mdimporter. Estos son complementos de importación de metadatos de Spotlight.
Por ejemplo, las páginas de Apple y las aplicaciones originales de iBooks Author tienen complementos .mdimporter. Lo hacen algunas de las aplicaciones 365 de Microsoft. Otras aplicaciones también las proporcionan.
Puedes escribir plugins .mdimporter personalizados en el Xcode de Apple, colocarlos en la carpeta /Biblioteca y Spotlight los usará para importar metadatos de los archivos compatibles con tus aplicaciones.
Los complementos .mdimporter son esencialmente paquetes de código e información que le dicen a Spotlight qué tipos de metadatos se pueden importar y cómo acceder a esos datos. Usando un .mdimporter personalizado, puedes permitir que una aplicación almacene metadatos adicionales y los proporcione a Spotlight para su indexación.
Apple también tiene un documento de desarrollador (algo antiguo) titulado Spotlight Importer Programming Guide que muestra cómo escribir un .mdimporter.
Utilidades de metadatos destacados
Apple y terceros también proporcionan varias herramientas de línea de comandos (CLI) que se pueden utilizar en la aplicación Terminal de macOS para acceder a los metadatos de Spotlight en los objetos del sistema de archivos almacenados en sus dispositivos.
Spotlight almacena sus metadatos indexados en una base de datos local en cada volumen de disco montado. Las bases de datos de metadatos de Spotlight se llaman stores.
Cada store contiene los metadatos indexados de cada objeto del sistema de archivos junto con algunos datos adicionales que hacen que las búsquedas de Spotlight sean rápidas. Al almacenar y actualizar los metadatos de los archivos en una base de datos separada, Spotlight puede buscar y recuperar datos mucho más rápido, ya que no tiene que atravesar la jerarquía del sistema de archivos cada vez.
En los volúmenes de APFS, Spotlight también utiliza algunos de los metadatos de los volúmenes internos combinados con los metadatos guardados en store para una búsqueda más rápida y precisa.
Hay muchos comandos de utilidad de Spotlight CLI disponibles, pero los cuatro clave que lo más probable es que quieras usar son:
- mdutil
- mdimport
- mdls
- mdfind
Puedes obtener información de uso sobre cualquiera de estos en Terminal si abres Terminal, escribes man
seguido de un espacio, el nombre de la utilidad y presionas Retorno de carro (Intro) en el teclado.
Por ejemplo:
man mdutil
Fíjate que algunos de los comandos requieren un parámetro de sistema de archivos después del nombre del comando y otros no. Por ejemplo mdutil
no lo necesita, pero mdattributes
sí.
Para salir de man
(manual) en Terminal presiona Control-Z
en el teclado.
mdutil
El comando mdutil
es una utilidad simple que ayuda a gestionar los almacenes de metadatos de Spotlight en tu Mac. Ten en cuenta que un volumen debe estar montado en el escritorio en Finder para que mdutil
funcione en él.
Por ejemplo, mediante mdutil
puedes activar y desactivar los almacenes de Spotlight para volúmenes específicos, deshabilitar búsquedas en ese volumen, borrar el almacén de un volumen, mostrar el estado de indexación de Spotlight para un volumen, y más.
También puedes aplicar comandos específicos a las tiendas Spotlight en cada volumen indexado y vaciar las cachés de la tienda Spotlight para forzar el uso directo de la propia tienda.
Escribe “man mdutil
” y presiona Enter en tu teclado en Terminal para obtener el uso completo de mdutil.
mdimport
mdimport
es una utilidad de línea de comandos de Spotlight que te permite importar manualmente todos los metadatos de búsqueda de una jerarquía de sistemas de archivos a un almacén de metadatos de Spotlight. Utiliza los complementos .mdimporter mencionados anteriormente para importar y buscar datos.
Puedes usar mdimport
para imprimir todos los elementos de metadatos almacenados para cada elemento indexado en una jerarquía de sistema de archivos, excepto para los elementos almacenados con la clave kMDItemTextContent
, ya que esos elementos contienen el contenido de texto real de los elementos del sistema de archivos.
También puedes usar mdimport
para probar los complementos .mdimporter que tú o tu equipo escriban.
Escribe “man mdimport
” y presiona Enter en tu teclado en Terminal para obtener el uso completo de mdimport
.
mdls
mdls
es una utilidad que enumera los atributos de metadatos de un solo archivo en el disco utilizando una clave de metadatos predefinida (o “etiqueta”). Apple define la mayoría de las claves de metadatos utilizadas por Spotlight, pero si escribes tu propio .mdimporter
, puedes definir tus propias claves.
Escribe “man mdls
” y presiona Enter en tu teclado en Terminal para obtener el uso de mdls
.
mdfind
mdfind
es una utilidad flexible y potente que te permite encontrar todos los objetos en una jerarquía de sistemas de archivos que coinciden con los metadatos específicos que especifiques, buscando en la(s) tienda(s) de Spotlight en un volumen en particular.
Utilizando varias opciones para mdfind
, puedes iniciar una búsqueda en un lugar específico en una jerarquía de sistema de archivos, especificar qué elementos de metadatos deben coincidir y especificar nombres de archivo específicos para que coincidan.
mdfind
solo devolverá resultados de archivos que coincidan con los criterios de búsqueda que hayas especificado.
Puedes cancelar una búsqueda de mdfind
mientras se está ejecutando escribiendo Control-C en tu teclado.
También existe una bandera -interpret
para mdfind
que te permite especificar una cadena de lenguaje natural como si la hubieras escrito en Spotlight en Finder. mdfind
interpretará la cadena y ajustará su búsqueda en consecuencia.
También puedes combinar mdfind
con otras utilidades estándar de UNIX, como grep
, para realizar búsquedas complejas y enviar los resultados a la salida estándar, incluido un archivo.
Escribe “man mdfind
” y presiona Enter en tu teclado en Terminal para obtener el uso completo de mdfind
.
Claves de atributo
Spotlight y los metadatos del archivo de Core Services funcionan almacenando cada elemento de metadatos en una tienda utilizando una clave o cadena única. Cada clave indica a Spotlight y a la API qué elemento de metadatos le interesa.
Apple define las claves de metadatos como cadenas de Core Foundation del tipo CFString
, un tipo de cadena común de Core Foundation que se utiliza en casi todos los programas relacionados con Apple. Usando la API de Core Foundation, también puedes manipular CFStrings directamente desde el código.
Apple lista la mayoría de las claves de atributos de metadatos en la documentación de File Metadata API de la que hablamos antes. La mayoría de las claves comienzan con el prefijo kMD
(abreviatura de ‘constant’ – ‘metaData’).
Para usar la API de metadatos de archivos, generalmente utiliza una de sus funciones o una de las de Spotlight y especifica una clave de metadatos para indicar qué información de metadatos desea utilizar. Las claves se pueden utilizar tanto al recuperar como al escribir metadatos.
Por ejemplo, en Swift, la clave de la API de metadatos para el elemento de metadatos “fecha añadida” para cualquier objeto del sistema de archivos dado se define como:
let kMDItemDateAdded: CFString!
O en el Objective C:
const CFStringRef kMDItemDateAdded;
(En Objective-C CFStringRef
es el oscuro Core Foundation para una CFString).
Si eres un desarrollador de Apple y usas la API de metadatos de archivos, te encontrarás usando las claves de metadatos a menudo.
AVMetadataItem
Para los archivos multimedia de audio/vídeo, Apple proporciona una API adicional en el marco de AVFoundation.
Esto se debe a varias razones, como la forma en que los metadatos de los medios generalmente tienen que cargarse de forma asíncrona en tiempo de ejecución para evitar la latencia durante la reproducción de medios, mientras que algunos metadatos son requeridos por los estándares de medios de la industria. Algunas leyes en varias regiones también requieren que los metadatos del propietario y el autor se incrusten en los archivos multimedia de ciertas maneras.
El tipo de datos de elemento de metadatos central de Apple en AVFoundation se llama AVMetadataItem
. AVFoundation proporciona varias API para acceder y escribir un AVMetadataItem
.
También hay un conjunto correspondiente de atributos AVMetadataItem
(claves) usados para acceder un AVMetadataItem
.
Cada activo multimedia de AVFoundation está definido por un tipo de datos de AVAsset
.
Las pistas dentro de cada activo son definidas por Apple como un AVAssetTrack
.
Cada AVAsset
o pista puede tener uno o más AVMetadataItem
incluidos.
Puedes crear objetos AVAsset
en código usando diversas APIs de AVFoundation que pueden cargarse desde el archivo (por ejemplo, un archivo QuickTime o .mp3), o incluso desde un stream en directo de Apple HLS.
También debes consultar la API de carga de medios asíncronos implementada como el protocolo AVAsynchronousKeyValueLoading
en AVFoundation.
Una vez tengas un objeto AVAsset
o AVAssetTrack
en código, puedes manipular sus atributos de metadatos y los reescribirá en la fuente.
Para obtener información completa sobre los activos y pistas de AVFoundation, consulta la página para desarrolladores Documentation/AVFoundation/Media assets.
Para obtener una lista completa de todas las claves de metadatos de AVFoundation, consulta la página para desarrolladores Documentation/AVFoundation/Media assets/AVMetadataKey.
AVFoundation es un marco complejo y hay cientos de claves para su API.
Los metadatos de Spotlight parecen un tema complejo al principio, pero su API es bastante fácil de usar. Las utilidades de CLI también son simples y fáciles de entender después de un poco de práctica.
Con estas herramientas, puedes personalizar y buscar los datos de Spotlight en todos los volúmenes indexados sin demasiado esfuerzo.