コンセプトの証明 - UIKit ベースの Lighthouse プラットフォーム

この記事は Qt Blog の ”New proof-of-concept UIKit based Lighthouse platform" を翻訳したものです。
執筆: Eike Ziller 2011年3月11日

Android への移植 ほどエキサイティングではないかもしれませんが(でも多分、少なくとも私にとっては INTEGRITY platform よりエキサイティングですが ;))、コンセプトの証明として UIKit ベースの Lighthouse プラグインを qt-lighthouse リポジトリに追加しました。

これにより、もし(qt-lighthouse リポジトリの src/plugins/platforms/uikit/ にある) README ファイルの手順に慎重に従えば、Qt (の一部) を iOS シミュレーターと端末向けにビルドができ、いくつかの簡単な Qt Quick アプリケーションのサンプルプログラムを動かす事ができるはずです。この iOS の移植は完全な対応ではなく、サポートもしませんのでご注意ください。コンパイルは通ったとしても動かない部分はいくつもあります。また、コンパイルさえ試していないところもあります。

いくつかの簡単な QML アプリケーションを iPhone 上で動かし、技術的に Lighthouse によって対応できる事を確認することがこの小さなプロジェクトのゴールでした。これはもちろん、QML がとても素晴らしいテクノロジーだからです。

Qt のコンパイルとリンク(これは動きます)

これはもっとも退屈で、フラストレーションのたまる作業でした。mac の gcc の mkspecs でデスクトップ系の環境変数が iOS の方に影響していることに気づくまでは、いくつかの命令処理が利用できなかったり、コードは実行されてもメソッドが返す値や変数が突然変更されたり 0 になったりしました。これらをなんとか乗り越えてからは、iOS はほぼ POSIX プラットフォームなのでほとんどのものが「とりあえず動く状態」にはなりました。

Lighthouse プラットフォームプラグイン

サンプルの Cocoa プラットフォームのプラグインが行っているのと同様に、簡単そうな方法を選択しました。例えば、全てを QImage に描画した後に UIView で表示しています。これが最適な方法でないのは明らかですが(QML の flickr デモを動作させると簡単にわかります)、このコンセプトをすぐに実現するという目的を達成するには適していました。この他にも、イベントループの対応の際に UIApplicationMain を起動直後の早い段階で実行しなかったため iOS アプリケーションがシステムによって終了される等、いくつかの問題がありました。

結果

(少なくとも現時点で、いくつかの細かいパッチも必要ですが、) Lighthouse による対応は可能で、QML は素晴らしいテクノロジーです ;)。Lighthouse に関しては本当に素晴らしいものでしたし、Lighthouse 以外についてもとてもいい経験になりました。


Blog Topics:

Comments