macOS版Qt

Qt for macOS は、Apple 社のMacコンピュータのアプリケーションをビルドすることができます。

Qt for macOS を使って開発するには、スタートガイドに従ってください。

サポートされる構成

Qt 6.8 では、以下のバージョンのビルド環境と ランタイムターゲットプラットフォームがサポートされています。

ビルド環境ターゲットプラットフォームアーキテクチャ
Xcode 15(macOS 14 SDK)以上macOS 12以上(macOS 15を含む)x86_64 x86_64h arm64

注意: Apple 社の macOS に対する前方互換性の約束は、一般的に、Qt アプリケーションが新しいオペレーティングシステムのリリース上でも正常に動作し続けることを保証するものです。発生する可能性のある問題は、Qt の分岐と サポートポリシーに従って優先順位を付け、スケジュールを組みます。新しいオペレーティングシステムの機能のサポートは、通常、Qt の安定リリースには含まれていません。

ビルド環境

macOS のビルド環境は Apple のXcodeアプリケーションによって提供され、ツールチェーン(コンパイラ、リンカ、その他のツール)と、ビルドとリンクを行う macOS プラットフォーム-SDK(ヘッダとライブラリ)の両方が含まれています。これらは、あなたのアプリケーションがどのようにビルドされるかを定義します。

Apple は一般的に、アプリケーションは最新の SDK に基づいてビルドすることを推奨(App Store の場合は必須)しています。新しいXcodeのバージョンは古いmacOSのバージョンでは動作しないかもしれないので、これはあなたのシステムのmacOSのバージョンをアップグレードする必要があるかもしれません。

注意: macOS のビルド環境は、常にあなたが使用している Xcode のバージョン(そのツールチェーンと SDK)によって定義されます。

動作変更のオプトアウト

アプリケーションをビルドするために最新のXcodeバージョンとSDKを使用することの1つの注意点は、macOSのシステムフレームワークが、あなたがアプリケーションをビルドしたSDKに基づいて、動作の変更を有効にするかどうかを決定することがあるということです。

このテクニックにより、Appleは古いSDKに対してビルドされたバイナリが、新しいmacOSリリース上でもリグレッションなしに実行され続けることを保証することができます。

例えば、macOS 10.14 Mojaveでダークモードが導入されたとき、macOSは10.14 SDKに対してビルドされたアプリケーションのみをダークモードをサポートするものとして扱い、それ以前のSDKに対してビルドされたアプリケーションはデフォルトのライトモードの外観のままにしました。

古いSDKに対して古いXcodeバージョンでビルドすることは、このような動作の変更を回避する1つの方法ですが、最後の手段であり、アプリケーションに問題を回避する他の方法がない場合にのみ適用してください。

対象プラットフォーム

macOS向けのビルドでは、弱いリンクと呼ばれるテクニックを使用します。このテクニックを使用することで、最新のプラットフォームSDKのヘッダーとライブラリに対してアプリケーションをビルドしながら、SDKのバージョンよりも低いmacOSバージョンにアプリケーションをデプロイすることができます。バイナリをビルドした SDK よりも低い macOS バージョンで実行する場合、Qt は実行時にプラットフォーム機能が利用可能かどうかをチェックしてから利用します。

理論的には、リリースされたすべてのmacOSバージョンでアプリケーションを実行することができますが、実用的な(そして技術的な)理由から、アプリケーションのデプロイメントターゲットとして知られるこの範囲には下限があります。デプロイメントターゲット以下の macOS バージョンでバイナリを起動すると、Qt はエラーメッセージを表示し、アプリケーションは実行されません。

Qt はデプロイメントターゲットを CMAKE_OSX_DEPLOYMENT_TARGETまたはQMAKE_MACOSX_DEPLOYMENT_TARGET 変数で表現します。デフォルトでは、Qt でサポートされる最小のデプロイメントターゲットに設定されています。

デプロイメントターゲットを上げる必要があるのは、Qt のデフォルトよりも高い macOS バージョンで追加された API を使用していて、@available のチェックで実行時の使用を保護していない場合だけです。

CMake でデプロイメントターゲットを上げるには

set(CMAKE_OSX_DEPLOYMENT_TARGET "42.0")

または qmake を使用します:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 42.0

注意: デプロイメントターゲットは Qt が設定したデフォルト値より下げないでください。バイナリをデプロイする際、Qt が想定しているバージョンよりも低い macOS にデプロイすると、実行時にクラッシュする可能性があります。

Apple プラットフォームでの SDK ベースの開発に関する詳細は、Apple の開発者向けドキュメントを参照してください。

アーキテクチャ

デフォルトでは、Qt は開発マシンのアーキテクチャ(Intel Mac の場合はx86_64 、Apple Silicon Mac の場合はarm64 )に合わせてビルドされます。

