适用于 macOS 的 Qt

Qt for macOS 可为苹果公司的Mac系列电脑构建应用程序。

要使用 Qt for macOS 进行开发,请遵循入门指南;然后探索 Qt 示例和相关主题

支持的配置

Qt 6.9 支持以下版本的构建环境和运行目标平台

构建环境目标平台架构
Xcode 15(macOS 14 SDK)或更高版本macOS 12 或更高版本(包括 macOS 15)x86_64,x86_64harm64

注: Apple 对 macOS 的前向兼容性承诺通常可确保 Qt 应用程序在新发布的操作系统上继续良好运行。可能出现的问题将根据 Qt分支支持政策进行优先排序和计划。补丁发布通常不包含对新操作系统功能的支持。

构建环境

macOS 的构建环境由 Apple 的Xcode应用程序提供,其中包括工具链(编译器、链接器和其他工具)以及 macOS 平台--SDK(头文件和库),您可根据它们进行构建和链接。它们共同定义了应用程序的构建方式。

Apple 通常建议(就 App Store 而言,要求)应用软件根据最新可用的 SDK 构建,因此您应始终使用 Apple 提供的最新可用 Xcode。这可能需要升级系统的 macOS 版本,因为新的 Xcode 版本可能无法在旧的 macOS 版本上运行。

注意: macOS 构建环境始终完全由您正在使用的 Xcode 版本(其工具链和 SDK)定义,而不是您正在运行 Xcode 的 macOS 版本。

选择退出行为更改

使用最新的 Xcode 版本和 SDK 构建应用程序的一个注意事项是,macOS 系统框架有时会根据您构建应用程序时所使用的 SDK 来决定是否启用行为更改。

这种技术允许 Apple 确保根据旧版 SDK 构建的二进制文件仍能在较新的 macOS 版本上继续运行,而不会出现退步。

例如,当 macOS 10.14 Mojave 中引入暗模式时,macOS 只将根据 10.14 SDK 构建的应用程序视为支持暗模式,而将根据早期 SDK 构建的应用程序保留为默认的亮模式外观。

使用旧版本的 Xcode 和旧版本的 SDK 构建应用程序是避免此类行为变化的一种方法,但这只是最后的解决办法,只有在您的应用程序没有其他方法来解决这个问题时才能使用。

目标平台

为 macOS 构建应用程序使用了一种称为弱链接的技术,它允许你根据最新平台 SDK 的头文件和库构建应用程序,同时仍允许你的应用程序部署到比 SDK 版本低的 macOS 版本上。当二进制文件在低于其所使用的 SDK 版本的 macOS 上运行时,Qt 会在运行时检查某个平台功能是否可用,然后再加以利用。

理论上,这将允许在发布的每个 macOS 版本上运行应用程序,但出于实际(和技术)原因,这个范围有一个下限,即应用程序的部署目标。如果在低于部署目标的 macOS 版本上启动二进制文件,Qt 会给出错误信息,应用程序将无法运行。

Qt 通过 CMAKE_OSX_DEPLOYMENT_TARGETQMAKE_MACOSX_DEPLOYMENT_TARGET 变量来表达部署目标,默认情况下,该变量被设置为 Qt 支持的最小部署目标。

只有当你自己的代码使用了 macOS 版本高于 Qt 默认设置的 API,而且你没有使用@available 检查在运行时保护它们的使用时,你才需要提高部署目标。

使用 CMake 提高部署目标:

set(CMAKE_OSX_DEPLOYMENT_TARGET "42.0")

或使用 qmake

QMAKE_MACOSX_DEPLOYMENT_TARGET = 42.0

注意: 不应将部署目标值降至超出 Qt 设置的默认值。如果二进制文件部署到的 macOS 版本低于 Qt 预计运行的版本,那么这样做很可能会导致运行时崩溃。

有关在 Apple 平台上基于 SDK 开发的更多信息,请参阅 Apple 的开发者文档

架构

默认情况下,Qt 将根据开发机器的架构进行构建,如果您使用的是英特尔 Mac,则为x86_64 ;如果您使用的是苹果 Silicon Mac,则为arm64

