Swift Developer
Published Nov 10, 2019
When I was on my last team as an iOS Software Developer we used Jenkins backed by Mac build minis to build our iOS app. Jenkins was picked because every other team in the organization used it. We had a dedicated DevOps teams handling the maintenance and up keep of the servers. This solution worked great for us when I started on the team. We had about 4 iOS developers and about 3 build machines. Not much emphasis was put on using the build machines so our build process was quite simple and we were only creating an ipa. This took around 35 minutes.
Over the time I was on the team it grew to over 10 iOS developers and we added more projects to build and more ways to build those projects. So our build time went up dramatically, of course it reared its ugly head when we were getting ready for a release or when we were completing a sprint. Worst case build times got up to over 6 hours because of queuing and rebuilding. This was completely unacceptable. We also introduced two tiered PRs which further worsened the problem.
DevOps made it there quarterly goal to bring down our build time to an optistimic 20 minutes. They investigated purchasing more Mac build minis but with our projected team growth and project growth they were estimating they would need at least 20 more. This was unacceptable as they were trying to move hardware management into the cloud. So they started investigating cloud based iOS solutions. The biggest hurdle for iOS in general is that you have to build on Mac hardware. You cannot use a virtual Mac machine. There are also various different types of solutions. For example you could rent some Mac machines and ssh into them and do what ever you want. And then there were some nearly completely hands off solutions where you just specify your git repository. Eventually the DevOps engineer found CircleCI. It wasn’t perfect and there will still going to be some tradeoffs.
Even with the reasons not to move, the positives far out weighed the negatives and we transitioned over to CircleCI. It was great having so many more build machines available for pull-requests. You never had to wait hours for the build to complete.