Version 2.0

30min: Continuous tests and distribution for Qt applications on desktop and mobile

Ship your Qt app faster


"Code once, deploy everywhere" is one of the mantras of Qt. But how can one really accomplish the same ease of distribution and continuous integration as we know with web development? This presentation will show how Qt applications for desktop and mobile can also be continuously tested and distributed by using free or inexpensive tools. The presentation will take the MuseScore desktop software and the MuseScore mobile app as an example. It will show how for every git push, tests are run, and installation packages made available for Windows, MacOS and any Linux distribution as well as on Google Play and the Apple App Store.

MuseScore is a free and open source cross platform music notation software hosted on It is a Qt Widget app with several external dependencies available on Windows, Mac and Linux. MuseScore uses the CMake build system and regressions tests written with QTest and managed by CTest. As a WYSIWYG software, MuseScore also relies on visual tests managed independently.

The presentation will show how the MuseScore project uses Travis-CI to build and run the tests for every push but also every pull requests made to the project. It will also show how Travis-CI is used to deliver self contained binaries for Linux (AppImage) on x86_64, x86 and ARM on and also a DMG package for MacOS on a public FTP server. For Windows builds, our use of AppVeyor will be presented. The discussion will introduce the challenges of building automatically a large desktop app in a relatively constrained environment without any UI.

MuseScore also provides a mobile app for iOS and Android. The app is in Qt/QML and built with qmake. We will show how a new version of the app is sent to testers for every build and how the app is cross compiled, automatically tested and, deployed on both Google Play and the Apple App Store together with metadata and screenshots translated in several languages. We will discuss the different problems which had to be solved in order to have a fully automated distribution chain.

We hope that sharing our experience with other Qt developers will help to generalize continuous tests and distributions among the Qt community and then develop best practices to solve common problems.


Day: 2016-09-03
Start time: 16:30
Duration: 00:10
Track: Testing and Continuous Integration



Click here to let us know how you liked this event.