Improve detection and handling of unsupported Apple platforms

The application name wasn't always printed, so we try try a few
more possibilities before falling back to the process name.

We also run the check as early as possible, instead of relying
on a QCoreApplication.

We do not have to provide a dialog to the user, as macOS will do
this for us if the application is launched from Finder.

Change-Id: Ifbec86946d60294806364e08964852fd4b74ff56
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Tor Arne Vestbø 2018-08-23 18:57:59 +02:00
parent 563c9eb4ee
commit 42588a8487
3 changed files with 15 additions and 12 deletions

View File

@ -448,16 +448,23 @@ void qt_apple_check_os_version()
version / 10000, version / 100 % 100, version % 100};
const NSOperatingSystemVersion current = NSProcessInfo.processInfo.operatingSystemVersion;
if (![NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:required]) {
fprintf(stderr, "You can't use this version of %s with this version of %s. "
"You have %s %ld.%ld.%ld. Qt requires %s %ld.%ld.%ld or later.\n",
(reinterpret_cast<const NSString *>(
NSBundle.mainBundle.infoDictionary[@"CFBundleName"]).UTF8String),
os,
os, long(current.majorVersion), long(current.minorVersion), long(current.patchVersion),
os, long(required.majorVersion), long(required.minorVersion), long(required.patchVersion));
abort();
NSDictionary *plist = NSBundle.mainBundle.infoDictionary;
NSString *applicationName = plist[@"CFBundleDisplayName"];
if (!applicationName)
applicationName = plist[@"CFBundleName"];
if (!applicationName)
applicationName = NSProcessInfo.processInfo.processName;
fprintf(stderr, "Sorry, \"%s\" can not be run on this version of %s. "
"Qt requires %s %ld.%ld.%ld or later, you have %s %ld.%ld.%ld.\n",
applicationName.UTF8String, os,
os, long(required.majorVersion), long(required.minorVersion), long(required.patchVersion),
os, long(current.majorVersion), long(current.minorVersion), long(current.patchVersion));
exit(1);
}
}
Q_CONSTRUCTOR_FUNCTION(qt_apple_check_os_version);
// -------------------------------------------------------------------------

View File

@ -190,7 +190,6 @@ Q_CORE_EXPORT bool qt_mac_applicationIsInDarkMode();
QDebug operator<<(QDebug debug, const QMacAutoReleasePool *pool);
#endif
Q_CORE_EXPORT void qt_apple_check_os_version();
Q_CORE_EXPORT bool qt_apple_isApplicationExtension();
#if defined(Q_OS_MACOS) && !defined(QT_BOOTSTRAPPED)

View File

@ -456,9 +456,6 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
, q_ptr(0)
#endif
{
#if defined(Q_OS_DARWIN)
qt_apple_check_os_version();
#endif
app_compile_version = flags & 0xffffff;
static const char *const empty = "";
if (argc == 0 || argv == 0) {