Separate build directory using xcodebuild

前端 未结 5 2179
情深已故
情深已故 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 09:51

    Xcode 10

    For a Workspace if you're using CocoaPods:

    xcodebuild -workspace youProject.xcworkspace -scheme yourScheme -sdk iphonesimulator -configuration Release SYMROOT=$(PWD)/build
    

    That will put your .app in ./build/Release-iphonesimulator

    0 讨论(0)
  • 2021-02-07 09:55

    You can set build settings from the command line. The CONFIGURATION_BUILD_DIR will set the build directory. For example:

    xcodebuild -project YourProject.xcodeproj -configuration Debug -target All ARCHS=x86_64 ONLY_ACTIVE_ARCH=YES CONFIGURATION_BUILD_DIR=../some/other/dir
    

    A reference is found on Apple's site:

    • Build Setting Reference
    0 讨论(0)
  • 2021-02-07 09:57

    You should set the SYMROOT build setting to your desired location. All of the other relevant build settings are derived from it.

    0 讨论(0)
  • 2021-02-07 10:07

    In my project, setting SYMROOT turned out to be sufficient to build the project in a different location, leaving other locations untouched.

    From Apple's Xcode Build Setting Reference (which I came across via another answer here, thanks!):

    SYMROOT (Build Products Path)

    Description: Directory path. Identifies the root of the directory hierarchy that contains product files and intermediate build files. Product and build files are placed in subdirectories of this directory.

    ...

    Affects: BUILT_PRODUCTS_DIR, CONFIGURATION_BUILD_DIR (...)

    This setting is also mentioned a few times in the xcodebuild man page:

    Available actions are:

    build: Build the target in the build root (SYMROOT)...

    clean: Remove build products and intermediate files from the build root (SYMROOT)....

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题