Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BuckOutsideValley.pdf
Search
Bruno Rocha
November 09, 2019
1
100
BuckOutsideValley.pdf
Bruno Rocha
November 09, 2019
Tweet
Share
More Decks by Bruno Rocha
See All by Bruno Rocha
Avoiding Release Anxiety
rockbruno
0
22
Creating Scalable iOS Apps
rockbruno
0
12
iOS Security - Hacking iOS Apps
rockbruno
0
18
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1371
200k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
How GitHub (no longer) Works
holman
316
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
[SF Ruby Conf 2025] Rails X
palkan
0
510
Transcript
Buck Build outside Silicon Valley Bruno Rocha - Software Engineer
+
None
None
None
Tons of developers Several apps that share components Giant codebases
Developers work in very localized squads (localized changes) Valley Companies Ability to create internal helper tools
None
iFood 1. 40+ Developers 2. Four apps that need to
share components 3. Developers work in very specialized squads 4. Most pull requests are very localized
.pbxproj conflicts
Maintaining modules is hard
Huge build times
No project conflicts Automatic management of modules Easy way to
share components between projects Build only what was changed, both locally and in the CI All apps in one repo Valley Companies
Monorepo Build Systems
Monorepo Build Systems
Bazel Build Monorepo Build Systems
Buck Build Monorepo Build Systems
App App Splash Checkout Profile Login Architecture Client Keychain …
More modules = less builds!
Multirepos vs Monorepos App A Repo 1 App B Library
C Repo 2 Repo 3
Multirepos vs Monorepos App A Repo 1 App B Library
C
App A Project A App B Project B Library C
Library C
App A Project A App B Project B Library C
Library C Builds Library C, then App A
App A Project A App B Project B Library C
Library C Builds Library C, then App A Builds Library C again, then App B
//MyApps:AppA Projects A/B //MyApps:AppB //MyLibs:LibraryC
//MyApps:AppA Projects A/B //MyApps:AppB //MyLibs:LibraryC
Builds Library C, then App A Builds App B only
//MyApps:AppA Projects A/B //MyApps:AppB //MyLibs:LibraryC
Buck Caches (Rulekeys) //MyLibs:LibraryC Hash of dependencies Compiler flags Compiler
version Buck version Source contents 3fb80a353db183675fd561b284bc5085
CI Builds PR 1 PR 2 PR 3
CI Builds PR 1 PR 2 PR 3 30 minutes
30 minutes 30 minutes
CI Builds PR 1 PR 2 PR 3
CI Builds PR 1 PR 2 PR 3 30 minutes
5 minutes 3 minutes Cache Cache
Network Cache
Network Cache Upload Cache Download Remote Cache
Creating iOS Apps with Buck Defining rules and using the
build system
None
None
.buckconfig
Buck Rules (Libraries & Tests)
Buck Rules (Libraries & Tests)
Buck Rules (Libraries & Tests)
Buck Rules (Libraries & Tests)
Building Libraries //Libraries/uUserData:UserData {root}{BUCK file path}{Rule name}
Building Libraries //Libraries/uUserData:UserData {root}{BUCK file path}{Rule name}
Build Trace buck-out/logs/build.trace
Testing Libraries
Testing Libraries
App A Library B Library A Library D Library C
Saving time while testing iFood with Xcode: All PRs tested all modules
App A Library B Library A Library D Library C
iFood with Buck: PRs only test the affected graph Saving time while testing
Buck Rules (iOS Apps)
Buck Rules (iOS Apps)
Building iOS Apps buck install {rule} -r
Building iOS Apps buck install {rule} -r
Visual Studio Code + SourceKit-LSP + CodeLLDB
Xcode Project Generation
Xcode Project Generation
None
iFood’s Build/Test CI Evolution Xcode: ~32 minutes Buck + Cache:
~21 minutes Buck + Cache + Only Test Graph: ~9 minutes
iFood’s .pbxproj Conflicts Evolution Xcode: All the time Buck: None
at all
iFood’s Modularization Evolution Xcode: Create a podspec Create an example
project Create the files Add it to the podfile Make our CI run the example’s tests Hope changes won’t break the spec Buck: Just create a folder!
airbnb/BuckSample
Buck Slack
Buck Slack
#VemProiFood + swiftrocks.com @rockthebruno Obrigado!