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

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

mdfind "com_apple_xcode_dsym_uuids == *"

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

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


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

  • Проверить права доступа к файлам и папкам в ~/Library/Developer/Xcode/Archives (все в порядке, 755 для папок, 644 для файлов)
  • Выполнить mdimport ~/Library/Developer/Xcode/Archives (не действует)
  • В «Системные настройки> Spotlight> Конфиденциальность» сначала добавьте, а затем удалите папку ~/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 дней, но, по-видимому, Spotlight сохраняет свой индекс при обновлении ОС. Я подумал, что было бы интересно посмотреть, как Spotlight ведет себя при создании новых файлов, поэтому я сделал следующее:

  1. Запустите Xcode на MB2, создайте новый архив и запустите mdfind. Это находит промежуточный пакет .dSYM внутри папки сборки DerivedData.
  2. Удалите промежуточный пакет .dSYM и снова запустите mdfind. На этот раз никаких результатов, т.е. пакет .dSYM внутри папки Archives НЕ найден!
  3. Сделайте копию пакета .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 (ранее установленный файл .

person herzbube    schedule 21.12.2013    source источник


Ответы (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 теперь правильно индексируются. Причина, по которой мне нужно было перезагрузиться, вероятно, заключается в следующем:

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

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

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


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

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

person herzbube    schedule 21.12.2013
comment
Спасибо. Я так долго искал, даже зашел на вторую страницу результатов Google ;) - person teriiehina; 21.08.2014
comment
Уважаемый @herzbube. . . я не мог получить ваше окончательное решение. ты объяснишь это. как настроить xcode. - person Zeebok; 19.11.2015
comment
@Zeebok Отредактировал мой ответ для Xcode 6 (последняя версия Xcode, которую я установил). Я надеюсь, что в более новых версиях Xcode настройка такая же, если это не так, вы должны выяснить это самостоятельно. - person herzbube; 20.11.2015