Spiiin's blog

Бывают либы как либы...

.. а бывают такие, знакомиться с которыми лучше сразу с раздела Troubleshooting.

Геймдизайнер прислал описание интересного бага – игра падает, если сменить дислокацию. То есть, если физически перейти с айфоном с одного места в другое.

Один из программистов вспомнил, что когда он ходил в соседний офис, игра тоже один раз упала. Сначала подумал, что в код закралась какая-то глупая незамеченная ошибка – недавно реализовали много мелких фич в движке. Оказалось – нет, действительно, если играть, положив девайс перед собой, то все будет нормально, а если ходить с ним по офису туда-сюда, то игра рано или поздно падает, не оставляя в логах никакой полезной информации, кроме того, что произошло разыменование нулевого указателя.

При том, что игру уже давно пора было релизить, ситуация вызвала не улыбку, а истерический смех. Где-то полтора дня потратил на изучение поведения приложения с отключением добавленных фич, изучение добавленной игровой логики, исследование поведения игры при запущенных профилирующих инструментах XCode и построение фантастических теорий, как акселерометр может ронять игру. А потом - наткнулся на объяснение феномена в FAQ по интеграции использованной нами библиотеки Crystal, так и озаглавленное - crash when rotating device. Не вдаваясь в детальное описание возникующей ситуации, библиотека сама пытается отслеживать изменение ориентации устройства для того, чтобы рисоваться “лицом” к пользователю.

Падения лечатся простой установкой свойства класса либы CrystalSettingShouldAutorotateWorkaround в @"Yes". Почему не поставить для параметра это значение по дефолту, если разработчикам известно, что может возникнуть такая ошибка – загадка.