1

I'm looking into TeamCity and Jenkins, for a CI server.

My goal is this: every time someone commits a change to our repo, the CI server builds all targets in the project as .ipa's - ready for downloading/installing on a device.

I got Teamcity and Jenkins up and running, using a Mac mini as a build slave. That part of it is working fine.

Using Jenkins XCode plugin, I succeeded in building all targets as .ipa's. I havent had such luck with Teamcity. The XCode plugin doesnt allow building all targets. Rather, you have to specify which targets you want to build, in each build configuration. I approached the makers of Teamcity, and they gave me some convoluted method involving meta runners and a lot of duplication, in order to accomplish my goal.

Instead of relying on plugins, I'd rather build the .ipa's using shell scripting. However, as I'm not a script ninja, I can't figure out how to go about this.

I can figure out how to build one target via scripting, but it illudes me how make it build them all. Everytime I create a new target in the project, I don't want to have to add it at the CI server. The server should be able to automatically build all targets in the project.

...Maybe someone has a better solution? Any help is much appreciated.

Telstar
  • 143
  • 8

1 Answers1

1

What you should do (codes are bash script snippets, ready to run on OS X, you don't need to install anything except Xcode's CLI/Command Line Tools):

  • if you want to do this for every Xcode project file you have in your repository you should first search for these (if you have a specific Xcode project you can skip this)

    for path in $(find . -type d -name '*.xcodeproj' -or -name '*.xcworkspace')
    

    do

  • after this you can query all the shared (!) schemes through Xcode's command line tool

    if [[ "$project" == *".xcodeproj" ]]; then
      xcodebuild_output=($(xcodebuild -list -project "$project"))
    else
      xcodebuild_output=($(xcodebuild -list -workspace "$project"))
    fi
    
  • now you have all the schemes so you can simply xcodebuild them one-by-one

Here's a bash script we developed to search for every Xcode project and every scheme configuration in a repository: https://github.com/concretebuilder/steps-cocapods-and-repository-validator/blob/master/find_schemes.sh

Note: you need to mark you schemes as shared to get xcodebuild (the command line interface of Xcode) list them.

Viktor Benei
  • 3,447
  • 2
  • 28
  • 37