« ツイット・キャスティングのすべてのライブが iPhone/iPad で閲覧できるようになりました | メイン | ツイキャス・ビューワーが承認されるまでの 42 日間 »

2010年04月19日

iPhone アプリを iPad 対応にする方法(プログラミング編) あとで読む

スクリーンショットとりながら丁寧に説明する気はないのだけど、メモ残しとかないと自分でも忘れそうなので・・・

iPad の登場で、iPhone/iPad 両方に共通のバイナリというものが SDK 3.2 で作成できるようになりました。
もちろん、iPhone は iPhone OS 3.1系、iPad は 3.2 系なので、API の変更を吸収する必要はあるのですが、それを差し引いてもシングルバイナリで提供できるというのはメリットが多いわけで・・・

で、その方法。主に Interface Builder を使ってる人向け。

詳しくは Starting Your Project を読んでください。MPMoviePlayer を使っている自分にとっては「どうすんだよ、これ・・・」って感じではあるのですが・・・ま、それはさておき。


※次の手順 1-3 については、XCode の 「Upgrade Current Target for iPad」コマンドを使うことが推奨されています。ので、1~3 については基本「Upgrade Current Target for iPad 」コマンドをつかってください。XCode 右ペインの Groups & Files メニューから Target を選択して右クリックすればメニューが表示されるはずです。


1. iPad用の XIB(NIB) を作成する
 これは、File > New File > Empty XIB で、よーくみると iPad が選択できるので、それを選択して作成します。

2. iPhone用のリソースをがーっとコピー
で、作成した XIB に元の iPhone のリソースをがーっとコピペ。
File's Owner のクラス設定だけは忘れずに。

3. Info.plist に iPad 用のリソースを指定
 Add Row で Main nib file base name (iPad) という行を追加。その値を先ほど作った XIB にする。

4. iPhone / iPad ユニバーサルプロジェクトであることを記述
 Project > Edit Project で Targeted Device Family を iPhone/iPad に変更。これで iPhone/iPad に対応したユニバーサルプロジェクトが完成。
 なお、iPhone の場合のOSバージョンは、その下にある iPhone OS Deployment Target で指定されている。iPhone OS 3.1 でOKでしょう。


以上で、iPad ユニバーサルアプリ完成。簡単ですね。
なお、XIB がメインのもの以外にもある場合は、それらの XIB も変換が必要ですのでご注意ください。(そのためにも 1~3の手順は知っておいて損はないかと)。


あとは iPad で画面がでかくなったのでリソースをちょろちょろ編集していきます。てか、iPad 画面でか!


※ 「Upgrade Current Target for iPad」コマンドを使用したときは 4. の処理が行われないようですが、これはちゃんと設定しておいたほうがいいと思います。


で、あと気を付けるとこは・・・

5. Weak Link
 ランタイムでライブラリエラーがでるときは、たぶんリンクが Weak Link になっていないせい。
 そんなときは Project > Edit Active Target > General で、Linked Library の値を Weak にします。
 たぶん、UIKitFramework でしょう。これ Weak にすればたいていいけるんじゃないですかね・・・

6. Default.png
 Default.png は iPad では Default-Portrait.png と Default-Landscape.png を用意します

7. Interface Orientation
 3.2 からインターフェースの向きも Info.plist で設定するようになっていますので、Supported Interface Orientations (iPad) と Supported Interface Orientation (なにもなしは iPhone) を設定しておきます。
 iPad の場合、Portrait にしても上下どちらでもいけるようにすべきかと。

8. UIDevice の名前
 よく使われる、 sysctlbyname("hw.machine", name, &size, NULL, 0); の値は「iPad1,1」です。
(sys/utsname.h の uname も同じ)
また、[UIDevice currentDevice].model は 「iPad」です。

9. iPhone/iPad の判定
 そもそも iPhone/iPad の判定、なんか簡単にできるっしょ!って思って調べてみたのですが、なんか微妙・・・
 プリプロセッサレベルでは
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
で iPad の判定ができます。(追記: iOS4 が出たので、この判定方法は使えなくなりました)でも、プリプロセッサレベルで振り分けたらシングルバイナリにならんですよね・・・
 ランタイムでの判定は、一応マクロで定義してねってのが推奨されているので、これを使うとよいかと思います。


10. Icon.png
 iPad でアイコンも綺麗になっています。これまでの 57x57 ではなく、 もうすこし大きいもので「72 x 72」になっています。
 まぁ、大きいものを Icon.png としておいておけば iPhone では縮小表示されますが、綺麗にするなら Info.plist に CFBundleIconFiles を Array 型で定義して、その中に アイコンファイルを指定していきます。最適な大きさものが適切に選択されます。


と、こんなところでしょうか。

iPad アプリも早速 $0.99 の最低ラインに値下がりしていて、これで iAd がでれば、無料アプリが氾濫するんじゃないですかね。。

その前に既存の iPhone アプリを是非 iPad 対応にしておきましょう。


※間違いや抜けてるところあれば教えてください。

投稿者 aka : 2010年04月19日 15:57  / 2010年04月 / メモ

トラックバック

人気ブログランキング - a++ My RSS 管理人ブログ

このエントリーのトラックバックURL:
http://133.242.136.64/mt-tb-sf.cgi/830

コメント

こんにちは。
楽しみにしていたのですが....
来月!
ちょっと残念ですね〜
早く実物が触ってみたい!
でも、その間に....
アプリ沢山つくって〜

投稿者 rainmans DS & iPad : 日時 2010年04月20日 08:05

コメントしてください

あわせて読みたい




保存しますか?