iOS更新後に古い起動画面とアプリアイコンを保持する


173

最近起動画像とアプリアイコンを置き換えたアプリがあります。プロジェクト内のすべての場所から古いアセットをすべて削除しました。Xcodeでビルドするだけで、アプリを古いバージョンから新しいバージョンにアップグレードすると、すべてが問題なく動作します。ただし、アプリの古いバージョンをインストールしてTestFlightからアップグレードすると、アプリを終了して再起動するたびに、新しい起動イメージが表示される前に古い起動イメージが一時的に表示されます。同様に、次にアプリを閉じると、新しいアプリに切り替える前に、古いアプリのアイコンが一瞬点滅します。

iExplorerを使用してアプリを開いたところ、古い起動画面のイメージが/Library/Caches/Shapshotsディレクトリに保存されていることに気づきました(どのようにして、なぜそこに到達したのかわかりません)。iExplorerを使用して手動で削除すると、表示されなくなります。ただし、NSFileManagerメソッドを使用してコードで削除しようとすると、このディレクトリ内のファイルを削除することは禁止されているというエラーが表示されます。

誰かがこれを以前に経験し、アドバイスがありますか?


3
同じ問題、および起動画面では新しい起動画面が表示されず、以前のバージョンのキャッシュされたイメージが使用されます。
Christophe Fondacci

回答:


327

これにより、起動イメージの変更をテストするために、Springboardキャッシュを確実にクリアすることができました。

  1. デバイスからアプリを削除する
  2. デバイスの電源を切ります
  3. デバイスの電源を入れ、アプリをインストールして起動します。

画像は毎回正しく更新されます。残念ですが、デバイスを起動するには電源を切る必要がありますが、少なくともこの方法で進めることができました。これが誰かの役に立つことを願っています。

シミュレータの場合、シミュレータを再起動するだけで動作します。


19
これが私にとって有効な唯一のソリューションです。どうもありがとうございました!
Marcin Kapusta 2016年

ありがとうヒーロー!! 魅力のように働いた。
ラビ

5
エミュレーターでも動作します。
アレクセイポドラソフ2017

1
これはTestFlightの修正でもありますか?TestFlightからアプリを更新すると、起動画像もキャッシュされます。testflightとは異なり、これはアプリバージョンでは発生しませんか?
2018年

1
オートミラーコメディを思い出させます。しかし、それは素晴らしい働きをしています。ありがとうございました!
ssowri1

49

これらのキャッシュは、Springboardでアプリの切り替えを高速化するために使用されます。これは本番環境のユーザーに影響を与える問題ではなく、理論的には、次回Springboardがアプリのスナップショットを作成することを決定したときになくなるはずです。

そうは言っても、これは修正できる問題ではありません。これはAppleのコードのバグであり、あなたのバグではありません。

更新:デバイスの再起動を必要としない回避策があるようです。

これは2回目の起動後に有効になります。

do {
   try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
} catch {
   print("Failed to delete launch screen cache: \(error)")
}

これがどのように機能するかの詳細な説明:https : //rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
「これは本番ユーザーに影響を与える問題ではない」という記述を裏付けるドキュメントにリンクしていただけませんか?私はまったく同じ問題を抱えています。これが開発者のみの場合でも大丈夫ですが、あなたの言っていることを明確に述べている公式の文書がなければチャンスはありません。
Christophe Fondacci

