このページでは

macOS 向け Qt - 展開

このドキュメントでは、macOSバンドルを作成し、アプリケーションが実行時に必要なリソースを確実に検出できるようにする方法について説明します。ここでは、Qtソースパッケージに同梱されているサンプルアプリケーション「Plug & Paint」のデプロイ手順を例に説明します。

macOS 用の Qt インストーラには、ここで説明する手順を自動化するデプロイメントツールが含まれています。

バンドル

macOS では、GUI アプリケーションはバンドルからビルドおよび実行する必要があります。バンドルとは、Finder で表示した際に単一のエンティティとして認識されるディレクトリ構造のことです。アプリケーションのバンドルには通常、実行ファイルと、それが必要とするすべてのリソースが含まれています。以下に、アプリケーションバンドルの構造例を示します。

Frameworks、MacOS、Resources、PlugIns、および設定ファイルを含むContentsフォルダを示すmacOSアプリバンドルの構造

バンドルには、ユーザーにとって多くの利点があります:

  • 単一のエンティティとして認識されるため、インストールが容易です。
  • コードからバンドルに関する情報にアクセスできます。

これは macOS 固有の機能であり、本書の範囲外です。バンドルに関する詳細については、Apple の開発者向けウェブサイトを参照してください。

CMake を使用してアプリケーションをバンドルとしてビルドするには、実行可能ターゲットの MACOSX_BUNDLE プロパティを設定します:

set_target_properties(plugandpaint PROPERTIES
    MACOSX_BUNDLE TRUE
)

qmake これにより、アプリケーション用のバンドルが自動的に生成されます。これを無効にするには、アプリケーションのプロジェクトファイル(.pro )に次の記述を追加してください:

CONFIG-=app_bundle

静的リンク

シンプルに保ち、デプロイするファイルが数個しかない場合は、静的リンクされたライブラリを使用してアプリケーションをビルドできます。

Qtの静的リンクによるビルド

まず、Qt ライブラリの静的バージョンをインストールします。プラグインは使用できず、画像フォーマットや SQL ドライバなどの依存ライブラリも静的リンクでビルドする必要があることに注意してください。

cd /path/to/Qt
./configure -static <other parameters>

configure -help を実行すると、利用可能なさまざまなオプションを確認できます。

アプリケーションを静的バージョンの Qt にリンクする

Qtの静的リンクによるビルドが完了したら、次のステップとして、ビルドファイルを再生成し、アプリケーションを再ビルドします。

CMakeの使用

qt_add_executable というラッパーコマンドを必ず使用してください。このコマンドは、静的 Qt ビルドで Qt プラグインをリンクするなどの追加ロジックを提供します。

Appleプラットフォーム向けにビルドするには、cmake_minimum_required() を 3.21.1 以降に設定する必要があります:

cmake_minimum_required(VERSION 3.21.1)

アプリケーションが含まれているディレクトリに移動します:

cd /path/to/Qt/examples/widgets/tools/plugandpaint/app

次に、CMAKE_PREFIX_PATH 変数を、インストール先のプレフィックスを指すように設定します。すでにCMakeによるビルドがある場合は、CMakeCache.txt ファイルを削除してください。その後、CMakeを再実行します:

cmake -DCMAKE_PREFIX_PATH=path/to/Qt/6.12.0/your_platform -S <source-dir> -B <build-dir> -G Ninja

あるいは、CMAKE_PREFIX_PATH 変数を自動的に設定してくれる便利なスクリプト「qt-cmake 」を使用することもできます。

path/to/Qt/6.12.0/your_platform/bin/qt-cmake -S <source-dir> -B <build-dir> -G Ninja

最後に、ビルドディレクトリに移動し、お好みのビルドシステムを実行してください。この例では、Ninja を使用します。

cd path/to/build/dir
ninja

これで、エラーなくコンパイルとリンクが完了していれば、デプロイ可能なplugandpaint.app バンドルが準備できているはずです。Qt や Qt アプリケーションがインストールされていない macOS マシンに、このバンドルをインストールしてみてください。

qmakeの使用

まず、アプリケーションが含まれているディレクトリに移動します:

