夏ライオン for iPhone プロトタイプ版つくりました&感想とか

iPhone が 7/11 にソフトバンクモバイルから発売する事が発表されましたね。ということで、早速 Twitter Client の夏ライオン前書いた記事)を、iPhone SDKを使って移植してみました。画面はこんな感じ。

とりあえず Friends Timeline の自動取得と、Tweet (投稿) ができるので、最低限これだけでもなんとかなるぐらいにはなりました。これから、ハイライトやURLリンクなども実装していきます。7/11の発売までにはだいたい完成させたいと思っていますが、iPhone Developer Program に未だ加入できていないため、AppStoreなどでの配布がいつになるか(本当にできるのか?)は未定です。基本的には、オリジナルの夏ライオンと同様にオープンソース(修正BSD)で、ソースも配布しようと思っていますが、現状NDA(後述)があり、これも容易ではありません。。

これだけだとなんなので、勉強した内容とか、この移植をしてみての感想とかを書こうと思います。ところで、基本的にiPhone SDKについては、いまのところ、内容についてはNDA範囲となってしまっていて詳細な事が書けません。。(SDKをダウンロードするには、無償登録(誰でもOK)が必要なのですが、そこでNDA事項が入ったAgreeを押させられます)

まず、iPhone SDKの概要はあちこちに出ているので書けそうですが、基本的には iPhone SDKは、Cocoa Touch というフレームワークなどを使って、Objective-Cという言語(後述)で書きます。モバイルプラットフォームとしては非常に特殊だと思いますが、Mac アプリ、特に最近の Cocoa アプリを作っている人であれば、ほとんど何も考えないでそのまま iPhone 用のアプリが書けると思います。僕は、同じ「モバイルプラットフォーム」のBREWなんかでも書いたことがありますが、BREWは、比較的伝統的なRealtime-OS の流れ的なアプリの書き方に対して、この iPhone アプリは、どっちかというと Mac アプリを作っている感じです。まったくえらい違いです。もちろん iPhone SDKの生産性の方が、とくにUI周りなんかは遥かに上だと思います。(あと遥かに短時間でそれなりにかっこいいのが出来る!)

で、多分唯一の参入障壁(笑)と思われるObjective-Cは、本格的にはさわった事が無かったので、ちょうど良い機会なのでこの本

詳解 Objective-C 2.0

詳解 Objective-C 2.0

で勉強しました。iPhone SDK は、Objective-C 2.0 ってやつになってます。Objective-Cは、型をあまり意識しない(弱い型)動的言語で、何か動的なスクリプト言語の中に、とつぜんCで書けます的な不思議な感じですね。C++の強い型の静的言語な感じとはまるで対照的です。あとは、(古い)ヒレガス本

Mac OS X Cocoaプログラミング

Mac OS X Cocoaプログラミング

もちょっと読んだのですが、ちょっと古い本のためか、Interface Builder (UIデザイナ、というか、オブジェクトデザイナ?)の画面があまりにが違いすぎていて、閉口しました。

今回一番ハードルが高かったのがObjective-Cの勉強よりは、Interface Builder の使い方の習得でした。Visual Studioのリソースエディタのような気分で使うツールではなく、これはもっとアプリの中枢というかオブジェクト構造までこれでデザインできる、という感じでなかなかユニークです。慣れると凄く強力なツールだと思いますが、Apple 製品の中で多分一番難しいツールではないかと思うぐらいでした。。これは本とかの断片的な情報から手探りで慣れるよりは、だれか Cocoaアプリ作ったことがあるような人に1日ぐらいで手取り足取り教えてもらった方が遥かに高速に学習できそうです。(たぶん、ハマらなければ1日ぐらいで感覚がつかめるものだとは思います・・)

最後に、移植はどうやったかというと、

  • akrさんオリジナルから、UI部分以外を抜き出す
  • その抜き出した物で、iPhoneSDKで動かないものを、別のObjective-Cなルーチンに置き換え(ほんの一部)
  • UIはフルスクラッチ

という感じで、主に僕はUI部分を作っている感じになります。逆に言うと、Cocoaアプリからの移植は、UIはほぼ作り直しになると思いますが(いずれにしろ、マルチタッチ用にUIはデザインし直さないと使い物にならないというのがあります)、それ以外の移植はかなり容易かと思います。

しかしUIを作るって、どのプラットフォームでも非常に大変な作業になるですが、今回Inteface BuilderとObjective-Cの組み合わせを使っていて、WindowsMFCとかC#とかで作るよりももしかしたら生産性が上なんじゃないかとか思いました。あとObjective-Cといっても、C++/Cを一緒に使えるので、純粋なロジックとかはCとかでくんでおけば、特に「組み込み」を意識した作りにしないでもそのまま使えますし。AppStoreは、有料配信も出来るそうなので、ちょっとこの壁を登ると結構面白いことになるかもしれませんよ。