Есть ли способ получить доступ к этому атрибуту с помощью NSMetadataItems, возвращаемых Spotlight? Если нет, есть ли другой способ получить доступ к текстовому представлению файла?
Одним словом: нет. Прочитайте документы по этому атрибуту:
Содержит текстовое представление содержимого документа. Данные в нескольких полях должны объединяться с использованием символа пробела в качестве разделителя. Импортер Spotlight приложения предоставляет содержимое этого атрибута.
Приложения могут создавать запросы с использованием этого атрибута, но не могут напрямую прочитать значение этого атрибута . [Акцент мой.]
Информация о текстовом содержимом попадает в указатель Spotlight, так что, как вы заметили, вы можете искать по нему. Но вы не можете получить это для себя каким-либо образом. Он не существует ни в какой общедоступной форме для программиста.
(Просто в качестве примера, существующая команда mdls
делает в основном то, что делает ваш код - вы можете избавить себя от проблем, запустив mdls
в Process. Хорошо, если вы дадите команду mdls
в Терминал, вы не увидите kMDItemTextContent
в списке атрибутов, даже если содержимое этого файла проиндексировано.)
Чтобы понять, почему это так, подумайте о конфиденциальности. Если бы вы могли прочитать текстовое представление каждого файла на компьютере пользователя только потому, что у вас есть доступ к Spotlight, вы бы знали все данные, которые есть на компьютере пользователя. Если вы не какой-то злой хакер, вы не должны этого хотеть. Чтобы узнать, что находится в файле, откройте файл - если можете.
Так для чего же этот атрибут? Это означает, что вы можете предоставить текст - Spotlight в типе файла, который принадлежит вам, с помощью пользовательского импортера Spotlight.