Как я могу сообщить Spotlight о индексах моих пакетов .dSYM?

Сегодня я впервые попытался - и не смог - символизировать журнал сбоев на недавно купленном MacBook (позвоните на этот компьютер MB1). MB1 поставляется с предустановленной ОС Mac OS X 10.9. Я отслеживал проблему неудачной символики до Spotlight, не индексируя ни один из моих пакетов .dSYM (без индекса Spotlight, Apple symbolicatecrash script не удалось найти пакет .dSYM, который соответствует журналу сбоев). Я пришел к выводу, что

mdfind "com_apple_xcode_dsym_uuids == *"

ничего не печатает, хотя у меня есть несколько пакетов .xcarchive в моей папке ~/Library/Developer/Xcode/Archives, и они определенно содержат подкомплекты .dSYM, UUID которых можно печатать с помощью dwarfdump --uuid. У меня также есть пара пакетов .dSYM внутри моей папки сборки проекта (DerivedData), но ни один из них не индексируется.

Таким образом, короткий и простой вопрос: как я могу указать Spotlight для индексирования моих пакетов .dSYM?


Если нет легкого ответа на этот простой вопрос, вот что я уже пробовал на MB1:

  • Проверить разрешения файлов и папок в ~/Library/Developer/Xcode/Archives (все они ОК, 755 для папок, 644 для файлов)
  • Запустить mdimport ~/Library/Developer/Xcode/Archives (не действует)
  • В "Системные настройки > Прожектоp > Конфиденциальность" сначала добавьте, а затем удалите папку ~/Library/Developer/Xcode/Archives (также не имеет эффекта)
  • Проверьте с помощью mdutil -s /, что индексирование включено для тома (это)
  • Стереть и перестроить весь индекс mdutil -E / (занимает, возможно, 10-15 минут, но все равно не имеет эффекта)

Чтобы перейти к более подробным сведениям: у меня есть старший MacBook (позвольте этому компьютеру MB2), который был моей машиной dev, прежде чем я переключился на MB1. На MB2 мне никогда не приходилось сталкиваться с символикой. MB2 установил Mac OS X 10.8, пока я все еще активно развивался на нем, но недавно обновил MB2 до Mac OS X 10.9.

Сегодня запуск mdfind на MB2 по-прежнему дает мне много пакетов .dSYM, как из папки Archives, так и из папки сборки проекта DerivedData. Это все старые файлы из Mac OS X 10,8 дней, но, по-видимому, Spotlight сохраняет свой индекс в обновлениях ОС. Я подумал, что было бы интересно увидеть, как Spotlight ведет себя при создании новых файлов, поэтому я сделал следующее:

  • Запустите Xcode на MB2, создайте новый архив и запустите mdfind. Это находит промежуточный пакет .dSYM внутри папки сборки DerivedData.
  • Удалите промежуточный пакет .dSYM и запустите mdfind снова. На этот раз результатов нет, т.е. Пакет .dSYM внутри папки Archives НЕ найден!
  • Сделайте копию пакета .xcarchive, созданного на шаге 1, и поместите копию в корень домашней директории пользователя. Запустите mdfind. Это находит подкачку .dSYM в скопированном пакете .xcarchive!

В этот момент я перешел к выводу, что, поскольку ~/Library - скрытая папка, это то, что мешает Spotlight индексировать материал внутри него. Это можно легко подтвердить, создав обычный файл внутри ~/Library и выполнив поиск (без хитов), затем перемещая файл за пределами ~/Library и снова и снова (1 удар). К сожалению, эта теория падает на нос по двум причинам:

  • ~/Library уже скрыт в версиях Mac OS X до 10.9, но это не помешало Spotlight индексировать .dSYM файлы
  • Флаг "скрытый" - это не все, что сохраняет Spotlight от индексации в ~/Library: если я покажу папку с chflags nohidden ~/Library, это не делает обычный файл видимым для Spotlight.

Вернуться к MB1: я попытался повторить шаг 3 сверху, т.е. сделать копию пакета .xcarchive в корневом каталоге домашней директории пользователя, а затем запустить mdfind. Удивительно, но на MB1 результат отличается от MB2: mdfind до сих пор не находит пакетов .dSYM!


В этот момент я отказываюсь и надеюсь на вашу помощь. Я пришел к выводу, что Mac OS X 10.9 как-то ответственен за мои проблемы, но для жизни я не могу понять, почему это так. В случае, если это помогает, вот несколько дополнительных деталей конфигурации:

  • MB1: Xcode 5.0.2 и Xcode 4.6 установлены, 5.0.2 по умолчанию (установлено с xcode-select). Также установлен Homebrew. Система представляет собой чистую установку Mac OS X 10.9.
  • MB2: Xcode 4.5, 4.6 и 5.0 установлены, 4.6 по умолчанию. Также установлен MacPorts. Система - это обновление для Mac OS X 10.9 (ранее установлено.

Ответ 1

Заглядывая в пакет приложений Xcode, отображаются следующие импортеры Spotlight:

caradhras:~ --> find /Applications/Xcode-5.0.2.app -name \*.mdimporter
/Applications/Xcode-5.0.2.app/Contents/Applications/Application Loader.app/Contents/Library/Spotlight/MZSpotlight.mdimporter
/Applications/Xcode-5.0.2.app/Contents/Library/Spotlight/uuid.mdimporter

Запуск этой команды

mdimport -g /Applications/Xcode-5.0.2.app/Contents/Library/Spotlight/uuid.mdimporter ~

наконец индексирует пакет .xcarchive, который находится в корневой директории пользователя. Он НЕ индексирует пакеты в ~/Library/Developer/Xcode/Archives, хотя даже когда я явно указываю mdimport на эту папку.

Остается вопрос: почему uuid.mdimporter не запускается автоматически?


ИЗМЕНИТЬ

Решение состояло в том, чтобы перезагрузить компьютер (логин/логин мог быть достаточным), пакеты архивов за пределами ~/Library теперь правильно проиндексированы. Причина, по которой мне нужно перезагружаться, вероятно, такова:

  • Я использую привилегированный пользователь admin (A) для установки программного обеспечения, но я использую другого, не привилегированного пользователя (U) для нормальной работы, например, разработки с Xcode.
  • Я вошел в систему с пользователем U во время установки Xcode с пользователем A
  • С тех пор я никогда не перезагружался и не делал никаких логинов (я предпочитаю отправлять свою машину на ночь, вместо того, чтобы закрывать ее). Предположительно, список активных импортеров Spotlight обновляется (возможно, службами запуска) только при входе/входе в систему или после перезагрузки.

В любом случае, во время поиска неисправностей я обнаружил, что вы можете проверить список активных импортеров Spotlight, запустив mdimport -L (обратите внимание, что разные пользователи могут одновременно использовать разные импортеры Spotlight). Неудивительно, что после перезагрузки uuid.mdimporter теперь отображается, а перед перезагрузкой - нет.

Вот полезный документ Apple, который я нашел после некоторого поиска: "Устранение неполадок импорта" .


ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ

Настройте Xcode так, чтобы папка архива находилась вне ~/Library. В Xcode 6 вы можете сделать это в диалоговом окне "Настройки" на вкладке "Locations".