2010/07/02

Macのアプリケーションバンドル時のカレントディレクトリをどうするか

仕事でQtを使ってマルチプラットフォームの環境で動くアプリケーションを作っているんですが、個人的に結構泣かされてるのがMacのbundleの仕組みです。
bundleの仕組みを簡単に説明すると、Macではアプリケーション配布時、フォルダの下に実行ファイル用のフォルダやリソース用のフォルダが作られ、その中にファイルが設置されます。
それだけ聞くと「Windowsと同じでは?」と思いますが、Finder(Windowsで言うexplorer)からアプリケーションを開くときはファイルが保存された親フォルダをダブルクリックして起動します。つまり、Finderからはフォルダが単体のアプリケーションに見えるわけです。
Macだけを対象としたアプリケーション開発をするなら、インストールもアンインストールも楽で、開発者にとってはブラボーは仕組みなんですが、マルチプラットフォームを対象としたアプリケーションを作っている場合は、カレントディレクトリ差異に煩わしさがありました。
これは「きっとMacやQtを使いこなしてないしょぼい開発をしているから発生する問題に違いない」と思っていましたが、ネットで解決方法を見つけてびっくりです
QDir dir(QCoreApplication::applicationDirPath());
#if defined(Q_OS_WIN)
if (dir.dirName().toLower() == "debug" || 
    dir.dirName().toLower() == "release")
{
 dir.cdUp();
}
#elif defined(Q_OS_MAC)
if (dir.dirName() == "MacOS")
{
 dir.cdUp();
 dir.cdUp();
 dir.cdUp();
}
#endif
QDir::setCurrent(dir.absolutePath());
cdで移動してるだけやんけ!
でも、よく考えたら下手に自動で何かされるよりいいのか。

0 件のコメント: