Как я могу сказать Spotlight проиндексировать мои пакеты.dSYM?
Сегодня я впервые попытался - и не смог - символизировать журнал сбоев на недавно купленном MacBook (назовем этот аппарат MB1). MB1 поставляется с предустановленной Mac OS X 10.9. Я отследил проблему неуспешной символики, чтобы Spotlight не проиндексировал ни одну из моих .dSYM
связки (без индекса Spotlight, Apple's 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 для файлов) - Бежать
mdimport ~/Library/Developer/Xcode/Archives
(не имеет никакого эффекта) - В "Системные настройки> Spotlight > Privacy" сначала добавьте, а затем удалите
~/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 ведет себя при создании новых файлов, поэтому я сделал следующее:
- Запустите 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
теперь правильно проиндексированы. Причина, почему мне нужно было перезагрузить, вероятно, заключается в следующем:
- Я использую привилегированного пользователя-администратора (A) для установки программного обеспечения, но я использую другого непривилегированного пользователя (U) для нормальной работы, например, разработки с использованием Xcode.
- Я вошел в систему с пользователем U в то время, когда я установил XCode с пользователем A
- С тех пор я ни разу не перезагружался и не делал никаких входов в систему (я предпочитаю отправлять мою машину спать ночью, а не выключать ее). Предположительно, список активных импортеров Spotlight обновляется (возможно, службами запуска) только при выходе из системы / выходе или после перезагрузки.
Во всяком случае, во время устранения неполадок я обнаружил, что вы можете проверить список активных импортеров Spotlight, запустив mdimport -L
(обратите внимание, что разные пользователи могут иметь разных импортеров Spotlight одновременно). Неудивительно, что после перезагрузки uuid.mdimporter
сейчас в списке, пока до перезагрузки его не было.
Вот полезный документ Apple, который я нашел после некоторого поиска в Google: поиск и устранение неисправностей для импортеров Spotlight.
ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ
Настройте Xcode так, чтобы папка архива находилась вне ~/Library
, В Xcode 6 вы можете сделать это в диалоге настроек на вкладке "Местоположения".