Search Unity

Оптимизация размера приложений для iOS с помощью сокращения ресурсов

, Декабрь 28, 2015

Обновление 9.0 для iOS и tvOS добавило новую возможность: ограничение размеров (slicing) приложений. Ее цель — уменьшение размера приложений путем создания нескольких версий пакетов ресурсов, специально приспособленных для различных устройств, и расширения функциональности AppStore для загрузки подходящих для каждого устройства версий.

Это позволяет разработчикам приложений для iOS вместить больше ресурсов в изначально загружаемый пакет ресурсов, не рискуя превысить лимит на беспроводную загрузку (100 МБ). Для этой цели также может использоваться другая возможность, о которой мы говорили ранее — загрузка ресурсов по требованию. Однако для этого в приложение должна быть включена функциональность динамической подгрузки ресурсов, что увеличивает его сложность и не всегда удобно.

Можно выделить две области применения новой возможности: оптимизация исполняемых файлов и оптимизация ресурсов. В первом случае из пакета, предназначенного для загрузки из AppStore, удаляется ненужный исполняемый код. AppStore автоматически выполняет такую операцию для всех приложений, предназначенных для версии iOS (tvOS) 9.0 и выше. Во втором случае из пакета удаляются ненужные ресурсы. Этот вариант требует дополнительных усилий со стороны разработчика, и его мы рассмотрим подробнее.

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

Удобнее всего выполнять оптимизацию ресурсов, когда используются пакеты ресурсов. С их помощью можно легко адаптировать топологию ресурсов приложения. Поддержка пакетов встроена в Unity, и они не оказывают влияния на производительность. Кроме того, они используются для поддержки ресурсов, загружаемых по требованию, поэтому если приложение уже использует одну из двух функций — загрузка ресурсов по требованию или оптимизация — то добавить вторую будет несложно.

Разработчик должен указать, каким устройствам соответствуют все варианты каждого ресурса, включенного в процесс оптимизации приложения, и загрузить ресурсы при запуске приложения. Если приложение разрабатывается для iOS без использования Unity, в каталог ресурсов помещаются специальные объекты — списки данных (или списки изображений), устанавливаются варианты для различных устройств, и проводится распределение ресурсов по «заглушкам» в интерфейсе. При использовании Unity необходимо создать все используемые варианты пакета ресурсов, предназначенные для различных устройств, и зарегистрировать их в коде с помощью интерфейса обратной связи UnityEditor.iOS.BuildPipeline.collectResources. Уточненные требования к устройству указываются в интерфейсе настроек игрока. Наконец, разработчик должен загрузить пакет ресурсов с помощью интерфейса AssetBundle.CreateFromFile во время запуска приложения.

Ниже приведены два демонстрационных фрагмента кода.

Скрипт для регистрации ресурсов, используемых при облегчении приложения:

Мы создали демонстрационный проект менеджера пакетов ресурсов и выложили его на BitBucket. Он поможет разобраться в том, как работать с пакетами ресурсов и оптимизировать приложения. На заглавной странице доступно подробное руководство по использованию и редактированию проекта.

image00

Комментарии закрыты.

  1. Ok never mind.

    I had to include Using UnityEditor.

  2. I can’t seem to find InitializeOnLoadMethod.

    Which version of Unity has this method?

    In 5.3.2p3 I see RuntimeInitializeOnLoadMethodAttribute which isn’t the same.

    Could you point me in the right direction?

    Thanks.

    1. ok never mind. I had to include Using UnityEditor.

  3. this is great articale i would appricate the effort of the author he has done a great job
    Barbie Cartoon

  4. hello there now i’m generate this amazing site concerning which attention to be able to Audio iles, gastronomie, insular motion picture, Insular publication, in order to get involved with this function would certainly can you check out festival

  5. Soooo, it’s 12 days into 2016 and you guys don’t want to blog about anything? really? nothing? not even two lines to wish us a happy new year?

    Anyways, have a happy new year to you all. Looking forward to all the stuff on the road map for 2016 to come into fruition!

    Cheers!

  6. downloading is very «un-users friendly».

  7. i’m sorry if it off with this post, but i don’t know where to put this.

    the RSS feed in all categories inside this blog seems no longer to be updated. it was make me thought that this blogs not been written for three months, until i realize that the RSS got stuck in «get even more from ….», i’m still use this feature so please fix it.

  8. the bitbucket link is wrong. it’s now link to a assetbundle article.

    1. Thanks for catching that! It’s fixed now.