summaryrefslogtreecommitdiffstats
path: root/doc/src/platforms/expressing-apple-os-versions.qdocinc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/platforms/expressing-apple-os-versions.qdocinc')
-rw-r--r--doc/src/platforms/expressing-apple-os-versions.qdocinc106
1 files changed, 106 insertions, 0 deletions
diff --git a/doc/src/platforms/expressing-apple-os-versions.qdocinc b/doc/src/platforms/expressing-apple-os-versions.qdocinc
new file mode 100644
index 000000000..bbc0304c7
--- /dev/null
+++ b/doc/src/platforms/expressing-apple-os-versions.qdocinc
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** 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]
+*/