Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Оптимизация размера приложения / Дмитрий Куркин (Mail.Ru)

218 views

Published on

РИТ++ 2017, App's Conf
Зал Найроби, 6 июня, 16:00

Тезисы:
http://appsconf.ru/2017/abstracts/2571.html

* Почему размер приложения это важно.
* Как формируется размер приложения в AppStore.
* Оптимизация на уровне файлов внутри IPA-пакета. Структура IPA, степень сжатия файлов внутри пакета.
* Оптимизация на уровне исполняемого файла. Структура исполняемого файла. Объектные файлы и их влияние на размер приложения с учетом разных языков (Swift, Objective-C, C++).

Published in: Engineering
  • Be the first to comment

Оптимизация размера приложения / Дмитрий Куркин (Mail.Ru)

  1. 1. Оптимизация размера приложения Дмитрий Куркин
  2. 2. Размер приложения это важно Но не для всех Приложения в сильно отличаются по размеру МБ ГБ
  3. 3. Социальные сети • Обновлено • Версия • Размер
  4. 4. Социальные сети • Обновлено • Версия • Размер МБ мб Вы о Каждую неделю обновления свыше мб Каждую неделю по раза обновления от мб достали
  5. 5. Социальные сети Обновлено Версия Размер
  6. 6. Социальные сети Обновлено Версия Размер МБ
  7. 7. Сервис заказа такси Обновлено Версия Размер МБ
  8. 8. Сервис заказа такси Яндекс Такси Обновлено Версия Размер МБ
  9. 9. Сервис заказа такси Максим заказ такси Обновлено Версия Размер МБ
  10. 10. Мессенджеры Обновлено Версия Размер МБ
  11. 11. Мессенджеры Обновлено Версия Размер МБ
  12. 12. Мессенджеры Обновлено Версия Размер МБ
  13. 13. Интернет тарифы Гб интернета руб в месяц
  14. 14. Интернет тарифы Всё ГБ руб сутки
  15. 15. Интернет тарифы Переходи на НОЛЬ Интернет МБ сутки руб сутки
  16. 16. Интернет тарифы Мой разговор Гб руб месяц
  17. 17. Обновления 9 Facebook 232МБ Whatsapp 93МБ Youtube 80МБ Uber 180МБ Google Maps 82МБ Gmail 144МБ AliExpress 90МБ Snapchat 113МБ Instagram 60МБ 1074 МБ
  18. 18. Размер на диске Появление вашего приложения на этом экране сильно увеличивает шансы на удаление
  19. 19. Размер приложения в
  20. 20. Размер приложения в В AppStore - 45 МБ Заливаем 30 МБ
  21. 21. Размер приложения в Исходный IPA – 30 МБ App Store – 45 МБ ITunes – 73,3 МБ IPA – 60,3 МБ
  22. 22. Что отправляется в 2. Выбираем 3. Отправляем 1. Собираем архив (Archive)
  23. 23. Структура zip:ChosenOne.ipa Payload ChosenOne.app Binary Framework Resources
  24. 24. Структура AppName Исполняемый модуль _CodeSignature Подпись Assets.car, *.bundle, *.lproj, *.png, *.db, *.json и пр. Ресурсы приложения Framework Библиотеки приложения Plugins Плагины для iOS и других приложений Watch Приложение для WatchOS Swift dylib megalib.framework extension.appex watch.app
  25. 25. Пример содержимого
  26. 26. Пример содержимого
  27. 27. Пример содержимого
  28. 28. Пример содержимого
  29. 29. Что может влиять на размер • Архитектура • Размеры картинок • Степень сжатия
  30. 30. Как будем проверять • Собираем приложение • Заливаем в • Открываем внутреннее тестирование в
  31. 31. Разделение по архитектуре const char* mess = "AAAAIGZ0eXB… … 4 МБ … ...I1LjEwMQ=="; #if __LP64__ #else for(int j=0; j<10; ++j) { self.val += mess[j]; } #endif mess.h AppDelegate.mm
  32. 32. Разделение по архитектуре ARMv7s 3,5 МБ ARM64 0,1 МБ
  33. 33. Выбор размера картинки Asset asset@2x.png - 0,4МБ asset@3x.png - 30МБ image@2x.png - 0,4МБ image@3x.png - 30МБ
  34. 34. Выбор размера картинки 1,5 МБ 32 МБ 37 МБ 32 МБ
  35. 35. Сжатие 3 МБBigtext.txt - 2,5МБ
  36. 36. Оптимизируем размер приложения
  37. 37. Кто самый толстый
  38. 38. Заглянуть в ассет
  39. 39. Исполняемый файл
  40. 40. Исполняемый файл Структура 13,1 МБ 15,1 МБ
  41. 41. Исполняемый файл Структура Mach-O Header Заголовок Load Commands “Содержание” для секций. Содержит размеры, смещение и дополнительную мета информацию о сецкии Section (_TEXT, _text) Ассемблерный код программы Section (_TEXT, _cstring) Строковые константы ... Section (_DATA, _objc_nl_symbol_ptr) Section (_DATA, _data) ….
  42. 42. Исполняемый файл Пример 3,8 МБ
  43. 43. Этапы сборки исполняемого файла Binary module.o module.o header.h header.h source.m source.m Компиляция Линковка
  44. 44. Объектные файлы • Размер непосредственно влияет на размер исполняемого файла • Содержат код привязанный к конкретному файлу • Содержат ссылки на строчку в приложении
  45. 45. Объем кода на строчку программы Строка в исходном файле Адрес в исполняемом модуле
  46. 46. Возможности оптимизации для разных языков Неиспользуемый код может быть вырезан компилятором Но не всегда • Метод класса • Виртуальный метод С • Метод в классе
  47. 47. Оптимизация @implementation ObjCStuff : NSObject - (NSInteger)doStuff { ... <veryBigCode> ... return result; } @end Можно динамически вызвать любой метод любого класса Достаточно внести тяжелый метод в сборку
  48. 48. Оптимизация С class BigCodeImpl : public IBigCode { public: int method(); virtual int virtualMethod(); virtual int virtualBigMethod(); }; ... point->virtualMethod(); ... Должны использоваться виртуальные методы класса
  49. 49. Оптимизация public class StuffClass { public init() { } public func bigCode() ->Int { ... <veryBigCode> ... return result } } Достаточно внести тяжелый метод в сборку
  50. 50. Советы • Найдите что занимает больше всего места • Проверьте нет ли чего то очевидно лишнего • Проверьте константные данные в исполняемом файле • Ищите что создает больше всего ассемблерного кода
  51. 51. Инструменты • просмотр содержимого папки • просмотр содержимого исполняемого файла • дизассемблер для объектных файлов • просмотр содержимого

×