Комментарии 6
Все ассеты теперь делятся на 2 типа. Иконки – это простые векторные изображения черного цвета, экспортируемые в формате PDF (потому что их размер не фиксирован). Иллюстрации – это растровые изображения в формате PNG (потому что использование PDF привело бы увеличения размера асетов и необходимости конвертировать их в PNG).
Надеюсь этот совет прочтет много людей и они поймут совет правильно. Много раз видел как люди клали pdf, потому что модно, и не включали Preserve Vector Data, что приводило к тому, что xcode при компиляции просто нарезал png из pdf. В итоге на выходе все теже png, но после каждой перекомпиляции новые (а значит с возможными артефактами) + существенно замедлялась компиляция. В итоге выгоды никакой, но замедляется компиляция проекта и получается лишнее слабое место, которое может сбоить само по себе.
И разработчик при этом попсиховывает, мол что за дела, почему так долго компилируется...
Убрать фазу компиляции ассетов из сборки проекта. Компилировать ассеты самостоятельно только в случае их изменения. Положить скомпилированные ассеты в бандл приложения при сборке.
А можно как-то подробнее про эти три пункта? )
Конечно.
Чтобы ассеты не компилировались вместе с проектом, надо удалить их из Project -> Build phases -> Copy bundle resources
Второй пункт раскрыт дальше, там где написано про actool
Когда вы скомпилируете ассеты, появится архив Assets.car, который надо добавить в Project -> Build phases -> Copy bundle resources
В играх изображений на порядок больше. Те проекты, которые сейчас собираю, содержат в районе 50-60 тысяч png-шек. И тоже столкнулись с проблемой места в git, и ограничений в 150/200 Мб на размер приложения. Если кратко по этапам решения:
[git] Обязательно вырезаем мета-информацию. Даже есть прекомитный хук, чтобы в репозиторий в принципе не попадали лишние данные. В некоторых случаях изображение с 25 Мб урезается до 1 Мб. Photoshop любит положить меты с лихвой.
[форматы] Не знаю насколько это актуально для приложений, но у нас для разных платформ сжимается в разные форматы вроде etc2, pvrtc, webp. Это позволяет сильно сокращать размеры.
[сборка] Сборка ассетов выделена в отдельную конфигурацию и собирается отдельно. Плюс обязательно используется кеш (хранится пара: хеш настроек+хеш файла -> итоговый результат). Без кеша сборка около сорока минут, с кешем - пять. Это прямо спасение. В основной сборке в post-build шаге xCode/MS Build запускаем скрипт, который берёт артефакты сборки ассеты и сливает их с другими ресурсами, потом кладёт это уже в нужную папку.
В не игровых приложениях вообще применяются атласы? Они тоже помогают сильно сэкономить и места, и скорость загрузки/отрисовки.
Танцы с ассетами