> 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