2013-03-20 2 views
3

У меня есть один пользователь (с iPhone 5), сообщающий, что мое приложение падает при запуске примерно через 15 секунд после того, как экран становится черным (заставка закрашена черным). Пользователь загрузил сборку TestFlight, где я включил контрольные точки в делегат приложения, но у меня нет доказательств того, что эти контрольно-пропускные пункты пересекаются, и я никогда не получаю отчет о сбоях.Ошибка приложения, но нет отчета о сбоях TestFlight

Я изменил точку входа на раскадровке на пустой контроллер, и теперь я вижу, что контрольные точки пересекаются. Мне пришло в голову, что Watchdog приостанавливает действие приложения из-за слишком длительного загрузки ресурсов раскадровки, но все изображения строятся в режиме реального времени по мере необходимости, за исключением четырех маленьких значков на вкладке. Существует несколько аудиофайлов, но они загружаются по требованию. Я не могу думать о каких-либо других ресурсах, которые могут вызвать задержку. Никто больше не сообщил об этой проблеме, и я в тупике.

Любое понимание было оценено, особенно в отношении того, почему я не вижу отчета о сбоях или контрольных точек из TestFlight.

+0

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

ответ

7

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

Насколько я понимаю ваше описание, вы создаете ресурсы во время загрузки? И, возможно, это делается на основной теме? Вы должны попытаться отключить ресурсный голодный код в фоновый поток вместо того, чтобы делать это в основном потоке, где более старые/медленные устройства могут занимать гораздо больше времени, чем ожидалось. Пользовательский интерфейс должен всегда быть отзывчивым, основной поток никогда не должен выполняться в задачах, которые могут быть получены почти до одной секунды обработки.

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

Но без подробностей невозможно сказать, что именно происходит.

В целом: Если приложение было убито системой iOS, например. благодаря сторожевому таймеру из-за превышения времени запуска или из-за выделения слишком большого количества памяти, только iOS может генерировать отчет о сбое.

Проблема в том, что приложение убивается, и в этом случае процесс уничтожается. И это не может быть обнаружено никаким кодом, запущенным внутри этого процесса. И так как отчеты о сбоях в iOS, отличные от реестров аварийных сообщений на базе iOS, выполняются внутри одного и того же процесса приложения, который убит, они не могут сообщать или записывать отчет о сбоях.

Следующая страница дает некоторые подробности об этом: http://support.hockeyapp.net/kb/how-tos-faq/which-types-of-crashes-can-be-collected-on-ios-and-os-x (. Хотя с контекстом к PLCrashReporter, который не используется Testflight Но общие заявления идентичны)

+0

Спасибо, что имеет смысл с неспособностью TestFlight отправлять данные при уничтожении процесса. Приложение рисует некоторые простые формы, используя Core Graphics и UIKit при запуске. Я сосредоточу свои усилия там. Я обновлю вопрос, чтобы указать, что данное устройство - это iPhone 5. –

+1

iPhone 5 должен быть самым быстрым. Поэтому я бы порекомендовал спросить пользователя, может ли он предоставить отчет о сбое от фактического устройства, которое генерирует iOS. Либо синхронизировав устройство с Mac/ПК, либо скопировав его в разделе настроек диагностики. Есть много описаний о том, как это сделать. Тогда вы увидите реальную причину убийства. – Kerni

+0

Спасибо за это. У пользователя нет синхронизации с машиной, но я попрошу его вставить отчет о сбое в электронное письмо. Я не знал, что это возможно. Очень признателен. –

Смежные вопросы