From fc14dc402e8f495d935106c8cb96bb3ef2d7c9e2 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 9 Dec 2020 15:40:20 +0000 Subject: [PATCH] Projucer: Enabled the "New Build System" by default for Xcode projects and added an exporter setting to enable the old behaviour --- BREAKING-CHANGES.txt | 26 ++++++++++ .../ProjectSaving/jucer_ProjectExport_Xcode.h | 52 ++++++++++++------- .../Source/Utility/Helpers/jucer_PresetIDs.h | 1 + 3 files changed, 59 insertions(+), 20 deletions(-) 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);