Использование результатов поиска Spotlight для открытия приложения в определенном состоянии - PullRequest
3 голосов
/ 25 октября 2010

У меня есть приложение, которое будет воспроизводить серию радиостанций, выбирая их из выпадающего меню. В идеале я хотел бы добавить некоторый код, чтобы в центре внимания находился поиск, который вернул бы любой из элементов в раскрывающемся меню и открыл приложение, как если бы вы делали это из самого приложения.

Документация по центрам внимания не дает подсказок о том, возможно ли это, кроме некоторых старых сообщений, которые я нашел о создании скрытых файлов для индексации.

Какие-нибудь подсказки?

1 Ответ

3 голосов
/ 25 октября 2010

Как ваши отдельные станции хранятся / представляются внутри? Центр внимания - один-один-один-результат поиска. Приложения с одной библиотечной БД или аналогичной ей традиционно экспортируют эти элементы в подпапку папки ~ / Library / Caches. Вы бы написали один файл-заглушку для каждого элемента, который вы хотите найти. Этот «заглушенный» файл будет иметь свое собственное отдельное расширение / тип документа (он по-прежнему доступен для вашего приложения), и именно на этом вы будете основывать свой импортер Spotlight.

Прецедент: AddressBook.app.

Например, в одном из моих приложений есть центральная (не основанная на документе) база данных библиотеки стенограмм. Я хотел, чтобы пользователи могли искать отдельные транскрипты и отображать их как отдельные результаты в Spotlight. Единственным выходом из этого было то, что мое приложение создавало и поддерживало одноразовую коллекцию файлов ".transcriptstub", в которых содержалось текстовое представление с возможностью поиска.

Я говорю «одноразовые», потому что вещи в ../Cache предназначены для легкого воссоздания вашим приложением, если они отсутствуют. Я обновляю их при необходимости при запуске приложения (как отдельную операцию NSO, чтобы предотвратить длительные запуски), и каждый отдельный, как он изменяется во время выполнения.

Когда приложению открывают одну из этих заглушек, оно использует некоторый идентификатор в файле (возможно, UUID?) И ищет его в базе данных. Если есть совпадение, он выбирает этот элемент в пользовательском интерфейсе.

...