| /**************************************************************************** |
| ** |
| ** Copyright (C) 2017 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| /*! |
| //! [expressing os versions] |
| |
| Apple platforms have a built-in way to express the OS versions that an |
| application supports, which allows older versions of the platforms to |
| automatically display a user friendly error message prompting the user to |
| update their OS, as opposed to crashing and displaying a stack trace. |
| |
| The main concepts involved in expressing support for a particular range of |
| OS versions are: |
| |
| \list |
| \li \e {Deployment target} specifies the \e hard minimum version of |
| \macos, iOS, tvOS, or watchOS that your application supports. |
| \li \e {SDK version} specifies the \e soft maximum version of \macos, |
| iOS, tvOS, or watchOS that your application supports. |
| \endlist |
| |
| When you develop an application for an Apple platform, you should always |
| use the latest version of Xcode and the latest SDK available at the time of |
| development. On some platforms, like iOS, you will actually be rejected from |
| the App Store if you do not. Therefore, the SDK version is always |
| greater than or equal to the deployment target. |
| |
| When you develop an application for an Apple platform, you must set the |
| deployment target. Various build tools within the Xcode toolchain all have |
| a flag which you can use to set this value, including but not limited to |
| the compiler and linker. By setting the deployment target value, you are |
| explicitly declaring that your application must work on at least that |
| version, and will not work with any earlier versions of the OS. It is then |
| up to you to ensure that your use of the system APIs matches what you have |
| declared. Since the compiler knows what you have declared, it can help in |
| enforcing that. |
| |
| The SDK version is considered a \e soft maximum version of the OS that an |
| application is compatible with in the way that if the application is built |
| with an SDK, it will continue to use the behaviors of that SDK even on newer |
| OS versions, because the OS checks the binary's load commands and emulates |
| backwards compatibility with the older OS. For example, if an application is |
| built with the \macos 10.12 SDK, it will continue to use 10.12 behaviors |
| even on 10.13 and above. |
| |
| However, Mach-O binaries are inherently forward compatible. For example, an |
| application built with the iOS 9 SDK will run just fine on iOS 10, but might |
| not be opted into whatever behavior changes may have been made to certain |
| functionality on the new release, until that application is recompiled |
| against that newer SDK. |
| |
| The minimum OS version can be expressed to the system by the compiler and |
| linker flags that embed it into the Mach-O binary. In addition, the |
| \c LSMinimumSystemVersion key must be set in the application's app bundle. |
| This value must be equal to the value passed to the compiler and linker, |
| because on \macos it will allow the OS to display a user friendly error |
| dialog that says the application requires a newer version of the OS as |
| opposed to a crash dialog. The \c LSMinimumSystemVersion is also the key |
| that the App Store uses to display the required OS version; the compiler and |
| linker flags have no power there. |
| |
| For the most part, Qt applications will work without problems. For example, |
| in qmake, the Qt mkspecs set \l QMAKE_IOS_DEPLOYMENT_TARGET, |
| \l QMAKE_MACOSX_DEPLOYMENT_TARGET, \l QMAKE_TVOS_DEPLOYMENT_TARGET, or |
| \l QMAKE_WATCHOS_DEPLOYMENT_TARGET to the minimum version that Qt itself |
| supports. Similarly, in Qbs, the Qt modules set \c cpp.minimumIosVersion, |
| \c cpp.minimumMacosVersion, \c cpp.minimumTvosVersion, or |
| \c cpp.minimumWatchosVersion to the minimum version that Qt itself supports. |
| |
| However, you must take care when you manually set your own target version. |
| If you set it to a value higher than what Qt requires and supply your own |
| \c Info.plist file, you must add an \c LSMinimumSystemVersion entry to the |
| \c Info.plist that matches the value of the deployment target, because the |
| OS will use the \c LSMinimumSystemVersion value as the authoritative one. |
| |
| If you specify a deployment target value lower than what Qt requires, the |
| application will almost certainly crash somewhere in the Qt libraries when |
| run on an older version than Qt supports. Therefore, make sure that the |
| actual build system code reflects the minimum OS version that is actually |
| required. |
| |
| //! [expressing os versions] |
| */ |