The man page for xcodebuild
reads:
Run xcodebuild from the directory containing your project (i.e. the directory containing the project
To achieve complete separation the following build settings have to be changed (more than just CONFIGURATION_BUILD_DIR
like accepted answer suggests), otherwise Xcode still builds some of its artifacts under its default build folder.
On my machine Xcode normally builds everything to ./Build
and ./DerivedData
where current directory is one of my project.
I wanted xcodebuild to build everything under Build-command-line
folder so I used xcodebuild -scheme MyScheme -showBuildSettings | grep Build\/
to find all build settings that correspond to all build paths and by trial-end-error I found "the generative" build settings that are enough to redirect all build artefacts produced by xcodebuild to custom folder.
I ended up using the following command:
BUILD_DIR=./Build-command-line
DERIVED_DATA_DIR=$(BUILD_DIR)/DerivedData
xcodebuild -project MyProject.xcodeproj \
-IDEBuildOperationMaxNumberOfConcurrentCompileTasks=`sysctl -n hw.ncpu` \
-scheme MyScheme \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 6S Plus,OS=latest' \
-xcconfig command-line-build.xcconfig \
-derivedDataPath $(DERIVED_DATA_DIR) \
test
Where command-line-build.xcconfig
is:
HERE_BUILD=$(SRCROOT)/Build-command-line
HERE_INTERMEDIATES=$(HERE_BUILD)/Intermediates
// Paths
// the following paths are enough to redirect everything to $HERE_BUILD
MODULE_CACHE_DIR = $(HERE_BUILD)/DerivedData/ModuleCache
OBJROOT = $(HERE_INTERMEDIATES)
SHARED_PRECOMPS_DIR = $(HERE_INTERMEDIATES)/PrecompiledHeaders
SYMROOT
Note: Make sure you use absolute paths in your xcconfig, otherwise you may have error: Xcode crashing on startup “parentPath must be nil but it is not.
I have written a post about this solution with a bit of background: xcodebuild: how to really change its build path.
P.S. Of course this information is subject to change but as of Xcode Version 7.3.1 (7D1014)
it works perfectly for me.