Deploying on MacOS with QtIFW
-
Hello everyone.
I find myself in the situation that I want to deploy my code for Win, Linux and Mac. I would like to use the QtInstallerframework for this, since it became public use and QT itself uses it to deploy itself. But i'm a bit of a loss here.
What is working properly:
- I think I got the App-Bundle set up correctly
- the Installer.app seems to create all neccessary files correctly too
- I managed to create all shortcuts with Windows as OS
The problem comes with the desktop short cut and /or finder/launchpad entry for macOS.
The Docu shows only how to do it for Windows and online I've found mostly windows references as well as some linux tips- mostly from this forum :-)
If I understand this correctly I'll have to modify only the
installerscript
for this
Here is what I have:function Component() { if (systemInfo.productType === "windows") { var programFiles = installer.environmentVariable("ProgramFiles"); if (programFiles != "") installer.setValue("TargetDir", programFiles + "/companyName/AppName"); } if (systemInfo.productType === "mac") { var programFiles = installer.environmentVariable("TargetDir"); if (programFiles != "") installer.setValue("TargetDir", programFiles + "/companyName/AppName"); } } Component.prototype.isDefault = function() { // select the component by default return true; } Component.prototype.createOperations = function() { try { // call the base create operations function component.createOperations(); } catch (e) { console.log(e); } if (systemInfo.productType === "windows") { component.addOperation("CreateShortcut", "@TargetDir@/AppName.exe", "@StartMenuDir@/AppName.lnk", "workingDirectory=@TargetDir@"); component.addOperation("CreateShortcut", "@TargetDir@/AppName.exe", "@HomeDir@/Desktop/uConfig.lnk"); } if (systemInfo.productType === "mac") { component.addOperation("CreateShortcut", "@TargetDir@/companyName/AppName/AppName.app", "@HomeDir@/Desktop/AppName"); } }
Obviously this does not result in a Dekstop - Link/Alias and I wouldn't know how to add an entry to the launchpad too. Hopefully someone can help me out here.
Is that even possible with QtIFW? Because I had to create a desktop shortcut under mac manually after installing QtCreator.
-
So, I managed to answer my own question. Took me longer than I'll like to admit, but I'll share my
workaround
here, in case someone else has this problem:If you use apples
osascript
one can use ashell
command to create a desktop alias.With that in mind I created a bash skript
makeAlias.sh
:#!/bin/bash osascript <<END_SCRIPT tell application "Finder" to make alias file to file (posix file "$1") at desktop END_SCRIPT
That gets added to the app-bundle with the following code in the
*.pro
-filemacx{ App_Data.files = /path/to/script/makeAlias.sh App_Data.path= Contents/MacOS/data QMAKE_Bundle_Data += App_Data }
the
installscript.qs
of the InstallerFramework, gets the following addition to execute the script:var argList = ["@TargetDir@/myApp.app/Contents/MacOS/data/makeAlias.sh", "@TargetDir@/myApp.app"]; installer.execute("sh",argList);
and done.
In the end, quite easy ....