Would Xcode Cloud replace our current CI/CD solution?

Julio Martínez Ballester
Turo Engineering
Published in
5 min readDec 1, 2021

Update: Xcode Cloud is now out of beta and available to everyone, Apple announced it in WWDC22. I encourage you to go and check it out!

Below is a summary of Turo’s experience so far:

  • Since Xcode Cloud workflows run on Apple’s Cloud, Turo moved away from a third-party tool and deprecated machines dedicated to building and running tests on pull requests for multiple device types. The cloud-based version control integration works flawlessly. The user interface is quite good both on Xcode and the App Store Connect dashboard, and there are plenty of logs and information to debug issues with the builds. Turo’s favorite ChatOps tool receives team-specific notifications for custom test groups when a workflow is complete.
  • Xcode Cloud enabled Turo to distribute internal builds via TestFlight. It eliminated the cumbersome process of connecting to a VPN to install beta builds and registering devices through the developer account and deprecated yet another dedicated machine. A more straightforward and reliable process overall.
  • A single Xcode Cloud workflow saved developer hours, freed up local development machines, simplified the sharing of distribution certificates, and eliminated the need for custom scripts and the maintenance involved, thereby accelerating Turo’s App Store release process, a secure one-click solution to release.

Please continue reading for a more detailed explanation of Turo’s implementation when Xcode Cloud was in beta.

I couldn’t be more excited when Apple announced Xcode Cloud during WWDC21. I, like many iOS developers all over the world, have been waiting for this news since Apple acquired Buddybuild back in 2018.

After years of grappling with certificates, provisioning profiles, and third-party solutions without the access privileges of an internal tool, a CI/CD solution directly integrated into Apple’s ecosystem sounded like a dream.

When we received our early access to Xcode Cloud Beta, I couldn’t help but start working on answering the question that had been in my head since the announcement, would Xcode Cloud be able to replace our current CI/CD solution?.

I had my doubts. Turo’s iOS app is a multi-platform ten-year-old codebase, with several third-party dependencies (Swift Package Manager and Cocoapods) and a fair amount of custom build settings.

The following describes our experience adopting Xcode Cloud at Turo. I hope it is helpful to other developers and companies facing the same doubts.

Goals

First, we defined success. What do we want from Xcode Cloud?

  • Build and run tests on all pull requests opened against the main branch. Doing so would allow us to deprecate dedicated machines and GitHub actions (Xcode Cloud workflows run on Apple’s Cloud 🥳).
  • Overnight exhaustive testing, including different iOS versions, devices, platforms, etc., reporting to Slack each morning.
  • Accelerate our App Store release process, a secure, one-click solution to run a release workflow available on any device. Save developer hours, free up local development machines. Secure distribution certificates, no need to share and install on individual computers. Eliminate the need for custom scripts and the maintenance involved.
  • Move to internal build distribution through TestFlight. No need to set up and connect to a VPN to install beta builds on mobile devices. No need to register devices on our Apple’s developer account. Deprecate yet another dedicated machine. And a much easier and reliable process overall.

Some good opportunities here, so let’s go for it.

Hands-on

I won’t go into implementation details or describe step by step how we set up this new tool, that is not the purpose of this post, and it will be different for each case. Apple’s documentation and WWDC21 videos are quite good and easy to follow. Instead, I will focus on the experience.

As you might expect when adopting any new technology, we faced some interesting challenges.

First, we had to migrate a few custom build scripts and use the ones provided by Xcode Cloud. For example, to change the app icon for debug builds.

Second, we had to rethink our app versioning system; this was the biggest challenge. Our previous solution wasn’t compatible. Xcode Cloud automatically manages the build numbers, and that’s great, less hassle for the team, but we had to adapt some of our processes.

Finally, since Xcode Cloud is still in beta, during the first few months, we experienced some transient issues, like downtimes or timeouts in our workflows. Such issues were hard to overcome because there was little troubleshooting support on the forums. Occasionally, Cloud Reports failed to load in the Report navigator on older Xcode versions, but the App Store Connect website was always a backup. Also, the Slack integration sometimes was flaky. Fortunately, thanks to the team behind this super convenient tool, those issues seem to be behind us. Now, it feels like it is ready to go out beta.

The only limitation for us right now is that Xcode Cloud has a usage limit, a total of 200 hours of computing time per month.

Apart from those challenges, the rest of the adoption process was smooth. We achieved all the goals in just a couple of days (although we had to disable a few automatic workflows because of the runtime limitation).

The GitHub integration works flawlessly. The user interface is quite good both in Xcode and Apple Store Connect website, and there are plenty of logs and information to debug issues with the builds.

Following the internal documentation, each iOS developer set up a workflow for internal distribution and team-specific notification channels.

Wrapping up

With a high level of certainty, I believe that the answer to the question that gives the title to this post is yes.

We still need to wait until the product goes out of beta and see the pricing model, but we are already enjoying its benefits. It is hard to imagine a third-party solution that can compete with an internal tool in the long run.

In summary, if you came to this post being on the fence with Xcode Cloud because your project has some complexity, I would definitively say: give it a try.

Thanks for reading!

We are hiring

Interested in joining our awesome iOS team at Turo?. Help us build product features that delight guests who book vehicles on our platform and enable hosts with the tools they need to manage their cars.

--

--