paint-brush
Имеет ли значение размер, если у вас iPhone 15?к@marcushaldd
651 чтения
651 чтения

Имеет ли значение размер, если у вас iPhone 15?

к Daria Leonova7m2023/11/10
Read on Terminal Reader

Слишком долго; Читать

Есть еще несколько важных причин, по которым нам все равно следует следить за размером нашего приложения: - Ограничения App Store; - Загрузка скорости запуска; - Влияние на время автономной работы устройства; И есть несколько способов уменьшить размер приложения: - форматы изображений HEIC и SVG; - Каталоги активов; - Динамическое связывание; - Фильтрация лишних файлов;
featured image - Имеет ли значение размер, если у вас iPhone 15?
Daria Leonova HackerNoon profile picture
0-item

Каждый год Apple выпускает новый iPhone, постепенно увеличивая объём оперативной и основной памяти, увеличивая мощность чипа. Сегодня на iPhone 15 уже можно запускать консольные игры типа «Обитель зла 4». И может возникнуть логичный вопрос – стоит ли оптимизировать размер своего приложения или можно не тратить на него больше времени?


Короче говоря, оптимизировать размер все же стоит. В этой статье я собрал причины, почему это важно, и предложил некоторые полезные методы оптимизации.

Проблемы и определения

Итак, начнем с самого банального ответа на вопрос «Почему размер имеет значение?» - Ограничения App Store. App Store Connect просто не позволит вам загрузить файл, размер которого превышает указанный предел.


Для приложений iOS и tvOS убедитесь, что ваше приложение не превышает максимальные размеры файлов в поддерживаемых операционных системах. Общий размер вашего приложения в несжатом виде не должен превышать 4 ГБ.


Приложения Apple Watch должны иметь размер менее 75 МБ. Кроме того, каждый исполняемый файл Mach-O — например, имя_приложения.приложение/имя_приложения — не должен превышать эти максимальные размеры файла. Связь


Конкретные файлы, на которые они ссылаются, могут немного сбить с толку. Чтобы лучше это понять, давайте рассмотрим процесс отправки вашего приложения в App Store Connect.


.xcarchive

Product -> Archive

Первым шагом является создание архива. В этом архиве хранится коллекция артефактов сборки и связанная информация для приложений iOS, macOS, watchOS или tvOS.



.xcarchive right click -> Show Package Contents

У нас есть возможность посмотреть, что именно и в каком виде включено в архив.




Среди основных файлов вы найдете:


  • Папка «Продукты» с вашим приложением;

  • dSYMs, (сокращение от «символы отладки»), специальные файлы, генерируемые Xcode с информацией, необходимой для отладки, короче говоря, журналы сбоев;

  • Инфо.plist;


Кстати, файл приложения также можно открыть с помощью «Показать содержимое пакета», и среди файлов вы найдете исполняемый файл и CodeResources, результат подписания кода; он отслеживает цифровые подписи различных ресурсов приложения (изображений и т. д.).


.ipa

Возвращаясь обратно в Xcode, после создания архива вам доступна кнопка Distribute App . На этом этапе .xcarchive превращается в .ipa .


Файл .ipa можно рассматривать как сжатый пакет, включающий папку «Полезная нагрузка». Внутри этой папки «Полезная нагрузка» находится основной пакет «YourApp.app». В пакете «.app» вы найдете все важные компоненты вашего приложения, включая такие ресурсы, как


  • изображений;
  • файлы plist;
  • сжатые перьевые файлы;
  • исполняемый файл ;


Кроме того, в нем размещены ресурсы для подписи кода, обеспечивающие целостность и безопасность приложения.


Чтобы просмотреть содержимое вашего .ipa , нажмите Export после распространения», преобразуйте тип из .ipa в .zip и просто извлеките его.


Таким образом, файл .ipa — это упакованное приложение, которое конечные пользователи устанавливают на свои устройства iOS, а файл .xcarchive — это архив, ориентированный на разработчиков, который содержит различные ресурсы и информацию о сборке приложения.


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


Таким образом, ограничения AppStore можно проиллюстрировать следующим образом.

Версия ОС

IPA-размер

.ipa -> Полезная нагрузка -> Приложение -> размер exe

iOS 9.0 и более поздние версииTVOS 9.0 и более поздние версии

4ГБ

500 МБ

iOS 7.X – iOS 8.X

2 ГБ

60 МБ


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


Следующий повод задуматься о размере вашего приложения — это… снова AppStore, но сейчас мы говорим не о системных ограничениях, а о скорости загрузки . Здесь все очевидно – чем меньше размер, тем выше ставка.


Кроме того, существует ограничение в 200 МБ, при достижении которого пользователям необходимо подключиться к сети Wi-Fi для установки приложения. Задержка может отпугнуть пользователей и привести к увеличению количества отказов.


Алгоритмы поиска и обнаружения Apple App Store часто отдают предпочтение небольшим приложениям, поскольку пользователям их легче загрузить и опробовать. Меньшие размеры приложения потенциально могут улучшить видимость вашего приложения в результатах поиска и рекомендациях.


