2011年1月
« 12月   3月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
2011/01/15

アプリのアイコンが真っ白になるバグ

iOS 4.0のバグじゃないのかと思うんですが、「設定」→「言語環境」→「言語」で、言語の設定を変更した時に、アプリのアイコンが真っ白いものに変わってしまうバグを発見しました。

先日アップデートした「和時計」でも発生するので、修正したバージョンを昨晩Appleへ提出しました。

和時計の例だと、以下のような状態でした。

・バージョンアップ前は言語設定を変えてもアイコンは普通に表示されていた。
・アプリで修正した箇所は、バンドルしているデータの変更のみ。
・iOS 4.2ではアイコンの表示は問題無いが、iOS 4.0では言語設定を変えると真っ白いアイコンになる。
・一度真っ白になってしまうと、アプリを削除して再インストールするまで直らない。

発生条件がはっきりとしない部分はありますが、対応方法は分かりました。


Info.plistに指定できるキーで、iOS 3.2の時に指定できるようなった「Supported interface orientations」(UISupportedInterfaceOrientations)というアプリがサポートしている画面の向きを記述するキーがあります。(「」で書いた値が表示上で使用されている名称で、その後に()で記述しているのが実際のファイル上に記述されている生の値です。)

これを設定することでアイコンが表示されるようになりました。

和時計の場合は全ての向きをサポートしているので、「Supported interface orientations」に以下の4つの値をセットしました。
・「Portrait (bottom home button)」(UIInterfaceOrientationPortrait)
・「Portrait (top home button)」(UIInterfaceOrientationPortraitUpsideDown)
・「Landscape (left home button)」(UIInterfaceOrientationLandscapeLeft)
・「Landscape (right home button)」(UIInterfaceOrientationLandscapeRight)

和時計の場合は、iOS 3.1.2以降で実行できる設定でアップした為、iPadでも実行される可能性があるので、念の為iPad向けの「Supported interface orientations (iPad)」(UISupportedInterfaceOrientations~ipad)も設定しました。

アイコンと直接関係の無いキーなのに、これを指定していないと表示されないというのは不思議です。

iOS 4.2では指定していなくとも正常に表示されるので、iOS 4.0のバグなのかも知れません。

あと、複数の言語に対応していないアプリや、既に配信済みのアプリではこの現象は起きないようです。

最後に発生する条件をまとめると、以下のような感じではないかと思います。
・アプリ内に複数言語のリソースバンドルを持っている。
・アプリがインストールされているiPhone / iPod touchのiOSのバージョンが4.0
・最新のXCode 3.2.5でビルドしていて、Info.plistに「Supported interface orientations」の記述がない。

Info.plistで指定できるキーが記述されているAppleのドキュメント「Information Property List Key Reference」や、「iOS Application Programming Guide」を確認しましたが、特にどのキーが必須で、どのキーが省略可能かは書かれていないようですが、iOS 3.2以降では「Supported interface orientations」については必須と思っておいた方が間違い無さそうです。

XCodeで新規プロジェクトを作った時に、必須のキーはInfo.plistに入れておいてくれればいいのに。
と思って、XCodeのプロジェクトテンプレートを色々と見てみた所、「Window-based Application」の「iPad」と「Universal」を選んだ時は、「Supported interface orientations」が記述されていました。(「iPhone」を選んだ時は追加されていない。)

iPhoneの時だけ追加されていないという事は、本当は必須項目では無いという事のような、今ひとつはっきりとしない感じです・・・。

あと、プロジェクトを作った時に作られているInfo.plistファイルのネーミングルールが変わって、以前は「Info.plist」だったのが、現在は「[プロジェクト名]-Info.plist」になっていますが、これについては今の所「Info.plist」のままでも問題無いようです。


※iPhoneアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。

Comments are closed.