iOS8 以降をサポートするアプリを Xcode 7 で作成し、起動画面に XIB を使用しています (起動画像はありません)。ビューには、アプリのバージョンを含む単一の UILabel と、Images.xcassets に存在する画像 (ロゴとスプラッシュ画像) を含む 2 つの UIImageView が含まれています。
アプリケーションを起動すると UILabel とロゴ画像は正しく表示されますが、iOS9 を搭載した iPad Air 2 でアプリケーションを実行するとスプラッシュ画像が表示されません。iPad 2、iPad Air、iPad Air 2 用の iOS8 および iOS9 シミュレーターを実行する Air と Mini でテストしましたが、すべてで画像が正しく表示されました。
何が起こっているのかを突き止めるために、基本的なトラブルシューティングをいくつか実行しましたが、解決できず、機能している画像と機能しない画像の違いは、アセットに追加したときだけであることがわかりました...
私が知っていることの概要は次のとおりです。
スプラッシュ画像の UIImageView は正しい位置にあり、正しいサイズです。念のため背景色を緑に設定しているので、これがわかります。ビューはありますが、画像は表示されません。したがって、ビューに問題があるわけではないと思います。
スプラッシュ画像の UIImageView をロゴ画像も使用するように設定すると、ロゴ画像がビューの正しい場所に表示されます。このことからも、ビューに問題があるわけではないと考えられます。
スプラッシュ イメージ ビューで使用している UIImage は、アプリ内の他の場所でも使用されており、他のビューでも問題なく表示されます (ロゴ イメージもアプリ内の他の場所でも使用されており、問題なく表示されます)。したがって、イメージは有効であり、他のビューに表示されても問題ないと考えられます。
xcassets ファイル内のロゴとスプラッシュの UIImages の設定が同じであることを確認しました。これらは、デフォルトでユニバーサル、任意の幅と高さ、複数のスケール係数、レンダリングに設定されています。違いが 1 つあります。ロゴには 1x、2x、3x のスケールがありますが、スプラッシュ イメージには 1x と 2x しかありません。ただし、UIView で 1x のみ、および 1x と 2x の値を持つ UIImages を使用することも試しましたが、これらは機能します (プロジェクトに以前追加されていた場合)。
異なるサイズまたは形式 (PNG および JPG) の別の画像を xcassets に追加し、その UIImage をスプラッシュ イメージの UIImageView で使用しても、表示に失敗します。
XIB ファイルに別の UIImageView を追加し、xcassets にすでに存在する UIImage を割り当てると、読み込み画面に画像が表示されます。
ロゴに使用される画像ファイルをコピーして名前を変更し、プロジェクトに追加してから、その UIImage をスプラッシュ ビューで使用しても、表示に失敗します。
問題があった場合に備えて、プロジェクトのクリーンアップ、開発マシンの再起動、Air 2 からのアプリの削除と再インストールを試みました。
最後の 3 つの手順から、プロジェクト ファイルの有効期間の特定の時点以降に追加された画像に何らかの問題があると考えられます。昨日 Xcode 7 にアップデートしましたが、スプラッシュ画像はもともと Xcode 6 で追加されたものですが、ロゴ画像 (これも Xcode 6 で追加) は数か月前に追加されたものです。
ロゴ画像とスプラッシュ画像の json ファイルを確認しましたが、同じ形式であるようです。また、pbxproj ファイルを調べて違いを探しましたが、違いは見つかりませんでした。
そこで、Air 2 で追加しているこれらの新しい画像が起動画面に表示されない理由について、誰か知っている人はいませんか? 画像が表示されないという問題に関連して私が読んできた他の質問はすべて、起動画像、またはクラスが関連付けられている XIB ファイル内の画像に関連しているようですが、どちらもここでは関係ないようです。
ベストアンサー1
電源をオフにしてから再度オンにします。
本当に、デバイスを再起動してください。私の場合はそれで解決しました。
うまくいかなかったものは次のとおりです:
- 派生データのクリーニング。
- プロジェクトのクリーンアップ。
- デバイスからアプリをアンインストールします。
- Xcode を再起動します。
- コンピュータを再起動します。
以前の観察:
他のものと同様、次のようになります。
- シミュレータでは問題なく動作します
- デバイス(iPhone 5S、iPad Air)で動作するために使用
- コードの変更はありません (git reset --hard HEAD で確認済み) が、動作を停止しました。
最初にビルドが動作しなくなった原因は、ビルドの実行中に iPhone を取り外したことだったと記憶しています。(関連があるかどうかはわかりません。)
しかし、git resetで修正されない(すべてのクリーンステップが機能しない)ということは、これはどこか別の場所にキャッシュされているに違いないということです。おそらく.gitignoredファイルの1つでしょうか?(私はXcode プロジェクトの Git 無視ファイル)
1 つの UIImageView (3 つある UIView 内) には機能したが、他の UIImageView には機能しなかった回避策の 1 つは、画像を .xcassets ファイルに入れることでした。プレーンな画像ファイルに戻しても、修正は元に戻りませんでした。(本当にキャッシュ エラーのようです。)
更新: 上部を参照してください。デバイスを再起動すると問題が解決しました。間違ったビットマップ データがデバイス自体にキャッシュされているような気がします。