Неспособность Xcode 4 символизировать Crash Log
Я только что обновил свой Xcode до 4.0.1. Теперь у меня есть проблема с символикой журналов сбоев, полученных от моего тестера и даже от моего телефона тоже.
Когда я строю дистрибутив AdHoc, я использую схему "Архив", затем я создаю файл *.ipa, подпевая его, используя свои учетные данные разработчика.
Это проблема? И я не могу найти файлы dSym для этих сборок AdHoc.
6 ответов
В дополнение к ответу coob я обнаружил, что добавление этих каталогов в список игнорирования Spotlight (Системные настройки → Spotlight → Privacy) помогает:
~/Library/Developer/Xcode/DerivedData/
(Xcode 4 сборки артефактов)~/Library/Application Support/iPhone Simulator/
(файловая система для iPhone Simulator)
Как это:
(См. Этот пост в блоге для дополнительной информации.)
Обновление: из комментария joerick: "Это работает, но это также означало, что Instruments.app не мог найти символы отладки, поэтому мне пришлось удалить DerivedData из списка конфиденциальности, чтобы выполнить некоторое профилирование". - имейте это в виду, если вы используете инструменты.
Для меня ни строка 323 edit, ни исключения Spotlight не исправили это. Поэтому я выследил проблемы в symbolicatecrash
и опубликовал пропатченную версию на github. Просто замените /usr/local/bin/symbolicatecrash, и ваши отчеты о сбоях iOS снова начнут символизировать.
Этот патч может не работать для приложений Mac, так как он делает предположения о структуре каталога.xcarchive, который, похоже, не подходит для приложений для настольных компьютеров.
Изменить: у вас все еще могут быть проблемы, если Spotlight не проиндексировал ваши архивы. Вы можете получить принудительный индекс, запустив в терминале следующее:
mdimport ~/Library/Developer/Xcode/Archives/
Подробнее о поиске неисправностей здесь.
Сценарий символизации имеет проблему с поиском правильного двоичного файла /dSYM. Для этого он использует Spotlight и часто взлетает. Вот несколько вещей, которые можно попробовать:
Убедитесь, что в вашем.app нет места.
Это может быть нахождение версии вашего приложения, установленного на симуляторе (задом наперед, но иногда он делает это для меня). Сбросить ваш симулятор.
Очистите каталог сборки.
У меня была такая же проблема сегодня. Из моих исследований в Интернете, есть проблема с библиотеками armv6, которая приводит к сбою процесса обработки символов. Я нашел ответ на форумах разработчиков здесь.
Для тех, у кого нет доступа, вам нужно создать копию symbolicatecrash
сценарий от /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/
, Отредактируйте файл и замените "die" в строке 323 на "print" (вот почему он не работает, здесь происходит сбой сценария).
Тогда беги symbolicatecrash
против вашего журнала аварий. Вы увидите ошибку из строки 323, но тогда она будет символизировать все ваши строки и переменные. Он по-прежнему не работает для системных библиотек, но дает достаточно информации для исправления собственных ошибок.
Надеюсь это поможет.
Я думаю, что у меня была эта проблема, или что-то подобное. Xcode 4.0 не отображал символы для сбоя, который я получил от тестера. Я решил исправить это, открыв созданный мною xarchive и скопировав из него файл dsym (щелкните правой кнопкой мыши и "просмотрите содержимое пакета"), чтобы поместить его рядом с ним в папку архива. Я не могу гарантировать, что это было решением - в то время я пробовал ряд других решений, но я знаю, что у меня есть символы сейчас, а раньше их не было. Стоит попробовать?
Чтобы найти файл dSYM на основе его идентификатора в журнале сбоев, который выглядит следующим образом:
Двоичные изображения: 0x100000000 - 0x100021ff7 + com.developer.foobar 1.1 (2)
/Applications/FooBar.app/Contents/MacOS/FooBar
ты можешь сделать:
mdfind com_apple_xcode_dsym_uuids == D1B7F956-7D79-3D4D-BA53-E9EBB368A9F8
Для приложений OSX, созданных с помощью "DWARF с dSYM", вам на самом деле не нужен файл dSYM, и вы можете использовать ручной подход по адресу https://developer.apple.com/library/content/technotes/tn2151/_index.html
Дополнительно, чтобы проверить UID двоичного файла, вы можете сделать что-то вроде
dwarfdump --uuid /Users/valexa/Desktop/GPSnote.app/GPSnote
UUID: 6194D2B0-4E61-3834-AD15-C279EB1848XX (armv7)
UUID: D1B7F956-7D79-3D4D-BA53-E9EBB368A9F8 (armv7s)