РИТ++ 2017, App's Conf
Зал Найроби, 6 июня, 16:00
Тезисы:
http://appsconf.ru/2017/abstracts/2571.html
* Почему размер приложения это важно.
* Как формируется размер приложения в AppStore.
* Оптимизация на уровне файлов внутри IPA-пакета. Структура IPA, степень сжатия файлов внутри пакета.
* Оптимизация на уровне исполняемого файла. Структура исполняемого файла. Объектные файлы и их влияние на размер приложения с учетом разных языков (Swift, Objective-C, C++).
24. Структура
AppName Исполняемый модуль
_CodeSignature Подпись
Assets.car, *.bundle, *.lproj,
*.png, *.db, *.json и пр.
Ресурсы приложения
Framework Библиотеки приложения
Plugins Плагины для iOS и
других приложений
Watch Приложение для
WatchOS
Swift dylib
megalib.framework
extension.appex
watch.app
41. Исполняемый файл Структура
Mach-O Header Заголовок
Load Commands “Содержание” для секций. Содержит
размеры, смещение и дополнительную
мета информацию о сецкии
Section (_TEXT, _text) Ассемблерный код программы
Section (_TEXT, _cstring) Строковые константы
...
Section (_DATA, _objc_nl_symbol_ptr)
Section (_DATA, _data)
….
44. Объектные файлы
• Размер непосредственно влияет на размер исполняемого
файла
• Содержат код привязанный к конкретному файлу
• Содержат ссылки на строчку в приложении
45. Объем кода на строчку программы
Строка в
исходном
файле
Адрес в исполняемом модуле
46. Возможности оптимизации для разных
языков
Неиспользуемый код может быть вырезан компилятором Но не
всегда
• Метод класса
• Виртуальный метод С
• Метод в классе
47. Оптимизация
@implementation ObjCStuff : NSObject
- (NSInteger)doStuff {
...
<veryBigCode>
...
return result;
}
@end
Можно динамически вызвать
любой метод любого класса
Достаточно внести тяжелый
метод в сборку
48. Оптимизация С
class BigCodeImpl : public IBigCode
{
public:
int method();
virtual int virtualMethod();
virtual int virtualBigMethod();
};
...
point->virtualMethod();
...
Должны использоваться
виртуальные методы класса
49. Оптимизация
public class StuffClass {
public init() {
}
public func bigCode() ->Int {
...
<veryBigCode>
...
return result
}
}
Достаточно внести тяжелый
метод в сборку
50. Советы
• Найдите что занимает больше всего места
• Проверьте нет ли чего то очевидно лишнего
• Проверьте константные данные в исполняемом файле
• Ищите что создает больше всего ассемблерного кода
51. Инструменты
• просмотр содержимого папки
• просмотр содержимого исполняемого файла
• дизассемблер для объектных файлов
• просмотр содержимого