Qt QML: Deploy to Desktop, Mobile and Embedded
Take one Qt QML application and ship it to every platform Qt supports: Windows, Linux, macOS, Android, iOS, and embedded ARM. Complete with installers, signed bundles, and a GitHub Actions pipeline that builds it all from a single git tag.
- 15h 17m of video
About this course
Getting your Qt app to run in Qt Creator is the easy part. This course picks up from there and takes you all the way to signed, installable packages for every platform Qt supports. Across 9 chapters, 68 lessons, and 15+ hours of video, you’ll take one Qt QML application and ship it to Windows, Linux, macOS, Android, iOS, and Raspberry Pi, then automate the desktop builds with a GitHub Actions pipeline that runs from a single git tag.
- Real Packages, Not Demos: NSIS installers, AppImages, signed and notarized DMGs, signed APKs, and an iOS IPA that real users can install
- One App, Every Platform: the same app and the same CMake project take you to every target
- Every Tool Explained: windeployqt, linuxdeploy, macdeployqt, CPack, codesign, notarytool, and more
- The Why, Not Just the How: understand what’s happening under the hood so you can debug missing DLLs, broken RPATHs, and unsigned binaries
- Reproducible Builds: Docker-first Linux and embedded builds that work locally and in CI
What you'll learn
- What libraries, plugins, and QML modules your app needs on every target, and what happens when you just copy the binary
- windeployqt, cmake --install, and CPack for the NSIS installer and ZIP
- Stripping RUNPATH, qt.conf, linuxdeploy, AppImage, DEB, tar.gz, FreeDesktop .desktop files and icons
- macdeployqt, fixing @rpath and @executable_path, code signing, notarization, DMG packaging
- qt-cmake cross-compilation, manifest and launcher icons, keystore signing, APK and AAB, emulator, Google Play
- Static linking, asset catalogs, simulator and device builds, provisioning profiles, IPA creation, App Store Connect
- Docker, sysroots, CMake toolchain files, building Qt from source, deploying to Raspberry Pi
- GitHub Actions workflows, Docker-based Linux jobs, macOS and Windows jobs, release assets, triggering a release
Projects you'll build
One App, Seven Targets
You will take a single Qt QML app, Squared, and ship it to Windows, Linux, macOS, Android, iOS, and a Raspberry Pi. Along the way you’ll use windeployqt, linuxdeploy, macdeployqt, and qt-cmake, and cross-compile for embedded ARM with Docker. It’s where every platform chapter comes together in one codebase and one CMakeLists.txt.
A One-Tag Release Pipeline
You will turn manual deployment steps into real, distributable packages: an NSIS installer, an AppImage, a .deb, a signed and notarized DMG, a signed APK and AAB, and an iOS IPA. Then you’ll wire up a GitHub Actions workflow that builds the Linux, macOS, and Windows packages and publishes a release from a single git tag.
Curriculum
9 chapters · 68 lessons · 15h 17m
Chapter 1 Chapter 1: Welcome & Orientation 3 lessons
Chapter 2 Chapter 2: Play with the Environment 3 lessons
- 2.1 Play with the Environment: Windows
- 2.2 Play with the Environment: Linux
- 2.3 Play with the Environment: macOS
Chapter 3 Chapter 3: Windows Deployment 6 lessons
- 3.1 Configure and Build the App
- 3.2 What Happens When You Copy the Binary
- 3.3 windeployqt
- 3.4 cmake --install and the Deploy Script
- 3.5 Packaging with CPack: NSIS Installer
- 3.6 Packaging with CPack: ZIP
Chapter 4 Chapter 4: Linux Deployment 10 lessons
- 4.1 Configure and Build
- 4.2 Strip RUNPATH and Manual Copy
- 4.3 qt.conf
- 4.4 linuxdeploy
- 4.5 cmake --install
- 4.6 FreeDesktop: desktop File and Icons
- 4.7 AppImage with linuxdeploy
- 4.8 AppImage in Docker and CI
- 4.9 DEB with CPack
- 4.10 tar.gz Portable Bundle
Chapter 5 Chapter 5: macOS Deployment 10 lessons
- 5.1 Configure, Build, and Run
- 5.2 Strip RPATH and Copy the Binary
- 5.3 qt.conf
- 5.4 macdeployqt
- 5.5 cmake --install and the Deploy Script
- 5.6 DMG with hdiutil
- 5.7 CPack DragNDrop
- 5.8 CPack tar.gz Portable Bundle
- 5.9 Code Signing
- 5.10 Notarization
Chapter 6 Chapter 6: Android Deployment 11 lessons
- 6.1 Desktop vs Android Architecture
- 6.2 Prerequisites
- 6.3 Android Manifest and Launcher Icons
- 6.4 CMake Configuration for Android
- 6.5 Cross-Compilation with qt-cmake
- 6.6 The android-build Directory
- 6.7 APK Internals and AAB
- 6.8 Signing
- 6.9 Deploy and Debug
- 6.10 Android Emulator
- 6.11 Google Play
Chapter 7 Chapter 7: iOS Deployment 9 lessons
- 7.1 Static vs Dynamic Linking
- 7.2 Prerequisites
- 7.3 Asset Catalog
- 7.4 CMake Configuration for iOS
- 7.5 Simulator Build
- 7.6 The iOS App Bundle
- 7.7 Device Build and Code Signing
- 7.8 IPA Creation and Distribution Paths
- 7.9 App Store Connect: Publishing
Chapter 8 Chapter 8: Embedded Linux ARM (Raspberry Pi) 10 lessons
- 8.1 What We are Building
- 8.2 Cross Compilation Concepts
- 8.3 Docker Primer
- 8.4 The Sysroot
- 8.5 The Toolchain File
- 8.6 The Main Dockerfile
- 8.7 The Build Script
- 8.8 Where and How The App Runs
- 8.9 Deploying and Launching on the Pi
- 8.10 Updating the Application
Chapter 9 Chapter 9: CI/CD with GitHub Actions 6 lessons
- 9.1 Workflow Structure
- 9.2 Linux Job in Docker
- 9.3 Linux Packaging in CI
- 9.4 macOS-Windows Job
- 9.5 Release Assets
- 9.6 Triggering a Release
More about this course
What We Do on Each Platform
Every chapter ends with an artifact you can hand to a real user. You’ll deploy a Qt QML app called Squared to every platform below. Here’s what you’ll build:
Windows

