From db3c6e6216c1785d09bd889b39288cfb9ac37e22 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Mon, 11 Apr 2022 13:50:34 +0100 Subject: [PATCH] macOS/iOS: Fix unguarded availability warnings --- .../DemoRunner.xcodeproj/project.pbxproj | 8 +- .../iOS/DemoRunner.xcodeproj/project.pbxproj | 8 +- .../AudioPluginHost.xcodeproj/project.pbxproj | 8 +- .../AudioPluginHost.xcodeproj/project.pbxproj | 8 +- extras/Build/CMake/JUCEHelperTargets.cmake | 4 +- .../MacOSX/Projucer.xcodeproj/project.pbxproj | 8 +- .../ProjectSaving/jucer_ProjectExport_Xcode.h | 1 + .../ProjectSaving/jucer_ProjectExporter.cpp | 3 + .../ProjectSaving/jucer_ProjectExporter.h | 3 +- .../UnitTestRunner.xcodeproj/project.pbxproj | 8 +- .../native/juce_mac_CoreMidi.mm | 12 +- .../juce_AudioUnitPluginFormat.mm | 38 ++++-- ..._mac_BluetoothMidiDevicePairingDialogue.mm | 4 +- modules/juce_core/native/juce_mac_Files.mm | 5 +- modules/juce_core/native/juce_mac_Network.mm | 2 +- .../juce_core/native/juce_mac_ObjCHelpers.h | 2 +- .../juce_ScopedLowPowerModeDisabler.cpp | 17 ++- .../accessibility/juce_ios_Accessibility.mm | 42 ++---- .../accessibility/juce_mac_Accessibility.mm | 42 +++--- .../native/juce_mac_FileChooser.mm | 9 +- .../native/juce_mac_NSViewComponentPeer.mm | 11 +- .../native/juce_mac_SystemTrayIcon.cpp | 6 +- .../native/juce_mac_WebBrowserComponent.mm | 11 +- .../juce_video/capture/juce_CameraDevice.cpp | 4 - .../juce_video/native/juce_ios_CameraDevice.h | 3 +- .../juce_video/native/juce_mac_CameraDevice.h | 6 +- modules/juce_video/native/juce_mac_Video.h | 124 +++++++++++------- 27 files changed, 220 insertions(+), 177 deletions(-) diff --git a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj index 60f1814900..f4add12673 100644 --- a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj @@ -575,8 +575,8 @@ LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; PRODUCT_NAME = "DemoRunner"; @@ -667,8 +667,8 @@ INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; PRODUCT_NAME = "DemoRunner"; diff --git a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj index 5230f6d63a..e64b2e9acb 100644 --- a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj @@ -578,8 +578,8 @@ INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; PRODUCT_NAME = "DemoRunner"; @@ -670,8 +670,8 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; PRODUCT_NAME = "DemoRunner"; diff --git a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj index 78aac00578..6e0a86fee0 100644 --- a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj @@ -500,8 +500,8 @@ LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; PRODUCT_NAME = "AudioPluginHost"; @@ -640,8 +640,8 @@ INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; PRODUCT_NAME = "AudioPluginHost"; diff --git a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj index 2333e3ba22..b4b3239b21 100644 --- a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj @@ -508,8 +508,8 @@ INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; PRODUCT_NAME = "Plugin Host"; @@ -649,8 +649,8 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; PRODUCT_NAME = "Plugin Host"; diff --git a/extras/Build/CMake/JUCEHelperTargets.cmake b/extras/Build/CMake/JUCEHelperTargets.cmake index 7e846d0808..1b99be2086 100644 --- a/extras/Build/CMake/JUCEHelperTargets.cmake +++ b/extras/Build/CMake/JUCEHelperTargets.cmake @@ -31,7 +31,9 @@ elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQU $<$,$>: -Wzero-as-null-pointer-constant -Wunused-private-field -Woverloaded-virtual -Wreorder - -Winconsistent-missing-destructor-override>) + -Winconsistent-missing-destructor-override> + $<$,$>: + -Wunguarded-availability -Wunguarded-availability-new>) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(juce_recommended_warning_flags INTERFACE -Wall -Wextra -Wpedantic -Wstrict-aliasing -Wuninitialized diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj index b40db3b608..e12f824e97 100644 --- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj +++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj @@ -1173,8 +1173,8 @@ INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; PRODUCT_NAME = "Projucer"; @@ -1244,8 +1244,8 @@ INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; PRODUCT_NAME = "Projucer"; diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h index d1433d31bc..00fc00849e 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h @@ -1599,6 +1599,7 @@ public: s.set ("GCC_FAST_MATH", "YES"); auto recommendedWarnings = config.getRecommendedCompilerWarningFlags(); + recommendedWarnings.common.addArray (recommendedWarnings.objc); recommendedWarnings.cpp.addArray (recommendedWarnings.common); struct XcodeWarningFlags diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp index 7c04d1f3e0..e669d9330c 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp @@ -894,6 +894,9 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value llvmFlags.cpp.addArray ({ "-Wunused-private-field", "-Winconsistent-missing-destructor-override" }); + llvmFlags.objc.addArray ({ + "-Wunguarded-availability", "-Wunguarded-availability-new" + }); auto& gccFlags = recommendedCompilerWarningFlags[CompilerNames::gcc] = BuildConfiguration::CompilerWarningFlags::getRecommendedForGCCAndLLVM(); gccFlags.common.addArray ({ diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h index e25b2b9360..24e02f83ef 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h @@ -289,8 +289,7 @@ public: return result; } - StringArray common; - StringArray cpp; + StringArray common, cpp, objc; }; CompilerWarningFlags getRecommendedCompilerWarningFlags() const; diff --git a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj index 14759a8d3a..ee9217938f 100644 --- a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj +++ b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj @@ -465,8 +465,8 @@ LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; PRODUCT_NAME = "UnitTestRunner"; @@ -598,8 +598,8 @@ INSTALL_PATH = "/usr/bin"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; - OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; - OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes"; + OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; + OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; PRODUCT_NAME = "UnitTestRunner"; diff --git a/modules/juce_audio_devices/native/juce_mac_CoreMidi.mm b/modules/juce_audio_devices/native/juce_mac_CoreMidi.mm index 36eb57725e..4f6d8b8103 100644 --- a/modules/juce_audio_devices/native/juce_mac_CoreMidi.mm +++ b/modules/juce_audio_devices/native/juce_mac_CoreMidi.mm @@ -82,10 +82,8 @@ namespace CoreMidiHelpers struct Sender; #if JUCE_HAS_NEW_COREMIDI_API - JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") - template <> - struct Sender : public SenderBase + struct API_AVAILABLE (macos (11.0), ios (14.0)) Sender : public SenderBase { explicit Sender (MIDIEndpointRef ep) : umpConverter (getProtocolForEndpoint (ep)) @@ -177,8 +175,6 @@ namespace CoreMidiHelpers send(); } }; - - JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif #if JUCE_HAS_OLD_COREMIDI_API @@ -829,10 +825,8 @@ namespace CoreMidiHelpers struct CreatorFunctions; #if JUCE_HAS_NEW_COREMIDI_API - JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") - template <> - struct CreatorFunctions + struct API_AVAILABLE (macos (11.0), ios (14.0)) CreatorFunctions { static OSStatus createInputPort (ump::PacketProtocol protocol, MIDIClientRef client, @@ -894,8 +888,6 @@ namespace CoreMidiHelpers static_cast (readProcRefCon)->handlePackets (*list); } }; - - JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif #if JUCE_HAS_OLD_COREMIDI_API diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index b172ca7574..89b1e13705 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -281,7 +281,7 @@ namespace AudioUnitFormatHelpers NSBundle* bundle = [[NSBundle alloc] initWithPath: (NSString*) fileOrIdentifier.toCFString()]; NSArray* audioComponents = [bundle objectForInfoDictionaryKey: @"AudioComponents"]; - NSDictionary* dict = audioComponents[0]; + NSDictionary* dict = [audioComponents objectAtIndex: 0]; desc.componentManufacturer = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"manufacturer"])); desc.componentType = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"type"])); @@ -416,6 +416,14 @@ namespace AudioUnitFormatHelpers */ std::vector channels; }; + + static bool isPluginAUv3 (const AudioComponentDescription& desc) + { + if (@available (macOS 10.11, *)) + return (desc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0; + + return false; + } } //============================================================================== @@ -636,7 +644,7 @@ public: AudioComponentGetDescription (auComponent, &componentDesc); - isAUv3 = ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); + isAUv3 = AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice || componentDesc.componentType == kAudioUnitType_MusicEffect @@ -2545,7 +2553,10 @@ private: { const auto viewSize = [&controller] { - auto size = [controller preferredContentSize]; + auto size = CGSizeZero; + + if (@available (macOS 10.11, *)) + size = [controller preferredContentSize]; if (size.width == 0 || size.height == 0) size = controller.view.frame.size; @@ -2854,12 +2865,15 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, auto callbackBlock = new AUAsyncInitializationCallback (rate, blockSize, std::move (callback)); - if ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0) + if (AudioUnitFormatHelpers::isPluginAUv3 (componentDesc)) { - AudioComponentInstantiate (auComponent, kAudioComponentInstantiation_LoadOutOfProcess, - callbackBlock->getBlock()); + if (@available (macOS 10.11, *)) + { + AudioComponentInstantiate (auComponent, kAudioComponentInstantiation_LoadOutOfProcess, + callbackBlock->getBlock()); - return; + return; + } } AudioComponentInstance audioUnit; @@ -2883,8 +2897,10 @@ bool AudioUnitPluginFormat::requiresUnblockedMessageThreadDuringCreation (const pluginName, version, manufacturer)) { if (AudioComponent auComp = AudioComponentFindNext (nullptr, &componentDesc)) + { if (AudioComponentGetDescription (auComp, &componentDesc) == noErr) - return ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); + return AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); + } } return false; @@ -2916,11 +2932,7 @@ StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath&, || desc.componentType == kAudioUnitType_Mixer || desc.componentType == kAudioUnitType_MIDIProcessor) { - ignoreUnused (allowPluginsWhichRequireAsynchronousInstantiation); - - const auto isAUv3 = ((desc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); - - if (allowPluginsWhichRequireAsynchronousInstantiation || ! isAUv3) + if (allowPluginsWhichRequireAsynchronousInstantiation || ! AudioUnitFormatHelpers::isPluginAUv3 (desc)) result.add (AudioUnitFormatHelpers::createPluginIdentifier (desc)); } } diff --git a/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm b/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm index 08d1dcfc47..1aa52ff010 100644 --- a/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm +++ b/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm @@ -20,7 +20,7 @@ namespace juce { //============================================================================== -class BluetoothMidiPairingWindowClass : public ObjCClass +class API_AVAILABLE (macos (10.11)) BluetoothMidiPairingWindowClass : public ObjCClass { public: struct Callbacks @@ -110,7 +110,7 @@ private: } }; -class BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown +class API_AVAILABLE (macos (10.11)) BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown { public: BluetoothMidiSelectorWindowHelper (ModalComponentManager::Callback* exitCallback, diff --git a/modules/juce_core/native/juce_mac_Files.mm b/modules/juce_core/native/juce_mac_Files.mm index 4e7d7b45b0..aefa763178 100644 --- a/modules/juce_core/native/juce_mac_Files.mm +++ b/modules/juce_core/native/juce_mac_Files.mm @@ -528,8 +528,9 @@ void File::addToDock() const File File::getContainerForSecurityApplicationGroupIdentifier (const String& appGroup) { - if (auto* url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: juceStringToNS (appGroup)]) - return File (nsStringToJuce ([url path])); + if (@available (macOS 10.8, *)) + if (auto* url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: juceStringToNS (appGroup)]) + return File (nsStringToJuce ([url path])); return File(); } diff --git a/modules/juce_core/native/juce_mac_Network.mm b/modules/juce_core/native/juce_mac_Network.mm index 3d0706c83f..51939b4848 100644 --- a/modules/juce_core/native/juce_mac_Network.mm +++ b/modules/juce_core/native/juce_mac_Network.mm @@ -393,7 +393,7 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif //============================================================================== -class URLConnectionState : public URLConnectionStateBase +class API_AVAILABLE (macos (10.9)) URLConnectionState : public URLConnectionStateBase { public: URLConnectionState (NSURLRequest* req, const int maxRedirects) diff --git a/modules/juce_core/native/juce_mac_ObjCHelpers.h b/modules/juce_core/native/juce_mac_ObjCHelpers.h index cb29aca747..363a88167f 100644 --- a/modules/juce_core/native/juce_mac_ObjCHelpers.h +++ b/modules/juce_core/native/juce_mac_ObjCHelpers.h @@ -164,7 +164,7 @@ inline var nsDictionaryToVar (NSDictionary* dictionary) DynamicObject::Ptr dynamicObject (new DynamicObject()); for (NSString* key in dictionary) - dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar (dictionary[key])); + dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar ([dictionary objectForKey: key])); return var (dynamicObject.get()); } diff --git a/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp b/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp index cb69641134..15bc6a0086 100644 --- a/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp +++ b/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp @@ -28,12 +28,21 @@ namespace juce class ScopedLowPowerModeDisabler::Pimpl { public: - Pimpl() = default; - ~Pimpl() { [[NSProcessInfo processInfo] endActivity: activity]; } + Pimpl() + { + if (@available (macOS 10.9, *)) + activity = [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep + reason: @"App must remain in high-power mode"]; + } + + ~Pimpl() + { + if (@available (macOS 10.9, *)) + [[NSProcessInfo processInfo] endActivity: activity]; + } private: - id activity { [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep - reason: @"App must remain in high-power mode"] }; + id activity; JUCE_DECLARE_NON_COPYABLE (Pimpl) JUCE_DECLARE_NON_MOVEABLE (Pimpl) diff --git a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm index f7c26e49a6..ab9a8d355f 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm @@ -34,31 +34,6 @@ namespace juce #define JUCE_IOS_CONTAINER_API_AVAILABLE 1 #endif -JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") - -constexpr auto juceUIAccessibilityContainerTypeNone = - #if JUCE_IOS_CONTAINER_API_AVAILABLE - UIAccessibilityContainerTypeNone; - #else - 0; - #endif - -constexpr auto juceUIAccessibilityContainerTypeDataTable = - #if JUCE_IOS_CONTAINER_API_AVAILABLE - UIAccessibilityContainerTypeDataTable; - #else - 1; - #endif - -constexpr auto juceUIAccessibilityContainerTypeList = - #if JUCE_IOS_CONTAINER_API_AVAILABLE - UIAccessibilityContainerTypeList; - #else - 2; - #endif - -JUCE_END_IGNORE_WARNINGS_GCC_LIKE - #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 //============================================================================== @@ -157,7 +132,12 @@ private: if (auto* handler = getHandler (self)) { if (handler->getTableInterface() != nullptr) - return juceUIAccessibilityContainerTypeDataTable; + { + if (@available (iOS 11.0, *)) + return UIAccessibilityContainerTypeDataTable; + + return 1; // UIAccessibilityContainerTypeDataTable + } const auto role = handler->getRole(); @@ -165,11 +145,17 @@ private: || role == AccessibilityRole::list || role == AccessibilityRole::tree) { - return juceUIAccessibilityContainerTypeList; + if (@available (iOS 11.0, *)) + return UIAccessibilityContainerTypeList; + + return 2; // UIAccessibilityContainerTypeList } } - return juceUIAccessibilityContainerTypeNone; + if (@available (iOS 11.0, *)) + return UIAccessibilityContainerTypeNone; + + return 0; // UIAccessibilityContainerTypeNone } }; diff --git a/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm b/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm index e626730517..9b19c84296 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm @@ -16,6 +16,7 @@ ============================================================================== */ +API_AVAILABLE (macos (10.10)) static void juceFreeAccessibilityPlatformSpecificData (NSAccessibilityElement*) {} namespace juce @@ -28,16 +29,17 @@ namespace juce #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 -JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") - //============================================================================== class AccessibilityHandler::AccessibilityNativeImpl { public: explicit AccessibilityNativeImpl (AccessibilityHandler& handler) - : accessibilityElement (AccessibilityElement::create (handler)) - {} + { + if (@available (macOS 10.10, *)) + accessibilityElement = AccessibilityElement::create (handler); + } + API_AVAILABLE (macos (10.10)) NSAccessibilityElement* getAccessibilityElement() const noexcept { return accessibilityElement.get(); @@ -45,7 +47,7 @@ public: private: //============================================================================== - class AccessibilityElement : public AccessibleObjCClass> + class API_AVAILABLE (macos (10.10)) AccessibilityElement : public AccessibleObjCClass> { public: static Holder create (AccessibilityHandler& handler) @@ -823,6 +825,7 @@ private: }; //============================================================================== + API_AVAILABLE (macos (10.10)) AccessibilityElement::Holder accessibilityElement; //============================================================================== @@ -832,7 +835,10 @@ private: //============================================================================== AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const { - return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); + if (@available (macOS 10.10, *)) + return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); + + return nullptr; } static bool areAnyAccessibilityClientsActive() @@ -866,12 +872,15 @@ static void sendHandlerNotification (const AccessibilityHandler& handler, if (! areAnyAccessibilityClientsActive() || notification == NSAccessibilityNotificationName{}) return; - if (id accessibilityElement = (id) handler.getNativeImplementation()) + if (@available (macOS 10.9, *)) { - sendAccessibilityEvent (accessibilityElement, notification, - (notification == NSAccessibilityLayoutChangedNotification - ? @{ NSAccessibilityUIElementsKey: @[ accessibilityElement ] } - : nil)); + if (id accessibilityElement = (id) handler.getNativeImplementation()) + { + sendAccessibilityEvent (accessibilityElement, notification, + (notification == NSAccessibilityLayoutChangedNotification + ? @{ NSAccessibilityUIElementsKey: @[ accessibilityElement ] } + : nil)); + } } } @@ -930,10 +939,13 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A if (! areAnyAccessibilityClientsActive()) return; - if (@available (macOS 10.10, *)) - { + if (@available (macOS 10.9, *)) + { auto nsPriority = [priority] { + // The below doesn't get noticed by the @available check above + JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability") + switch (priority) { case AnnouncementPriority::low: return NSAccessibilityPriorityLow; @@ -943,6 +955,8 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A jassertfalse; return NSAccessibilityPriorityLow; + + JUCE_END_IGNORE_WARNINGS_GCC_LIKE }(); sendAccessibilityEvent ((id) [NSApp mainWindow], @@ -952,6 +966,4 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A } } -JUCE_END_IGNORE_WARNINGS_GCC_LIKE - } // namespace juce diff --git a/modules/juce_gui_basics/native/juce_mac_FileChooser.mm b/modules/juce_gui_basics/native/juce_mac_FileChooser.mm index ee6e42f146..275ee4e672 100644 --- a/modules/juce_gui_basics/native/juce_mac_FileChooser.mm +++ b/modules/juce_gui_basics/native/juce_mac_FileChooser.mm @@ -105,10 +105,13 @@ public: preview->addToDesktop (0, (void*) nsViewPreview); preview->setVisible (true); - if (! isSave) + if (@available (macOS 10.11, *)) { - auto* openPanel = static_cast (panel); - [openPanel setAccessoryViewDisclosed: YES]; + if (! isSave) + { + auto* openPanel = static_cast (panel); + [openPanel setAccessoryViewDisclosed: YES]; + } } } diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index aa145e37cf..f19686b810 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -1848,10 +1848,13 @@ private: void setFullScreenSizeConstraints (const ComponentBoundsConstrainer& c) { - const auto minSize = NSMakeSize (static_cast (c.getMinimumWidth()), - 0.0f); - [window setMinFullScreenContentSize: minSize]; - [window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)]; + if (@available (macOS 10.11, *)) + { + const auto minSize = NSMakeSize (static_cast (c.getMinimumWidth()), + 0.0f); + [window setMinFullScreenContentSize: minSize]; + [window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)]; + } } //============================================================================== diff --git a/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp b/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp index f101691f08..f314332981 100644 --- a/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp +++ b/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp @@ -19,7 +19,7 @@ namespace juce { -JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new", "-Wdeprecated-declarations") +JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") extern NSMenu* createNSMenu (const PopupMenu&, const String& name, int topLevelMenuId, int topLevelIndex, bool addDelegate); @@ -80,7 +80,7 @@ struct StatusItemContainer : public Timer }; //============================================================================== -struct ButtonBasedStatusItem : public StatusItemContainer +struct API_AVAILABLE (macos (10.10)) ButtonBasedStatusItem : public StatusItemContainer { //============================================================================== ButtonBasedStatusItem (SystemTrayIconComponent& iconComp, const Image& im) @@ -377,7 +377,7 @@ public: //============================================================================== Pimpl (SystemTrayIconComponent& iconComp, const Image& im) { - if (std::floor (NSFoundationVersionNumber) > NSFoundationVersionNumber10_10) + if (@available (macOS 10.10, *)) statusItemHolder = std::make_unique (iconComp, im); else statusItemHolder = std::make_unique (iconComp, im); diff --git a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm index 382930055b..83f587a267 100644 --- a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm +++ b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm @@ -25,7 +25,7 @@ namespace juce static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl) { - if (@available (macOS 10.9, *)) + if (@available (macOS 10.10, *)) { const auto parameterNames = url.getParameterNames(); const auto parameterValues = url.getParameterValues(); @@ -256,7 +256,7 @@ private: JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif -struct WebViewDelegateClass : public ObjCClass +struct API_AVAILABLE (macos (10.10)) WebViewDelegateClass : public ObjCClass { WebViewDelegateClass() : ObjCClass ("JUCEWebViewDelegate_") { @@ -332,7 +332,7 @@ private: } #if WKWEBVIEW_OPENPANEL_SUPPORTED - JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") + API_AVAILABLE (macos (10.12)) static void runOpenPanel (id, SEL, WKWebView*, WKOpenPanelParameters* parameters, WKFrameInfo*, void (^completionHandler)(NSArray*)) { @@ -395,7 +395,6 @@ private: delete wrapper; }); } - JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif }; @@ -500,7 +499,7 @@ private: JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif -class WKWebViewImpl : public WebViewBase +class API_AVAILABLE (macos (10.11)) WKWebViewImpl : public WebViewBase { public: WKWebViewImpl (WebBrowserComponent* owner) @@ -580,7 +579,7 @@ class WebBrowserComponent::Pimpl public: Pimpl (WebBrowserComponent* owner) { - if (@available (macOS 10.10, *)) + if (@available (macOS 10.11, *)) webView = std::make_unique (owner); #if JUCE_MAC else diff --git a/modules/juce_video/capture/juce_CameraDevice.cpp b/modules/juce_video/capture/juce_CameraDevice.cpp index 4dec7bf80f..9558d8bd6f 100644 --- a/modules/juce_video/capture/juce_CameraDevice.cpp +++ b/modules/juce_video/capture/juce_CameraDevice.cpp @@ -24,11 +24,7 @@ namespace juce #elif JUCE_WINDOWS #include "../native/juce_win32_CameraDevice.h" #elif JUCE_IOS - JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") - #include "../native/juce_ios_CameraDevice.h" - - JUCE_END_IGNORE_WARNINGS_GCC_LIKE #elif JUCE_ANDROID #include "../native/juce_android_CameraDevice.h" #endif diff --git a/modules/juce_video/native/juce_ios_CameraDevice.h b/modules/juce_video/native/juce_ios_CameraDevice.h index 329391b57b..60e35e9438 100644 --- a/modules/juce_video/native/juce_ios_CameraDevice.h +++ b/modules/juce_video/native/juce_ios_CameraDevice.h @@ -759,7 +759,7 @@ private: //============================================================================== #if JUCE_USE_NEW_CAMERA_API - class PhotoOutputDelegateClass : public ObjCClass + class API_AVAILABLE (ios (10.0)) PhotoOutputDelegateClass : public ObjCClass { public: PhotoOutputDelegateClass() : ObjCClass ("PhotoOutputDelegateClass_") @@ -813,6 +813,7 @@ private: JUCE_CAMERA_LOG ("didFinishCaptureForSettings(), error = " + errorString); } + API_AVAILABLE (ios (11.0)) static void didFinishProcessingPhoto (id self, SEL, AVCapturePhotoOutput*, AVCapturePhoto* capturePhoto, NSError* error) { getOwner (self).takingPicture = false; diff --git a/modules/juce_video/native/juce_mac_CameraDevice.h b/modules/juce_video/native/juce_mac_CameraDevice.h index ec33fab633..e5ba84c1fa 100644 --- a/modules/juce_video/native/juce_mac_CameraDevice.h +++ b/modules/juce_video/native/juce_mac_CameraDevice.h @@ -219,7 +219,7 @@ private: { JUCE_CAMERA_LOG (nsStringToJuce ([notification description])); - NSError* error = notification.userInfo[AVCaptureSessionErrorKey]; + NSError* error = [notification.userInfo objectForKey: AVCaptureSessionErrorKey]; auto errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String(); getOwner (self).cameraSessionRuntimeError (errorString); } @@ -237,8 +237,7 @@ private: }; #if JUCE_USE_NEW_CAMERA_API - JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") - class PostCatalinaPhotoOutput : public ImageOutputBase + class API_AVAILABLE (macos (10.15)) PostCatalinaPhotoOutput : public ImageOutputBase { public: PostCatalinaPhotoOutput() @@ -322,7 +321,6 @@ private: AVCapturePhotoOutput* imageOutput = nil; std::unique_ptr delegate; }; - JUCE_END_IGNORE_WARNINGS_GCC_LIKE #endif JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") diff --git a/modules/juce_video/native/juce_mac_Video.h b/modules/juce_video/native/juce_mac_Video.h index 6da04b81e9..7745355515 100644 --- a/modules/juce_video/native/juce_mac_Video.h +++ b/modules/juce_video/native/juce_mac_Video.h @@ -188,8 +188,15 @@ private: public: ~PlayerControllerBase() { - detachPlayerStatusObserver(); - detachPlaybackObserver(); + // Derived classes must call detachPlayerStatusObserver() before destruction! + jassert (! playerStatusObserverAttached); + + // Derived classes must call detachPlaybackObserver() before destruction! + jassert (! playbackObserverAttached); + + // Note that it's unsafe to call detachPlayerStatusObserver and detachPlaybackObserver + // directly here, because those functions call into the derived class, which will have + // been destroyed at this point. } protected: @@ -219,8 +226,8 @@ private: if ([keyPath isEqualToString: nsStringLiteral ("rate")]) { - auto oldRate = [change[NSKeyValueChangeOldKey] floatValue]; - auto newRate = [change[NSKeyValueChangeNewKey] floatValue]; + auto oldRate = [[change objectForKey: NSKeyValueChangeOldKey] floatValue]; + auto newRate = [[change objectForKey: NSKeyValueChangeNewKey] floatValue]; if (oldRate == 0 && newRate != 0) owner.playbackStarted(); @@ -229,7 +236,7 @@ private: } else if ([keyPath isEqualToString: nsStringLiteral ("status")]) { - auto status = [change[NSKeyValueChangeNewKey] intValue]; + auto status = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; if (status == AVPlayerStatusFailed) owner.errorOccurred(); @@ -322,8 +329,8 @@ private: auto* urlAsset = (AVURLAsset*) playerItem.asset; URL url (nsStringToJuce (urlAsset.URL.absoluteString)); - auto oldStatus = [change[NSKeyValueChangeOldKey] intValue]; - auto newStatus = [change[NSKeyValueChangeNewKey] intValue]; + auto oldStatus = [[change objectForKey: NSKeyValueChangeOldKey] intValue]; + auto newStatus = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; // Ignore spurious notifications if (oldStatus == newStatus) @@ -474,6 +481,8 @@ private: forKeyPath: nsStringLiteral ("status") options: NSKeyValueObservingOptionNew context: this]; + + playerStatusObserverAttached = true; } void detachPlayerStatusObserver() @@ -488,6 +497,8 @@ private: forKeyPath: nsStringLiteral ("status") context: this]; } + + playerStatusObserverAttached = false; } void attachPlaybackObserver() @@ -498,6 +509,8 @@ private: name: AVPlayerItemDidPlayToEndTimeNotification object: [crtp().getPlayer() currentItem]]; JUCE_END_IGNORE_WARNINGS_GCC_LIKE + + playbackObserverAttached = true; } void detachPlaybackObserver() @@ -505,6 +518,8 @@ private: JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector") [[NSNotificationCenter defaultCenter] removeObserver: playerItemPlaybackStatusObserver.get()]; JUCE_END_IGNORE_WARNINGS_GCC_LIKE + + playbackObserverAttached = false; } private: @@ -549,6 +564,8 @@ private: owner.playbackStopped(); } + bool playerStatusObserverAttached = false, playbackObserverAttached = false; + JUCE_DECLARE_WEAK_REFERENCEABLE (PlayerControllerBase) }; @@ -565,38 +582,21 @@ private: useNativeControls = false; #endif - if (useNativeControls) + wrappedPlayer = [&]() -> std::unique_ptr { #if ! JUCE_32BIT - playerView = [[AVPlayerView alloc] init]; + if (@available (macOS 10.9, *)) + if (useNativeControls) + return std::make_unique(); #endif - } - else - { - view = [[NSView alloc] init]; - playerLayer = [[AVPlayerLayer alloc] init]; - [view setLayer: playerLayer]; - } - } - ~PlayerController() - { - #if JUCE_32BIT - [view release]; - [playerLayer release]; - #else - [playerView release]; - #endif + return std::make_unique (); + }(); } NSView* getView() { - #if ! JUCE_32BIT - if (useNativeControls) - return playerView; - #endif - - return view; + return wrappedPlayer->getView(); } Result load (NSURL* url) @@ -622,12 +622,7 @@ private: detachPlayerStatusObserver(); detachPlaybackObserver(); - #if ! JUCE_32BIT - if (useNativeControls) - [playerView setPlayer: player]; - else - #endif - [playerLayer setPlayer: player]; + wrappedPlayer->setPlayer (player); if (player != nil) { @@ -638,21 +633,46 @@ private: AVPlayer* getPlayer() const { - #if ! JUCE_32BIT - if (useNativeControls) - return [playerView player]; - #endif - - return [playerLayer player]; + return wrappedPlayer->getPlayer(); } private: - NSView* view = nil; - AVPlayerLayer* playerLayer = nil; + struct WrappedPlayer + { + virtual ~WrappedPlayer() = default; + virtual NSView* getView() const = 0; + virtual AVPlayer* getPlayer() const = 0; + virtual void setPlayer (AVPlayer*) = 0; + }; + + class WrappedPlayerLayer : public WrappedPlayer + { + public: + WrappedPlayerLayer () { [view.get() setLayer: playerLayer.get()]; } + NSView* getView() const override { return view.get(); } + AVPlayer* getPlayer() const override { return [playerLayer.get() player]; } + void setPlayer (AVPlayer* player) override { [playerLayer.get() setPlayer: player]; } + + private: + NSUniquePtr view { [[NSView alloc] init] }; + NSUniquePtr playerLayer { [[AVPlayerLayer alloc] init] }; + }; + #if ! JUCE_32BIT - // 32-bit builds don't have AVPlayerView - AVPlayerView* playerView = nil; + class API_AVAILABLE (macos (10.9)) WrappedPlayerView : public WrappedPlayer + { + public: + WrappedPlayerView() = default; + NSView* getView() const override { return playerView.get(); } + AVPlayer* getPlayer() const override { return [playerView.get() player]; } + void setPlayer (AVPlayer* player) override { [playerView.get() setPlayer: player]; } + + private: + NSUniquePtr playerView { [[AVPlayerView alloc] init] }; + }; #endif + + std::unique_ptr wrappedPlayer; }; #else //============================================================================== @@ -709,13 +729,19 @@ private: void setPlayer (AVPlayer* playerToUse) { + detachPlayerStatusObserver(); + detachPlaybackObserver(); + if (useNativeControls) [playerViewController.get() setPlayer: playerToUse]; else [playerLayer.get() setPlayer: playerToUse]; - attachPlayerStatusObserver(); - attachPlaybackObserver(); + if (playerToUse != nil) + { + attachPlayerStatusObserver(); + attachPlaybackObserver(); + } } private: