Зменшуємо розмір програми перевірені способи

Одним з важливих аспектів розробки мобільних додатків є оптимізація розміру. Ми всі з особистого досвіду знаємо, що чим менше важить додаток, тим охочіше його скачують, особливо якщо під рукою немає точки доступу Wi-Fi, а швидкість і / або трафік мобільного інтернету залишають бажати кращого. До того ж, не можна забувати і про те, що деякі маркети ставлять обмеження на розмір виробленого додатки. Наприклад, в App Store продукти розміром до 100 МБ доступні для скачування по мобільному інтернету, якщо ж вага додатки перевищує цей поріг, то завантажити його можна тільки через Wi-Fi. На Play Market же додаток, яке витягує більше 100 МБ, не можна завантажити в принципі. У даній статті ми опишемо, до яких методів і хитрощів вдавалися наші розробники нативних додатків на iOS для того, щоб зменшити вагу продукту, і додамо до цього кілька слушних порад, знайдених в мережі.

Зменшуємо розмір програми перевірені способи

Основні способи зменшення розміру програми

графічний контент

Зараз дизайн відіграє ключову роль в будь-якому хорошому додатку. Якщо інтерфейс мінімалістичний або продукт має невеликий набір функцій, то цей етап можна пропустити. Якщо ж проект відрізняється багатим функціоналом або підтримує деяку кількість колірних схем, то тут вже не обійтися без великої кількості зображень з усіма витікаючими наслідками для ваги. Крім того, часто в проекти за замовчуванням додаються набори зображень під різні форм-фактори мобільних пристроїв, як наприклад @ 1x, @ 2x, @ 3x для iOS додатків. Нижче ми наведемо методи, які використовували в своїх додатках, щоб вирішити проблему з великою кількістю графічного контенту. Можливо, якісь з них ви застосовуєте і самі.

Один з найпростіших шляхів - використовувати замість трьох масштабів тільки 3x зображення. Цей спосіб не назвеш оптимальним, так як на пристроях, орієнтованих під 1x і 2x масштаби, такі зображення не завжди будуть виглядати прийнятно. Однак через брак кращого цим прийомом можна непогано зменшити розмір проекту при величезній кількості графіки.

Інший спосіб зав'язаний на додану векторних зображень замість растрових. На iOS ми експортували зображення в формат PDF. Найчастіше такий файл дійсно важить менше, проте це працює не з усіма зображеннями. Заковика тут в тому, що в векторна графіка може некоректно відображати деякі маски зображення, роблячи їх абсолютно чорними або спотворюючи кольору.

Тепер розглянемо приклад з додатком, які мають кілька колірних схем (в народі «скін»). Чим більше колірних схем в додатку, тим сильніше зростає кількість необхідних зображень. Якщо в зображенні використовується більше одного кольору, то доводиться зберігати кілька варіантів на кожен скін. Однак, в разі коли зображення однотонне, його можна зробити шаблонним і вже в самому коді міняти колір відтінку (tint color). На iOS створити подібний шаблон можна двома способами:

  1. виставити Template Image в самому XCode (див. Рис.1);
  2. задати шаблонний режим програмно

Рис.1. Виставлення шаблонного режиму зображення в XCode.

Заміна анімаційних зображень

Додавання анімації - звичайна справа в додатках. Вона привертає увагу користувача до потрібних об'єктів інтерфейсу і робить його менш статичним, забезпечуючи більш приємний досвід взаємодії. Деякі прості анімації, на зразок переміщення об'єкта з однієї частини екрану в іншу або появи знизу нового вікна, можна зробити програмно. Інші ж, більш складні, вимагають відтворення кожного кадру анімації. Коли ми вперше зіткнулися з додаванням анімаційного зображення в ході розробки, то використовували для його реалізації один з поширених способів, а саме анімацію через масив зображень. Виглядало це так:

Перший метод завантажує gif, збережений у вигляді даних, а другий метод бере його прямо із заслання на ресурс, наприклад, з бандла додатки. Сам gif-файл можна зробити з тих же кадрів на якомусь сервісі для створення таких файлів, де задається кількість кадрів в секунду, стиснення і дозвіл. Правильно виставлені параметри дадуть на виході гифку прийнятного ваги. Тепер залишається тільки додати її в бандл і використовувати один з методів зазначених вище.

Однак gif-файл теж займає простір, тому ми намагалися виконати все анімації програмно. В Audio Editor Tool на стартовому екрані у нас програється анімація появи логотипу AUDIO EDITOR побуквенно. Раніше дана анімація була реалізована за допомогою гифки, але через високої розподільчої здатності зображення важила вона забагато. Тому ми вирішили реалізувати її за допомогою CABasicAnimation.

Щоб логотип у нас з'являвся побуквенно, як на ДІФКУ, ми використовували градиентную маску, яка з часом зміщувала початкову позицію прозорості. Для початку ми створили шар градієнта, у якого прозорий колір йде практично з самого початку. Потім поставили градієнт як маску шару тексту логотипу, тим самим роблячи його прозорим. Наступним кроком створили групу анімацій, в яку додали дві анімації. Перша з них зміщувала початкову позицію градієнта, а друга - кінцеву, тим самим роблячи його непрозорим. Відзначимо один нюанс: важливим кроком було вказати у властивості removeOnCompletion від'ємне значення, інакше анімація була б видалена із завершення та шар повернувся б до початкового значення.

конвертація аудіо

У наших програмах часто використовуються аудіофайли формату WAV. В силу своєї структури цей формат займає багато місця в проекті. З цієї причини було вирішено спочатку повністю замінити в бандл всі файли цього формату на більш легкий M4A, а потім, вже в самому додатку, конвертувати їх в WAV. Чому б просто не використовувати M4A? Тому, що при циклічному відтворенні файлу цього формату відбувається затримка при початку кожного циклу, ніби там присутня якась порожнеча. Завершальний крок - зберегти вже конвертований файл в директорії додатку після першого запуску.

В даному методі береться файл з бандла по url і зберігається в директорію по convertedUrl. Зчитування файл завантажується в буфер і вже звідти записується в новий з необхідними налаштуваннями записи. Таким чином, ми використовуємо більш стабільний і великоваговий WAV після першого запуску, але при цьому розмір програми істотно зменшується на етапі завантаження і установки.

Вантаження файлів з сервера

Вантаження файлів з сервера - це те що потрібно для додатків зі значним обсягом контенту. Велика кількість пресетів музики, набори зображень і багато іншого, що сильно збільшує розмір програми, можна завантажити і пізніше. Звичайно, завантаження кожного окремого файлу зажадала б багато часу і трафіку, тому з сервера завантажуються архіви з усім необхідним, а вже в самому додатку вони розпаковуються і зберігаються в директорії додатку. Для розпакування використовується бібліотека SSZipArchive (репозиторій бібліотеки ви знайдете за посиланням). Ця бібліотека здатна як упаковувати файли в архів, так і розпаковувати архіви. Але нас цікавить тільки один метод з основного класу бібліотеки:

Даний метод розпаковує файл з шляху path в шлях destination, а поки відбудеться розпакування в progressHandler можна здійснювати будь-які дії (наприклад, відображення прогресу розпакування), після чого в completionHandler показати, що розпакування благополучно завершилася, або вивести помилку при невдачі.

висновок

В кінцевому рахунку, якщо судити за додатком Mix Wave, яке до установки важить

Схожі статті