How can I use the legacy build system with Xcode 10's `xcodebuild`?
Solution 1
There is an (as of yet undocumented) flag in xcodebuild
: -UseModernBuildSystem=<value>
. The value can be either 0
or NO
to use the legacy ("original") build system, or 1
or YES
to use the new build system.
For example:
xcodebuild -workspace Foo.xcworkspace -scheme Bar -configuration Release -archivePath /path/to/Foo.xcarchive clean archive -UseModernBuildSystem=NO
(-UseNewBuildSystem=<value>
seems to work as well; this flags was introduced in Xcode 9 but I suspect UseModernBuildSystem
is going to be the "official" flag for this.)
Solution 2
Change build system to Legacy Build System
from New Build System
and vice versa.
Open Xcode --> Select File -->Select Workspace Settings
Change Build System to Legacy Build System from New Build System --> Click Done.
Solution 3
To extend DarkDust's answer, in case you're using fastlane for automated builds, additional parameters such as UseModernBuildSystem
can be passed through xcargs
:
build_app(
// ... other necessary parameters,
xcargs: "-UseModernBuildSystem=NO"
)
Solution 4
To select Xcode 10's build system:
In Xcode, go to: File -> Project Settings (or Workspace Settings)-> Build System
From there you can select New Build System (Default)
or Legacy Build System
Hope this help makes this easier.
Solution 5
Currently, I'm using Xcode version 12.0 (12A7209) and follow the below steps and then you can use legacy build mode:
Related videos on Youtube
DarkDust
Used to be a Linux expert (e.g. built an in-house embedded Linux distribution using cross-compiling with which several appliances in the VoIP field were produced). Now a Mac/iPhone/iPad developer.
Updated on July 05, 2022Comments
-
DarkDust almost 2 years
I'd like to use the new build system of Xcode 10 for development, but our build in our continuous integration system fails since the
xcarchive
produced has an issue: theInfo.plist
in thexcarchive
is missing theApplicationProperties
key and the information therein!It turns out switching back to the legacy build system fixes this. This can be done in the workspace settings (File > Workspace Settings… > Build System). But I would prefer to keep the new build system for development and only use the legacy build system for CI builds.
Is there a way to make
xcodebuild
use the legacy build system without modifying the workspace? -
cynistersix over 5 yearsDo you think this is a bug with Xcode or something else going on where that entry in the plist is missing?
-
DarkDust over 5 years@cynistersix: I think so, yes. There seem to be other issues with the new build system as well: for example, if you're using CocoaPods and change a file in a pod the new build system doesn't correctly recompile it, you have to clean the project first. My guess is that since the new buildsystem is an improvement but not perfect yet they also left in the support for the legacy buildsystem.
-
niko.mikulicic over 5 yearsThis will change project settings. The question was about xcodebuild using the legacy build system without modifying the workspace
-
CrazyOne over 5 yearsTrue Niko, thanks for clarifying. Hopefully this will help those that do need it otherwise.
-
DarkDust over 5 yearsThank you, but as stated in the question, that's already known. This question is about the
xcodebuild
tool. -
Mattijs almost 4 yearsIn Xcode 11, this menu item is called Project Settings
-
Dipesh Pokhrel over 3 yearshow to do for CI
-
sejn almost 3 yearsIf we change this to deprecated one, is it a good thing to change this?
-
AmerllicA almost 3 years@sejn, This answer is not about being good or not, if someone needs to change the build type to legacy one, this is the way.
-
sejn almost 3 years@AmerllicA I am getting the below error after changing to Legacy build system. The legacy build system does not support building projects with Swift when SWIFT_ENABLE_LIBRARY_EVOLUTION is enabled.