QML(Qt)アプリケーションの配布方法(Mac編) ver Qt5

Macようのパッケージを作成するときは。

$ macdeployqt <appname>.app/

で、必要なライブラリを拾って集めてくれるのですがQtQuick 2.0用のインポートライブラリが不足してしまいます。
これを入れればQtQuickアプリとしての最低限HelloWorldが動く内容になります。

追加するにはWindowsやLinuxのようにただコピーするだけではダメなので「otool」と「install_name_tool」を使って手を加えます。
それでは、「QtQuick.2/libqtquick2plugin.dylib」を追加する手順です。
Qt 5.0.2での例です。

$ ~/Qt5.0.2/5.0.2/clang_64/bin/macdeployqt HelloWorld.app/
$ mkdir HelloWorld.app/Contents/qml
$ cp -R ~/Qt5.0.2/5.0.2/clang_64/qml/QtQuick.2 HelloWorld.app/Contents/qml
$ otool -L HelloWorld.app/Contents/qml/QtQuick.2/libqtquick2plugin.dylib | grep Qt
HelloWorld.app/Contents/qml/QtQuick.2/libqtquick2plugin.dylib:
/Users/iori/Qt5.0.2/5.0.2/clang_64/lib/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.0.0, current version 5.0.2)
/Users/iori/Qt5.0.2/5.0.2/clang_64/lib/QtQml.framework/Versions/5/QtQml (compatibility version 5.0.0, current version 5.0.2)
/Users/iori/Qt5.0.2/5.0.2/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.0.0, current version 5.0.2)
/Users/iori/Qt5.0.2/5.0.2/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.0.0, current version 5.0.2)
/Users/iori/Qt5.0.2/5.0.2/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.0.0, current version 5.0.2)


ここまでで、QtQuickとQtQmlとQtNetworkとQtCoreとQtGuiを参照していることがわかります。
ただし、絶対パスで指定されているので、intall_name_toolを5回実行して1つずつ参照先を実行ファイルからの相対パスへ書き換えます。
で、面倒なので以下のスクリプトを使うと少し楽になります。

#!/bin/bash

QTPATH=/Users/iori/Qt5.0.2/5.0.2/clang_64/
LIBPATH=$1
CMD="install_name_tool -change"
ABSPATH1=lib/
ABSPATH2=.framework/Versions/5/
RELPATH1=@executable_path/../Frameworks/
RELPATH2=.framework/Versions/5/

count=1
for arg in $@
do
if [ $count -gt 1 ] ; then
$CMD ${QTPATH}${ABSPATH1}${arg}${ABSPATH2}${arg} ${RELPATH1}${arg}${RELPATH2}${arg} $LIBPATH 
fi
count=$(($count+1))
done

$ macdeployhelper.sh HelloWorld.app/Contents/qml/QtQuick.2/libqtquick2plugin.dylib QtQuick QtQml QtNetwork QtCore QtGui

で、下のように書き換わります。

$ otool -L HelloWorld.app/Contents/qml/QtQuick.2/libqtquick2plugin.dylib | grep Qt
HelloWorld.app/Contents/qml/QtQuick.2/libqtquick2plugin.dylib:
@executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.0.0, current version 5.0.2)
@executable_path/../Frameworks/QtQml.framework/Versions/5/QtQml (compatibility version 5.0.0, current version 5.0.2)
@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.0.0, current version 5.0.2)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.0.0, current version 5.0.2)
@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.0.0, current version 5.0.2)


あとは、がんばって必要なプラグインとかを調べる感じです。