Исключения с кодом 0x8badf00d
часто возникают, когда вы блокируете основной поток чем-то, что не должно быть блокирующей синхронной операцией. Это приведет к тому, что приложение будет слишком долго не реагировать на системные события. Так, например, в вашем ответе на уведомление pu sh вы можете запускать некоторые синхронные сетевые операции или что-то еще, что заблокирует основной поток. В таком случае потребуется перевести блокирующую синхронную операцию в асинхронную.
То, что вы наблюдаете такое поведение только на старых телефонах, имеет для меня смысл: как и в обычных условиях гонки, все, что задерживает основной поток в вашем основном приложении, большую часть времени может выполняться достаточно быстро на новых телефонах. поэтому вы не замечаете его на них вообще или гораздо реже, чем на старых телефонах. Также может быть, что шаблон со старыми телефонами является скорее совпадением, и вместо этого другие факторы, такие как скорость соединения / мощность сигнала, задерживают операцию блокировки ровно настолько, чтобы заставить iOS убить ваше приложение только в некоторых случаях, потому что основной поток был заблокирован слишком долго.
Имейте в виду, что причина блокировки основного потока иногда может быть довольно сложной и выходить за рамки вашего собственного кода (например, это может быть ошибка в какой-то библиотеке). Я нашел это описание ошибки Firebase , где, по-видимому, ошибка в Firebase iOS SDK вызвала блокировку основного потока.
См. техническое примечание Apple о коде 0x8badf00d
.