Top Banner
Артур Протько App Thinning
29

App Thinning

Feb 21, 2017

Download

Technology

Rambler-iOS
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: App Thinning

Артур Протько

App Thinning

Page 2: App Thinning

App Thinning

AppThinning – набортехнологийнаправленныйнауменьшение

накладныхрасходовпридоставкеприложенияизAppStoreк

конечномупользователю

Page 3: App Thinning

App Thinning

• Slicing

• Bitcode

• On-Demand Resources

Page 4: App Thinning

App Slicing

Slicing - этопроцесссозданияипоставкивариантовбандла

приложениядляразличныхустройств.Каждыйвариантсодержит

исполняемыйфайлиресурсынеобходимыедляработынаконечном

устройстве.

Page 5: App Thinning

App Slicing

Page 6: App Thinning

App Slicing

•Нарезкаресурсов

•Нарезкаисполняемогофайла

Page 7: App Thinning

Структураисполняемогофайла(UniversalBinary)

Page 8: App Thinning

Sliсed apps

•Симулятор

•TestFlight

•Release

Page 9: App Thinning
Page 10: App Thinning

• Размерпризагрузкеснизилсяна43%

• Размерприустановкеснизилсяна34%

Page 11: App Thinning

Пользователиоперационныхсистемниже

заявленныхпродолжатполучатьUniversal вариант.

Page 12: App Thinning

Bitcode

Bitcode - промежуточноепредставние скомпилированнойпрограммы.

Приложения,содержащиеbitcodeпризагрузкевiTunesConnect,будут

скомпилированныислинкованныужевсамомсторе.

Page 13: App Thinning

LLVMcompiler

• Frontend

• Backend

Page 14: App Thinning

LLVMfrontend

Page 15: App Thinning

ПримерLLVMIR// main.cextern int printf(const char *fmt, ...);

int main() {printf("Hello World\n");return 0;

}

Page 16: App Thinning

clang -S -emit-llvm [email protected] = private unnamed_addr constant [13 x i8] c"Hello World\0A\00", align 1

; Function Attrs: nounwind ssp uwtabledefine i32 @main() #0 {

%1 = alloca i32, align 4store i32 0, i32* %1%2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13

x i8]* @.str, i32 0, i32 0))ret i32 0

}

declare i32 @printf(i8*, ...) #1

Page 17: App Thinning

LLVM backend

Page 18: App Thinning

Bitcode - бинарныйформатLLVMIR

Page 19: App Thinning

ВключениеBitcode

Page 20: App Thinning

ПлюсыBitcode

•ПриложениеможетбытьпереоптимизированонасторонеAppleбезперезаливкиприложения

Page 21: App Thinning

МинусыBitcode

•Всеприложенияифреймворкивбандледолжны

поддерживатьbitcode

•Необходимо"вручную"выгружатьdSym вFabric

Page 22: App Thinning

On-Demand Resources

On-Demand Resources - эторесурсы(картинки,аудио,…)помеченные

специальнымтегомикоторыеможнозапроситьссерверапоэтому

тэгу

Page 23: App Thinning
Page 24: App Thinning
Page 25: App Thinning

Жизненныйциклресурсов

Page 26: App Thinning

Преимущества On-Demand Resources

• Уменьшениеразмераприложения

• Лениваязагрузкаресурсовприложения

• Удаленноехранилищередкоиспользуемыхресурсов

• Удаленноехранилищересурсовдлявстроенныхпокупок

Page 27: App Thinning

Недостатки On-Demand Resources

• Требуетхорошегоинтернетсоединения

Page 28: App Thinning

ОграничениянаразмерыресурсовItem Size Slicing

iOS App bundle 2 GB �

tvOS App bundle 200 MB �

Tag 512 MB �

Asset packs 1000 �

Initial install tags 2 GB �

Initial install and prefetched tags 4 GB �

In use on-demand resources 2 GB �

Hosted on-demand resources 20GB –

Page 29: App Thinning

Спасибо за внимание!