如果我构建一个Qt/qmake示例项目(在我的情况下是“模拟时钟”示例),并将其部署到运行iOS 7.1的设备上,一切都很顺利:应用程序在设备上无缝执行。棒极了 - digia的人们在将ios工具链集成到他们的Qt工作流中做了出色的工作。
然而,如果我将qmake项目转换为CMake项目,情况就不那么顺利了。我附加了来自Qt-5.3.1发布版的模拟时钟示例(见下文),其中我添加了一个CMakeLists.txt文件和一个运行CMake生成iOS XCode项目的脚本。项目编译甚至链接(我不得不添加一些额外的链接库,参见CMake源文件)。耶!
但是这里有个陷阱:应用程序在运行时崩溃,并显示以下错误消息:
错误:在调用UIApplicationMain之前创建QApplication。 如果您正在编写原生iOS应用程序,并且仅想在应用程序的某些部分中使用Qt,则可以从UIApplication委托内的'applicationDidFinishLaunching'中创建QApplication。
我有两个问题:
1. 有人知道运行时错误的问题吗?我知道qmake(以及相应的ios mkspecs)会进行一些魔法。但如何将其转换为CMake?
2. 为什么我必须手动链接多个库(harfbuzzng、qios、libpng和几个iOS框架)到我的目标?find_package(Qt5 ...)不应该为我完成这项工作吗?
然而,如果我将qmake项目转换为CMake项目,情况就不那么顺利了。我附加了来自Qt-5.3.1发布版的模拟时钟示例(见下文),其中我添加了一个CMakeLists.txt文件和一个运行CMake生成iOS XCode项目的脚本。项目编译甚至链接(我不得不添加一些额外的链接库,参见CMake源文件)。耶!
但是这里有个陷阱:应用程序在运行时崩溃,并显示以下错误消息:
作为this线程中的一条评论所述,人们必须通过项目设置“强制加载”libqios。这样做并没有改善情况,只是将错误消息更改为:错误:无法加载平台插件“ios”
错误:在调用UIApplicationMain之前创建QApplication。 如果您正在编写原生iOS应用程序,并且仅想在应用程序的某些部分中使用Qt,则可以从UIApplication委托内的'applicationDidFinishLaunching'中创建QApplication。
我有两个问题:
1. 有人知道运行时错误的问题吗?我知道qmake(以及相应的ios mkspecs)会进行一些魔法。但如何将其转换为CMake?
2. 为什么我必须手动链接多个库(harfbuzzng、qios、libpng和几个iOS框架)到我的目标?find_package(Qt5 ...)不应该为我完成这项工作吗?
这里是一个包含我的Qt-CMake项目的zip文件的链接。我使用的Qt版本是适用于iOS的Qt-5.3.1。
编辑: 我发现,如果你将qmake示例从Qt示例文件夹结构中拆分出来,它就不能像这样工作。请直接查看Qt示例:path/to/Qt/examples/widgets/widgets/analogclock。