I didn't expect that this would be my first blog post of 2018. On my holiday, I read the tweet that "Apple Buys BuddyBuild" and it raised my eyebrow. I blinked and read the tweet again. I quickly checked BuddyBuild's Twitter handle, but there wasn't any tweet. I googled it and found that Tech Crunch, CNBC, and the BuddyBuild blog confirmed this news.
This news is certainly exciting news for me considering the work I am doing on iOS DevOps and CI/CD. I picked up the phone and congratulated Dennis on Twitter.
It wasn't too long ago that I met the BuddyBuild team in person and got a pack of t-shirts delivered to me for my work on the iOS CI Olympics 2017. I had a conversation personally and on Twitter with Dennis, Chris, and Alysha at the London BuddyBeers meetup in October 2017.
I got in touch with BuddyBuild when I was running the iOS CI Olympics 2017. Being passionate about iOS Continuous Integration and Continuous Delivery, I have conducted Olympics of top 5 cloud-based iOS CI services with 20 different criteria and BuddyBuild was the winner. You can read series of blog post here
The final medal looked like this: BB = BuddyBuild, BR= Bitrise, TC= TravisCI, NC= NeverCode, CC= CircleCI
During this evaluation, I got huge support from the BuddyBuild team to understand the key concepts and workings of BuddyBuild. As BuddyBuild became the winner, they posted the results of the Olympics on the BuddyBuild blog: iOS Continuous Integration & Deployment Comparision.
BuddyBuild sent me some t-shirts that I distributed to my colleagues at Yoox Net-A-Porter.
Although I liked BuddyBuild a lot, I never tried to use it for the projects I am working on because we use TravisCI and I have set up a fully automated end-to-end pipeline to deploy iOS apps straight to iTunes Connect using Fastlane. Recently, I set up some Xcode Server bots to iOS to get ad-hoc builds on devices and run XCUITests on real devices. We keep looking for a new build system, but my love for Apple developer tools never takes me outside of Xcode Server. I love Xcode Server a lot, I hate Xcode Server a lot...either way, I was hooked into Xcode Server. That's because of all my love towards Apple developer tools. I did lot of things on Xcode Server, like
- Wrote Ansible role for Xcode Server to manage mac Minis. Read the detailed post here.
- Integrated Xcode Code Diagnostic tools with Xcode Server. Detailed post here.
- Integrated Slack with Xcode Server bots. Detailed post here.
- Wrote the detailed guide on setting up Over The Air installation. Detailed post here.
- Complained about its pitfalls on Twitter and submitted bugs to Apple. Read about the limitations here. Apple closed my bug report on Pull Request testing on Xcode Server as a duplicate and never gave me the details of the original bug.
- After the WWDC 2017 talk on Xcode Server, I immediately published a blog with the latest Xcode Server features. Read the Xcode Server + Xcode 9 blog here.
All these things I have done so far look like they were in vain. I don't know what's going to happen to Xcode Server now. In reality, Xcode9 and Xcode Server are really playing well, apart from pull request testing support. Almost everything, from code signing to automatic device registration, real device testing, and over the air installation all became so painless. It was doing way better than Jenkins, TeamCity, and other self-hosted CI solutions, apart from pull request testing.
Now I am keen to see what Apple will do with Xcode Server. Will they kill it completely? Or will they keep still keep it as a self-hosted CI solution and make BuddyBuild a Cloud CI solution? Exciting times ahead!
The latest Xcode Server almost removed the need for Fastlane as everything is inbuilt in the Xcode Server. BuddyBuild guesses everything looking at the Xcode projects in the repo and does its own things, which hardly need Fastlane. However, it works well for setting up scripted pipelines on TravisCI or CircleCI successfully, as they don't guess anything. Everything has to be scripted. The annoying thing about Fastlane is they are trying to do too much, really really too much- almost publishing a new version every day, always chasing Apple, chasing Google, chasing third-party integrations, etc. Stay calm, Fastlane!
Nowadays, the Swift version of Fastlane is an incredibly crazy Swift wrapper to execute Ruby commands. I wrote about my first impressions of Fastlane Swift here. It would be interesting to see how Fastlane will perform in the competitive iOS CI/CD world.
This is purely my personal opinion, but I feel that Apple is not a problem, not the third parties. The basic problem remains in the amateur world of iOS developers. I am not saying all, but most of the iOS developers only know Xcode and a few Apple frameworks; they can write complex Objective-C/Swift code but can't run a single command from the terminal. How do you expect them to learn the underlying tools that Xcode uses to perform all the iOS development activities like building, testing, and archiving? How do you expect them to script iOS CI/CD pipelines using tools like Codesign, xcodebuild, plistbuddy, and agvtool? These lazy buggers want Xcode to do all these things for them, and if something goes wrong, they have to put their blood and sweat into it. Some experienced developers whose beard goes grey by doing iOS development still find it hard to deal with code signing activities. Some developers are great at scripting and understand all these tools- they won't ever face these problems, or they won't need any automatic solutions to deal with CI/CD. They should understand the simple fact that knowing UIKit and some Apple frameworks doesn't make them good iOS developers. They should also learn command line tools and scripting languages to deal with CI/CD-related issues. They should take control of scripts and do whatever they wish rather than someone guessing what's on their mind and doing the stuff for them.
I am sure Apple knows this problem, that iOS developers want everything in Xcode, and didn't want to use scripting or command line tools. Every year, Apple puts new buttons in Xcode that do something under the hood. When it comes to the server, everything has to be scripted. Xcode Server is the one tool to allow developers to perform CI from Xcode itself. They introduced and solved the pain of code signing with the automatic signing feature in Xcode. In short, Apple is trying hard to make them happy. The acquisition of BuddyBuild is another step to handle everything from Xcode.
It will be very exciting to see what will be announced at WWDC 2018. There are certain possibilities that might happen:
- Apple will keep Xcode Server as a self-hosted CI sevice and BuddyBuild as a cloud CI service.
- BuddyBuild won't support open-source projects, so prepare to migrate to TravisCI, CircleCI, or Bitrise.
- Apple might kill Xcode Server completely and support only one CI service. If you are running Xcode bots with multiple mac Mini servers, then prepare yourself for other self-hosted CI solution like Jenkins, TeamCity, etc.
- Expect Cloud Xcode Server or similar at WWDC 2018.
- There might be a device lab for running tests in the cloud on real devices. No CI has devices attached to the cloud at the moment. We have to use some sort of services like AWS Device farm, Saucelabs, etc.
- Forget about Infrastructure as Code. Assume that you won't have control on CI/CD pipelines. Let them guess your Xcode project and do the stuff. Or, depend on a UI configuration browser or Xcode.
- Be ready to drag your development and distribution certificates from Finder to Xcode or the browser. Don't worry, someone else will take care of code signing activities, which will be amazing.
BuddyBuild acted as the market leader by providing great services to the customer and a great product. This bunch of nice and talented people have now become part of Apple. I wish them good luck and expect some great products this year. Congratulations to Dennis and the team for such a great achievement. We all are excited to see what you build this year!