22

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?

Gruntcakes
  • 37,738
  • 44
  • 184
  • 378
  • Have you tried passing the name without extension? – Eimantas Nov 21 '12 at 20:44
  • I've revised my question as I found its a much more generic problem, simply doing "xcodebuild -list" for example gives different results from the command line as from within Jenkins. – Gruntcakes Nov 21 '12 at 20:53

2 Answers2

32

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.

poxion
  • 872
  • 10
  • 14
0

you must ignore your .xcodeproj/xcuserdata/.xcuserdatad in your .gitignore file. xcodebuild -list get schemes from .xcodeproj/xcuserdata/.xcuserdatad/xcschemes. jenkins server has no this file so get no schemes,you can open *.xcodeproj in your jenkins server,it will create the file and then do xcodebuild -list can get the current schemes.I have the same problem and solved by the method above.

SuperHappy
  • 161
  • 2
  • 11