2016年9月9日金曜日

Launch Screen.storyboardの画像が表示されない

起動画面にLaunch Screen.storyboardを使ったアプリを作成中、storyboardで設定した画像が真っ黒になるという現象が発生した。

Simulatorでは表示されるが、TestFrightでインストールしたバージョンで発生した。

一旦別の画像を設定・ビルドし、再度画像を設定し直すと、とりあえずはまた画像が表示されるようになったが、再発するので調べてみたら、同様のことが載っているページがいくつか見つかった。

このページに
UIImageView missing images in Launch Screen on device
UIImageのProperty > Drawing > Cleans Graphic Contextのチェックを外すといういう方法が載っていたが、私の場合は効かなかった。

またまた再発し、今度は画像を変えても直らない。
UIImageに設定する画像名は、プルダンウンでは拡張子付きのものだが、拡張子を取ったら直ったいうのがあったので試したところ、表示されるようになった。

これでもまた再発した。
確実そうなのは画像ファイルをまだ使ったいない名前にリネームすることのようだ。XCodeでのリネームでも有効。

デバイスを再起動させたら直ったというのが幾つかあるので試してみると、一発ですんなりというわけではなかったが、これまでに使ったことのあるファイル名に戻しても画像が表示されるようになった。

iOS再起動だけでは画像が表示されるようにならない場合は、さらにアプリをアンインストー、再インストールを行う。

どうやら、iOSがアプリ起動時の画面をどこかにキャッシュしているのではないかと思われる。画面全体の画像としてのキャッシュではなくstoryboardから生成されるオブジェクト群のキャッシュだとすると、その中のUIImageのキャッシュ画像が再現できず、同じリソース名だと、iOSのキャッシュを無効にするまで表示されなくなるのかもしれない。

ちなみに、コーディングで何かできないかとも思ったが、Launch Screen.storyboardはアプリローディング中に表示されるものなので、これは無理でした。
参考:Execute code in Launch Screen