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

  1. One App, Seven Targets

    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.

  2. A One-Tag Release Pipeline

    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
  1. 1.1 Welcome to the Course Free preview
  2. 1.2 What You'll Build Free preview
  3. 1.3 How to Get the Most Out of This Course Free preview
Chapter 2 Chapter 2: Play with the Environment 3 lessons
  1. 2.1 Play with the Environment: Windows Free preview
  2. 2.2 Play with the Environment: Linux 27 min Locked
  3. 2.3 Play with the Environment: macOS 30 min Locked
Chapter 3 Chapter 3: Windows Deployment 6 lessons
  1. 3.1 Configure and Build the App 11 min Locked
  2. 3.2 What Happens When You Copy the Binary 17 min Locked
  3. 3.3 windeployqt 9 min Locked
  4. 3.4 cmake --install and the Deploy Script 13 min Locked
  5. 3.5 Packaging with CPack: NSIS Installer 14 min Locked
  6. 3.6 Packaging with CPack: ZIP 5 min Locked
Chapter 4 Chapter 4: Linux Deployment 10 lessons
  1. 4.1 Configure and Build 16 min Locked
  2. 4.2 Strip RUNPATH and Manual Copy 27 min Locked
  3. 4.3 qt.conf 6 min Locked
  4. 4.4 linuxdeploy 17 min Locked
  5. 4.5 cmake --install 12 min Locked
  6. 4.6 FreeDesktop: desktop File and Icons 8 min Locked
  7. 4.7 AppImage with linuxdeploy 15 min Locked
  8. 4.8 AppImage in Docker and CI 7 min Locked
  9. 4.9 DEB with CPack 17 min Locked
  10. 4.10 tar.gz Portable Bundle 5 min Locked
Chapter 5 Chapter 5: macOS Deployment 10 lessons
  1. 5.1 Configure, Build, and Run 19 min Locked
  2. 5.2 Strip RPATH and Copy the Binary 41 min Locked
  3. 5.3 qt.conf 7 min Locked
  4. 5.4 macdeployqt 17 min Locked
  5. 5.5 cmake --install and the Deploy Script 21 min Locked
  6. 5.6 DMG with hdiutil 9 min Locked
  7. 5.7 CPack DragNDrop 11 min Locked
  8. 5.8 CPack tar.gz Portable Bundle 6 min Locked
  9. 5.9 Code Signing 18 min Locked
  10. 5.10 Notarization 10 min Locked
Chapter 6 Chapter 6: Android Deployment 11 lessons
  1. 6.1 Desktop vs Android Architecture 16 min Locked
  2. 6.2 Prerequisites 35 min Locked
  3. 6.3 Android Manifest and Launcher Icons 16 min Locked
  4. 6.4 CMake Configuration for Android 22 min Locked
  5. 6.5 Cross-Compilation with qt-cmake 10 min Locked
  6. 6.6 The android-build Directory 11 min Locked
  7. 6.7 APK Internals and AAB 7 min Locked
  8. 6.8 Signing 19 min Locked
  9. 6.9 Deploy and Debug 19 min Locked
  10. 6.10 Android Emulator 11 min Locked
  11. 6.11 Google Play 17 min Locked
Chapter 7 Chapter 7: iOS Deployment 9 lessons
  1. 7.1 Static vs Dynamic Linking 11 min Locked
  2. 7.2 Prerequisites 13 min Locked
  3. 7.3 Asset Catalog 9 min Locked
  4. 7.4 CMake Configuration for iOS 14 min Locked
  5. 7.5 Simulator Build 16 min Locked
  6. 7.6 The iOS App Bundle 8 min Locked
  7. 7.7 Device Build and Code Signing 8 min Locked
  8. 7.8 IPA Creation and Distribution Paths 9 min Locked
  9. 7.9 App Store Connect: Publishing 6 min Locked
Chapter 8 Chapter 8: Embedded Linux ARM (Raspberry Pi) 10 lessons
  1. 8.1 What We are Building 20 min Locked
  2. 8.2 Cross Compilation Concepts 9 min Locked
  3. 8.3 Docker Primer 13 min Locked
  4. 8.4 The Sysroot 13 min Locked
  5. 8.5 The Toolchain File 13 min Locked
  6. 8.6 The Main Dockerfile 16 min Locked
  7. 8.7 The Build Script 22 min Locked
  8. 8.8 Where and How The App Runs 4 min Locked
  9. 8.9 Deploying and Launching on the Pi 19 min Locked
  10. 8.10 Updating the Application 4 min Locked
Chapter 9 Chapter 9: CI/CD with GitHub Actions 6 lessons
  1. 9.1 Workflow Structure 16 min Locked
  2. 9.2 Linux Job in Docker 11 min Locked
  3. 9.3 Linux Packaging in CI 3 min Locked
  4. 9.4 macOS-Windows Job 16 min Locked
  5. 9.5 Release Assets 7 min Locked
  6. 9.6 Triggering a Release 17 min Locked

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.

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.