6
App Storeのアップデートでこれを入手している人もいます(:
Ajumal

15
残念ながら、私はこの問題が本番ユーザーにも影響することを確認できます(App Storeからアプリをアップグレードした後)。
Eugenio 2017

はい、本番ビルド/ App Storeビルドに影響します。
ジョニー2018

これのソースはありますか?
ダニエルスプリンガー

27

シミュレータだけのために Reset Contents and Settings...


これは問題ではありません。重要なのは、新しいアイコンや画像を使用して新しいアプリをデプロイする場合、それらはすべて同じ方法で更新されるわけではなく、削除されている間は一部が表示され続けるということです。
ステファンパケ

18

@InkGolem

これは本番ユーザーに影響を与える問題ではありません

本当です。

起動画面、SplashScreen、およびアプリアイコンを変更したときに、この問題に直面していました。私はすべての方法を試しましたが、うまくいきませんでした。最後に、アプリを公開し、開発に使用しなかっデバイスを使用してApp Storeからアプリケーションをダウンロードしました。SplashScreenとApp Iconは通常どおり機能します!!!


1
アプリストアにすでにアプリがあり、ユーザーが新しい起動画面でアプリケーションを更新した場合、どうなりますか?
rhcpfan 2017

appstoreのダウンロードに既にアプリがあり、新しい起動画面でアップデートをリリースしています。アプリをリリースした後、10台を超えるデバイス(開発には使用しない)でテストし、「これは本番環境のユーザーに影響を与える問題ではない」ことを確認し、ユーザーからの苦情はこれまで受けていませんスプラッシュスクリーン。
chinnawatp 2017

7
この問題は私にとってもAppstoreビルドで発生しており、@ Brian Trzupekのヒントが機能しました。
2017

3
確認されたとおり、これはApp Storeのライブビルドで発生します。この回答には言語に関するいくつかの問題があります。問題がプロダクションビルドに影響を与えるかどうかはわかりませんが、経験的にはそうです。
ジョニー

2
実際に本番ユーザーに起こっている!表示されるスプラッシュ画面は古いものです。電話を再起動することで修正されました。うまくいけば、人々は再起動せずに次の数時間で新しいスプラッシュを見るでしょう。
Valerio

13

この問題を本当に修正したい場合の回避策を見つけました。Appleには、画像ファイル名でインデックスを作成する起動画面の画像をキャッシュするメカニズムがいくつかあります。

起動画面で画像を変更し、次の実行でそれらの変更をすぐに確認したい場合。変更した画像の新しい画像名を使用して、ストーリーボードまたはxibの新しい画像ファイルにリンクしてください。

もう一度実行すると、新しい変更が表示されます。


1
アプリを削除したくなかったので、これを試してみました。これに加えて、デバイスを再起動するとうまくいきました。
Murray Sagal

これは私にはうまくいきませんでした。デバイドを再起動することもできませんでした...私は今あきらめます。
Lensflare

私のために働いていませんでした。私もimageViewを削除して、新しい画像で新しい画像を作成しましたが、それでも機能しませんでした。
RickardElimää19年

うまくいきませんでした。古い1つの画像が読み込まれず(まだ画像の代わりに背景色が表示されていました)、新しい起動画面が表示される前に、ほんの一瞬表示されました。
Michal Cichon

13

これは私のために働きました:http : //arsenkin.com/launch_screen_image_cache.html

繰り返しますが、上記で参照したスレッドのおかげで、この問題を解決する方法を見つけました-新しいイメージに古いイメージと同じ名前が付いている場合に備えて、新しいイメージに以前とは異なる名前を付け、* .xcassetsフォルダーをプロジェクトディレクトリに追加し、UIImageViewで参照します。以上です。馬鹿げているように聞こえますが、私はどれほど激怒しましたか。


3
ここで重要なのは、これらの画像をアセットカタログから除外することです。ありがとう!
Michal Cichon

3
このソリューションは、プロダクションユーザーの優れたUXを気にし、古いイメージと新しいイメージの間の醜い移行を避けたい場合に本当に役立ちます。
Michal Cichon

3
最後に、実際に機能するソリューション!ここで重要なのは、アセットフォルダーから画像を取り出すことです。
Elad

1
アプリを再起動または削除しなくても完全に機能します。
Soufian Hossam

変だ。しかし、アセットカタログから移動した背景画像が読み込まれないことがあり、黒い背景になります。もう一度デバッグする必要がありますが、残念ながら再現方法がわかりません。
Michal Cichon

10

アプリをアンインストールし、スマートフォンを再起動して、もう一度インストールしてください...これは実際には私の場合は修正されています。


5

私も同じ問題に直面しました。これは、アプリケーションを最初に起動したときに、シミュレーター/ iOSデバイスが起動イメージをキャッシュするために発生します。Brian Trzupekの回答にいくつかの変更を加えました。

  1. Xcodeアセットから画像セットを削除します(例:launch_image)
  2. 新しい画像セットを追加し、それに画像を追加します。
  3. iOSデバイスのスイッチをオフにしてからオンにします。(シミュレーターの内容と設定をリセットします)。
  4. Xcodeビルドフォルダーをクリーンアップします(command+ option+ shift+ +を押しますK)。
  5. デバイス/シミュレーター(使用可能な場合)からアプリを削除します。
  6. 再実行。

5

私のために働いたもの:

  • LaunchScreenのシーンとビューコントローラーを削除し、新しいものを作成します属性インスペクターで「初期ビューコントローラー」として設定してください)。

私にとってうまくいかなかったこと:

  • アプリを削除する
  • iPhone、Mac、またはXcodeの再起動
  • 派生データの削除
  • デバイスのコンテナを削除する
  • クリーニング
  • スティーブジョブズブードゥー人形を3つ燃やす

注意:

時々消去(シミュレータ)も必要です


4
私は確信していません。確認するために、Steve Jobsのブードゥー人形のソースの場所が必要になります。
Chris Brandsma

3

デバイスを接続し、Xcode> Window> Devices> Your device、now in installed apps、now click app、right click and download container、右クリック、生成されたファイルに移動して右クリック、Show package contents、AppData、Library、Caches、ファイルを削除します。Xcode>ウィンドウ>デバイス>デバイス>アプリに移動し、右クリックしてコンテナを置き換えます。


3

正直なところ、これが更新されるかどうか確信が持てずに、リスクを冒して公開することはしませんでした。

したがって、xcassetsを使用していると仮定すると、簡単な解決策は次のとおりです。

  1. 古い画像セットを削除する
  2. 別の名前で再作成し、スプラッシュ画面の画像を追加します
  3. この「新しい」画像セット参照を使用するようにストーリーボードを更新します

