In this post, I’d like to outline what MacLemon and I worked on for the metalab Hackathon 8. The project stems from a problem with one of the most basic rules of software development:

Let software developers develop software, don’t hog them with repeated configuration/administration stuff.

This rule is violated with large-scale Cocoa development for the iPhone that also has beta testers: If you want to allow them, you need something like HockeyApp (or TestFlight, but we didn’t use that one). Further, somebody might break the build without realizing it (that’s not specific in any way to Cocoa development). Different versions of Xcode use different compilers, which might not accept the same source code.

Apple sketched a solution for some of these problems in WWDC 2012, session 404: You can integrate Xcode into Jenkins CI, a continuous integration platform written in Java. We chose to improve on this solution, to let it do much more.

What you need:

  • A build server that runs Mac OS X, accessible by all developers and itself able to access the HockeyApp website.
  • A server runnig git. This might be the same server as the above, but doesn’t have to be. Our instructions are for the case where it’s on the same server, as this is easier to do (only “localhost” as hostname).
  • Development must happen using git & Xcode (we tested version 4.3, 4.4DP4 and 4.5DP2)
  • A very solid knowledge of the command line, since just about everything will be done there.

What this solution provides:

  • On every push, the app is checked for build errors (and the test suites can be run, if you happen to have some).
  • Working versions are automatically tagged, so you can easily correlate build logs to the git history.
  • Pushing a release to HockeyApp only requires adding a tag to a revision before pushing it to the server.

Some ideas in what way this solution can be extended very easily:

  • Push working git revisions to a different git server.
  • Email a build breaker to communicate this fact.

View full article »