Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xcode: How to make xcodebuild build a project that contains sub-projects

I have an Xcode project that contains several sub-projects (framework projects that compile as lib files) as part of the main project. The project compiles/builds properly in Xcode (builds the sub-projects correctly from the bottom of the hyarchial tree up to the main app project).

I am now trying to set up the project for Continuous Integration, and when I attempt to build from the command line using xcodebuild... the build fails due to not finding the .a files that should have been built before the main project.

I can build each of the lib files from the cmd line independently, but the entire consolidated project fails. Even though I have the dependancies correctly managed in the target scheme and if I specify the target or scheme when I use xcodebuild, it still will not build the sub-projects.

Is there a way to make xcodebuild build the sub-projects and then the main project as it does in the Xcode IDE? If not, would this work if I converted the entire project into a workspace?

Any help or suggestions would be greatly appreciated. I am running Xcode 5.1.1 on Mavericks.

like image 303
SeaWolf Avatar asked May 15 '14 22:05

SeaWolf


People also ask

What does the xcodebuild command do?

Xcode projects, workspaces, targets and schemes -- better understand what each of these arguments means in an xcodebuild command. xcodebuild is a command-line tool that offers the ability to build and test your Xcode projects.

How do I create a project in Xcode?

Launch Xcode, then click “Create a new Xcode project” in the Welcome to Xcode window or choose File > New > Project. In the sheet that appears, select the target operating system or platform and a template under Application. In the following sheets, fill out the forms and choose options to configure your project.

How to add xcodeproj to a sub-project?

Best if you just drag the xcodeproj from Finder into the project. Next you need to add the path to look for the sub-project’s headers in to your build settings. You cannot add the .h files to your main project, but you can tell the compiler where it can find them. Specify the path relative to your project’s root folder.

How does Xcode handle multiple targets in a project?

However, regardless of the number of targets in a project or workspace, each target will still have a one-to-one relationship with a single product. When multiple targets exist in a project or workspace, Xcode can automatically detect any dependencies between them, in which case it will build the products in the required order.


1 Answers

The solution was a simple one... using the "-scheme" flag instead of "-target" allowed the project to build correctly (all sub-projects/frameworks and then target App)

FAILED:

xcodebuild -project MyProject.xcodeproj -target MyProject -sdk "iphoneos" -configuration “Build” archive OBJROOT=../../build_iOS/Obj.root SYMROOT=../../build_iOS/Sym.root 

BUILT AS EXPECTED:

xcodebuild -project MyProject.xcodeproj -scheme MyProject -sdk "iphoneos" -configuration “Build” archive OBJROOT=../../build_iOS/Obj.root SYMROOT=../../build_iOS/Sym.root 

There was no need to convert the project to a workspace.

like image 53
SeaWolf Avatar answered Sep 26 '22 04:09

SeaWolf