.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.09 2009

iPhone と iPod touch の判別について

先週末は、2度目のリジェクトでちょっとヘコんでた
Tasaki です。

今回は、その原因となった
機種の判別の仕方について紹介します。

前回の申請で問題になった点は、
“第2世代の iPod touch でツールバーに配置していたボタンが上手く動作しない”
というものでした。

これは、コード中での実機の判別法が
まずかったために起こってしまったのだと思われます。

iPhone SDK では、以下の方法でデバイスの種類を表す
文字列を取得することができます。
NSString *theDeviceName = [[ UIDevice currentDevice ] model ];

で、iPhone を開発機材として使用していたため、
iPhone とシミュレータは、実際の値を検証することができたのですが、
iPod touch は実機がなく、公式ドキュメントやインターネット上で
情報を得るしかありませんでした。
(Ad Hoc で配布して動作確認をお願いする方法もあることはありますが…)

ところが、調査の結果
iPod
iPod touch
IPod touch
iPod Touch
と複数の候補が出てきてしまい、
結局何が正しいのか分からない状態に陥ってしまいました。
もしかすると、この中に正解がないことも考えられます。

で、結局 iPod を選択したのですが、
少なくとも第2世代は、この値ではなかったようです。
(第1世代 touch で検証されたか分からないので、
第2世代とは、別の値を返す可能性もありますね)

ならば、とりあえず全ての候補を
対象にすればいいじゃないかと突っ込まれそうですが、
この方法はまた、根本的な弱点をはらんでいます。

それは、新たなデバイスが発売される度に
この部分のコードを修正していかなくてはならない、という点です。

記事の執筆時点では、iPhone、iPod touch 以外の機種は
まだ発売されていませんが、この問題が後々大きな影響を及ぼす
可能性もあります。

そこで、考え方を少し変えてみることにしました。
今回のケースでは、カメラ機能の有無で
UI のレイアウトを変更したかっただけなので、
カメラ機能が利用可能かどうかを調べるようにしました。
要は、こんな感じです。

if([ UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera ]) {
// カメラ搭載機(iPhone, Simulator)の処理
} else {
// カメラ非搭載機(iPod touch)の処理
}

こうすれば、例え新機種が発売されてもコードを変更しなくてすみます。
ただし、何らかの理由でカメラ搭載機において、
isSourceTypeAvailable: が NO を返した場合に
不具合が発生してしまう可能性はありますけど。

Apple の開発者フォーラムにおいても
機種を判別するより、機能毎に判別した方がいいという
Apple の技術者からのアドバイスが提示されていましたし、
条件分岐にデバイスの文字列を利用する方法は、
なるべく避けた方が良さそうです。


……今度こそ、審査を通過しますように
関連記事
スポンサーサイト

Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/12-b2f840f1

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。