cd /path/to/Qt/examples/widgets/tools/plugandpaint/app

次に、qmake を実行してアプリケーション用の新しい makefile を作成し、クリーンビルドを行って静的リンクされた実行ファイルを作成します:

make clean
qmake -config release
make

おそらくリリース版ライブラリに対してリンクしたいでしょう。これは `qmake` を実行する際に指定できます。バイナリのサイズをさらに縮小するために、「デッドコードの削除」を活用するとよいでしょう。これを行うには、`-config release ` パラメータに加えて、`LIBS+= -dead_strip ` を `qmake ` に渡します。

繰り返しになりますが、コンパイルとリンクがエラーなく完了していれば、デプロイ可能なplugandpaint.app バンドルが準備できているはずです。QtやQtアプリケーションがインストールされていないmacOSマシンに、このバンドルをインストールしてみてください。

リンクされたライブラリの確認

otool を使用すると、アプリケーションが他にどのライブラリにリンクしているかを確認できます:

otool -L plugandpaint.app/Contents/MacOs/plugandpaint

以下は、静的リンクされたPlug & Paint の出力例です:

plugandpaint.app/Contents/MacOS/plugandpaint:
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
        (compatibility version 2.0.0, current version 128.0.0)
/System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime
        (compatibility version 1.0.0, current version 10.0.0)
/usr/lib/libz.1.dylib
        (compatibility version 1.0.0, current version 1.2.3)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
        (compatibility version 1.0.0, current version 22.0.0)
/usr/lib/libstdc++.6.dylib
        (compatibility version 7.0.0, current version 7.3.0)
