Buck Build outside
Silicon Valley
Bruno Rocha - Software Engineer
+
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
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 con
fl
icts
Maintaining modules is hard
Huge build times
No project con
fl
icts
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
Bazel Build
Buck Build
Monorepo Build Systems
App
App Splash
Checkout Pro
fi
le
Login Architecture
Client Keychain
…
More modules
= less builds!
Multirepos vs Monorepos
App A
Repo 1
App B Library C
Repo 2 Repo 3
App A
Repo 1
App B
Library C
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
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
fl
ags
Compiler version
Buck version
Source contents
3fb80a353db183675fd561b284bc5085
💻
🤖
💻 💻
🤖 🤖
CI Builds
PR 1 PR 2 PR 3
30 minutes 30 minutes 30 minutes
💻
🤖
💻 💻
🤖 🤖
CI Builds
PR 1 PR 2 PR 3
30 minutes 5 minutes 3 minutes
Cache Cache
💻 💻 💻
🖥
Network Cache
Upload Cache Download Remote Cache
Creating iOS Apps
with Buck
Defining rules and using the build system
.buckcon
fi
g
Buck Rules (Libraries & Tests)
Building Libraries
//Libraries/uUserData:UserData
{root}{BUCK
fi
le path}{Rule name}
Build Trace
buck-out/logs/build.trace
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)
Building iOS Apps
buck install {rule} -r
Visual Studio Code + SourceKit-LSP + CodeLLDB
Xcode Project Generation
iFood’s Build/Test CI Evolution
Xcode: ~32 minutes
Buck + Cache: ~21 minutes
Buck + Cache + Only Test Graph: ~9 minutes
iFood’s .pbxproj Con
fl
icts Evolution
Xcode: All the time
Buck: None at all
iFood’s Modularization Evolution
Xcode: Create a podspec

Create an example project

Create the
fi
les

Add it to the pod
fi
le

Make our CI run the example’s tests

Hope changes won’t break the spec
Buck: Just create a folder!
airbnb/BuckSample
😱
Buck Slack
#VemProiFood
+
swiftrocks.com
@rockthebruno
Obrigado!

Buck outside Valley