iOS 版 Qt

Qt for iOS 支持为 Apple 的iPhoneiPad设备以及Apple Vision Pro 构建应用程序。

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

支持的配置

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

构建环境目标平台架构
Xcode 15(iOS 17 SDK)或更高版本iOS 16 或更高版本(包括 iOS 18)armv8,arm64

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

自动测试中使用的目标设备
设备操作系统版本架构外形尺寸
iPhone 12iOS 17armv8 (arm64)移动设备
iPhone 11iOS 17armv8 (arm64)移动版
iPad Pro,第三代iOS 17armv8 (arm64)平板电脑
iPad 第 6 代iOS 17armv8 (arm64)平板电脑

构建环境

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

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

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

选择退出行为更改

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

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

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

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

目标平台

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

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

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

只有当你自己的代码使用了比 Qt 默认值更高的 iOS 版本中添加的 API,而你又没有使用@available 检查在运行时保护它们的使用时,你才需要提高部署目标。

使用 CMake 提高部署目标:

set(CMAKE_OSX_DEPLOYMENT_TARGET "42.0")

或使用 qmake

QMAKE_MACOSX_DEPLOYMENT_TARGET = 42.0

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

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

开始

安装 Xcode

使用 Qt for iOS 开发需要 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

对于在 Xcode 附带的模拟器中测试 Qt Test 应用程序,这就是您所需要的全部。但是,要在物理设备上运行应用程序和/或在 App Store 中发布应用程序,您必须加入Apple Developer Program,并设置开发者证书和配置文件。

在构建任何 Qt 应用程序之前,您应该测试 Xcode 是否设置正确,例如在设备上运行一个标准 Xcode 应用程序模板。

安装或构建 Qt

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

从命令行构建应用程序

使用 CMake 或 qmake 来定义如何构建 iOS 应用程序。CMake 和 qmake 都能生成xcodeproj 文件,然后通过命令行加载和构建。

使用 CMake

<Qt-dir>/<version>/ios/bin/ 中的qt-cmake 方便脚本将为你设置工具链和正确的架构。

使用qt-cmake 方便脚本:

<Qt-dir>/<version>/ios/bin/qt-cmake <source-dir>

使用生成的xcodeproj 文件,您可以使用 Xcode 构建应用程序,也可以从命令行运行xcodebuild 。如需查看应用程序的可用目标和方案列表,请运行以下命令:

xcodebuild -list -project <your-app>.xcodeproj

然后,运行xcodebuild build ,输入应用程序的详细信息:

xcodebuild build -allowProvisioningUpdates -project <your-app>.xcodeproj -scheme <your-scheme> -configuration Debug -destination "generic/platform=iOS" -destination-timeout 1 ENABLE_ONLY_ACTIVE_RESOURCES=NO

使用 qmake

首先,定义如何使用 qmake 构建应用程序。然后,在 Xcode 或命令行中使用生成的xcodeproj 文件来构建应用程序。

qmake <your-app>.pro

qmake 会创建一个封装的 Makefile,然后调用xcodebuild ,因此您可以运行make 来构建应用程序:

make -j8

请注意,如果项目设置发生变化,例如添加或删除源文件时,您必须重新导入项目。

自定义 Xcode 项目设置

QMAKE_MAC_XCODE_SETTINGS qmake 变量可用于自定义 Xcode 设置,例如

development_team.name = DEVELOPMENT_TEAM
development_team.value = <your-team-id>
QMAKE_MAC_XCODE_SETTINGS += development_team

其他 qmake 变量也很有用:

QMAKE_TARGET_BUNDLE_PREFIX = com.<your-company>
QMAKE_BUNDLE = <your-app>

在 Xcode 中运行应用程序

qmake 和 CMake 生成的 Xcode 项目支持在 iOS 设备和 iOS 模拟器上运行应用程序。

注意: 由于 Qt for iOS 模拟器库的默认架构是x86_64 ,应用程序必须在 Apple Silicon Mac 上的 Rosetta 下运行。如果基于 Rosetta 的运行目的地未列在 Xcode 的运行目的地菜单中,可通过Product > Destination > Destination Architectures 菜单启用。

使用Qt Creator

您可以在Qt Creator 文档中找到有关如何设置和运行 Qt for iOS 应用程序的信息:

请注意,这仍然需要一个正常运行的 Xcode 安装。

iOS 示例

Qt Creator 中,可以查找 iOS 上经过测试的示例。使用ios 关键字可在Qt Creator 欢迎模式下搜索示例。请注意,某些示例的功能可能有限。

有关已知可在 iOS 设备上运行的示例列表,请访问Qt for iOS 示例

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

在 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.