Извините за смутное название, но не совсем уверен, как его обобщить.
Факты таковы:
- У меня есть игра, которая была одобрена Apple и включенаApp Store.
- Это универсальное приложение.Он использует текстуры, разработанные для 320x480 на небольших экранах, и использует более крупные текстуры (примерно в четыре раза больше) на экранах Retina и iPad.
- При разработке я иногда видел предупреждения о нехватке памяти в журнале консоли,но после прочтения о них мне показалось, что они часто были несколько ложными / неважными, и в любом случае у меня не было сбоев и моих тестеров на различных устройствах (iPod Touch 2-го поколения, iPod Touch 4-го поколения, iPhone3, iPhone4, iPad1, iPad2) не видели сбоев.
- Когда я начал распространять приложение среди более широкого набора бета-тестеров через TestFlightApp, я получил сообщения о том, что некоторые люди видят сбои во время загрузки приложения или очень рано после того, как пользовательвыбрал уровень из главного меню, и приложение загружало текстуры уровней.Мы обнаружили, что если эти пользователи просто перезагружают свои устройства, у них больше не будет проблем.Так как это было впервые, когда мы видели подобные проблемы, мы связали это с чем-то, что делал TestFlightApp, каким-то забавным состоянием, когда он оставлял устройство после установки (мы говорили об этом с TestFlightApp, и они никогда не слышали о такой вещи).).
- Как уже говорилось, Apple одобрила приложение и оно есть в App Store.Вскоре после того, как он вышел в эфир, мы получили сообщения от некоторых пользователей iPad1 о том, что он зависал при загрузке приложения или вскоре после этого, то же самое, что мы видели у некоторых пользователей TestFlightApp.И, как и в случае с пользователями TestFlightApp, эти клиенты сообщили, что перезапуск часто решает проблему.Но это было не так приятно, потому что проблема имела тенденцию появляться снова.Одна из этих пользователей прислала мне несколько файлов журнала LowMemory ..., которые она сняла со своего компьютера после синхронизации своего iPad.Было около 10 таких файлов, и ни один из них не перечислил мою программу в списке процессов.Вместо этого он показывал другие программы, помеченные как (активные) или (сброшенные), и «Самым большим процессом» может быть что угодно, от MobileSafari до Kobo, но опять же мое собственное приложение никогда не было в списке.Итак, я не понял этого, но суть в том, что, по крайней мере, для этого пользователя что-то толкает память за некоторый предел, когда мое приложение не работает нормально.
- У меня с тех порвернулся и поговорил с одним из бета-тестеров TestFlightApp, и оказалось, что он действительно иногда снова дает сбой приложения, так что это был не просто остаток от TestFlightApp.Однако, для него сбой гораздо реже, чем для этого клиента.
- У других тестеров iPad1 игры никогда не было проблем.Они сообщают, что играют в игру по несколько часов каждый день, используют свой iPad с несколькими другими приложениями между ними и редко выключают его.Точно так же у меня никогда не было сбоев с моим iPod Touch 4-го поколения, который похож на iPad1, в котором он имеет экран высокого разрешения, но только 256 КБ ОЗУ.
Итак, очень загадочномне, что может быть таким особенным в iPad этих конкретных пользователей.Таинственно, что игра работает после перезапуска устройства, но затем, после запуска некоторых приложений, у игры (иногда) возникают проблемы с загрузкой.Насколько я понимаю, если моей игре требуется память, ОС автоматически закрывает все запущенные приложения по мере необходимости, чтобы эффективно восстановить объем памяти, доступный на только что перезапущенном устройстве.Мой единственный вывод заключается в том, что после запуска некоторых приложений устройство остается в состоянии, когда доступно меньше памяти, поскольку ОС не может восстановить определенные блоки памяти или закрыть определенные приложения.
К сожалению, у меня нет ни одного из этих "плохо себя работающих" устройств для разработки.Все, что я могу сделать, это попытаться уменьшить потребности моего приложения в памяти на определенную величину и отправить его одному из этих пользователей, у которого возникли проблемы, и посмотреть, исправит ли это что-то.Однако это кажется потенциально неэффективным подходом.
У кого-нибудь есть идея получше?