Separate build directory using xcodebuild

前端 未结 5 2162
情深已故
情深已故 2021-02-07 09:11

The man page for xcodebuild reads:

Run xcodebuild from the directory containing your project (i.e. the directory containing the project

5条回答
  •  执念已碎
    2021-02-07 10:15

    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.

提交回复
热议问题