結論
方法1
- LaunchScreenに使っているAssetsの画像名を変更する
方法2
- cacheを削除するコードを呼び出す(参考元)
- 試してないので実際に効果あるかは未確認
import UIKit
public extension UIApplication {
func clearLaunchScreenCache() {
do {
try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
} catch {
print("Failed to delete launch screen cache: \(error)")
}
}
}
ことの始まり
iOSのアプリ起動時に表示されるLaunchScreenだが、多くはアプリやブランド、企業のロゴ画像を表示しているだろう。
このロゴ画像が何かしらの理由で差し替えが必要になった際、単純にAssetsの画像を入れ替えるだけでは上手くいかないことがあった話である。
今回ロゴ画像にノイズが乗っており見栄えが悪かったので、ノイズのない画像をVector画像で用意してもらった。
そして単純にAssetsでファイルを入れ替えを行ったところ、アプリ起動時の画面ではなぜか古い画像が表示されたのである。
原因
このLaunchScreenで使用しているロゴ画像は、アプリの別画面でも使用していたので、そちらを確認したがそちらは正しく新しい画像が表示されていた。
結構前にもLaunchScreenの画像の表示が上手くいかないことがあったのを記憶していたこともあって、原因に思い当たる節があった。
それは… キャッシュ(cache) である。
調査
cacheなら期限とか時間置けば消えるだろうと思って大雑把に日付を進めてはアプリを起動して画像が新旧どちらが表示されるか確認したところ、
- 約30日後 => cacheが残っている
- 約60日後 => cacheが消えている
ロゴ画像を差し替えたいのに、実際にそのipaをリリースしてからcacheが消えるまで悠長に待つ開発者なんているだろうか?あほなの?
ならば、どうやったら即時反映されるか、弄り回した結果、どうもAssetsの画像名でcacheしているらしくAssetsの画像名を変更する
がお手軽かつ最速だと判断した。
おまけでcacheなら意図的消してしまえばいいのでは?と思い調べたところcacheを消す話を書いているサイト(結論の方法2の参考元)を見つけたが、cacheがあることで高速起動している点もあるだろうことから、コードでcache消すのはあまりいい感じがしなかったので止めた。