他のアーキテクチャ用にビルドするには、プロジェクトファイルの CMAKE_OSX_ARCHITECTURESQMAKE_APPLE_DEVICE_ARCHS 変数をプロジェクト・ファイルまたはコマンド・ラインで使用できます。これにより、異なるアーキテクチャにクロスコンパイルしたり、ユニバーサル(マルチアーキテクチャ)バイナリをビルドしたりすることができます。たとえば、x86_64arm64 の両方に対応するアプリケーションを CMake でビルドするには、次のようにします:

cmake ~/src/myapp -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"

またはqmakeを使用します:

qmake ~/src/myapp QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64"

プロジェクトファイルでアーキテクチャを指定する場合、引用符で囲んではいけません:

TEMPLATE = app
SOURCES = main.cpp
QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64

インテルMacでのサブアーキテクチャのサポート

ベースラインであるx86_64 アーキテクチャに加えて、Qt はx86_64h ("Haswell") サブアーキテクチャもサポートしています。

はじめに

Xcodeのインストール

Xcode は、Qt for macOS を使って開発するために必要なものです。App Store からインストールするか、Apple の開発者向けウェブサイトからダウンロードできます。

インストールしたら、Xcodeを一度実行して、必要な依存関係をインストールさせてください。

その後、xcode-select ツールを使用して、システムが正しい Xcode インストールを使用していることを確認してください。

$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer

出力が予想と一致しない場合は、Xcode のインストールを明示的に選択してください。

$ sudo xcode-select --switch /Applications/Xcode.app

Qtのインストールとビルド

Qt をインストールまたはビルドするには、一般的なQt 入門ガイドに従ってください。

Xcode プロジェクトファイルの生成

デフォルトでは、CMake と qmake は Makefile 形式のプロジェクトファイルを生成します。Xcode 内からアプリケーションをビルドし、デバッグしたい場合は、代わりに Xcode プロジェクトを生成するように要求することができます:

cmake ~/src/myapp -GXcode

またはqmakeを使用してください:

qmake ~/src/myapp -spec macx-xcode

macOSでアプリケーションをデプロイする

macOS アプリケーションは通常、自己完結型のアプリケーションバンドルとしてデプロイされます。アプリケーションバンドルには、アプリケーションの実行ファイルと、Qt ライブラリ、プラグイン、翻訳、その他必要なリソースなどの依存関係が含まれています。Qtのようなサードパーティライブラリは通常、システム全体にインストールされません。

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

qt_add_executable(app)
if(APPLE)
    set_target_properties(tst_manual_ios_assets PROPERTIES MACOSX_BUNDLE TRUE)
endif()

qmakeでは、バンドルがデフォルトです。これを無効にするには、プロジェクトファイル (.pro) でCONFIG -= app_bundle を設定します。

アプリケーションを配布する一般的な方法は、ユーザーがFinderでマウントできる圧縮ディスクイメージ(.dmgファイル)を提供することです。デプロイツールであるmacdeployqt (macOS インストーラーから入手可能) を使用して、自己完結型のバンドルを作成し、オプションで .dmg アーカイブも作成できます。

macdeployqt (bin/macdeployqt)は、アプリストアのデプロイの出発点として使用できます。Qt がアプリストアのサンドボックス規則に準拠するように、Qt は-feature-appstore-compliant 引数で設定する必要があります。

macOS でのデプロイの詳細については、Qt for macOS - デプロイを参照してください。

注意: macOS App Store でアプリケーションを販売する場合、特別なルールが適用されます。検証に合格するために、アプリケーションはコードを実行する前に有効な領収書の存在を確認する必要があります。これはコピー防止メカニズムであるため、一般的なパターンを避け、レシートを検証するコードをできるだけ難読化する措置を講じる必要があります。このため、Qtで自動化することはできませんが、アプリケーション自体のために特別に書かれたプラットフォーム固有のコードが必要になります。詳細はAppleのドキュメントを参照してください。

以下のトピックでは、Qt for macOS の詳細を説明しています:

Qt アプリケーションで Objective-C コードを使用する

Apple プラットフォームのアプリケーションで使用されるコンパイラである Clang では、C++ と Objective-C のコードを混在させることができます。このモードを有効にするには、関連するソースファイルに.mm 拡張子を使用し、通常通りプロジェクトに追加します。

CMakeを使用します:

target_sources(myapp PRIVATE objc_code.mm)

qmakeの場合:

SOURCES += objc_code.mm

そうすれば、QtアプリケーションでAppleのDeveloper LibraryにあるObjective-Cフレームワークを使うことができます。

すべてのソースファイルの名前を変更することなく、アプリケーションの残りの部分に機能を公開するには、ヘッダーでヘルパー関数を宣言し、Objective-C++のソースファイルで機能を実装します:

// objc_code.h
QString localizedHostName();

// objc_code.mm
#include <Foundation/NSHost.h>
QString localizedHostName()
{
    return QString::fromNSString(NSHost.currentHost.localizedName);
}

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。