Уменьшение (оптимизация) размера приложения в unity3d. Часть 1

 

 
Всем известно, что в iTunes App Store существует ограничение на размер приложения, загружаемого по каналу 3G. Это ограничение в 20 мегабайт. И, поскольку размер неоптимизированного приложения unity3d версии 3.4 с пустой сценой составляет 13 мегабайт, это заставляет задуматься. Нам дается всего 7 мегабайт на наши ассеты, код и т.д. Тут уж не особо разгуляешься. Начинаешь задумываться об оптимизации размера приложения unity3d.

Итак, поискав немного, я наткнулся на некоторые официальныерекомендации команды unity3d для уменьшения размера билда под iOS.
Итак, во-первых, нужно оптимизировать размер плеера под iOS. Для этого рекомендуются следующие шаги:
 
  1. Делать билд в режиме release. Для этого в Xcode в меню активной конфигурации билда (Active Build Configuration) нужно переключить из режима Build в режим Release (в Xcode4 это делается при помощи профилей билда).
  2. Изменить режим iOS Stripping Level (доступно только для Pro-версии). Это можно сделать в Player Settings вашего проекта unity3d. Здесь возможны 4 варианта: Disabled, Strip Assemblies, Strip Bytecode (только для iOS), Use micro mscorlib. Рекомендуют устанавливать Use micro mscorlib. Этот уровень использует урезанную библиотеку mscorlib, которая, конечно же, весит меньше полной. Да и ее функционала на большинство проектов хватает. Для Stripping Level существует так называемый блеклист, который задается с помощью особого вида xml. С его помощью можно включать недостающие библиотеки.
  3. Установить оптимизацию вызовов скрипта в Fast but no exceptions.
  4. Не писать код, который использует System.dll или System.Xml.dll. Эти библиотеки несовместимы с micro mscorlib.
  5. Удалить ненужные зависимости кода (подключенные классы в разделе using).
  6. Использовать как можно меньшее количество ассетов.
  7. Использовать .Net 2.0 subset в Api Compatability Level. Это также имеет ряд ограничений по возможности использования библиотек.
  8. Переключить платформу (Target Platform) в armv6 (OpenGL ES1.1)
  9. Не использовать JS массивы.
  10. Избегать использования generic-контейнеров в сочетании со значимыми типами.
Вообще, как верно подмечено в официальной статье об оптимизации, при загрузке приложения в AppStore, его размер по сравнению с размеров zip-файла, в котором оно было загружено, увеличивается. Происходит это потому, что после распаковки вашего закаченного zip-файла, DRM эппла запаковывает все, кроме исполняемого файла. Итого, в среднем, размер может увеличиться до 4 мегабайт. Посчитать точно можно так: размер архива без исполняемого файла + собственный размер исполняемого файла. Поэтому нужно суметь ужать размер файлов как можно сильнее.

Оптимизировать можно и размер самих ассетов и всех файлов, которые использует ваш проект, но об этом в следующий раз.

Спаибо за внимание.