How can I use the legacy build system with Xcode 10's `xcodebuild`?

XcodeCocoa TouchContinuous IntegrationXcodebuildXcode10

Xcode Problem Overview


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: the Info.plist in the xcarchive is missing the ApplicationProperties 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?

Xcode Solutions


Solution 1 - Xcode

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 - Xcode

Change build system to Legacy Build System from New Build System and vice versa.

Open Xcode --> Select File -->Select Workspace Settings

enter image description here

Change Build System to Legacy Build System from New Build System --> Click Done.

enter image description here

Solution 3 - Xcode

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 - Xcode

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 - Xcode

Currently, I'm using Xcode version 12.0 (12A7209) and follow the below steps and then you can use legacy build mode:

  1. Workspace Setting:

    enter image description here

  2. Set the legacy build mode:

    enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDarkDustView Question on Stackoverflow
Solution 1 - XcodeDarkDustView Answer on Stackoverflow
Solution 2 - XcodeNareshView Answer on Stackoverflow
Solution 3 - Xcodeniko.mikulicicView Answer on Stackoverflow
Solution 4 - XcodeCrazyOneView Answer on Stackoverflow
Solution 5 - XcodeAmerllicAView Answer on Stackoverflow