containers (AWS) • On premises for Macs (maintained by us), Cloud for containers • Macs are manually maintained (OS and software, no VMs) • Xcode upgrades are done very soon after each release • Less than 8 minutes PR to merge times CI Build Infrastructure
◦ ✅ Bazel, Custom ◦ ❄ SPM, Make • How many libs/dependencies does the main app(s) have ◦ ~20 external deps included as precompiled static frameworks ◦ ~600 internal “module” deps per app • How are internal and external dependencies used ◦ External deps have a review process and are kept to a minimum ◦ External deps are not yet in Bazel, we have an in-house tool for this • Main challenges ◦ The custom stuff means has meant implementing some support in Bazel ◦ Xcode integration with bazel
Bazel ◦ Xcode/xcodebuild, Custom • Build cache ◦ Currently, Google RBE • Main challenges ◦ Bazel isn’t resilient to cache instability ◦ IDE integration ◦ Need to spin up custom remote execution service
Hopefully removed by EOY ◦ Can still generate smaller projects that only include all transitive dependencies • Added focused mode for much smaller projects ◦ Takes <10s to generate project ◦ Supports indexing (lyft/index-import), debugging, testing, most Xcode features ◦ Builds use remote cache, and are debuggable locally! ◦ Disabled CarbonBlack endpoint detection sped up builds by up to 50%
Test metrics ◦ 5k unit tests, runs in multiple jobs on CI ◦ Very few UI tests, non blocking, run in ~10 minutes async • Devices / VM / Simulators testing? ◦ All simulator testing on bare metal Mac Minis • Tests runner/driver ◦ Bazel / xctestrun (xcodebuild) / xctestrunner (xcodebuild) • Main challenges ◦ Async test flakiness ◦ Simulator flakiness