Приложение отлично работает из Xcode, но вылетает при загрузке с главного экрана

Как следует из названия, у меня есть приложение, которое отлично работает при запуске из Xcode, но вылетает при запуске с домашнего экрана.

Выполнение сборки и анализа не показывает утечек памяти или предупреждений. (Хотя я не исключаю, что это ложное чувство безопасности.)

Соответствующий журнал устройств показывает:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0439e000

Что заставляет меня думать, что это проблема выпуска/сохранения, но почему она не отображается в сборке/анализе? И почему он будет работать нормально при запуске из Xcode?

ИЗМЕНИТЬ

Я также должен отметить, что приложение "запускается" нормально в симуляторе как из Xcode, так и при запуске на главном экране. Я говорю "выполняется", потому что при этом используется камера, поэтому в данном случае запуск на симуляторе не так уж и полезен.


ОБНОВЛЕНИЕ

Спасибо всем. Кажется, все ресурсы правильно названы. Я пытаюсь заставить команду atos работать правильно. Я продолжаю получать один и тот же адрес вместо имени файла класса и номера строки.


person Old McStopher    schedule 14.08.2011    source источник
comment
У меня тоже так бывает, с каждым проектом, но только с Симулятора. У вас есть эта проблема на устройстве?   -  person Constantino Tsarouhas    schedule 14.08.2011
comment
Это на самом деле на устройстве. (Вышеприведенный журнал взят с устройства и показан в органайзере, так как вы не можете видеть журналы консоли при запуске приложения без подключения к сети.) К счастью, я использую моментальные снимки после каждого серьезного изменения, поэтому в худшем случае я могу вернуться к время, когда этого не происходило, и медленно продвигать его вперед, пока это не произойдет снова, но я бы предпочел не делать так много циклов настройки/сборки/отладки.   -  person Old McStopher    schedule 14.08.2011
comment
Вы используете бета-версию iOS 5? Я видел, как это происходит с cocos2d-iPhone, планирующим бета-версию SDK.   -  person Moshe    schedule 14.08.2011
comment
На самом деле я сейчас ориентируюсь на 4.3. Спасибо за проверку.   -  person Old McStopher    schedule 14.08.2011
comment
Попробуйте проверить, что вы установили правильное имя пера, потому что устройство чувствительно к регистру, поэтому создайте проблему, когда симулятор не такой.   -  person AJPatel    schedule 14.08.2011
comment
@AJPatel прав, это может быть проблемой с именами файлов, чувствительными к регистру. При работе на симуляторе это не имеет значения, но однажды на устройстве у вас начнутся проблемы (например, перо может не загружаться из-за неправильного имени файла, поэтому, когда вы пытаетесь получить доступ к одному из его представлений, вы, вероятно, получите крушение).   -  person Rog    schedule 14.08.2011
comment
Пробовали ли вы заархивировать приложение, а затем запустить его, чтобы проверить, не возникнут ли проблемы с релизными версиями?   -  person Constantino Tsarouhas    schedule 14.08.2011


Ответы (2)


Иногда (возможно, в вашем случае), когда приложение впервые запускается из XCode, оно создается и запускается как новый экземпляр приложения. Когда вы затем остановите его и попытаетесь запустить с главного экрана, он может запуститься в фоновом режиме. Если вы не управляли памятью должным образом для состояния, когда ваше приложение запускается из фона, анализатор не обнаружит проблемы с памятью. Чтобы узнать, так ли это, попробуйте дважды щелкнуть кнопку «Домой» и выйти из приложения, если оно там появится. Затем снова запустите его с главного экрана. Вы также можете попробовать отладить его с помощью инструментов.

person Cyprian    schedule 14.08.2011
comment
Я действительно подозревал об этом и пытался это сделать, но безуспешно. - person Old McStopher; 14.08.2011

Забудь Атос. Я понял, что журналы устройств перечисляют, в каком потоке, файле и номере строки произошел сбой. Это постоянно присутствует в моем методе CaptureOutput делегата AVCaptureSession.

Я получал значения CVPixelBufferGetBaseAddress порядка 200 раз выше при запуске «отключено». Я также обнаружил, что когда я запускал простой диагностический NSLog в одном из циклов, сбой прекратился (но это предотвратило вызов чего-то в основном потоке, так что это не было постоянным исправлением).

В процессе я сделал твик stab in dark, убрав операцию на базовом адресе. Пытаясь сохранить итерации цикла, я делал что-то подобное, чтобы пропустить каждый второй пиксель в буфере:

byteIndex   += (bytesPerPixel * 2);

Переход к следующему полностью устранил проблему:

byteIndex   += (bytesPerPixel);
person Old McStopher    schedule 15.08.2011