IOS上的Qt QML应用程序运行缓慢,JIT被禁用

Posted

技术标签:

【中文标题】IOS上的Qt QML应用程序运行缓慢,JIT被禁用【英文标题】:Qt QML application on IOS working slow, JIT is disabled 【发布时间】:2017-10-12 18:54:49 【问题描述】:

我正在为 iPhone 开发基于 QML 的应用程序,在 macbook IOS 11 (Sierra) 上工作。我使用 Qt 5.9.1 构建,以及最新版本的 xCode。一切正常,但在 “应用程序输出”中有警告 " 为 QML 禁用了 JIT。属性绑定和动画会很慢。请访问 https://wiki.qt.io/V4 了解适用于您平台的可能解决方案。" 我试图通过编辑 qv4global_p.h 文件来启用 JIT,如上面的网页所述,但它没有帮助。 我使用 ios 模拟器(带 IOS 11.0 的 iPhone 6,7)进行调试和测试,动画效果(如过渡、不透明度更改、按钮点击)非常缓慢且滞后,在输出控制台中显示有关手动更新 qml 对象的消息,类似“正在手动更新..”。我没有iPhone,所以我无法检查真实设备上是否存在相同的问题,但似乎是这样,因为我已经阅读了类似的主题,但我没有找到任何信息。

那么,有没有办法解决这个问题,如何在 IOS 上获得流畅、正确的 qml 控件行为?也许具有商业许可的 Qt Quick Compiler 可以帮助解决这个问题?请帮忙,真的卡在这里..

【问题讨论】:

是的,Qt Quick Compiler 真的很有帮助! 【参考方案1】:

你不能在你的 qv4global_p.h 上启用 JIT,如果你这样做了,你可以在插入你的 mac 的设备上编译和运行你的应用程序,但是当你拔掉它时,你的应用程序将停止并且不运行再说了,问题来自苹果,

3.3.2 应用程序不得下载或安装可执行代码。如果所有脚本、代码和解释器都打包在应用程序中并且未下载,则解释的代码只能在应用程序中使用。上述情况的唯一例外是由 Apple 内置 WebKit 框架下载和运行的脚本和代码。

试用 Qt 商业许可证的试用版并测试您的应用。 就我而言,经过一些测试,我已经在 objectivC 中构建了我的应用程序

【讨论】:

将尝试使用试用许可证,谢谢。希望它会有所帮助,因为我希望我的应用程序以后也可以在 android 上使用,而且我不熟悉 swift 或 Objective-C ..【参考方案2】:

在 ios 中你不能使用 JIT 编译器,但你可以尝试提前编译器:

http://doc.qt.io/qt-5/qtquick-deployment.html#qml-caching-for-deployment-preview

【讨论】:

使用Qt快速编译器时使用qml缓存有意义吗?【参考方案3】:

所以我尝试在真实设备上启动我的应用程序,它是安装了 iOS 9.0 的 iPhone 6S,后来也更新到了 iOS 11.0.3。应用程序运行正常,至少我看不到任何滞后、性能不佳或动画缓慢,尽管有关于 JIT 的警告消息。希望在让应用程序变得更复杂后它也能同样完美地工作,因为现在它只是 GUI,没有任何有用的后端。如果有可能在其他旧版本的 iPhone 或平板电脑上检查这一点,我会这样做并写在这里。附:在紧急情况下,我还没有尝试过 Qt Quick Compiler。

【讨论】:

如果您尝试其他方法,请及时更新此问题,谢谢。【参考方案4】:

自 Qt 5.11 起,Qt Quick Compiler 现在可通过开源 Qt 许可证获得。你可以使用它来提前编译你的 QML 和 JS 源代码,在 iOS 上也是如此。使用V-Play Engine,您还可以获得 Qt iOS 和 Android 应用程序的原生外观。

【讨论】:

以上是关于IOS上的Qt QML应用程序运行缓慢,JIT被禁用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QML 文件中直接监听 QGuiApplication::applicationStateChanged 信号

android 上的 QML - C++ 是不是适用于业务逻辑? [关闭]

Qt/QML SwipeDelegate 在移动设备(Android、iOS)上无法正常工作

为 iOS 编译 Qt 应用程序时使用 qml.qrc 发出警告

可以为特定项目禁用 Qt 5.8 中的 QML 缓存吗?

Mac 上的 Qt/Qml 应用程序窗口标题