要为其他架构构建,您可以在项目文件中使用 CMAKE_OSX_ARCHITECTURESQMAKE_APPLE_DEVICE_ARCHS 变量。这样既可以交叉编译到不同架构,也可以构建通用(多架构)二进制文件。例如,使用 CMake 为x86_64arm64 构建应用程序:

cmake ~/src/myapp -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"

或使用 qmake

qmake ~/src/myapp QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64"

在项目文件中指定架构时,不应使用引号,例如

TEMPLATE = app
SOURCES = main.cpp
QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64

英特尔 Mac 上的子架构支持

除基准x86_64 架构外,Qt XML 还支持x86_64h ("Haswell")子架构,该架构可提高英特尔 Mac 的性能。

开始使用

安装 Xcode

使用 Qt for macOS 开发需要 Xcode。它可以从App Store 安装,或从 Apple 的开发者网站下载。

安装后,请运行一次 Xcode,让它安装任何所需的依赖项。

然后使用xcode-select 工具验证系统是否使用了正确的 Xcode 安装。

$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer

如果输出结果与预期不符,请明确选择 Xcode 安装。

$ sudo xcode-select --switch /Applications/Xcode.app

安装或构建 Qt

要安装或构建 Qt,请遵循Qt 入门指南。

生成 Xcode 项目文件

默认情况下,CMake 和 qmake 会生成 Makefile 格式的项目文件。如果您更喜欢在 Xcode 中构建和调试应用程序,可以要求生成一个 Xcode 项目:

cmake ~/src/myapp -GXcode

或使用 qmake:

qmake ~/src/myapp -spec macx-xcode

在 macOS 上部署应用程序

macOS 应用程序通常以独立的应用程序捆绑包形式部署。应用程序捆绑包包含应用程序可执行文件以及 Qt 库、插件、翻译和其他可能需要的资源等依赖项。第三方库(如 Qt)通常不会在全系统安装;每个应用程序都会提供自己的副本。

要使用 CMake 将应用程序作为应用程序捆绑包构建,请在可执行目标上设置 MACOSX_BUNDLE属性,如下所示:

qt_add_executable(app)
if(APPLE)
    set_target_properties(tst_manual_ios_assets PROPERTIES MACOSX_BUNDLE TRUE)
endif()

在 qmake 中,捆绑是默认设置。请在项目文件 (.pro) 中设置CONFIG -= app_bundle 以禁用它。

分发应用程序的一种常见方式是提供压缩磁盘镜像(.dmg 文件),用户可以在 Finder 中加载该镜像文件。部署工具macdeployqt (可从 macOS 安装程序中获取)可用于创建独立的捆绑包,也可选择创建 .dmg 压缩包。

macdeployqt (bin/macdeployqt) 可用作应用程序商店部署的起点。为确保 Qt 符合应用商店沙盒规则,必须使用-feature-appstore-compliant 参数配置 Qt。

有关在 macOS 上部署的详细信息,请参阅Qt for macOS - 部署

注意: 对于在 macOS 应用商店中销售应用程序,适用特殊规则。为了通过验证,应用程序必须在执行任何代码前验证是否存在有效收据。由于这是一种复制保护机制,因此应采取措施避免常见模式,并尽可能混淆验证收据的代码。因此,Qt 无法自动完成这项工作,而需要为应用程序本身编写一些特定平台的代码。更多信息请参阅Apple 文档

以下主题提供了有关 Qt for macOS 的更多详细信息:

在 Qt 应用程序中使用 Objective-C 代码

用于苹果平台应用程序的编译器 Clang 允许混合使用 C++ 和 Objective-C 代码。要启用该模式,请为相关源文件使用.mm 扩展名,然后像往常一样将它们添加到项目中。

使用 CMake:

target_sources(myapp PRIVATE objc_code.mm)

使用 qmake

SOURCES += objc_code.mm

您就可以在 Qt 应用程序中使用苹果开发者库中的 Objective-C 框架。

要向应用程序的其他部分公开功能,而无需重命名所有源文件,可在头文件中声明辅助函数,并在 Objective-C++ 源文件中实现该功能:

// objc_code.h
QString localizedHostName();

// objc_code.mm
#include <Foundation/NSHost.h>
QString localizedHostName()
{
    return QString::fromNSString(NSHost.currentHost.localizedName);
}

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.