Когда приложение установлено на устройстве, его размер по-прежнему имеет значение. Небольшие приложения запускаются быстрее, обеспечивая лучший пользовательский опыт. Когда приложение оптимизирует объем памяти, это способствует увеличению срока службы батареи, уменьшению занимаемого приложением объема и хорошему состоянию устройства. В результате, чем больше людей довольны iPhone, тем больше у вас потенциальных пользователей.

Решения

Есть несколько простых советов, которые помогут избежать ненужного увеличения размера вашего приложения во время разработки. Первый из них – осознанная работа с изображениями.

Изображений

Во-первых, выберите HEIC вместо JPEG. HEIC предоставляет файлы, которые на 50 процентов меньше по сравнению с JPEG, сохраняя при этом такое же качество изображения. Это приводит к уменьшению места на вашем устройстве. Файлы меньшего размера легче передавать по сети, а также быстрее загружать и сохранять на диск.


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



Во-вторых, попробуйте использовать SVG (формат векторных изображений на основе XML, используемый для отображения двумерной векторной графики) вместо PDF и PNG. В отличие от растровых изображений, векторная графика обычно имеет меньший размер файла, поскольку она характеризуется математическими уравнениями, которые определяют формы и кривые, а не хранят отдельные пиксели.


Изначально нужно было добавить 3 изображения с префиксами (для каждой плотности пикселей). Потом была добавлена поддержка PNG (=векторное изображение заданного размера), но она все равно работала на уровне «вырезать 3 PNG из PDF при сборке проекта».


И только тогда появилась возможность использовать SVG + включить в каталог ассетов галочку «использовать векторную дату», тем самым реально уменьшить размер используемых изображений + добавить возможность бесконечного масштабирования, без потери качества.


В-третьих, максимально используйте возможности Asset Catalogs . Каталоги активов предоставляют простое в использовании хранилище для одного и того же изображения в нескольких разрешениях. Более того, в каталогах все графические ресурсы хранятся в едином оптимизированном формате с метаданными вместо отдельных файлов.


Это позволяет App Store предоставлять только необходимые ресурсы для конкретного устройства. Это приводит к увеличению скорости загрузки, а мы уже знаем, что пользователи не любят ждать.


Каталоги активов

На ресурсе можно установить «по требованию», то есть ресурс будет загружаться на устройство только в случае необходимости, а через некоторое время неиспользования будет удален. Связь


Не забывайте, что у вас есть огромный каталог «бесплатных» изображений — SF Символы . Apple постоянно работает над увеличением персонажей, добавляя возможность настройки цвета и даже анимации.


Итак, с картинками и другими графическими ресурсами вроде все понятно — используем правильные форматы, и добавляем каталог через Активы. Всегда есть возможность не включать в финальную сборку большие ресурсы, а просто загрузить из Интернета, когда это необходимо. Теперь поговорим о коде и использовании библиотек.

Управление фреймворками

Позвольте мне быстро напомнить вам о связывании. Существует два его типа: статический и динамический.


Статический

Динамический

Когда происходит связывание

Время сборки

Время выполнения

Где хранятся зависимости

В конечном исполняемом файле

В отдельных динамических библиотеках

Как распределяются зависимости

Одна и та же копия используется всеми экземплярами приложения.

Каждый экземпляр приложения имеет свою копию.

Как обрабатываются обновления зависимостей

Пересоберите приложение

Обновите динамическую библиотеку


Согласно теме этой статьи, хранение зависимостей особенно важно для нас, и динамическое связывание выглядит нашим любимым.


Динамические библиотеки не связаны статически с клиентскими приложениями; они не становятся частью исполняемого файла. Вместо этого динамические библиотеки можно загружать (и связывать) в приложение либо при запуске приложения, либо во время его работы. Связь


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


Apple также рекомендует создать в вашем приложении модульную базу кода ( SPM ), которая может оказаться удобной при совместном использовании кода с другими целями, например App Clipps.


Swift Package Manager предлагает оптимизированный и собственный способ управления зависимостями в ваших проектах Swift.

Лишние файлы

Один из наиболее эффективных способов уменьшить размер вашего приложения — удалить все ненужные файлы. Этими дополнительными файлами могут быть, например, Read.me или оставшиеся изображения. На самом деле, в самом начале статьи, где мы разобрались, что такое .ipa, мы уже узнали, как найти все файлы, которые попадут в AppStore: .ipa -> .zip -> App -> show package содержание.


Найдите все ресурсы, которые вам не нужны, и смело удаляйте их из своего приложения.


Заключение

Просто чтобы подвести итог. Есть еще несколько важных причин, по которым нам следует следить за размером нашего приложения:

  • ограничения App Store;
  • Скорость загрузки и запуска;
  • Влияние на время автономной работы устройства;


И есть несколько способов уменьшить размер приложения:

  • Форматы HEIC и SVG для изображений;
  • Каталоги активов;
  • Динамическое связывание;
  • Фильтрация лишних файлов;


Так что не забывайте об этом во время рутинной разработки; становитесь умнее с каждым днём 🙃