Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Scale Code ● 9 apps ● 100% Swift since 2015 rewrite ● ~1.5m lines of app code ● ~600k lines of test code ● Another ~1m lines of generated code ● Split across ~2500 different modules People ● ~140 committers per month ● ~230 commits per week ● ~2 tooling engineers

Slide 3

Slide 3 text

Continuous Integration Hardware ● 100 ~85 Intel / ~10 M1 Mac Minis, many AWS Linux containers ● Macs are Bare Metal, managed with ARD ● Piloting AWS Mac Minis Software ● Buildkite, generated pipelines for many parallel jobs ● Xcode upgrades performed quickly, single version supported ● Linux CI managed with k8s, runs linters, some Swift ● macOS upgrades performed as needed for Xcode

Slide 4

Slide 4 text

Build Speed CI (Build + Test) ● P50: 15 min (~2x slower last year) ● P95: 30 min (~2x slower last year) ● Slowdown mostly due to more tests Local (Build) ● Average* build**: ~40s (~1.5 faster than last year) ● Still trying to push dev apps ● All devs on M1 Max machines now

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Tooling ● IDE: Xcode with custom XcodeGen based bazel integration ● Build System: Bazel (now on Android too!) with rules_apple & rules_swift (since early 2019) ● Dependency Management: Bazel + Artifactory with custom BUILD files ● Caching / Limited remote exec: BuildBuddy ● Testing: XCTest & XCUITest

Slide 7

Slide 7 text

● LLD: ~2x faster than ld64 even after Xcode 14 improvements ● Crossplatform Rust: Low level shared libraries, replacement for C++ (🙊) in some cases ● Natively supporting arm64 simulator: Surprising number of issues, Snapshot tests, OpenGL map SDKs, Bazel caching ● Automated provisioning profile management: Using the App Store Connect API directly ● Dead Code detection blocking PRs ● Swift incremental support: Still too slow, >3x clean build times, faster in specific cases ● M1s Recent Updates

Slide 8

Slide 8 text

Pain Points & Plans ● Builds times increasing: More dev apps ● CI machines reaching EOL: Replacing with AWS ● More longer running UI tests: Aggressive sharding ● Increasing amount of cross platform code: Improve crossplatorm devx ● Nearing the end of clear wins: ???

Slide 9

Slide 9 text

● AWS Mac Minis: Get out of the business of hosting hardware ● Swift LTO: Some existing bugs, potential nice app size win ● Improved IDE experience: Moving to rules_xcodeproj ● Unifying more devx between iOS and Android ● Remote exec? Still backburner Future plans

Slide 10

Slide 10 text

Questions?

Slide 11

Slide 11 text

No content