6#import <Foundation/Foundation.h>
8#include <QtCore/qfile.h>
9#include <QtCore/qversionnumber.h>
11#if !defined(QT_BOOTSTRAPPED) && QT_CONFIG(process)
12#include <QtCore/qprocess.h>
17using namespace Qt::StringLiterals;
21 NSOperatingSystemVersion osv = NSProcessInfo.processInfo.operatingSystemVersion;
22 QVersionNumber versionNumber(osv.majorVersion, osv.minorVersion, osv.patchVersion);
24 if (versionNumber.majorVersion() == 10 && versionNumber.minorVersion() >= 16) {
33#if !defined(QT_BOOTSTRAPPED) && QT_CONFIG(process)
35 QProcessEnvironment nonCompatEnvironment;
36 nonCompatEnvironment.insert(
"SYSTEM_VERSION_COMPAT"_L1,
"0"_L1);
37 sysctl.setProcessEnvironment(nonCompatEnvironment);
38 sysctl.start(
"/usr/sbin/sysctl"_L1, QStringList() <<
"-b"_L1 <<
"kern.osproductversion"_L1);
39 if (sysctl.waitForFinished()) {
40 auto versionString = QString::fromLatin1(sysctl.readAll());
41 auto nonCompatSystemVersion = QVersionNumber::fromString(versionString);
42 if (!nonCompatSystemVersion.isNull())
43 versionNumber = nonCompatSystemVersion;
50 operatingSystemVersion.m_major = versionNumber.majorVersion();
51 operatingSystemVersion.m_minor = versionNumber.minorVersion();
52 operatingSystemVersion.m_micro = versionNumber.microVersion();
54 return operatingSystemVersion;
static constexpr OSType currentType()