UIKit lighthouse プラットフォームのアップデート

この記事は Qt Blog の "Update on UIKit lighthouse platform" を翻訳したものです。
執筆: Eike Ziller, 2011年8月9日

こんにちは。以前に「コンセプトの証明 – UIKit ベースの Lighthouse プラットフォーム」という記事を書いてからしばらく経ちました。そろそろ、その後の経過を説明する頃だと思いますので、皆さんが実際にテストする方法も含めて説明しようと思います。少し長い記事になりますが :) 。

(コミュニティで 4.8 以前の Qt を iOS に移植しようというプロジェクトも qt.gitorious.org に有りますが、それとは違うものですので混乱しないでください。)

Lighthose が 成長した ので、UIKit プラットフォームプラグインも Qt 4.8 のベースとなるメインラインに入りました。そのため、Qt 4.8 のソースを取得すれば、iOS で Qt を試すことができます。取得と実行方法の詳細は後で述べます。また、あれから時間もあったので、運良く初期のバージョンから改良する時間を取ることができました。

OpenGL ES 1/2, パフォーマンス!

プラットフォームプラグインは、ラスターペイントエンジンで画像に描画してスクリーンに転送するのではなく、今では OpenGL ES で描画を行います。とても良く動いていて、パフォーマンスが向上しました。

技術的対策: Qt の OpenGL ES 2 のコードは途中で使用したフレームバッファをデフォルト値でリセットします。しかし、iOS ではすべてのレンダリングは FBO(フレームバッファオブジェクト) に対して行われ、システムにはフレームバッファが存在しません。そのため、フレームバッファへのポインタがデフォルトでは 0 になる問題があります。現在の実装では独自の派生クラスで(protected なメンバである) QGLPaintDevice::m_thisFBO に値を設定することで上書きして、その値を使用しています。

きれいなフォント

初期の実装では Qt に同梱されているプリレンダリングされたフォントを使っていました。現在は Qt の BasicUnixFontDatabase を使用して、TTF フォントを利用できるようになりました。まだアプリケーションに同梱されるフォントを使用していて、デバイスに元々あるフォントは使用していません。

技術的対策: この実装は私ではなく、IanFromAfrica が親切にも貢献してくださいました。ありがとう!!!

テキスト入力のサポート

このプラットフォームプラグインは Qt の RequestSoftwareInputPanel と CloseSoftwareInputPanel イベントに対応したので、iOS のソフトウェアキーボードの表示/非表示ができるようになりました。ソフトウェアキーボードからテキストの入力やキーイベントを送ることができます! ;)

技術的対策: パネルの表示や単純なキーイベントの処理は簡単です。(メインの UIView で UIKeyInput プロトコルを実装します。) しかし、残念なことに Qt/QML では Close イベントをプラグインで検出できないようです……。[qt QDeclarativeView] を使う場合はプラグインで activeFocus のある QML の [qml Item] をチェックして、アイテムが activeFocus を失ったときにパネルを閉じています。アプリケーション側では、入力に使われるパーツが入力パネルによって隠れないようにしなければいけません。また、iOS のクリップボードやルーペ機能は統合されていません。

画面の回転機能

Info.plist でアプリケーションがサポートしている画面の向きとその初期値を指定している場合(UIInterfaceOrientation と UISupportedInterfaceOrientations)、他の iOS アプリケーションと同様にこのプラットフォームプラグインでも回転機能を使うことができます。標準的な Qt アプリケーションのように、リサイズイベントを受け取って必要に応じて画面が回転して描画されます。

技術的対策: Qt が回転させた描画を直接行うことができるなら素晴らしいのですが、現状それを行える唯一の方法は(GL で直接回転させるのではなく)フレームバッファに描画して、回転させて画面に描画することです。しかし、それではおそらくパフォーマンスが低下するでしょう。

Phonon 経由のサウンド

Phonon API を使ってサウンドを再生できるようになりました。これ以上言うことはありません ;) 。

技術的対策: 特筆するほどのことはありません。Phonon と AVAuduioPlayer API は非常に良くフィットします。(現在の所はサポートしていない prefinishMark 通知を除いてですが。最も、このプラグインのどの部分も「サポート」はされていないことに注意してください :) 。)

試してみよう!

Mac OS X(10.6 かそれ以降が必要です) が使えるのであれば、すぐにでも iOS で Qt を動かしてみることができます。実際のデバイスや(有料の) Apple Developer Program は必ずしも必要ではありません。開発ツールと iOS のシミュレータは(その入手に Apple へ登録する必要はありますが)無料で入手できます。以下に必要なものを記載します。

  • Mac OS X コンピュータ
  • Xcode 開発ツール。無料でダウンロードできます(Apple に登録は必要ですが)
  • 最新の Qt 4.8, gitorious からの入手を推奨します(が、ご希望であれば https://qt.gitorious.org/qt/qt/commits/4.8 から tar アーカイブをダウンロードすることもできます)

二番目の項目は若干手こずるかもしれません。なぜなら、Apple は上手くその無料提供を隠しているからです。Mac OS X Lion (10.7) を使っている場合には /Applications にインストールされている Mac AppStore を起動して、最新の Xcode 4 をダウンロード、インストールするだけです。Lion ではなく、有料の iOS Developer Program に登録していない場合は、Xcode 3 をインストールしてください。見つけることができればですが。一連のクリック先を記載します: http://developer.apple.com/jp/, “iOS Dev Center”, “Downloads/Xcode 4″, 下にスクロールして最後の方にある “Looking for Xcode 3? Download Now”, “Register as an Apple developer/Learn more”, “Get started”, 次に登録、すべてのフォームを埋めて、すべてのアグリーメントに同意して、ようやく Xcode 3+iOS SDK をダウンロードできます。4GB ありますので、その間お茶でも飲んでいてください ;) 。

(何か抜けていたら、教えてください。リストをアップデートします。)

前述の三つの項目をすべて入手したら、Qt のコンパイルへと進みましょう。src/plugins/platforms/uikit にある README にシミュレータ用とデバイス用の configure の実行方法が書いてあります。Qt のビルドはそれぞれ qt-lighthouse-ios-simulator と qt-lighthouse-ios-device というディレクトリでシャドウビルドで行う必要があります(後で動かすサンプルがそれを前提にしてるためです)。例えば、Qt のソースを /Users/me/Qt/qt-src というディレクトリに展開している場合、シミュレータ用のビルドは以下のように行います。

mkdir /Users/me/Qt/qt-lighthouse-ios-simulator
cd /Users/me/Qt/qt-lighthouse-ios-simulator
../qt-src/configure -qpa -xplatform qpa/macx-iphonesimulator-g++ -arch i386 -developer-build -release -opengl es2 -no-accessibility -no-qt3support -no-multimedia -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations
make
cd src/plugins/platforms/uikit
make

(きれいな configure のオプションではないですか。)

configure でエラーが発生した場合、iOS SDK 4.3 を使っているか確認してください。4.3 以外を使っている場合、iOS SDK をアップグレードするか、mkspecs/qpa/macx-iphonesimulator-g++/qmake.conf と mkspecs/qpa/macx-iphonedevice-g++/qmake.conf の QMAKE_IOS_SDK 変数を調整してください。

make がすべて終わったら、qt-src/src/plugins/platforms/uikit/examples ディレクトリ以下にあるサンプルの Xcode プロジェクトを開くことができるようになります。画面上のツールバーでターゲットが “<example> simulator” でプラットフォームが “iPhone 4.3 Simulator” が選択されていることを確認してください。間違いなければ、(Build &) Run を押してください!


Blog Topics:

Comments