Archive for the 技術情報 Category

ユニバーサル・アプリケーション

iOSを搭載しているH/Wも2分化し、iPhone(iPod Touch)系とiPad系の二つに分離しました。
どちらも基本的には同じなのですが、画面サイズが違います。
では1つのアプリケーションで2つのコードを描かなければいかないかと言えばNOです。
明らかに違う部分に付いては分岐させなければしょうがありませんが、多くの部分は共有出来ます。

Interface Builder用のxibファイルの作成は、各プラットフォーム用に作る必要があります。
その際にはクラスファイルも作成されますが、Interface Builder上で該当部分のクラス名を変更する事が出来ます。その際に、それらを包含するクラスファイルだけを作っておき、Interface Builder (今は実際にはxcode)が作成したクラスの親クラスを別途作成したクラスに統一してしまえば良いのです。

ボタンやUIViewのサブクラスをInterface Builderで画面に貼付ける際も、その子クラスを予め作っておけばiPhone用のxibファイルでもiPad用のxibでも同じクラス名を指定してやる事で、一つのクラスをメンテナンスしてやれば良い事になります。

けっこう開発の効率化にはなりますよ。

AVFoundation.frameworkとTARGET_IPHONE_SIMULATOR

AVFoundation.frameworkがシュミレータで全然対応していないとは思わなかった。
元々AVFoundation.frameworkはカメラ関係をまとめてiOS4.0以降に整備されたフレームワークなわけだから、シュミレータ上では動かないのだが、逆にカメラが搭載されていない機種でのテストをしようとすると行き詰まってしまう。

#ifdefでTARGET_IPHONE_SIMULATORを括り、シュミレータ上では邪魔になるクラスなどを省いてみた。とりあえず動作するようになったが、最終的には実機でしかテストを出来ないというのは問題だなぁ…。
iOS4.3ならシュミレータ上でも動くようなので、最小構成をiOS4.3(最新)にするか?
それじゃターゲットが非常に限られてしまう。

#ifdefでバイナリーを分けてしまうのは、開発者としてあまりいい気持ちではないな。

Required device capabilities

iPhoneや、iPod Touch、iPadも様々なハードウェア・バージョンが出てきました。
3G機能(電話)を搭載している機種やカメラを搭載している機種…
しかしアプリケーションを開発するにあたって、これだけは必須というハードウェア機能を搭載した機種だけを対象とする場合にはそれらを限定しなければなりません。
その時に便利なのが info.plist の “Required device capabilities”キーワードです。
ここで設定出来る値はiOS Developer Libraryにあります。
その他にも便利なキーワードがありますのでご覧下さい。

アプリケーション名の国際化

日本で発売されるiPhoneなどは日本語の表示になっていますが、居住地とは別に表示言語を「設定」→「一般設定」→「言語環境」で変更する事が出来ます。もちろん海外で発売されている製品はその国の言語に設定されていると思います。
もし自分が開発したアプリケーションを海外でも売りたいような場合には国際化が必要です。とりあえずここではホーム画面のアイコンの下に表示されるアプリケーション名を国際化する方法を説明します。

まず、xcodeで”Resources”フォルダーを右クリックし、「追加」→「新規ファイル…」を選びます。

ファイル名を”InfoPlist.strings”にして保存すると”Resources”フォルダにファイルが現れます。
次に”InfoPlist.strings”を右クリックし「情報を見る」をクリックするとウィンドウが表れますので「一般」タブで「ファイルをローカライズする」を選択します。
最初は”English”しかありませんので”Japanese”を追加します。

するとxcode上のInfoPlist.stringが日本語用と英語用に分かれますので、その中にそれぞれの言語用に下記のようにアプリケーション名を設定します。

CFBundleDisplayName=”アプリケーション名”;