Как я могу сообщить 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".