iOS 4とiPhone OS 3.xにおける[UIImage imageNamed]の動作の違い

my iPhone family pile
Creative Commons License photo credit: blakespot

iPhoneアプリを開発していて、少しハマってしまったのでメモ。

UIImageクラスのimageNamedメソッド

指定した名前の画像ファイルを読み込み、UIImageクラスのオブジェクトを生成するためのメソッドです。
このメソッド、OSのバージョンが3.x系かiOS 4かで、微妙に動作が違ってくることがわかりました。

On iOS 4 and later, the name of the file is not required to specify the filename extension. Prior to iOS 4, you must specify the filename extension.
iPhone OS Reference Library : UIImage Class Reference

iPhone OS 3.xまで

iPhone OS 3.xまでは、以下のように拡張子も含めたファイル名を引数としてimageNamedメソッドに渡していました。
拡張子は必ず含めなければなりません。

iOS 4から

一方、iOS 4では、下記のように拡張子を含めなくても画像を読み込めるように修正されました。
(従来のiPhone OS 3.xの方法もサポートされています。)

何が問題?

せっかく作ったアプリが、OS 3.x系端末で動かない…

「iPhone SDK 4でアプリを開発したけど、iPhone OS 3.x系がインストールされた端末でも動かしたい」
こういう要望・希望もまだまだあるかと思います。

ですが、iPhone SDK 4でコンパイルしたアプリケーションに、上述の拡張子を含めない方法で書かれたコードが含まれていた場合、そのアプリはiPhone OS 3.xがインストールされた端末では動きません。

拡張子ぐらい書こうぜ!

画像ファイルの拡張子なんてピリオドいれて、せいぜい4~5文字程度。
もし、どちらのバージョンでも動作するアプリを作りたい場合は、面倒くさがらずに、きちんと拡張子を含めて画像のファイル名を指定するようにしましょう。

と、自分に強く言い聞かせてみたのでした。。
それでは!