Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Bazel for iOS 101

Slide 3

Slide 3 text

What is Bazel 🥯 • Open source build system from Google • Internally, called blaze

Slide 4

Slide 4 text

What is Build System Source code Source code Source code Source code Source code Build System Compiler Linker Binary

Slide 5

Slide 5 text

XCBuild Source code Source code Source code Source code Source code XCBuild Compiler Linker Binary

Slide 6

Slide 6 text

Foo.swift Baz.swift Bar.swift ⌘ + R Target MyApp MyApp scheme Target Foo Target Bar Target Baz

Slide 7

Slide 7 text

⌘ + R MyApp Foo Bar Compiling Linking Copy f iles Codesigning Framework

Slide 8

Slide 8 text

⌘ + R Task D Task B Task C Task A Input Output

Slide 9

Slide 9 text

Cons of XCBuild Disclaimer: based on my experience

Slide 10

Slide 10 text

Why? • Single artifacts directory per project • Switching git branch back and forth => caches invalidated 🫠 • 1 layer of cache

Slide 11

Slide 11 text

Bazel advantages • Advanced local cache & remote cache • Optimized dependency analysis • Parallel execution

Slide 12

Slide 12 text

Bazel dependencies Task D Task B Task C Task A Input Output

Slide 13

Slide 13 text

Who use Bazel? uncon f irmed

Slide 14

Slide 14 text

Bazel rules • Starlark language • python dialect

Slide 15

Slide 15 text

How about Swift? • swift_library() • apple_resource_group() • ios_application()

Slide 16

Slide 16 text

Demo

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

LD IPA IDE XCBuild Compiler Linker Executable

Slide 21

Slide 21 text

LD IPA IDE Bazel Compiler Linker Executable

Slide 22

Slide 22 text

Xcode project generation Tulsi rules_xcodeproj

Slide 23

Slide 23 text

Tulsi

Slide 24

Slide 24 text

rules_xcodeproj

Slide 25

Slide 25 text

Bazel cache

Slide 26

Slide 26 text

Build Event Service (BES)

Slide 27

Slide 27 text

Remote Execution

Slide 28

Slide 28 text

When should I use Bazel Task Task Task Task Input Output Task Task Task Task Task Task Task Task Task

Slide 29

Slide 29 text

When should I use Bazel Task Task Task Task Input Output Task Task Task Task Task Task Task Task Task

Slide 30

Slide 30 text

Not convinced? • XCLogParser • XCMetrics • XCRemoteCache

Slide 31

Slide 31 text

careersatagoda.com careersatagoda.com careersatagoda. careersatagoda.com careersatagoda.com careersatagoda. careersatagoda.com careersatagoda.com careersatagoda. careersatagoda.com careersatagoda.com careersatagoda. careersatagoda.com careersatagoda.com careersatagoda. careersatagoda.com careersatagoda.com careersatagoda. careersatagoda.com careersatagoda.com careersatagoda.