Fix the missing DLL launch failure with windeployqt, build a proper cmake --install tree, and package Squared as an NSIS installer with Start Menu and Desktop shortcuts, plus a portable ZIP for users who don’t want to install anything.
macOS

Produce an app bundle that launches on any Mac without Gatekeeper warnings. You’ll run macdeployqt, fix @rpath library paths, sign with a Developer ID certificate, notarize through Apple, staple the ticket, and package everything into a branded DMG.
Linux

Package Squared for any modern Linux distribution as a portable AppImage, a Debian .deb, and a tar.gz bundle. You’ll strip RUNPATH, wire up qt.conf, add FreeDesktop .desktop files and icons, and run linuxdeploy inside Docker for reproducible builds.
Android

Cross-compile Squared for Android with qt-cmake, configure the manifest and launcher icons, and sign with a keystore. You’ll produce both an APK and an Android App Bundle (AAB) ready for Google Play, and test on the emulator along the way.
iOS

Build Squared for iOS with static Qt linking, produce a simulator build and a device build, handle the asset catalog, sign with a provisioning profile, and create a distributable IPA published through App Store Connect.
Raspberry Pi

Cross-compile Qt and Squared for Raspberry Pi using Docker. You’ll generate a sysroot, write a CMake toolchain file, build Qt from source inside a container, deploy to the Pi, run the app as a systemd service, and update it in place.
GitHub Actions

Turn all your manual steps into a GitHub Actions workflow. Linux packaging runs in Docker, macOS and Windows have their own jobs, and the finished artifacts are published as release assets when you push a git tag.
CMake and App Icons

