Week 2—Monday
OpoLua Qt for macOS and Windows
This post is a spiritual continuation of my December Adventure—I enjoyed the experience of keeping a daily devlog, so I’m going to see how long I can keep it going.
Having spent much of the first week of the year on festivities and wrapping up the last few bits of my 2025 December Adventure, I decided to ease back into things slowly. Armed with my long list of issues from last year, I set about knocking out some bug fixes and—hopefully—clearing the way for future feature work.
OpoLua (Qt)
OpoLua continues to loom over me. Tom is doing stellar work fleshing out our new Qt desktop-focused app, and rounding out our OPL implementation, but we’ve yet to actually ship anything. As our resident GitHub Actions whisperer, that task tends to fall to me.
The Qt app has been building successfully for macOS in CI for the past couple of weeks (since I first took a crack at it on day 12 of my December Adventure), but an issue with the way I was linking the Qt frameworks meant that it would only run if Qt was installed. Thankfully, after a little investigation, the fix proved simple—Qt provides macdeployqt which can embed the Qt frameworks and correctly sign an app for notarization (an entirely unexpected convenience if you’re used to developing for Apple platforms):
macdeployqt "OpoLua Qt.app" \
-verbose=3 \
-sign-for-notarization="Developer ID Application: Jason Morley (QS82QFHKWB)"
With the addition of just this simple line, macOS Qt builds are now working!
Buoyed by my success, I decided to take a crack at Windows builds—what could possibly go wrong? Much to my surprise, very little! GitHub Action’s Windows runners are, as you might expect, pre-configured for development, and you can opt to use bash for your scripting, allowing me to lean on my macOS and Linux scripting experience rather than trying to wrap my head around PowerShell. Since we want to statically link Qt for the Windows app, this necessitates building Qt itself from source (see install-qt.sh) which takes about 1 ½ hours on GitHub Actions, but this shouldn’t change often, so we can cache the builds, leaving us with typical build times of about 2 minutes.
Since I don’t use Windows for development, this is one of the first times I’ve used OpoLua on Windows 11, and it feels like quite an achievement. 🥳
I’ve still a few tweaks to make to the Windows builds before merging my changes into main. After that, I’ll start to take a look at tidying up the OpoLua licensing story so we can actually ship these binaries (Qt has some pretty strict requirements if you don’t buy a commercial license).