Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Building...Please, wait
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Vadym
April 03, 2020
Programming
65
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Building...Please, wait
Vadym
April 03, 2020
More Decks by Vadym
See All by Vadym
Date and time
degterev
0
48
Как перестать говорить "Ой, я забыл"
degterev
0
78
Other Decks in Programming
See All in Programming
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.6k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
350
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
240
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
320
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
170
Creating Composable Callables in Contemporary C++
rollbear
0
190
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
680
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
830
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.6k
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
410
How to Think Like a Performance Engineer
csswizardry
28
2.7k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Typedesign – Prime Four
hannesfritz
42
3.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
Mobile First: as difficult as doing things right
swwweet
225
10k
Done Done
chrislema
186
16k
Raft: Consensus for Rubyists
vanstee
141
7.6k
So, you think you're a good person
axbom
PRO
2
2.1k
Product Roadmaps are Hard
iamctodd
55
12k
Transcript
BUILDING…PLEASE WAIT VADYM DEHTEROV 1
AGENDA AGENDA ▸ Build configuration, Xcode target, Xcode scheme ▸
Как llbuild строит build graph ▸ Как генерация кода влияет на build time ▸ Как померять время билда 2
BUILD CONFIGURATION 3
4 Build configuration
5 Build configuration Xcode target
6 Build configuration Xcode target Xcode scheme
LLBUILD 7
АВТОМАТИЗИРУЕТ СЕРИЮ ЗАДАЧ ПО СБОРКЕ 8
LLBUILD ЧТО ТАКОЕ LLBUILD? ▸ Новая билд сисистема от Apple
▸ Вызывает компилятор, линковщик и прочих ребят 9
A.swift B.swift C.swift 10
struct B { let c: C } struct A {
let c: C } struct C { let some: String } A.swift C.swift B.swift 11
struct B { let c: C } struct A {
let c: C } struct C { let some: String } A.swift C.swift B.swift struct Hot { let d: String } 12
ОТ КАКИХ ФАЙЛОВ У НАС МНОГО ЗАВИСИМОСТЕЙ? 13
SOURCERY 14
struct B { let c: String = L.Buttons.finish struct A
{ let c: String = L.Buttons.finish } internal enum L { internal enum Buttons { /// FINISH internal static let finish = L.tr("Localizable", “active_workout.buttons.finish") } A.swift localization.generated.swift B.swift 15
ЧТО ЕЩЕ ЗАМЕДЛЯЕТ? 16
let some = a * b 17
let some = (a / Float(c) + 4) * b
18
let some: Float = (a / Float(c) + 4) *
b 19
BUILD TIME КАК МОЖНО ПОМЕРЯТЬ? ▸ -Xfrontend -warn-long-expression-type-checking=100 ▸ -Xfrontend
-warn-long-function-bodies=100 20
Int(exactly: (steps.reduce(0, +) / Double(steps.count)).rounded()) ?? 0 21
22 defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
КАК ЖЕ СОБИРАЮТСЯ ТАРГЕТЫ В РАМКАХ ОДНОЙ СХЕМЫ? 23 Pods
Framework Main App
РАЗБИВАЙТЕ НА ТАРГЕТЫ 24
LLBUILD ЧТО НАМ ДАДУТ РАЗНЫЕ ТАРГЕТЫ? ▸ Разные generated.swift файлы
▸ llbuild умеет компилировать разные таргеты параллельно 25
ГДЕ ПРУФЫ? 26
XCODE-BUILD-TIME-RENDERING 27
28
29 28 Pods Pods
30 28 Pods Pods Framework Framework
31 28 Pods Pods Main app Framework Framework
TARGETS КАКИЕ ТРУДНОСТИ МОГУТ БЫТЬ? ▸ Код должен быть изолированным
▸ Отдельные тесты ▸ Конфликты в xcproject 32
XCODEGEN 33
СТРУКТУРА ФАЙЛОВ И ПАПОК ИЗ ФАЙЛОВОЙ СИСТЕМЫ 34
35
ЧТО ТО ПОПРОЩЕ 36
WMO VS INCREMENTAL 37
INCREMENTAL 38
WHOLE MODULE OPTIMIZATION 39
WMO VS INCREMENTAL WHOLE MODULE OPTIMIZATION ▸ Быстрее, если собирать
clean build ▸ Ломает инкрементальную сборку ▸ Компилятор делает оптимизации 40
INDEX WHILE BUILDING 41
42
BAZEL ЕСЛИ СОВСЕМ ЖМЕТ 43
BAZEL BAZEL OFFERS THE FOLLOWING ADVANTAGES ▸ Remote cache ▸
Multiplatform 44
ЗАВИСИМОСТИ 45
ЗАВИСИМОСТИ ЧТО С НИМИ ДЕЛАТЬ? ▸ Можно хранить уже собранные
▸ Для Carthage уже есть готовые инструменты ▸ Для CocoaPods есть сторонние плагины 46
SUMMARY О ЧЕМ ГОВОРИЛИ? ▸ Xcode target, Xcode scheme, Build
configuration ▸ Как мерять время билда ▸ Несколько лайфхаков как ускорить билд ▸ XcodeGen ▸ Bazel 47
THATS ALL CREDITS ▸ https://github.com/PaulTaykalo/xcode-build-times-rendering ▸ https://swift.org/blog/new-diagnostic-arch-overview/ ▸ https://github.com/apple/swift/blob/master/docs/ CompilerPerformance.md#diagnostic-options
▸ https://developer.apple.com/videos/play/wwdc2018/408/ ▸ https://github.com/yonaskolb/XcodeGen ▸ https://swift.org/blog/whole-module-optimizations/ 48
49 МОЙ ТЕЛЕГРАМ