Оптимізація ваги його додатка для iOS - Publicis Sapient Engineering - Engineering Done Right

додатка
Розробляючи додаток, ми природно орієнтуємось на якість коду. Однак важливо також звернути особливу увагу на вага з цього, особливо під час знаменитого подання в магазини з таких причин:

  1. додаток, який перевищує 100 МБ, можна завантажити лише через мережу WiFi (це також стосується оновлення). Тож користувачеві далеко від дому, у його стільниковій мережі, доведеться почекати, щоб знайти мережу WiFi, ризикуючи відмовитись від завантаження програми;
  2. навіть у мережі Wi-Fi, яка може бути трохи повільною, якщо завантаження важить кілька сотень мегаметрів, користувачеві доведеться чекати довгі секунди (або хвилини), перш ніж мати можливість насолоджуватися вашим додатком, і знову ж таки це ризик втратити потенціал замовник/користувач;
  3. з додатком менше 100 Мб, все ще цікаво прагнути максимально оптимізувати його вагу, оскільки користувач споживає свій тарифний план і може знаходитись у дуже погіршених умовах (слабкий 3G або Edge), що відповідно збільшується, чим довший час очікування;
  4. нарешті, майте на увазі, що iPhone все ще доступний у своїй версії 16 Гб... стільки, щоб сказати вам, що користувачі будуть дуже обережно ставитися до ваги встановлених програм.

Тому ми разом побачимо, які рішення нам доступні, щоб надати нашій програмі трохи засобу для схуднення.

Розсічіть .ipa

Перш за все, щоб зрозуміти решту статті, ми разом побачимо, як розбивається наш файл ipa, який містить всю програму.

Цей файл є не що інше, як стислий архів. Перейменуйте його на .zip, і ви можете розпакувати весь його вміст. Потім ми знаходимо там певну кількість папок, але одна нас особливо цікавить:/Корисне навантаження. Це серце вашої заявки. Ви знайдете лише один файл: MyAppli.app.

Щоб переглянути його вміст, клацніть правою кнопкою миші> Показати вміст пакета.

Ви знайдете там файли .png, .plist, .strings, .nib, .otf ...

Перший рефлекс: сортування файлів за розміром. Найбільшим, безсумнівно, буде автомобіль Assets.car. У ньому знаходяться всі ваші зображення. Отже, тут ми маємо перший показник: вага цього файлу дає вам, приблизно, розмір ваших зображень і, з iOS 9, статичні ресурси.

Якщо ви хочете побачити його вміст (що еквівалентно Assets.xcassets у вашому проекті Xcode), ви можете декомпілювати цей архів за допомогою невеликого інструменту командного рядка під назвою cartool.

Необхідні деякі маніпуляції:

  1. відкрити проект cartool в Xcode;
  2. скласти;
  3. у папці/Products отримати файл cartool (клацніть правою кнопкою миші> Показати у Finder);
  4. у терміналі запустіть: ./cartool /Payload/Assets.car

У корені/Корисне навантаження ви також знайдете зображення. Мова йде про:

  • зображення від сторонніх SDK;
  • значки програм;
  • запуск зображень (заставки);
  • jpg.

Для перших двох мало що робити, і це не повинно бути занадто важким. Для запуску зображень зверніть увагу, що це великі формати (особливо для @ 3x та iPad @ 2x), вони можуть перевищувати 2 або навіть 3 МБ.

Нарешті, якщо у вас є jpg у ваших активах, вам не слід: перетворювати їх у PNG, як рекомендує Apple.

Досі в корені/Payload, ви також знайдете:

  • шрифти;
  • всі перо (еквівалент xib);
  • та інші файли, такі як .strings, .plist тощо.

Стільки про те, що буде важити найбільше у вазі вашої заявки. Все інше складається з коду, фреймворків, сторонніх SDK тощо.

Останній момент: якщо у вас є ціль Watch, папка/Watch з відповідним .app також присутня і виглядає як .app програми iPhone/iPad (та сама структура).

Оптимізуйте вагу зображень

Якщо вам потрібно зменшити вагу вашої програми, першим важливим кроком є ​​оптимізація ваги зображень. Зверніть увагу, що PNG, експортований із Photoshop, як правило, дуже важкий і може бути оптимізований дуже широко.

Тут ми не говоримо про втрату якості або стиснення, як це можна зробити з jpg, оскільки png - це нестиснений формат. Ні, нічого з цього, але тим не менш оптимізація можлива завдяки невеликим інструментам. У мережі їх є всі види, візьмемо, наприклад, крихітний png. Просте перетягування png вдома покаже вам значний виграш, який може принести цей інструмент: в середньому ми спостерігали зменшення ваги png на 60%. Помножте це на всі версії сітківки ока/iPhone/iPad, і вам слід зменшити додаток на кілька мегаметрів. Зверніть увагу, що редактор цього інструменту також пропонує плагін Photoshop і платний API, хороший спосіб автоматизувати цей процес оптимізації.

Остерігайтеся сторонніх SDK

