iOS用Qt

Qt for iOS は、Apple 社のiPhoneiPadApple Vision Pro 向けのアプリケーションをビルドすることができます。

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

サポートされる構成

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

ビルド環境ターゲットプラットフォームアーキテクチャ
Xcode 15(iOS 17 SDK)以上iOS 16以上(iOS 18を含む)armv8,arm64

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

自動テストで使用するターゲットデバイス
デバイスOS バージョンアーキテクチャフォームファクター
iPhone 12iOS 16armv8 (arm64)モバイル
iPhone 11iOS 16armv8(arm64)モバイル
iPad Pro、第3世代iOS 15armv8(arm64)タブレット
iPad、第6世代iOS 14armv8(arm64)タブレット

ビルド環境

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

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

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

動作変更のオプトアウト

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

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

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

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

対象プラットフォーム

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

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

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

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

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

set(CMAKE_OSX_DEPLOYMENT_TARGET "42.0")

または qmake を使用します:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 42.0

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

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

はじめに

Xcode のインストール

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

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

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

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

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

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

Xcode に付属するシミュレータで Qt アプリケーションをテストする場合は、これだけで十分です。しかし、物理的なデバイス上でアプリケーションを実行したり、App Store でアプリケーションを公開したりするには、Apple Developer Program に参加し、開発者証明書とプロビジョニング・プロファイルを設定する必要があります。

Qt アプリケーションをビルドする前に、Xcode が正しくセットアップされていることを、例えば、標準的な Xcode のアプリケーションテンプレートをデバイス上で実行するなどしてテストしてください。

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

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

コマンドラインからアプリケーションをビルドする

CMakeまたはqmakeを使って、iOSアプリケーションのビルド方法を定義します。CMake と qmake はどちらもxcodeproj ファイルを生成し、コマンドラインから読み込んでビルドすることができます。

CMakeを使う

<Qt-dir>/<version>/ios/bin/ にあるqt-cmake コンビニエンス・スクリプトが、ツールチェーンと正しいアーキテクチャのセットアップを行ってくれます。

qt-cmake コンビニエンス・スクリプトを使用する:

<Qt-dir>/<version>/ios/bin/qt-cmake <source-dir>

生成されたxcodeproj ファイルを使用して、Xcode を使用してアプリケーションをビルドするか、コマンドラインからxcodebuild を実行します。あなたのアプリケーションで利用可能なターゲットとスキームのリストについては、以下のコマンドを実行してください:

xcodebuild -list -project <your-app>.xcodeproj

そして、xcodebuild build を実行し、アプリケーションの詳細を渡します:

xcodebuild build -allowProvisioningUpdates -project <your-app>.xcodeproj -scheme <your-scheme> -configuration Debug -destination "generic/platform=iOS" -destination-timeout 1 ENABLE_ONLY_ACTIVE_RESOURCES=NO

qmakeを使う

まず、qmakeを使ってアプリケーションのビルド方法を定義します。次に、生成されたxcodeproj ファイルを使用して、Xcode またはコマンドラインからアプリケーションをビルドします。

qmake <your-app>.pro

qmakeは、xcodebuild を呼び出すラッパーのMakefileを作成するので、make を実行してアプリケーションをビルドすることができます:

make -j8

ソース・ファイルの追加や削除など、プロジェクトのセットアップが変更された場合は、再インポートする必要があることに注意してください。

Xcode プロジェクト設定のカスタマイズ

QMAKE_MAC_XCODE_SETTINGS qmake 変数は、例えば、Xcode の設定をカスタマイズするために使用することができます:

development_team.name = DEVELOPMENT_TEAM
development_team.value = <your-team-id>
QMAKE_MAC_XCODE_SETTINGS += development_team

他の qmake 変数も便利です:

QMAKE_TARGET_BUNDLE_PREFIX = com.<your-company>
QMAKE_BUNDLE = <your-app>

Xcodeでアプリケーションを実行する

qmakeとCMakeによって生成されたXcodeプロジェクトは、iOSデバイスとiOSシミュレータの両方でアプリケーションを実行することをサポートしています。

注意: Qt for iOS シミュレータライブラリのデフォルトアーキテクチャはx86_64 ですので、アプリケーションは Apple Silicon Mac 上の Rosetta で実行する必要があります。もし、Rosetta ベースの実行先が Xcode の実行先メニューに表示されていない場合は、Product > Destination > Destination Architectures メニューから有効にすることができます。

Qt Creator でのアプリケーションのビルドと実行

Qt Creator のドキュメントには、Qt for iOS アプリケーションのセットアップと実行方法が記載されています:

  • Qt Creator を参照してください:iOS デバイスを接続する。

なお、Xcode がインストールされている必要があります。

iOS の例

Qt Creator では、iOS のテスト済みサンプルを検索することができます。Qt Creator Welcome モードでサンプルを検索するには、ios キーワードを使用してください。いくつかのサンプルは機能が制限されている可能性があることに注意してください。

iOS デバイスで動作することが確認されているサンプルのリストについては、Qt for iOS Examples を参照してください。

Qt for iOS の詳細については、以下のトピックを参照してください:

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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。