/ xcode

macOS Xcode Build Server tutorial

I was trying to setup a macOS Server for continuous integration. Now I am a happy Bitrise user. Firstly I wanted to share how to setup the server but I think this is already well made by honza dvorsky. Setting up your Xcode build server is a pain in the ass. Let me tell you my story.

TL;DR:

Use Bitrise, don't struggle.

The story

I thought it's a good idea to have a build server, so I grabbed the Server app, installed it, and I thought things are going to be easy. I did everything according to the manual. I configured Xcode, connected my developer account, created a bot and started a build. I was happy, everything worked like a charm, and I was waiting for the result...

NO!

The bot never finished, because it could not sign my app. All the accounts were connected, the provisioning files were there, but nothing.

Ah, did I mention the pod install phase? The build server is using a different user account, you don't have your standard path. You have to use full path in every script. That's just a little thing but it's really annoying.

After a couple of hours I was able to sign my product, but the process involved some keychain modifications, copying provisioning profiles, and some really nasty stuff. Anyway I did it. The bot finished, and my ipa was ready to download.

Cool I thought. Now I wanted to assign my server to a public domain address to make it reachable from everywhere. I set the domain and made a new build. The server was reachable, but an error message appeared when I tapped the install app button.

Could not connect to [myserver]

All right, let's solve this. After hours of searching it was clear that I need a valid ssl certificate in order to fix this issue. Ok, let's encrypt. The thing is: if you install the server app, it's going to reserve port 80 and 443 by default. So in order to install certbot you need to stop the server app. But there is no option to shut that goddamn thing off. You need to change the underlying apache conf and reboot your computer.

Is this really happening in 2016 or what?

Oh, wait... before I actually started to use let's encrypt, I wanted to hack a self signed certificate into the system, but that is almost impossible to do. I could not make the install process work with a self-signed ssl certificate. Finally I was able to install certbot, added my cert, and everything worked. I could install my application and I was happy fine with the result.

Bitrise.io

After a few weeks I was thinking about an alternative solution. We were early adopters of Bitrise.io with my company, but that time it was in beta so we thought that Xcode server and bots are the future.

Now Bitrise is a grown up CI service. I started to setup the same project under my account. 10 minutes later the app was on my phone. No hacking, no scripting or no need to search google about a problem for hours. It just works.

Continuous happiness as a service

It's true. Now we moved lots of other things to Bitrise as well. We are building Android apps, node.js projects with Bitrise and we love it. They have a slack team, you can register for free and ask questions right from the creators.

I really want to say something bad about this service but I just can't. :) Everything works like a charm. It's cross platform, fast and reliable. I am more than happy with it. If you are struggling with Bamboo, Travis, or Jenkins, it's time to change. Bitrise is fully configurable you can even create your own build steps. If you don't believe me...

Try now, it's free to sign up.

PS.: This is not a sponsored post, I just wanted to share my story. :)