Інакше вчинити неможливо: ви імпортуєте кілька сторонніх SDK у свою програму. Не забудьте поглянути на їх відповідну вагу, деякі можуть важити кілька мега. Тоді залишається з’ясувати, чи справді він вам потрібен: можливо, для деяких ви використовуєте лише 1% їх функціональних можливостей, або що декілька з них виконують одну і ту ж роботу, і можна отримати капітал лише на SDK.

Також не забудьте навчити свого клієнта з цього питання, тому що він може попросити вас інтегрувати кілька маркетингових рішень, наприклад (A/B тестування, аналітика, push, попередження ...), що збільшить вагу вашої програми, а також її складність.

Слідкуйте за вагою ваших шрифтів

Менш очевидні, ніж зображення та SDK, шрифти також можуть бути значною частиною ваги вашої програми. Більшість з них, і особливо найпоширеніші, не повинні важити занадто багато на вазі ... але деякі інші можуть містити багато невикористаних діапазонів символів, включаючи арабські, кириличні та китайські, корейські та китайські символи. Якщо так, шрифт може важити кілька мегабайт або навіть досягати 20 МБ! Тоді було б необхідно розглянути можливість використання іншого шрифту, особливо якщо його використання дуже обмежене в межах програми.

Створення хорошого каталогу активів - це гарантія для програми Slicing

Ви напевно чули про це, Нарізка додатків доступна лише нещодавно і може різко зменшити вагу програми. Принцип простий: нехай користувач завантажує лише той вміст, який підходить для його пристрою.

Наприклад, у випадку з універсальним додатком для iPhone/iPad, встановлення його на iPhone 6 Plus буде вбудовувати активи типу iPhone лише на @ 3x. Це саме те, що пропонує нарізка додатків: розділіть додаток на кілька "невеликих" архівів, адаптованих для кожного пристрою, враховуючи платформу та роздільну здатність екрана.

Цей крок є повністю прозорим для розробника, але тим не менше він вимагає правильного побудови каталогу активів із зазначенням для кожного об’єкта його змін у всіх типах пристроїв.

Єдиний мінус: ця функція доступна лише з iOS 9.

Подумайте про завантаження зображень на льоту ...

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

  • ви зменшуєте вагу установки;
  • Ви маєте контроль над цими візуальними елементами, якщо хочете їх оновити, не роблячи доступною нову версію;
  • оскільки ці зображення не зберігаються, вони не будуть захаращувати місце для зберігання пристрою.

З іншого боку, з негативної сторони це означає, що користувач зв’язаний (відповідно, візуальне зображення не повинно бути важливим для правильного розуміння вмісту у випадку відсутності мережі), і тому ви змусите його споживати свої дані плануйте, якщо він у своїй стільниковій мережі.

Цікавий компроміс: завантажте зображення та запишіть їх у пам’ять пристрою, щоб не напружувати мережу кожного разу, коли додаток запускається.

... або "На вимогу" !

Нарешті, Apple пропонує з iOS 9 рішення під назвою «Ресурси на вимогу». Концепція полягає в наступному: надайте кілька наборів активів, які будуть завантажені лише тоді, коли вони потрібні користувачеві (не лише зображення, а й будь-який інший невиконавчий файл). Це схоже на попередній пункт, за винятком того, що саме Apple зберігатиме активи для вас на своїх серверах (тому їх загальна вага обмежена).

Цікавим моментом є те, що ця функція пропонує три основні категорії ресурсів "За запитом":

  • ресурси, які потрібно завантажити одночасно з додатком, отже під час встановлення;
  • ресурси для завантаження після встановлення програми;
  • ресурси, які потрібно завантажувати лише на вимогу, коли програма повинна їх використовувати/відображати.

Ми знаходимось у дуже спеціальному випадку, який не підходить для всіх типів програм. Більше того, у своїй документації Apple бере приклад гри, де розробник створює групи активів за рівнем. Ми також можемо уявити це рішення у випадку каталогу товарів.

Але будьте обережні: на відміну від Slicing App, впровадження цього рішення є досить дорогим під час розробки; у вас дійсно буде багато коду для написання і, крім того, буде сумісний лише з iOS 9. Де нарізання додатків може розглядатися як "бонус" для користувачів під iOS 9 (і, отже, жоден не суперечить попереднім ОС), "Ресурси на вимогу" вимагає iOS 9.

Якщо ви хочете (і перш за все можете!) Розпочати роботу з цим рішенням, документація Apple дуже добре надається в "Ресурсах на вимогу".

Висновок

Тепер, коли ми щойно переглянули різні оптимізаційні рішення, необхідно вибрати правильний (або більше).

Перший, який складається з оптимізація зображень - важливий крок і часто буде достатнім. Словом, гарний старт !

Тоді, якщо цього недостатньо, для інших маршрутів необхідно взяти до уваги кілька аспектів: мінімальна підтримувана ОС, коефіцієнт виграшу/витрат впровадження розчину та хороший баланс між вагою початкового завантаження та споживанням даних під час використання програми.

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