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

Jenkinsxcodexcodebuild

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?

Best Answer

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.