xcodebuild commands give different results when run from the command line than when run from within Jenkins

Gruntcakes picture Gruntcakes · Nov 21, 2012 · Viewed 7.3k times · Source

I'm setting up a CI system using Jenkins and was finding that the build was failing because xcodebuild reports there are no schemes when I was executing the line

-xcodebuild -workspace XXX -scheme NNN.

I couldn't figure out why this could be happening, so to eliminate something screwy being up with my workspace I created a new project template using XCode and found that I am getting a difference in behavior for any xcodebuild command and for any workspace/project.

The template project was called scrap and if from the terminal command line I run this command for example:

  xcodebuild -list

It outputs

Information about project "scrap":
    Targets:
        scrap

    Build Configurations:
        Debug
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

    Schemes:
        scrap

But if I run xcodebuild -list from within Jenkins then the output instead is:

Building in workspace /Users/Shared/Jenkins/Home/workspace/scrap
[scrap] $ /bin/sh -xe /var/folders/ph/s6dvlfq9769741g_yzmjlmz000007c/T/hudson3765407964219991487.sh
+ xcodebuild -list
Information about project "scrap":
    Targets:
        scrap

    Build Configurations:
        Debug
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

    This project contains no schemes.

This is the most simple of jenkins jobs - all I do is create a new job, set it to a free-style software project, then add a build step of Execut shell and add the xcodebuild -list command, that's it.

Why is xcodebuild saying there are no schemes when there are? And why is it behaving differently when run from within Jenkins?

Answer

poxion picture poxion · Nov 22, 2012

Figured out that all you need to do is to set the scheme to be shared. Scheme > Manage Schemes Make sure "Shared" is checked.

This will then generate out a new folder/file .../xcshareddata/xcschemes/???.xcscheme

Check this file into your source control and scheme should now appear on your jenkins box.