iOS Monorepo
Article Summary
Uber scaled from a dozen iOS engineers to hundreds in just a few years. Their tooling nearly collapsed under the weight.
Uber Engineering migrated their entire iOS codebase to a monorepo powered by Buck build system. This article details why they abandoned CocoaPods, how they executed the migration, and what they gained.
Key Takeaways
- CocoaPods dependency resolution ballooned from seconds to minutes with 40+ modules
- Buck's intelligent caching slashed CI build times dramatically across hundreds of daily commits
- Submit Queue system brought master branch success rate to 99%
- Engineers now make breaking changes atomically across modules in single commits
Uber's monorepo migration eliminated version conflicts, cut build times massively, and let hundreds of engineers move faster despite growing complexity.
About This Article
Uber built out over 40 interdependent modules with complex semantic versioning constraints. Small code changes like adding enum cases or protocol properties would trigger compiler errors that cascaded across dependent modules and applications.
Uber Engineering switched to the Buck build system, which has intelligent incremental compilation and reliable distributed caching. This replaced CocoaPods' slow dependency resolution and let them make breaking changes across modules in a single commit without version conflicts.
Buck's cache architecture removed the need to clean CI caches. Build artifacts could be shared across machines and test results could be skipped for unaffected modules. This cut down the time developers spent waiting across hundreds of daily commits.