Как я могу сказать Spotlight, чтобы проиндексировать мой.связки dSYM?


Сегодня я впервые попытался - и потерпел неудачу-символизировать журнал сбоев на недавно купленном MacBook (назовем эту машину MB1). MB1 поставляется с предустановленным Mac OS X 10.9. Я проследил проблему неудачной символизации вплоть до того, что Spotlight не индексирует ни один из моих пакетов .dSYM (без индекса Spotlight сценарий Apple symbolicatecrash не может найти пакет .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 для файлов)
  • Run mdimport ~/Library/Developer/Xcode/Archives (не имеет эффекта)
  • в "Системные настройки" > "подсветка" > "конфиденциальность" сначала добавить, а потом удалить ~/Library/Developer/Xcode/Archives папку (не имеет никакого эффекта либо)
  • проверьте с помощью mdutil -s /, что индексация включена для Тома (это)
  • стереть и перестроить весь индекс mdutil -E / (занимает, возможно, 10-15 минут, но все еще не имеет эффекта)

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

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

  1. запустите Xcode на MB2, создайте новый архив и запустите mdfind. Это находит промежуточный пакет .dSYM внутри папки сборки DerivedData.
  2. удалите промежуточный пакет .dSYM и снова запустите mdfind. На этот раз результатов нет, т. е. пакет .dSYM внутри папки Archives не найден!
  3. сделайте копию .xcarchive bundle создается на шаге 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). Также установлен доморощенный. Система представляет собой чистую установку Mac OS X 10.9.
  • MB2: установлены Xcode 4.5, 4.6 и 5.0, по умолчанию используется 4.6. Также установлен MacPorts. Система представляет собой установку обновления Mac OS X 10.9 (ранее установленный .
1 11

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 не запускается автоматически?

EDIT

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

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

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


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

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