diff --git a/doc/src/platforms/macos.qdoc b/doc/src/platforms/macos.qdoc
index daba5d5ae95b8dfad8738e20ccc04edb111e9b8c..6345841aa8ad820a708d60c357c0e6de12decd66 100644
--- a/doc/src/platforms/macos.qdoc
+++ b/doc/src/platforms/macos.qdoc
@@ -45,11 +45,105 @@
     \target macos-supported-versions
     \section1 Supported Versions
 
-    The following macOS versions are supported.
+    When talking about version support on \macos, it's important to distinguish
+    between the  \l {Build Environment}{build environment}; the platform you're building on
+    or with, and the  \l {Target Platforms}{target platforms}; the platforms you are building
+    for. The following macOS versions are supported.
 
     \include supported-platforms.qdocinc macos
 
-    \section1 Supported Architectures
+    \section2 Build Environment
+
+    The build environment on \macos is defined \e entirely by the Xcode version used
+    to build your application. Xcode contains both a toolchain (compiler, linker, and other
+    tools), and a \macos platform-SDK (headers and libraries). Together these define how
+    your application is built.
+
+    \note The version of \macos that you are \e running Xcode on does not matter. As long as
+    Apple ships a given Xcode version that runs on your operating system, the build
+    environment will be defined by that Xcode version.
+
+    Xcode can be downloaded from Apple's \l{https://developer.apple.com/download/}{developer
+    website} (including older versions of Xcode). Once installed, choosing an Xcode installation
+    is done using the \c{xcode-select} tool.
+
+    \code
+    $ sudo xcode-select --switch /Applications/Xcode.app
+    \endcode
+
+    You can inspect the globally selected Xcode installation using the same tool.
+
+    \code
+    $ xcode-select -print-path
+    /Applications/Xcode.app/Contents/Developer
+    \endcode
+
+    The \c xcrun command can then be used to find a particular tool in the toolchain.
+
+    \code
+    $ xcrun -sdk macosx -find clang
+    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
+    \endcode
+
+    or show the platform SDK path used when building.
+
+    \code
+    $ xcrun -sdk macosx --show-sdk-path
+    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
+    \endcode
+
+    \section2 Target Platforms
+
+    Building for \macos utilizes a technique called \e{weak linking} that allows you to build
+    your application against the headers and libraries of the latest platform SDK, while still
+    allowing your application to be deployed to \macos versions lower than the SDK version.
+    When the binary is run on a \macos version lower than the SDK it was built with, Qt will
+    check at runtime whether or not a platform feature is available before utilizing it.
+
+    In theory this would allow running your application on every single \macos version released,
+    but for practical (and technical) reasons there is a lower limit to this range, known as
+    the \e{deployment target} of your application. If the binary is launched on a \macos version
+    below the deployment target macOS or Qt will give an error message and the application will
+    not run.
+
+    Qt expresses the deployment target via the \c QMAKE_MACOSX_DEPLOYMENT_TARGET qmake
+    variable, which has a default value set via the makespec for \macos. You should not
+    need to change this default, but if needed you can increase it in your project file:
+
+    \code
+    QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13
+    \endcode
+
+    \note You should not lower the deployment target beyond the default value set by Qt.
+    Doing so will likely lead to crashes at runtime if the binary is then deployed to a
+    \macos version lower than what Qt expected to run on.
+
+    By always building against the latest available platform SDK, you ensure that
+    Qt can take advantage of new features introduced in recent versions of \macos.
+
+    For more information about SDK-based development on \macos, see Apple's \l
+    {https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Introduction/Introduction.html}{developer documentation}.
+
+    \section3 Opting out of \macos behavior changes
+
+    One caveat to using the latest Xcode version and SDK to build your application
+    is that \macos's system frameworks will sometimes decide whether or not to
+    enable behavior changes based on the SDK you built your application with.
+
+    For example, when dark-mode was introduced in \macos 10.14 Mojave, \macos would
+    only treat applications built against the 10.14 SDK as supporting dark-mode, and
+    would leave applications built against earlier SDKs with the default light mode
+    look. This technique allows Apple to ensure that binaries built long before
+    the new SDK and operating system was released will still continue to run without
+    regressions on new \macos releases.
+
+    A consequence of this is that if Qt has problems dealing with some of these
+    \macos features (dark-mode, layer-backed views), the only way to opt out of
+    them is building with an earlier SDK (the 10.13 SDK, available through
+    Xcode 9). This is a last-resort solution, and should only be applied if your
+    application has no other ways of working around the problem.
+
+    \section2 Architectures
 
     By default, Qt is built for x86_64. To build for x86_64h (Haswell). use the
     \c QMAKE_APPLE_DEVICE_ARCHS \c qmake variable.
@@ -99,10 +193,6 @@
 
     \section1 Deploying Applications on \macos
 
-    In general, Qt supports building on one \macos version and deploying to
-    earlier or later \macos versions. The recommended way is to build on the
-    latest version and deploy to an earlier \macos version.
-
     \macos applications are typically deployed as self-contained application
     bundles. The application bundle contains the application executable as well
     as dependencies such as the Qt libraries, plugins, translations and other
@@ -1059,31 +1149,6 @@
 
     \section2 \macos Version Dependencies
 
-    Qt 5 applications can be built on the latest \macos version and deployed to
-    previous versions. This is achieved using \e{weak linking}. In
-    \e{weak linking}, Qt tests whether a function added in a newer
-    version of \macos is available on the computer it is running
-    on. This allows Qt to use newer features when it runs on a newer
-    version of \macos, while remaining compatible on the older versions.
-
-    For more information about cross development issues on \macos,
-    see \l
-    {https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Introduction/Introduction.html}{Apple's Developer Website}.
-
-    The linker is set to be compatible with all \macos versions,
-    so you must change the \c MACOSX_DEPLOYMENT_TARGET environment
-    variable to get \e{weak linking} to work for your application. You
-    can add the following:
-
-    \snippet snippets/code/doc_src_deployment.pro 51
-
-    to your .pro file, and qmake will take care of this for you.
-
-    For more information about C++ runtime environment, see \l
-    {https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/CppRuntimeEnv/CPPRuntimeEnv.html}{Apple's Developer Website}
-
-    \section3 Expressing Supported \macos Versions
-
     \include expressing-apple-os-versions.qdocinc expressing os versions
 
     \section1 The Mac Deployment Tool