Early Impressions: Xcode 5 Bots

Today I got to sink my teeth into Xcode 5’s continuous integration (CI) capabilities on a Mac Mini running OS X Mavericks and Server Developer Previews.

Since the software is still under NDA, I can’t elaborate on any details, but I can share my experience.  In short: I got it working, but man it sucked to get there.

For the 5th Developer Preview, with the release coming around the recently confirmed iPhone 5S/6 announcement on Sept 10,  there are still a good number of bugs (many of which I reported like a good developer).  Granted this is essentially a 1.0 release of a substantial piece of software so this is to be expected, but I hope some of these get ironed out soon so the coolness of their CI solution may be fully realized.

Again, sparing details, Apple has been doing a lot to simply and automate the provisioning profile and certificate management experience – both in Xcode 5 and on the CI server – but as a result there are a lot more things that can go wrong that the developer doesn’t have much visibility into.  And as of now, a lot goes wrong with the new automated processes.

But this isn’t really a new issue: prior to this point, I have become accustomed to manually managing all provisioning profiles and developer/distribution certificates because the semi-automated systems never seemed to work right for me. However, now all of the UI for this manual management has been largely stripped in the new version. Don’t get me wrong, I think the new methodology will be great if they iron out the bugs as manual management of this stuff is not ideal for the developer community at large.

So, I bring this up because the CI server must compile and sign code, and therefore have all of the correct provisioning profiles and certificates must be downloaded and installed to do this.  In the new OS X Server tool, acquiring these components is supposed to be very straightforward (the user experience is for sure in the right direction), however execution just isn’t there yet.  I basically had to resort to performing the broken tasks myself via CLI, and only then could I get it working properly.

Once that got squared away, I did get to see how awesome and powerful Bots are going to be for developers that can benefit from CI.  We are already planning automatic deployments to TestFlight, which ensures our testers will be able to use our latest and greatest builds to test without any manual deployment steps required by a developer.

I’m really excited that Apple decided to add CI as a feature to Xcode, I just hope the final release is substantially more stable than it is now.

See more about Apple’s upcoming Xcode improvements here: https://developer.apple.com/technologies/tools/whats-new.html

5 thoughts on “Early Impressions: Xcode 5 Bots

  1. Matt,

    I’m aware of the NDA restrictions. But I too have lots so much hair. Here it is Oct. 14, and even with the latest of all (Mavericks, osx server, Xcode gm) i cannot to get bots working.

    I have a dev laptop and a separate new mac mini running os x server. I’m good setting up my git repos, and pushing from laptop to server works. Even doing local builds on server with local Xcode 5 works.

    Bots are another hell though. For some reason the only way I could even create a bot was via web interface from laptop to server. All integrations fail however. One of the big complaints is the uuid in the provisioning file the bots workspace seems to be using.

    If I manually load that workspace in Xcode on the server I can build, for some reason the bot’s not happy with it.

    I find a total lack of visibility into what the bot wants, or how to get provisioning profiles into its universe.

    I don’t suppose you could offer me a few tips, without nda violation of course. I would greatly appreciate it as my sanity is about totally lost at this point.

    Thanks for listening,


    1. Hey Michael,

      Sorry for the delay! I have been in the same world of pain for quite some time, but I actually managed to get it working! There are some very specific things you have to do though. I’m actually going to write a post on it right now, so check back soon!

      – Matt

  2. Matt,

    Great, I’m struggling away and would love some meaningful insight. I’ve gotten a Bot built via web UI, and have checked in a workspace containing 2 projects. When I run the bot it looks as though its only cloning the source from 1 of the projects, ignoring the second project (which happens to be RestKit, which is checked into a server repository just as with my apps source).

    So my latest bot error is the famed ‘Argument list too long’, but this is because its unable to find the RestKit header my app uses, so its recursing to death.

    I’ve spent a lot of time looking into the various logs on the server, xcsbuildd.log being quite interesting.

    In the end I really don’t want to have to read through 1000 line log files to reverse engineer whatever Apple glosses over in the fluffy CI guides !!

    any help is _very_ appreciated,

    1. Hey Michael,

      Oh man, that sounds like fun! :)

      I haven’t run into this one, but the only thing I can think of is “build configuration”. You may want to try to set the build path for RESTkit directly in your search headers path and disable recursion.

      Otherwise, I’m not sure where to go with that one. I did post a lengthy article about all of my experiences here: http://matt.vlasach.com/xcode-bots-hosted-git-repositories-and-automated-testflight-builds

  3. This article is on 18 spot in google’s search results,
    if you want more traffic, you should build more backlinks to your website, there is
    one trick to get free, hidden backlinks from authority forums, search on youtube;
    how to get hidden backlinks from forums

Leave a Reply to Matt Vlasach Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>