Application icons and CMake configuration for every target, from Android launcher icons and the iOS asset catalog to FreeDesktop icons on Linux, all driven by the same CMake project.
After This Course, You’ll Be Able To:
- Know exactly which libraries, plugins, and QML modules your app needs on every target
- Build distributable packages for every Qt platform: NSIS, AppImage, DMG, APK, IPA, and Raspberry Pi
- Sign and notarize for macOS, configure Android keystores, and handle iOS provisioning profiles
- Cross-compile for embedded ARM using Docker, CMake toolchain files, and sysroots
- Automate your desktop builds with a GitHub Actions workflow triggered by a git tag
- Debug deployment failures with confidence: missing DLLs, broken RPATH, unsigned binaries, wrong ABI
Created By Someone Who Ships Qt Apps Daily
“When I first tried to deploy a Qt app to macOS, I spent a week fighting Gatekeeper warnings, broken @rpath links, and notarization errors. The documentation was scattered and the forums assumed you already knew the answer. I wished someone had just explained the whole system.”
After 10+ years of professional Qt development and teaching tens of thousands of students worldwide, Daniel Gakwaya has built the deployment course he wished existed:
- Every platform covered end-to-end, not just the easy ones
- The mental model, not just the commands, so you can debug what breaks
- Real workflows from production Qt teams, not contrived examples
This course is for Qt developers who can already build a Qt QML app and want to ship it. Whether you’re a desktop developer who needs a macOS build, an embedded engineer targeting Raspberry Pi, or a team lead who wants a CI/CD pipeline that actually works, this course gives you the complete deployment layer Qt Creator doesn’t teach.
What you’ll get:
- 15+ hours of step-by-step video across 9 chapters and 68 lessons
- Full source code: the SquaredApp repo with a branch at the end of every chapter
- Deployment cheat sheets with every command for every platform in one place
- CMake and GitHub Actions templates you can reuse in your own projects
- Lifetime updates as Qt and platform tooling evolve
- Discord community access with 4,000+ Qt developers
- Certificate of completion
Your complete learning journey: by the end of the course you’ll have a single Qt QML application that ships as an NSIS installer, a portable Windows ZIP, a Linux AppImage, a Debian .deb, a tar.gz portable bundle, a signed and notarized macOS DMG, a signed Android APK, an Android App Bundle, an iOS IPA, and a cross-compiled Raspberry Pi build running as a systemd service, all produced from the same CMake project.
🛡️ 30-DAY MONEY-BACK GUARANTEE
If you’re not completely satisfied with your progress after 30 days, get a full refund. No questions asked.
- Full 30-day trial period
- No questions asked
- Email support for refunds
- Risk-free learning
STILL HAVE QUESTIONS?
Get personalized help from instructor Daniel Gakwaya and the community.
- Join our Discord: chat with 4,000+ Qt developers, usually replied to within hours
- Email the instructor: daniel.g@learnqt.guide
Ready to ship your Qt QML app to every platform? Enroll today and start your journey. Or just start by watching the beginning free preview chapters to make sure the course works for you.
Your instructor
Daniel Gakwaya
Daniel is a Founder and Senior Software Engineer at Squared Computing. He has been writing software since 2011 and Qt is one of his favorite frameworks. Many of his cross platform Qt based projects are completed and out there on the market. Autodidact by nature ,he has a passion for learning new things and loves sharing knowledge with others. Especially people new to the dark art of software development.
What students say
No reviews are published yet.
Questions
Do I need prior programming experience?
Some. This course is about shipping, not learning QML, so you should be comfortable building a Qt QML app with CMake in Qt Creator. If you’re new to QML, start with our Qt QML course first.
Do I need a Mac and every platform shown?
No. You can pick the chapters for the platforms you ship to. The macOS and iOS chapters need a Mac, and signing and notarizing for distribution requires an Apple Developer account. The setup chapter covers Windows, Linux, and macOS.
What if I get stuck on something?
You’ll have access to our Discord community of 4,000+ developers, plus direct help from Daniel. Most questions are answered within hours, and complex issues get detailed video responses.
How long will it take to complete?
Most students finish in a few weeks at 1-2 hours per day, depending on how many platforms they ship to. With lifetime access, you can go at your own pace, with no pressure or deadlines.
Will this help me get a job?
Absolutely! The course focuses on real-world workflows that showcase skills employers want. Many students have landed developer roles, freelance contracts, and promotions after completing our courses.
What if I'm not satisfied?
We offer a 30-day money-back guarantee. If you’re not completely satisfied with your progress, get a full refund, no questions asked.
Does the course get updated?
Yes! You get lifetime updates as Qt and platform tooling evolve. When new content is added, you get it automatically at no extra cost.