summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorOatmealDome <julian@oatmealdome.me>2020-06-29 00:37:50 -0400
committerOatmealDome <julian@oatmealdome.me>2020-06-29 00:37:50 -0400
commit0a22df3a9d25bfce1e38e3dbabdde036a2cf5425 (patch)
treef6a3c12fa3726c6119d413265e093b7d21d8b8d3 /Source
parent2e8d1dd1dbcca7095e9d842f1df037cbe76868e4 (diff)
Analytics: Remove deprecated usage of Gestalt to get macOS version
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/Analytics.cpp36
1 files changed, 21 insertions, 15 deletions
diff --git a/Source/Core/Core/Analytics.cpp b/Source/Core/Core/Analytics.cpp
index af289b4ff5..aba45139e8 100644
--- a/Source/Core/Core/Analytics.cpp
+++ b/Source/Core/Core/Analytics.cpp
@@ -12,7 +12,7 @@
#if defined(_WIN32)
#include <windows.h>
#elif defined(__APPLE__)
-#include <CoreServices/CoreServices.h>
+#include <objc/message.h>
#elif defined(ANDROID)
#include <functional>
#include "Common/AndroidAnalytics.h"
@@ -268,20 +268,26 @@ void DolphinAnalytics::MakeBaseBuilder()
#elif defined(__APPLE__)
builder.AddData("os-type", "osx");
- SInt32 osxmajor, osxminor, osxbugfix;
-// Gestalt is deprecated, but the replacement (NSProcessInfo
-// operatingSystemVersion) is only available on OS X 10.10, so we need to use
-// it anyway. Change this someday when Dolphin depends on 10.10+.
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- Gestalt(gestaltSystemVersionMajor, &osxmajor);
- Gestalt(gestaltSystemVersionMinor, &osxminor);
- Gestalt(gestaltSystemVersionBugFix, &osxbugfix);
-#pragma GCC diagnostic pop
-
- builder.AddData("osx-ver-major", osxmajor);
- builder.AddData("osx-ver-minor", osxminor);
- builder.AddData("osx-ver-bugfix", osxbugfix);
+ // id processInfo = [NSProcessInfo processInfo]
+ id processInfo = reinterpret_cast<id (*)(Class, SEL)>(objc_msgSend)(
+ objc_getClass("NSProcessInfo"), sel_getUid("processInfo"));
+ if (processInfo)
+ {
+ struct OSVersion // NSOperatingSystemVersion
+ {
+ s64 major_version; // NSInteger majorVersion
+ s64 minor_version; // NSInteger minorVersion
+ s64 patch_version; // NSInteger patchVersion
+ };
+
+ // NSOperatingSystemVersion version = [processInfo operatingSystemVersion]
+ OSVersion version = reinterpret_cast<OSVersion (*)(id, SEL)>(objc_msgSend_stret)(
+ processInfo, sel_getUid("operatingSystemVersion"));
+
+ builder.AddData("osx-ver-major", version.major_version);
+ builder.AddData("osx-ver-minor", version.minor_version);
+ builder.AddData("osx-ver-bugfix", version.patch_version);
+ }
#elif defined(__linux__)
builder.AddData("os-type", "linux");
#elif defined(__FreeBSD__)