macOS版Qt

macOS(以前はOS XまたはMac OS Xとして知られていた)は、Macシリーズのコンピュータ用のAppleのオペレーティングシステムです。DarwinカーネルをベースとしたUNIXプラットフォームで、他のUNIXライクなプラットフォームとほぼ同様の動作をする。主な違いは、ウィンドウシステムとしてX11が使われていないことだ。代わりにmacOSは、Cocoa APIを通じてアクセスできる独自のネイティブ・ウィンドウ・システムを使用している。

macOS用のQtをダウンロードしてインストールするには、Qt入門ページの指示に従ってください。Qt をソースからビルドするには、Qt for macOS - Building from Source を参照してください。

サポートされているバージョン

macOS でのバージョンサポートについて話す場合、ビルド環境(ビルドするプラットフォーム)とターゲットプラットフォーム(ビルドするプラットフォーム)を区別することが重要です。以下のmacOSバージョンがサポートされています。

ターゲット・プラットフォームアーキテクチャビルド環境注意事項
macOS 12、13、14、15x86_64 x86_64h およびarm64Xcode 15 (macOS 14 SDK), Xcode 16 (macOS 15 SDK)

ビルド環境

macOS上のビルド環境は、アプリケーションをビルドするために使用されるXcodeのバージョンによって完全に定義されます。Xcode は、ツールチェーン(コンパイラ、リンカ、および他のツール)と macOS プラットフォーム-SDK(ヘッダとライブラリ)の両方を含んでいます。これらは一緒に、あなたのアプリケーションがどのようにビルドされるかを定義します。

注意: Xcode を実行しているmacOS のバージョンは重要ではありません。Apple があなたのオペレーティングシステム上で動作する Xcode のバージョンを出荷している限り、ビルド環境はその Xcode のバージョンによって定義されます。

XcodeはAppleの開発者向けウェブサイトからダウンロードできます(Xcodeの古いバージョンも含む)。

あなたが使用している Qt のバージョンでテストされた、Apple から入手可能な最新の Xcode を常に使用する必要があります。常に最新のプラットフォーム SDK に基づいてビルドすることで、Qt が macOS の最近のバージョンで導入された新機能を利用できるようになります。

インストールが完了したら、xcode-select ツールを使用して Xcode のインストールを選択します。

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

同じツールを使用して、グローバルに選択された Xcode インストールを検査することができます。

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

その後、xcrun コマンドを使用して、ツールチェーン内の特定のツールを見つけることができます。

$ xcrun -sdk macosx -find clang
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang

また、ビルド時に使用されたプラットフォームSDKパスを表示することもできます。

$ xcrun -sdk macosx --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

対象プラットフォーム

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

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

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

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

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

set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0")

または qmake を使用します:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 13.0

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

macOS での SDK ベースの開発についての詳細は、Apple の開発者向けドキュメントを参照してください。

macOS の動作変更からオプトアウトする

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

例えば、macOS 10.14 Mojaveでダークモードが導入されたとき、macOSは10.14 SDKに対してビルドされたアプリケーションだけをダークモードをサポートするものとして扱い、それ以前のSDKに対してビルドされたアプリケーションはデフォルトのライトモードの見た目のままにします。この技術により、アップルは新しいSDKとオペレーティング・システムがリリースされるずっと前にビルドされたバイナリが、新しいmacOSリリースでもリグレッションなしに実行し続けられることを保証している。

古いSDKに対してビルドするのは最後の手段であり、アプリケーションに問題を回避する他の方法がない場合にのみ適用してください。

アーキテクチャ

デフォルトでは、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 プロジェクトファイルの生成

デフォルトでは、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アプリケーションで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);
}

macOSの問題

以下のページでは、macOSアプリケーションを作成する際の具体的な問題点と推奨事項を取り上げています。

これからの方向性

Qt の他の部分もぜひご覧ください。どの API を使うか決めるのに役立つ概要と、私たちの API の使い方を示す例を用意しました。

Qt の活気ある活発なコミュニティサイトであるhttp://qt.ioには、Wiki、フォーラム、その他の学習ガイドやプレゼンテーションがあります。

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