iOS CI as a Service in da House

Last updated: 3 months ago

At some point, building your app in Xcode won't be enough. You will want to have build history, keep release artifacts around. You will need CI & CD around. As your team grows, so will happen with a load on your CI. You will have to expand your build farm, speed up your builds, make your tests quicker and more reliable. As your app involves, you will want to have more and more checks. You will want to run them on every pull request. As time goes, you will want to know about the best practices in iOS CI and CD processes.

In Avito, we have everything needed to develop iOS apps: debug & release builds, Unit & UI tests, build farm. We add more and more checks — thousands of unit tests, hundreds of native UI tests, dozen of performance tests, various build checks, but they still take less than 30 minutes on pull request, and there is no build queue wait time. In my talk I will share how we achieved this.

This presentation covers the following:

  • Our history of in-house iOS CI: what we had, and how it involved (TeamCity, infrastructure as a code, rewriting bash to Python, CI as a service, CI integration tests)
  • How to shorten the build & test time using open source technologies (CocoaPods, xcodebuild, build tracing)
  • How to optimize the load between iOS build machines (load balancing of unit & native UI tests)
  • How to manage a growing build farm (Puppet, macOS updates, build machine state, adding new build machines to your build farm safely, upgrading Xcode safely)
  • What should you expect when you deploy in house build farm (Mac power consumption, Mac benchmarking for different purposes, physical maintenance in house and in data centre)
  • Real time monitoring and alerting (Grafana, Sentry, Kibana; machine aliveness, CPU load, free disk space, build farm performance)
  • Providing CI as a Service for new projects (Python APIs, impact analysis, dependency management, test reporting, fighting with flakiness)

We've developed this knowledge over the last 3 years, and I'm sure it will be beneficial for everybody related to mobile development learn from our mistakes and ideas.

Audience:

  • Software engineers
  • DevOps engineers
  • Team leads