@@ -119,6 +119,11 @@ provisioning profiles, which is achieved by passing the `-allowProvisioningUpdat | |||||
cmake --build build-ios --target <targetName> -- -allowProvisioningUpdates | cmake --build build-ios --target <targetName> -- -allowProvisioningUpdates | ||||
### Building universal binaries for macOS | |||||
Building universal binaries that will run on both arm64 and x86_64 can be achieved by | |||||
configuring the CMake project with `"-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64"`. | |||||
### A note about compile definitions | ### A note about compile definitions | ||||
Module options and plugin options that would previously have been set in the Projucer can be set on | Module options and plugin options that would previously have been set in the Projucer can be set on | ||||
@@ -425,13 +425,23 @@ bool JUCE_CALLTYPE Process::openDocument (const String& fileName, const String& | |||||
StringArray params; | StringArray params; | ||||
params.addTokens (parameters, true); | params.addTokens (parameters, true); | ||||
NSMutableDictionary* dict = [[NSMutableDictionary new] autorelease]; | |||||
NSMutableArray* paramArray = [[NSMutableArray new] autorelease]; | NSMutableArray* paramArray = [[NSMutableArray new] autorelease]; | ||||
for (int i = 0; i < params.size(); ++i) | for (int i = 0; i < params.size(); ++i) | ||||
[paramArray addObject: juceStringToNS (params[i])]; | [paramArray addObject: juceStringToNS (params[i])]; | ||||
#if (defined MAC_OS_X_VERSION_10_15) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15 | |||||
auto config = [NSWorkspaceOpenConfiguration configuration]; | |||||
[config setCreatesNewApplicationInstance: YES]; | |||||
config.arguments = paramArray; | |||||
[workspace openApplicationAtURL: filenameAsURL | |||||
configuration: config | |||||
completionHandler: nil]; | |||||
return true; | |||||
#else | |||||
NSMutableDictionary* dict = [[NSMutableDictionary new] autorelease]; | |||||
[dict setObject: paramArray | [dict setObject: paramArray | ||||
forKey: nsStringLiteral ("NSWorkspaceLaunchConfigurationArguments")]; | forKey: nsStringLiteral ("NSWorkspaceLaunchConfigurationArguments")]; | ||||
@@ -439,6 +449,7 @@ bool JUCE_CALLTYPE Process::openDocument (const String& fileName, const String& | |||||
options: NSWorkspaceLaunchDefault | NSWorkspaceLaunchNewInstance | options: NSWorkspaceLaunchDefault | NSWorkspaceLaunchNewInstance | ||||
configuration: dict | configuration: dict | ||||
error: nil]; | error: nil]; | ||||
#endif | |||||
} | } | ||||
if (file.exists()) | if (file.exists()) | ||||
@@ -137,9 +137,8 @@ SystemStats::OperatingSystemType SystemStats::getOperatingSystemType() | |||||
StringArray parts; | StringArray parts; | ||||
parts.addTokens (getOSXVersion(), ".", StringRef()); | parts.addTokens (getOSXVersion(), ".", StringRef()); | ||||
jassert (parts[0].getIntValue() == 10); | |||||
const int major = parts[1].getIntValue(); | const int major = parts[1].getIntValue(); | ||||
jassert (major > 2); | |||||
jassert ((parts[0].getIntValue() == 10 && major > 2) || parts[0].getIntValue() == 11); | |||||
return (OperatingSystemType) (major + MacOSX_10_4 - 4); | return (OperatingSystemType) (major + MacOSX_10_4 - 4); | ||||
#endif | #endif | ||||
@@ -208,11 +208,6 @@ ReturnValue ObjCMsgSendSuper (struct objc_super* s, SEL sel, Params... params) | |||||
// These hacks are a workaround for newer Xcode builds which by default prevent calls to these objc functions.. | // These hacks are a workaround for newer Xcode builds which by default prevent calls to these objc functions.. | ||||
typedef id (*MsgSendSuperFn) (struct objc_super*, SEL, ...); | typedef id (*MsgSendSuperFn) (struct objc_super*, SEL, ...); | ||||
inline MsgSendSuperFn getMsgSendSuperFn() noexcept { return (MsgSendSuperFn) (void*) objc_msgSendSuper; } | inline MsgSendSuperFn getMsgSendSuperFn() noexcept { return (MsgSendSuperFn) (void*) objc_msgSendSuper; } | ||||
#if ! JUCE_IOS | |||||
typedef double (*MsgSendFPRetFn) (id, SEL op, ...); | |||||
inline MsgSendFPRetFn getMsgSendFPRetFn() noexcept { return (MsgSendFPRetFn) (void*) objc_msgSend_fpret; } | |||||
#endif | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
@@ -66,12 +66,14 @@ namespace juce | |||||
@see jassert() | @see jassert() | ||||
*/ | */ | ||||
#define JUCE_BREAK_IN_DEBUGGER { ::kill (0, SIGTRAP); } | #define JUCE_BREAK_IN_DEBUGGER { ::kill (0, SIGTRAP); } | ||||
#elif JUCE_MAC && JUCE_CLANG && JUCE_ARM | |||||
#define JUCE_BREAK_IN_DEBUGGER { __builtin_debugtrap(); } | |||||
#elif JUCE_MSVC | #elif JUCE_MSVC | ||||
#ifndef __INTEL_COMPILER | #ifndef __INTEL_COMPILER | ||||
#pragma intrinsic (__debugbreak) | #pragma intrinsic (__debugbreak) | ||||
#endif | #endif | ||||
#define JUCE_BREAK_IN_DEBUGGER { __debugbreak(); } | #define JUCE_BREAK_IN_DEBUGGER { __debugbreak(); } | ||||
#elif JUCE_GCC || JUCE_MAC | |||||
#elif JUCE_INTEL && (JUCE_GCC || JUCE_MAC) | |||||
#if JUCE_NO_INLINE_ASM | #if JUCE_NO_INLINE_ASM | ||||
#define JUCE_BREAK_IN_DEBUGGER { } | #define JUCE_BREAK_IN_DEBUGGER { } | ||||
#else | #else | ||||
@@ -63,6 +63,8 @@ public: | |||||
MacOSX_10_12 = MacOSX | 12, | MacOSX_10_12 = MacOSX | 12, | ||||
MacOSX_10_13 = MacOSX | 13, | MacOSX_10_13 = MacOSX | 13, | ||||
MacOSX_10_14 = MacOSX | 14, | MacOSX_10_14 = MacOSX | 14, | ||||
MacOSX_10_15 = MacOSX | 15, | |||||
MacOSX_11_0 = MacOSX | 16, | |||||
Win2000 = Windows | 1, | Win2000 = Windows | 1, | ||||
WinXP = Windows | 2, | WinXP = Windows | 2, | ||||
@@ -144,7 +144,11 @@ private: | |||||
{ | { | ||||
if (notification.userInfo != nil) | if (notification.userInfo != nil) | ||||
{ | { | ||||
NSUserNotification* userNotification = [notification.userInfo objectForKey: nsStringLiteral ("NSApplicationLaunchUserNotificationKey")]; | |||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | |||||
// NSUserNotification is deprecated from macOS 11, but there doesn't seem to be a | |||||
// replacement for NSApplicationLaunchUserNotificationKey returning a non-deprecated type | |||||
NSUserNotification* userNotification = notification.userInfo[NSApplicationLaunchUserNotificationKey]; | |||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
if (userNotification != nil && userNotification.userInfo != nil) | if (userNotification != nil && userNotification.userInfo != nil) | ||||
didReceiveRemoteNotification (self, nil, [NSApplication sharedApplication], userNotification.userInfo); | didReceiveRemoteNotification (self, nil, [NSApplication sharedApplication], userNotification.userInfo); | ||||
@@ -23,6 +23,11 @@ | |||||
============================================================================== | ============================================================================== | ||||
*/ | */ | ||||
@interface NSEvent (DeviceDelta) | |||||
- (float)deviceDeltaX; | |||||
- (float)deviceDeltaY; | |||||
@end | |||||
//============================================================================== | //============================================================================== | ||||
#if defined (MAC_OS_X_VERSION_10_8) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8) \ | #if defined (MAC_OS_X_VERSION_10_8) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8) \ | ||||
&& USE_COREGRAPHICS_RENDERING && JUCE_COREGRAPHICS_DRAW_ASYNC | && USE_COREGRAPHICS_RENDERING && JUCE_COREGRAPHICS_DRAW_ASYNC | ||||
@@ -680,8 +685,8 @@ public: | |||||
} | } | ||||
else if ([ev respondsToSelector: @selector (deviceDeltaX)]) | else if ([ev respondsToSelector: @selector (deviceDeltaX)]) | ||||
{ | { | ||||
wheel.deltaX = checkDeviceDeltaReturnValue ((float) getMsgSendFPRetFn() (ev, @selector (deviceDeltaX))); | |||||
wheel.deltaY = checkDeviceDeltaReturnValue ((float) getMsgSendFPRetFn() (ev, @selector (deviceDeltaY))); | |||||
wheel.deltaX = checkDeviceDeltaReturnValue ([ev deviceDeltaX]); | |||||
wheel.deltaY = checkDeviceDeltaReturnValue ([ev deviceDeltaY]); | |||||
} | } | ||||
} | } | ||||
@catch (...) | @catch (...) | ||||