diff --git a/BREAKING-CHANGES.txt b/BREAKING-CHANGES.txt
index 51ef929cb1..fcee52f070 100644
--- a/BREAKING-CHANGES.txt
+++ b/BREAKING-CHANGES.txt
@@ -1,6 +1,32 @@
JUCE breaking changes
=====================
+Develop
+=======
+
+Change
+------
+Xcode projects generated using the Projucer will now use the "New Build System"
+instead of the "Legacy Build System" by default.
+
+Possible Issues
+---------------
+Xcode 10.0 - 10.2 has some known issues when using the new build system such as
+JUCE modules not rebuilding correctly when modified, issue and file navigation
+not working, and breakpoints not being reliably set or hit.
+
+Workaround
+----------
+If you are using an affected version of Xcode then you can enable the "Use
+Legacy Build System" setting in the Projucer Xcode exporter to go back to the
+previous behaviour.
+
+Rationale
+---------
+The legacy build system has issues building arm64 binaries for Apple silicon
+and will eventually be removed altogether.
+
+
Version 6.0.5
=============
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
index 16a544869a..dfdaec9662 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
@@ -182,7 +182,8 @@ public:
useHeaderMapValue (settings, Ids::useHeaderMap, getUndoManager()),
customLaunchStoryboardValue (settings, Ids::customLaunchStoryboard, getUndoManager()),
exporterBundleIdentifierValue (settings, Ids::bundleIdentifier, getUndoManager()),
- suppressPlistResourceUsage (settings, Ids::suppressPlistResourceUsage, getUndoManager())
+ suppressPlistResourceUsageValue (settings, Ids::suppressPlistResourceUsage, getUndoManager()),
+ useLegacyBuildSystemValue (settings, Ids::useLegacyBuildSystem, getUndoManager())
{
if (iOS)
{
@@ -269,7 +270,9 @@ public:
bool isDocumentBrowserEnabled() const { return uiSupportsDocumentBrowserValue.get(); }
bool isStatusBarHidden() const { return uiStatusBarHiddenValue.get(); }
- bool getSuppressPlistResourceUsage() const { return suppressPlistResourceUsage.get(); }
+ bool getSuppressPlistResourceUsage() const { return suppressPlistResourceUsageValue.get(); }
+
+ bool shouldUseLegacyBuildSystem() const { return useLegacyBuildSystemValue.get(); }
String getDocumentExtensionsString() const { return documentExtensionsValue.get(); }
@@ -392,6 +395,11 @@ public:
"Using a leading '.' is optional, and the extensions are not case-sensitive.");
}
+ props.add (new ChoicePropertyComponent (useLegacyBuildSystemValue, "Use Legacy Build System"),
+ "Enable this to use the deprecated \"Legacy Build System\" in Xcode 10 and above. "
+ "This may fix build issues that were introduced with the new build system in Xcode 10 and subsequently fixed in Xcode 10.2, "
+ "however the new build system is recommended for apps targeting Apple silicon.");
+
if (isOSX())
{
props.add (new MultiChoicePropertyComponent (validArchsValue, "Valid Architectures", getAllArchs(), getAllArchs()),
@@ -570,7 +578,7 @@ public:
props.add (new TextPropertyComponent (pListPrefixHeaderValue, "PList Prefix Header", 512, false),
"Header file containing definitions used in plist file (see PList Preprocess).");
- props.add (new ChoicePropertyComponent (suppressPlistResourceUsage, "Suppress AudioUnit Plist resourceUsage Key"),
+ props.add (new ChoicePropertyComponent (suppressPlistResourceUsageValue, "Suppress AudioUnit Plist resourceUsage Key"),
"Suppress the resourceUsage key in the target's generated Plist. This is useful for AU"
" plugins that must access resources which cannot be declared in the resourceUsage block, such"
" as UNIX domain sockets. In particular, PACE-protected AU plugins may require this option to be enabled"
@@ -668,9 +676,6 @@ public:
[this] (MemoryOutputStream& mo) { writeProjectFile (mo); });
writeInfoPlistFiles();
-
- // This forces the project to use the legacy build system to workaround Xcode 10 issues,
- // hopefully these will be fixed in the future and this can be removed...
writeWorkspaceSettings();
// Deleting the .rsrc files can be needed to force Xcode to update the version number.
@@ -1961,7 +1966,7 @@ private:
uiFileSharingEnabledValue, uiSupportsDocumentBrowserValue, uiStatusBarHiddenValue, documentExtensionsValue, iosInAppPurchasesValue,
iosContentSharingValue, iosBackgroundAudioValue, iosBackgroundBleValue, iosPushNotificationsValue, iosAppGroupsValue, iCloudPermissionsValue,
iosDevelopmentTeamIDValue, iosAppGroupsIDValue, keepCustomXcodeSchemesValue, useHeaderMapValue, customLaunchStoryboardValue,
- exporterBundleIdentifierValue, suppressPlistResourceUsage;
+ exporterBundleIdentifierValue, suppressPlistResourceUsageValue, useLegacyBuildSystemValue;
static String sanitisePath (const String& path)
{
@@ -2312,21 +2317,28 @@ private:
.getChildFile ("xcshareddata")
.getChildFile ("WorkspaceSettings.xcsettings");
- build_tools::writeStreamToFile (settingsFile, [this] (MemoryOutputStream& mo)
+ if (shouldUseLegacyBuildSystem())
{
- mo.setNewLineString (getNewLineString());
+ build_tools::writeStreamToFile (settingsFile, [this] (MemoryOutputStream& mo)
+ {
+ mo.setNewLineString (getNewLineString());
- mo << "" << newLine
- << "" << newLine
- << "" << newLine
- << "" << newLine
- << "\t" << "BuildSystemType" << newLine
- << "\t" << "Original" << newLine
- << "\t" << "DisableBuildSystemDeprecationWarning" << newLine
- << "\t" << "" << newLine
- << "" << newLine
- << "" << newLine;
- });
+ mo << "" << newLine
+ << "" << newLine
+ << "" << newLine
+ << "" << newLine
+ << "\t" << "BuildSystemType" << newLine
+ << "\t" << "Original" << newLine
+ << "\t" << "DisableBuildSystemDeprecationWarning" << newLine
+ << "\t" << "" << newLine
+ << "" << newLine
+ << "" << newLine;
+ });
+ }
+ else
+ {
+ settingsFile.deleteFile();
+ }
}
void writeInfoPlistFiles() const
diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
index b2cc932936..bcf0b048b2 100644
--- a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
+++ b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
@@ -358,6 +358,7 @@ namespace Ids
DECLARE_ID (pluginVSTNumMidiInputs);
DECLARE_ID (pluginVSTNumMidiOutputs);
DECLARE_ID (suppressPlistResourceUsage);
+ DECLARE_ID (useLegacyBuildSystem);
DECLARE_ID (exporters);
DECLARE_ID (website);
DECLARE_ID (mainClass);