確かに更新されます!(私はすでにデバイスにインストールされているアプリでテストしました)。デバイスのキャッシュなどをクリーンアップする必要はありません。


3
  1. デバイスからアプリを削除する
  2. デバイスの電源を切ります
  3. デバイスの電源を入れます
  4. アプリをインストールして起動します。

1

わかりました、それで私は問題を理解しました。以前のバージョンのアプリでは、起動画面XIBを使用していました。この新しいバージョンの開発のどこかで、xibは削除され、静的な起動イメージでのみ置き換えられました。

解決策は、起動画面XIBを使用することです。起動画面のxibを初めて使用した瞬間に、snapshotsディレクトリに保存されているファイルがxibのスナップショットに置き換えられていることに気付きました。


2
いいえ、起動画面XIBを使用していますが、更新されません。Launch Screen> Static image> Launch Screenから切り替えて問題を回避すると思います。XCodeで起動画面を変更して実行すると、iPhoneに古い起動画面が表示されます。画像はデバイスにキャッシュされます。起動画面の名前を変更すると、トリックが実行されると思います
Christophe Fondacci

別の名前で起動画面を再作成しても問題は回避されず、古い画面が表示されます。唯一の「希望」は、iOSがアプリのアップデートごとにキャッシュを再生成することですが、これに関するドキュメントは見つかりません
Christophe Fondacci

1

Xcode 10 / iOS 12

上記のすべてを試した後、LaunchScreenからimageviewを削除し、新しいものに置き換える必要がありました。


1

これは愚かに聞こえるかもしれませんが、この問題を解決するために私が見つけた最も速い方法です:

  1. LaunchScreen.xib起動画面ファイルを右クリックして、を選択しRemove file、を選択しますRemove to trash。これにより、ファイルのすべての参照とその過去の更新がプロジェクトから削除されます。

  2. ゴミ箱に移動し、ファイルをドラッグして、(内のyourProjectName)xCodeプロジェクトに戻します。

  3. クリーンして再構築します。


1

次のコードを使用して、起動画面のキャッシュを消去します。

import UIKit

public extension UIApplication {
    func clearLaunchScreenCache() {
        #if DEBUG
        do {
            let launchScreenPath = "\(NSHomeDirectory())/Library/SplashBoard"
            try FileManager.default.removeItem(atPath: launchScreenPath)
        } catch {
            print("Failed to delete launch screen cache - \(error)")
        }
        #endif
    }
}

使用法:

UIApplication.shared.clearLaunchScreenCache()

0

この問題もありました。まったくの初心者なので、私はLaunchScreen.storyboardをLaunchScreen.xibに単純に変更しました。実行が失敗したので(それは).storyboardに変更し直して、アプリを再実行して、他に何も台無しにしていないことをテストしました。古い画面が最初に表示されませんでした。だから私が何をしたにせよ、それは古いキャッシュをフラッシュしたに違いない。


0

同じ問題がありましたが、起動画面のストーリーボードで使用される画像にのみありました。画像をアセットカタログから名前を変更してApp Bundleに移動すると(たとえば、アセットカタログに設定された古い画像はlaunch_logoと呼ばれ、App Bundleの画像はlaunchscreen_logo.pngと呼ばれます)、問題は解決しました。


0

これらは状況に依存していると思います。デバッグ時またはテスト時に発生した場合、起動画面で画像を削除します。または、アプリをアンインストールしてから、起動を再開します。

しかし、それはアーカイブの後でさえ行きます、そしてそれはそれはリセットとクリーンで解決しません。


0

私の場合、アプリの設定からAppIconソースを選択していません->一般- ここに画像の説明を入力してください>アプリアイコンと起動画像->アプリアイコンソース


0

AppDelegateでお試しください

    if #available(iOS 13.0, *) {
        do {
            try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
        } catch {
            print("Failed to delete launch screen cache: \(error)")
        }
    } else {
        print("ios is min")
    }

0

私のためのソリューションワーク

  1. デバイスからアプリを削除する
  2. デバイスの電源を切ります
  3. デバイスのスイッチを入れます
  4. ビルドフォルダーのクリーンアップ
  5. 再度ビルドしてインストールし、アプリを起動します。

    楽しい


0

これらの手順をすべて実行したことを確認してください

  1. ビルド設定でASSETCATALOG_COMPILER_LAUNCHIMAGE_NAMEキーを検索し、アプリケーション全体でそのアセット値を検索してから削除します。
  2. ビルド設定からASSETCATALOG_COMPILER_LAUNCHIMAGE_NAMEを削除します。
  3. 新しい起動画面の作成Xcode-> File-> New-> File-> Launch Screen
  4. Goto App main Target-> General-> App Icons and Launch Images-> Launch Screen File-> Choose the New Launch Screen File。
  5. 古い起動画面を変更するだけの場合は、新しいアセットに別の名前を付けてみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.