/usr/lib/libgcc_s.1.dylib
        (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libmx.A.dylib
        (compatibility version 1.0.0, current version 92.0.0)
/usr/lib/libSystem.B.dylib
        (compatibility version 1.0.0, current version 88.0.0)

出力にQtライブラリが表示されている場合、おそらくマシンに動的 Qt ライブラリと静的 Qt ライブラリの両方がインストールされていることを意味します。リンカーは常に静的リンクよりも動的リンクを選択します。静的ライブラリのみを使用したい場合は、次のいずれかの方法があります:

  • アプリケーションをリンクする際に、Qtの動的ライブラリ(.dylibs )を別のディレクトリに移動しておき、リンク完了後に元の場所に戻すか、
  • あるいは、Makefile を編集し、Qt ライブラリのリンク行を静的ライブラリへの絶対パスに置き換える。

たとえば、以下の記述:

-lQtGui

次のように置き換えます:

/where/static/qt/lib/is/libQtGui.a

「Plug & Paint」のサンプルは、コアアプリケーション(Plug & Paint)と、「Basic Tools」および「Extra Filters」プラグインという複数のコンポーネントで構成されています。静的リンク方式ではプラグインをデプロイできないため、現時点で準備したバンドルは不完全な状態です。 アプリケーションは実行されますが、プラグインが欠落しているため機能は利用できません。プラグインベースのアプリケーションをデプロイするには、macOS固有のフレームワーク方式を使用する必要があります。

フレームワーク

このアプローチでは、Qtランタイムがアプリケーションバンドルとともに正しく再配布されていること、およびアプリケーションがプラグインを検出できるよう、プラグインが正しい場所にインストールされていることを確認してください。

フレームワーク方式でアプリケーションと共に Qt を配布するには、2 つの方法があります:

  • アプリケーションバンドル内のプライベートフレームワーク。
  • 標準フレームワーク(あるいは、インストール済みバイナリ内の Qt フレームワークを使用)。

最初のオプションは、Qtを特別な方法でビルドしている場合や、フレームワークが確実に存在するようにしたい場合に適しています。結局のところ、Qtフレームワークをどこに配置するかという問題に尽きます。

2番目のオプションは、多数のQtアプリケーションがあり、それらのアプリケーションにQtの複数のバージョンではなく、単一のQtフレームワークを使用させたい場合に適しています。

Qtをフレームワークとしてビルドする

ここでは、Qtをフレームワークとして既にインストール済みであることを前提としています(これはQtインストール時のデフォルト設定であり、/path/to/Qtディレクトリに配置されます)。フレームワークを使用せずにQtをビルドする方法の詳細については、「Qt for macOS - 特定の課題」のドキュメントを参照してください。

インストール時に、フレームワークの識別名が設定されます。この名前は、動的リンカー(dyld )がアプリケーション用のライブラリを見つけるために使用されます。

アプリケーションをフレームワークとしてのQtにリンクする

Qtをフレームワークとしてビルドした後、Plug & Paintアプリケーションをビルドできます。

CMake を使用する場合

Appleプラットフォーム向けにビルドするには、cmake_minimum_required() を3.21.1以降に設定する必要があります:

cmake_minimum_required(VERSION 3.21.1)

アプリケーションが含まれているディレクトリに移動します:

cd /path/to/Qt/examples/widgets/tools/plugandpaint/app

次に、CMAKE_PREFIX_PATH 変数を、Qtのインストール先を指すように設定します。すでにCMakeによるビルドが行われている場合は、CMakeCache.txt ファイルを削除してください。その後、CMakeを再実行します:

cmake -DCMAKE_PREFIX_PATH=path/to/Qt/6.12.0/your_platform -S <source-dir> -B <build-dir> -G Ninja

あるいは、CMAKE_PREFIX_PATH 変数を自動的に設定してくれる便利なスクリプト `qt-cmake` を使用することもできます。

path/to/Qt/6.12.0/your_platform/bin/qt-cmake -S <source-dir> -B <build-dir> -G Ninja

最後に、ビルドディレクトリに移動し、お好みのビルドシステムを実行してください。この例では、Ninja を使用しています。

cd path/to/build/dir
ninja

これで、エラーなくコンパイルとリンクが完了していれば、デプロイ可能な `plugandpaint.app ` バンドルが準備できているはずです。Qt や Qt アプリケーションがインストールされていない macOS マシンに、このバンドルをインストールしてみてください。

qmakeの使用

まず、アプリケーションが含まれているディレクトリに移動します:

cd /path/to/Qt/examples/widgets/tools/plugandpaint/app

qmake を実行してアプリケーション用の新しい makefile を作成し、クリーンビルドを行って動的リンクされた実行ファイルを作成します:

make clean
qmake -config release
make

これでコアアプリケーションがビルドされます。プラグインをビルドするには、以下を実行してください:

cd ../plugandpaint/plugins
make clean
qmake -config release
make

次に、Qt フレームワーク(例えば Qt GUI)に対して `otool ` を実行します:

otool -L QtGui.framework/QtGui

次のような出力が得られます:

QtGui.framework/QtGui:
/path/to/Qt/lib/QtGui.framework/Versions/4.0/QtGui
        (compatibility version 4.0.0, current version 4.0.1)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
        (compatibility version 2.0.0, current version 128.0.0)
/System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime
        (compatibility version 1.0.0, current version 10.0.0)
/path/to/Qt/QtCore.framework/Versions/4.0/QtCore
        (compatibility version 4.0.0, current version 4.0.1)
/usr/lib/libz.1.dylib
        (compatibility version 1.0.0, current version 1.2.3)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
        (compatibility version 1.0.0, current version 22.0.0)
/usr/lib/libstdc++.6.dylib
        (compatibility version 7.0.0, current version 7.3.0)
/usr/lib/libgcc_s.1.dylib
        (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libmx.A.dylib
        (compatibility version 1.0.0, current version 92.0.0)
/usr/lib/libSystem.B.dylib
        (compatibility version 1.0.0, current version 88.0.0)

Qtフレームワークの場合、最初の行(つまり `path/to/Qt/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.0.0, current version 4.0.1)`)が、動的リンカー(`dyld`)によって使用されるフレームワークの識別名となります。

しかし、アプリケーションをデプロイする際、ユーザーが指定された場所に Qt フレームワークをインストールしていない可能性があります。そのため、フレームワークを所定の場所に用意するか、バンドル内に格納する必要があります。 どちらの解決策を選択する場合でも、フレームワークが自身に対して適切な識別名を返すこと、およびアプリケーションがこれらの名前を検索することを確認する必要があります。幸いなことに、install_name_tool コマンドラインツールを使用してこれを制御できます。

install_name_tool には、「-id 」と「-change 」の2つのモードがあります。「-id 」モードはライブラリやフレームワーク用であり、新しい識別名を指定することができます。「-change 」モードは、アプリケーション内のパスを変更するために使用します。

これを試すために、QtフレームワークをPlug & Paintバンドルにコピーしてみましょう。otool でバンドルの出力を確認すると、QtCore とQtGui の両方のフレームワークをバンドルにコピーする必要があることがわかります。ここでは、バンドルをビルドしたディレクトリにいるものと仮定します。

mkdir plugandpaint.app/Contents/Frameworks
cp -R /path/to/Qt/lib/QtCore.framework
        plugandpaint.app/Contents/Frameworks
cp -R /path/to/Qt/lib/QtGui.framework
       plugandpaint.app/Contents/Frameworks

まず、バンドル内にFrameworks ディレクトリを作成します。これは macOS アプリケーションの慣例に従ったものです。次に、フレームワークを新しいディレクトリにコピーします。フレームワークにはシンボリックリンクが含まれているため、-R オプションを使用します。

install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
       plugandpaint.app/Contents/Frameworks/QtCore.framework/Versions/4.0/QtCore
install_name_tool -id @executable_path/../Frameworks/QtGui.framework/Versions/4.0/QtGui
       plugandpaint.app/Contents/Frameworks/QtGui.framework/Versions/4.0/QtGui

次に、install_name_tool を実行して、フレームワークの識別名を設定します。-id の後の最初の引数は新しい名前、2番目の引数は名前を変更したいフレームワークです。テキスト「@executable_path 」は、dyld の特別な変数であり、dyld に対し、実行ファイルが置かれている場所から検索を開始するよう指示します。新しい名前は、これらのフレームワークが「Frameworks 」ディレクトリの直下に配置されていることを指定します。

install_name_tool -change path/to/Qt/lib/QtCore.framework/Versions/4.0/QtCore
        @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
        plugandpaint.app/Contents/MacOs/plugandpaint
install_name_tool -change path/to/qt/lib/QtGui.framework/Versions/4.0/QtGui
        @executable_path/../Frameworks/QtGui.framework/Versions/4.0/QtGui
        plugandpaint.app/Contents/MacOs/plugandpaint

これで、ダイナミックリンカーはQtCore とQtGui の場所を認識できるようになりました。install_name_tool の-change モードを使用して、アプリケーションもライブラリの場所を認識できるようにする必要があります。これは基本的に、先ほどフレームワークに設定した識別名と一致させるための文字列置換に帰着します。

最後に、QtGui フレームワークはQtCore に依存しているため、QtGui への参照を変更することを忘れないようにする必要があります:

install_name_tool -change path/to/Qt/lib/QtCore.framework/Versions/4.0/QtCore
        @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
        plugandpaint.app/Contents/Frameworks/QtGui.framework/Versions/4.0/QtGui

その後、otool を再度実行すると、アプリケーションがライブラリを正しく認識していることが確認できます。

Plug & Paintのサンプル用のプラグインは、この作業を興味深いものにしています。プラグインに関して行うべき基本的な手順は以下の通りです:

  • プラグインをバンドル内に配置し、
  • install_name_tool を実行して、プラグインが正しいライブラリを使用しているか確認し、
  • アプリケーションがプラグインの場所を正しく認識していることを確認する。

プラグインはバンドル内の任意の場所に配置できますが、最適な場所は「Contents/Plugins」の下です。「Plug & Paint」プラグインをビルドした際、各.pro ファイル内のDESTDIR 変数に基づいて、プラグインの.dylib ファイルはplugandpaint ディレクトリ内のplugins サブディレクトリに配置されていました。このディレクトリを正しい場所に移動するだけで済みます。

mv plugins plugandpaint.app/Contents

たとえば、Basic Toolsプラグインの.dylib ファイルに対してotool を実行すると、次のような情報が表示されます。

libpnp_basictools.dylib:
libpnp_basictools.dylib
       (compatibility version 0.0.0, current version 0.0.0)
/path/to/Qt/lib/QtGui.framework/Versions/4.0/QtGui
       (compatibility version 4.0.0, current version 4.0.1)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
       (compatibility version 2.0.0, current version 128.0.0)
/System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime
       (compatibility version 1.0.0, current version 10.0.0)
/path/to/Qt/lib/QtCore.framework/Versions/4.0/QtCore
       (compatibility version 4.0.0, current version 4.0.1)
/usr/lib/libz.1.dylib
       (compatibility version 1.0.0, current version 1.2.3)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
       (compatibility version 1.0.0, current version 22.0.0)
/usr/lib/libstdc++.6.dylib
       (compatibility version 7.0.0, current version 7.3.0)
/usr/lib/libgcc_s.1.dylib
       (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libmx.A.dylib
       (compatibility version 1.0.0, current version 92.0.0)
/usr/lib/libSystem.B.dylib
       (compatibility version 1.0.0, current version 88.0.0)

これにより、プラグインがビルド時に使用されたQtフレームワークにリンクされていることがわかります。プラグインにはアプリケーションバンドル内のフレームワークを使用させたいので、アプリケーションの場合と同じ方法で変更を加えます。例えば、Basic Toolsプラグインの場合は以下の通りです:

install_name_tool -change /path/to/Qt/lib/QtCore.framework/Versions/4.0/QtCore
        @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
        plugandpaint.app/Contents/plugins/libpnp_basictools.dylib
install_name_tool -change /path/to/Qt/lib/QtGui.framework/Versions/4.0/QtGui
        @executable_path/../Frameworks/QtGui.framework/Versions/4.0/QtGui
        plugandpaint.app/Contents/plugins/libpnp_basictools.dylib

また、アプリケーションがプラグインを確実に検出できるように、tools/plugandpaint/mainwindow.cpp のコードをcdUp()に変更する必要があります。mainwindow.cpp ファイルに以下のコードを追加してください:

#elif defined(Q_OS_MACOS)
if (pluginsDir.dirName() == "MacOS") {
    pluginsDir.cdUp();
}
#endif
macOSのFinderで、プラグインフォルダを含むデプロイ済みのアプリバンドルが表示されているtools/plugandpaint/mainwindow.cpp に追加されたコードにより、画像に示されているように、Finder でプラグインを表示できるようになります。

Qtを拡張するプラグイン、例えばSQLドライバや画像フォーマットを追加することも可能です。プラグインのドキュメントに記載されているディレクトリ構造に従い、QCoreApplication::libraryPaths()にそれらを含めるようにするだけです。先ほど説明した手順に従って、画像フォーマットを例に、さっそく試してみましょう。

Qt Image Formatsの画像フォーマットプラグインをバンドルにコピーします:

cp -R /path/to/Qt/plugins/imageformats
        pluginandpaint.app/Contents/plugins

install_name_tool を使用して、プラグインをバンドル内のフレームワークにリンクします:

install_name_tool -change /path/to/Qt/lib/QtGui.framework/Versions/4.0/QtGui
        @executable_path/../Frameworks/QtGui.framework/Versions/4.0/QtGui
        plugandpaint.app/Contents/plugins/imageformats/libqjpeg.dylib
install_name_tool -change /path/to/Qt/lib/QtCore.framework/Versions/4.0/QtCore
        @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
        plugandpaint.app/Contents/plugins/imageformats/libqjpeg.dylib

tools/plugandpaint/main.cpp 内のソースコードを更新し、新しいプラグインを検索できるようにします。QApplication を生成した後、以下のコードを追加します:

QDir dir(QCoreApplication::applicationDirPath());
dir.cdUp();
dir.cd("plugins");
QCoreApplication::setLibraryPaths(QStringList(dir.absolutePath()));

まず、アプリケーションに対して、このディレクトリ内のプラグインのみを検索するように指示します。今回のケースでは、バンドルと一緒に配布するプラグインのみを検索させたいと考えています。もし、より大規模な Qt インストール環境の一部である場合は、代わりに `QCoreApplication::addLibraryPath()` を使用することもできました。

警告: プラグインのデプロイ時にソースコード に変更を加えると、アプリケーションの再ビルド時にデフォルトの識別名がリセットされます。そのため、install_name_tool を使用して、アプリケーションがバンドル内の正しい Qt フレームワークにリンクされるようにする手順を再度実行する必要があります。

これで、アプリケーションを別の macOS マシンに移動し、Qt がインストールされていない状態でも実行できるようになるはずです。あるいは、バンドルの外部にあるフレームワークを別のディレクトリに移動し、アプリケーションが引き続き動作するかどうかを確認することもできます。

フレームワークをバンドル外の別の場所に保存する場合、アプリケーションのリンク方法は同様です。アプリケーションとフレームワークの両方で、Qtライブラリおよびプラグインの検索先が一致していることを確認する必要があります。

アプリケーションパッケージの作成

アプリケーションをQtに静的リンクするか、フレームワークとしてリンクするかのいずれかの方法でリンクが完了すると、アプリケーションは配布できる状態になります。詳細については、Apple Developerのウェブサイトを参照してください。

アプリケーションの配布プロセスにはいくつかの落とし穴がありますが、さまざまな問題点を把握しておけば、macOSユーザー全員が満足できるパッケージを簡単に作成できるようになります。

アプリケーションの依存関係

Qtプラグイン

すべてのQt GUI アプリケーションには、QtのQt Platform Abstraction(QPA) レイヤを実装するプラグインが必要です。macOSの場合、プラットフォームプラグインの名前はlibqcocoa.dylib です。このファイルは、配布ディレクトリ内の特定のサブディレクトリ(デフォルトではplatforms )に配置する必要があります。 あるいは、以下で説明するように、Qt がプラグインを検索するために使用する検索パスを調整することも可能です。

また、アプリケーションは、JPEG 画像形式プラグインや Qt SQL ドライバプラグインなど、1 つ以上の Qt プラグインに依存している場合があります。必要な Qt プラグインは、必ずアプリケーションと一緒に配布してください。プラットフォームプラグインと同様に、各タイプのプラグインは、配布ディレクトリ内の特定のサブディレクトリ(imageformats やsqldrivers など)に配置する必要があります。

Qt プラグインの検索パス(およびその他のいくつかのパス)は、QtCore ライブラリにハードコードされています。デフォルトでは、最初のプラグイン検索パスは/path/to/Qt/plugins としてハードコードされます。しかし、あらかじめ決められたパスを使用することには、いくつかの欠点があります。 たとえば、ターゲットマシン上にそれらのパスが存在しない可能性があります。そのため、Qtプラグインが確実に検出されるよう、さまざまな代替パスを確認する必要があります:

「Qtプラグインの作成方法」ドキュメントでは、Qtアプリケーション用のプラグインをビルドおよびデプロイする際に注意すべき事項について概説しています。

追加のライブラリ

otool を使用すると、アプリケーションがどのライブラリにリンクしているかを確認できます。このコマンドを、アプリケーションのパスを引数として指定して実行してください:

otool -L MyApp.app/Contents/MacOS/MyApp

コンパイラ固有のライブラリをアプリケーションと一緒に再配布する必要はほとんどありません。しかし、macOS では Qt をさまざまな方法で設定、ビルド、インストールできるため、アプリケーションのデプロイ方法もいくつかあります。通常、デプロイ方法は目的によって決まります。最後のセクションでは、アプリケーションをデプロイする際に留意すべき点をいくつか説明します。

macOS デプロイメントツール

macOS デプロイメント ツールは、QTDIR/bin/macdeployqt から入手できます。このツールは、Qt ライブラリをプライベートフレームワークとして含む、デプロイ可能なアプリケーションバンドルを作成するプロセスを自動化するように設計されています。

また、macOS デプロイメントツールは、以下のルールに従って Qt プラグインもデプロイします(-no-plugins オプションが使用されていない場合)。

  • プラットフォームプラグインは常にデプロイされます。
  • プラグインのデバッグ版はデプロイされません。
  • デザイナー用プラグインは展開されません。
  • 画像形式プラグインは常にデプロイされますが、SVG画像形式プラグインは、アプリケーションが Qt SVG モジュールを使用している場合にのみデプロイされます。
  • アイコンエンジンプラグインは常にデプロイされます。
  • 印刷サポートプラグインは常にデプロイされます。
  • SQL ドライバプラグインは、アプリケーションが Qt SQL モジュールを使用している場合にのみデプロイされます。
  • アクセシビリティ・プラグインは常にデプロイされます。
  • スタイルプラグインは常にデプロイされます。

重要: Mac デプロイメント ツールを使用しない場合は 、デプロイメント パッケージにこれらのプラグインが含まれていることを確認する必要があります。

アプリケーションバンドルにサードパーティのライブラリを含めるには、バンドルの作成後に、そのライブラリをバンドル内に手動でコピーしてください。

macdeployqt 以下のオプションをサポートしています:

オプション説明
-verbose=<0-3>0 = 出力なし、1 = エラー/警告(デフォルト)、2 = 通常、3 = デバッグ
-no-pluginsプラグインの展開をスキップ
-dmg.dmg ディスクイメージを作成する
-no-stripバイナリに対して「strip」を実行しない
-use-debug-libsフレームワークおよびプラグインのデバッグ版を使用してデプロイする(-no-strip を意味します)
-executable=<path>指定された実行ファイルも、デプロイされたフレームワークを使用できるようにする
-qmldir=<path>指定されたパスにある .qml ファイルで使用されるインポートをデプロイする
-qmlimport=<path>指定されたパスをQMLインポートの検索場所に追加する
-always-overwriteターゲットファイルが存在する場合でもファイルをコピーする
-codesign=<ident>すべての実行ファイルに対して、指定された ID を使用してcodesign を実行します。デフォルトでは、アドホック署名 (-codesign=-) が使用されます。
-no-codesignコード署名を無効にする
-hardened-runtimeコード署名時に Hardened Runtime を有効にする
-timestampコード署名時にセキュアなタイムスタンプを含める(インターネット接続が必要)
-sign-for-notarization=<ident>公証に必要なオプションを有効にする(インターネット接続が必要)。有効になるオプションは、-hardened-runtime 、-timestamp 、および-codesign=<ident>
-appstore-compliantプライベートAPIを使用するコンポーネントの展開をスキップ
-libpath=<path>指定されたパスをライブラリ検索パスに追加する
-fs=<filesystem>.dmg ディスクイメージに使用するファイルシステムを設定します(デフォルトは HFS+ です)

注:macOS High Sierra では、新しい Apple File System (APFS) が導入されました。古いバージョンの macOS では、APFS でフォーマットされた .dmg ファイルを読み取ることができません。デフォルトでは、macdeployqt は、Qt が現在サポートしているすべてのバージョンの macOS との互換性を確保するため、旧式の HFS+ ファイルシステムを使用します。別のファイルシステムを指定するには、-fs オプションを使用してください。

ボリューム名

-dmg を使用して作成されたディスクイメージのボリューム名(開いた.dmg ファイルのウィンドウタイトルに表示されるテキスト)は、macdeployqt の実行時のアプリケーションへのパスに基づいて決定されます。たとえば、Qt Quick アプリケーション用のディスクイメージを作成する次のコマンドを考えてみましょう。

macdeployqt /Users/foo/myapp-build/MyApp.app -qmldir=/Users/foo/myapp/qml -dmg

その結果、ボリューム名は次のようになります:

/Users/foo/myapp-build/MyApp.app

ボリューム名にアプリケーション名のみが含まれ、デプロイ先のマシン上のパスが含まれないようにするには、同じディレクトリで `macdeployqt ` を実行してください:

cd /Users/foo/myapp-build
macdeployqt MyApp.app -qmldir=/Users/foo/myapp/qml -dmg

その結果、ボリューム名は次のようになります:

MyApp.app

利用権限

署名を行う際、macdeployqt は、アプリケーションバンドルのContents/Resources/サブディレクトリ内に.entitlementsファイルが存在する場合、その中にある最初のファイルを自動的に使用します。エラーを防ぐため、このフォルダ内には.entitlementsファイルを最大1つだけ配置するようにしてください。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.