> On Nov 11, 2016, at 12:41 AM, Prashanth Udupa <prashanth.ud...@gmail.com> 
> wrote:
> 
> Hi Jean,
> 
> I am working on a project that involves deployment on Mac. I have a shell 
> script that packages the app into a DMG file or PKG file. It works for me 
> quite well. I am able to deploy a Qt 5.7 app to any Mac running Mac OS 10.8 
> and later.
> 
> 1. Suppose that you are writing an app called "MyWonderfulApp". After 
> building the app, there will be a MyWonderfullApp.app/ folder in your 
> $$DESTDIR.
> 2. Suppose that you need to bundle a few more command line tools (which link 
> against Qt libs and maybe external DYLIBs) into your app-bundle.
> 3. Suppose also that you need to bundle additional DYLIBs.
> 4. Suppose also that you need to bundle QML components & desktop controls 
> that are referenced by your app.
> 5. Suppose that both MyWonderfullApp and the command-line-tool depends on 
> similar set of Qt frameworks and external libraries.
> 
> Below is usable snippets of the shell script. Hopefully they are of some use 
> to you. It will need more tweaking depending on your specific app and its 
> dependencies.
> 
> ---------------
> cd $DESTDIR
> 
> # Copy command line tool to the app-bundle
> cp -vaRf cmdLineTool MyWonderfulApp.app/Contents/MacOS
> 
> # Copy external libs to your app-bundle
> mkdir MyWonderfulApp.app/Contents/Frameworks
> cp -vaRf /path/to/external/lib/externalLib.dylib 
> MyWonderfulApp.app/Contents/Frameworks/
> install_name_tool -id @executable_path/../Frameworks/externalLib.dylib 
> MyWonderfulApp.app/Contents/Frameworks/externalLib.dylib

Don't do that last install_name_tool command. Instead, build your dynamic 
library with:

in qmake...
        QMAKE_SONAME_PREFIX = @rpath (which is equivalent to QMAKE_LFLAGS += 
-Wl,-install_name,@rpath/externalLib.dylib)
or in qbs...
        cpp.sonamePrefix: "@rpath"

and build your main application and command line helper tool with:

in qmake...
        QMAKE_RPATHDIR += @loader_path/../Frameworks (which is equivalent to 
QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../Frameworks)
or in qbs...
        cpp.rpaths: ["@loader_path/../Frameworks"]

> 
> # Map externalLib.dylib to a path within the app-bundle
> install_name_tool -change /path/to/external/lib/externalLib.dylib 
> @executable_path/../Frameworks/externalLib.dylib 
> MyWonderfulApp.app/Contents/MacOS/MyWonderfulApp
> install_name_tool -change /path/to/external/lib/externalLib.dylib 
> @executable_path/../Frameworks/externalLib.dylib 
> MyWonderfulApp.app/Contents/MacOS/cmdLineTool

Not needed, given the above.

> 
> # Map Qt frameworks used by cmdLineTool to the ones within the app-bundle. 
> # (The frameworks will be copied when you use macdeployqt)
> install_name_tool -change @rpath/QtNetwork.framework/Versions/5/QtNetwork 
> @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork 
> MyWonderfulApp.app/Contents/MacOS/cmdLineTool
> install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore 
> @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore 
> MyWonderfulApp.app/Contents/MacOS/cmdLineTool
> install_name_tool -change @rpath/QtXml.framework/Versions/5/QtXml 
> @executable_path/../Frameworks/QtXml.framework/Versions/5/QtXml 
> MyWonderfulApp.app/Contents/MacOS/cmdLineTool

Also not needed, given the above.

> # Use macdeployqt to bundle everything else (frameworks, QML components, Qt 
> Desktop controls, plugins etc..)
> $QTDIR/macdeployqt MyWonderfulApp.app -always-overwrite 
> -qmldir=/path/to/qml_files_in_your_project -verbose=1 -appstore-compliant -dmg
> 
> # Now use MyWonderfulApp.dmg to distribute
> ---------------
> 
> If you want to distribute your app as a pkg file, then change the macdeployqt 
> usage as follows
> 
> ---------------
> $QTDIR/macdeployqt MyWonderfulApp.app -always-overwrite 
> -qmldir=/path/to/qml_files_in_your_project -verbose=1 -appstore-compliant
> productbuild --component MyWonderfulApp.app /Applications MyWonderfulApp.pkg
> 
> # Distribute the MyWonderfulApp.pkg file now.
> ---------------
> 
> Hope this helps.
> 
> Thanks,
> Prashanth
> 
> On Thu, 10 Nov 2016 at 22:42 Jean-Michaël Celerier 
> <jeanmichael.celer...@gmail.com> wrote:
> Late bump : 
> 
> The documentation is still lacking. 
> For instance, where should one deploy QtQuick's QML files ?
> 
> Upon inspection it seems that some plug-ins are put in 
> Contents/PlugIns/quick, some QML files in Resources/qml (similarly to what's 
> in Qt/5.$version/$platform/qml folder) and symlinks in Resources/qml/QtQuick 
> (or others) to the actual qml plug-ins.
> 
> Is all of this necessary ?
> 
> Best,
> Jean-Michaël
> 
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

-- 
Jake Petroules - jake.petrou...@qt.io
The Qt Company - Silicon Valley
Qbs build tool evangelist - qbs.io

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to