iOS Conserver l'ancien écran de lancement et l'icône de l'application après la mise à jour


173

J'ai une application dans laquelle j'ai récemment remplacé les images de lancement et les icônes d'application, j'ai supprimé tous les anciens actifs de partout dans le projet. Lorsque je mets à niveau l'application de l'ancienne version vers la nouvelle version en créant simplement Xcode, tout va bien. Cependant, si l'ancienne version de mon application est installée, mettez-la à niveau à partir de TestFlight, chaque fois que je tue l'application, puis la redémarre, l'ancienne image de lancement apparaît brièvement avant d'afficher la nouvelle image de lancement. De même, lorsque je ferme l'application, l'ancienne icône de l'application clignote brièvement avant de revenir à la nouvelle.

J'ai ouvert l'application en utilisant iExplorer et j'ai remarqué qu'une image de l'ancien écran de lancement était enregistrée dans le /Library/Caches/Shapshotsrépertoire (je ne sais pas comment ni pourquoi elle y est arrivée). Lorsque je le supprime manuellement via iExplorer, il cesse d'apparaître. Cependant, lorsque j'essaie de le supprimer avec du code en utilisantNSFileManager méthodes, j'obtiens des erreurs indiquant que je suis interdit de supprimer des fichiers dans ce répertoire.

Quelqu'un a-t-il déjà vécu cela et a-t-il des conseils?


3
Même problème, et avec les écrans de lancement, le nouvel écran de lancement ne s'affiche jamais, il utilise l'image en cache de la version précédente.
Christophe Fondacci

Réponses:


327

J'ai été en mesure de faire effacer de manière fiable le cache du springboard pour tester les changements d'image de lancement en faisant ceci:

  1. Supprimer votre application de l'appareil
  2. Éteignez l'appareil
  3. Allumez l'appareil, installez et lancez l'application.

L'image se met à jour correctement à chaque fois. Dommage que je doive éteindre l'appareil pour le faire fonctionner - mais au moins j'ai pu progresser de cette façon. J'espère que ça aidera quelqu'un.

Dans le cas du simulateur, le simple redémarrage du simulateur devrait fonctionner.


19
C'est la seule solution qui a fonctionné pour moi. Merci beaucoup!
Marcin Kapusta

Merci Hero !! A travaillé comme un charme.
Ravi

5
Fonctionne aussi pour l'émulateur.
Alexey Podlasov

1
Est-ce également le correctif du TestFlight? la mise à jour de l'application à partir de TestFlight met également en cache les images de lancement. êtes-vous sûr que cela ne se produira pas sur la version de l'application contrairement au vol d'essai?
hasan

1
Cela me rappelle la comédie du miroir automatique. Mais cela fonctionne à merveille. Je vous remercie!
ssowri1

49

Ces caches sont utilisés par Springboard pour accélérer le changement d'application. Ce n'est pas un problème qui affectera vos utilisateurs de production et devrait en théorie disparaître la prochaine fois que Springboard décidera de créer un instantané de votre application.

Cela étant dit, ce n'est pas un problème que vous pouvez résoudre. C'est un bogue dans le code d'Apple, pas le vôtre.

MISE À JOUR: Il semble y avoir une solution qui ne nécessite pas le redémarrage de l'appareil.

Cela prendra effet après le deuxième lancement!

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

Une explication complète de la façon dont cela fonctionne ici: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
Pouvez-vous s'il vous plaît un lien vers la documentation qui confirmerait votre déclaration "Ce n'est pas un problème qui affectera vos utilisateurs de production"? J'ai exactement le même problème, je suis OK si c'est uniquement du développement mais je ne prendrai pas le risque sans une documentation officielle qui énonce clairement ce que vous dites.
Christophe Fondacci

6
Pour certaines personnes
j'obtiens

15
Malheureusement, je peux confirmer que ce problème affecte même les utilisateurs de production (donc après la mise à niveau de l'application depuis l'App Store).
Eugenio du

Oui, cela affecte les versions de production / les versions de l'App Store.
Jonny

Une source pour ça?
Daniel Springer

27

Pour le simulateur juste Reset Contents and Settings...


Ce n'est pas une question. Le fait est que lors du déploiement d'une nouvelle application avec de nouvelles icônes ou images, elles ne sont pas toutes actualisées de la même manière et certaines restent affichées pendant qu'elles ont été supprimées.
Stephane Paquet

18

@InkGolem

Ce n'est pas un problème qui affectera vos utilisateurs de production

est vrai.

J'étais confronté à ce problème lorsque j'ai changé mon écran de lancement, mon écran Splash et mon icône d'application. J'ai essayé toutes les méthodes, mais cela n'a pas fonctionné. Enfin, je viens de publier mon application et de télécharger mon application depuis l'App Store avec l' appareil que je n'ai pas utilisé pour le développement . SplashScreen et l'icône de l'application fonctionnent normalement !!!


1
Une idée de ce qui se passe si vous avez déjà une application sur l'Appstore et que l'utilisateur met simplement à jour l'application avec le nouvel écran de lancement?
rhcpfan

J'ai déjà une application sur les téléchargements de l'Appstore et je publie une mise à jour avec un nouvel écran de lancement. Après avoir publié mon application, je teste avec plus de 10 appareils (non utilisés pour le développement) pour vérifier que "Ce n'est pas un problème qui affectera vos utilisateurs de production" est réel, et je ne reçois aucune plainte de la part de l'utilisateur concernant écran de démarrage.
chinnawatp

7
Ce problème se produit également dans la version Appstore pour moi, et les astuces @Brian Trzupek ont ​​fonctionné.
Ajumal le

3
Confirmé, cela se produit sur les versions en direct de l'App Store. Cette réponse a quelques problèmes de langue; Je ne peux pas dire si elles signifient que le problème affecte la production construit ou non, mais mon expérience empirique dit qu'il fait .
Jonny

2
Cela arrive aux utilisateurs de production !! L'écran de démarrage affiché est l'ancien. Le redémarrage du téléphone a résolu ce problème. Espérons que les gens verront le nouveau splash dans les heures suivantes sans redémarrer.
Valerio

13

J'ai trouvé une solution de contournement si vous voulez vraiment résoudre ce problème. Apple a quelques mécanismes pour mettre en cache les images de l'écran de lancement qui indexent par nom de fichier image.

Lorsque vous modifiez des images sur l'écran de lancement et que vous souhaitez voir ces modifications immédiatement lors de la prochaine exécution. Veuillez utiliser le nouveau nom de l'image que vous avez modifié et créer un lien vers un nouveau fichier image dans le storyboard ou xib.

Exécutez à nouveau, vous verrez un nouveau changement apparaître.


1
Je ne voulais pas supprimer l'application, j'ai donc essayé celle-ci. Cela plus redémarrer mon appareil a fonctionné pour moi.
Murray Sagal

Cela n'a pas fonctionné pour moi. Redémarrer le devide n'a pas non plus fonctionné ... J'abandonne maintenant.
Lensflare

Cela n'a pas fonctionné pour moi. J'ai même supprimé l'imageView et en ai créé une nouvelle avec la nouvelle image, et cela ne fonctionnait toujours pas.
Rickard Elimää

Cela n'a pas fonctionné pour moi. J'ai eu l'ancienne image qui ne se chargeait pas (la couleur d'arrière-plan était encore présentée à la place d'une image) et elle était toujours présentée pendant une fraction de seconde avant que le nouvel écran de lancement n'apparaisse.
Michal Cichon le

13

Cela a fonctionné pour moi: http://arsenkin.com/launch_screen_image_cache.html

Encore une fois, grâce au fil que j'ai référencé ci-dessus, j'ai trouvé un moyen de résoudre ce problème - nommez votre nouvelle image différemment de celle qui existait auparavant au cas où votre nouvelle aurait le même nom que l'ancienne et mettez-la hors du * .xcassets dans le répertoire du projet et référencez-le dans votre UIImageView. Et c'est tout. Cela semble stupide facile mais oh génial combien j'ai eu de rage.


3
La clé ici est de garder ces images hors du catalogue d'actifs. Merci!
Michal Cichon le

3
Cette solution est vraiment utile si vous vous souciez du bon UX de votre utilisateur de production et que vous voulez éviter cette vilaine transition entre l'ancienne et la nouvelle image.
Michal Cichon le

3
enfin, une solution qui fonctionne réellement! La clé ici est de mettre les images hors du dossier des actifs.
Elad le

1
Fonctionne parfaitement sans redémarrer ni supprimer l'application.
Soufian Hossam le

Bizarre. Mais l'image d'arrière-plan que j'ai retirée du catalogue d'actifs ne se charge parfois pas et j'obtiens l'arrière-plan noir. Maintenant, je dois le déboguer à nouveau, mais je n'ai aucune idée de comment le reproduire malheureusement.
Michal Cichon le

10

Désinstallez votre application, redémarrez votre téléphone et réinstallez votre application ... Cela a été résolu dans mon cas.


5

J'ai également fait face au même problème. Cela se produit parce que le simulateur / appareil iOS met en cache l'image de lancement lorsque vous lancez l'application pour la première fois. J'ai ajouté quelques modifications à la réponse de Brian Trzupek :

  1. Supprimer l'ensemble d'images des actifs Xcode (par exemple, launch_image)
  2. Ajoutez un nouvel ensemble d'images et ajoutez-y des images.
  3. Éteignez et allumez l'appareil iOS. (Réinitialiser le contenu et les paramètres du simulateur).
  4. Nettoyez le dossier de construction Xcode (Appuyez sur command+ option+ shift+ K).
  5. Supprimez l'application de l'appareil / simulateur (si disponible).
  6. Courez à nouveau.

5

Ce qui a fonctionné pour moi:

  • Suppression du contrôleur de scène et de vue du LaunchScreen et créez-en un nouveau ( assurez-vous de le définir comme "Contrôleur de vue initiale" dans l'inspecteur d'attributs ).

Qu'est-ce que pas fonctionné pour moi:

  • Supprimer l'appli
  • Redémarrer l'iPhone, le Mac ou le Xcode
  • Suppression des données dérivées
  • Supprimer le conteneur de l'appareil
  • Nettoyage
  • Brûler 3 poupées vaudou Steve Jobs

Remarque:

Parfois, l'effacement (simulateur) est également nécessaire


4
Je ne suis pas convaincu. Je vais avoir besoin de l'emplacement des sources des poupées vaudou Steve Jobs pour confirmer.
Chris Brandsma

3

Connectez simplement votre appareil, allez dans Xcode> Fenêtre> Appareils> Votre appareil, maintenant dans les applications installées, sélectionnez votre application, faites un clic droit et téléchargez le conteneur, accédez au fichier généré, faites un clic droit, Afficher le contenu du package, AppData, Bibliothèque, Caches, et supprimez les fichiers. Maintenant, allez dans Xcode> Fenêtre> Appareils> Votre appareil> votre application et faites un clic droit pour remplacer les conteneurs.


3

Honnêtement, je n'ai pas pris le risque de passer en direct sans être sûr si cela sera mis à jour ou non.

Donc, en supposant que vous utilisez xcassets, une solution simple est:

  1. Supprimer l'ancien jeu d'images
  2. Recréez-en un avec un nom différent et ajoutez vos images d'écran de démarrage
  3. Mettez à jour votre storyboard pour utiliser cette 'nouvelle' référence d'ensemble d'images

Il sera mis à jour à coup sûr! (J'ai même testé avec l'application déjà installée sur l'appareil). Pas besoin de nettoyer le cache de l'appareil ou plus.


3
  1. Supprimer votre application de l'appareil
  2. Éteignez l'appareil
  3. Mettre l'appareil sous tension
  4. Installez et lancez l'application.

1

Ok, alors j'ai compris le problème. Dans la version précédente de mon application, nous utilisions un Launch Screen XIB. Quelque part dans le développement de cette nouvelle version, le xib a été supprimé et remplacé uniquement par des images de lancement statiques.

La solution est d'utiliser un Launch Screen XIB. J'ai remarqué qu'au moment où j'ai utilisé un écran de lancement xib pour la première fois, le fichier stocké dans le répertoire snapshots a été remplacé par l'instantané du xib.


2
Non, j'utilise un Launch Screen XIB et il ne se met pas à jour. Je suppose que vous contournez le problème en passant de Écran de lancement> Image statique> Écran de lancement. La modification de l'écran de lancement dans XCode et son exécution montre toujours l'ancien écran de lancement sur l'iPhone. L'image est mise en cache sur l'appareil. Je suppose que si je change le nom de l'écran de lancement ça fera l'affaire
Christophe Fondacci

La recréation d'un écran de lancement avec un nom différent n'a pas résolu le problème, en voyant toujours l'ancien. Le seul "espoir" est qu'iOS régénère son cache à chaque mise à jour de l'application, mais je ne trouve aucune documentation à ce sujet
Christophe Fondacci

1

Xcode 10 / iOS 12

Après avoir essayé toutes les choses mentionnées ci-dessus, j'ai dû supprimer l'image vue du LaunchScreen et la remplacer par une nouvelle.


1

C'est le moyen le plus rapide que j'ai trouvé pour résoudre ce problème, même si cela semble stupide:

  1. Faites un clic droit sur LaunchScreen.xibou sur votre fichier d'écran de lancement et sélectionnez Remove filepuis sélectionnez Remove to trash. Cela supprimera toutes les références du fichier et ses mises à jour passées de votre projet.

  2. Allez dans votre corbeille et faites glisser et déposez le fichier dans votre projet xCode (à l'intérieur yourProjectName).

  3. Nettoyez et reconstruisez.


1

Utilisez ce morceau de code pour nettoyer le cache de l'écran de lancement:

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
    }
}

Usage:

UIApplication.shared.clearLaunchScreenCache()

0

Eu ce problème aussi. Étant un novice total, j'ai naïvement changé le LaunchScreen.storyboard en LaunchScreen.xib. La course a échoué (duh), alors je l'ai changé en .storyboard a relancé l'application juste pour tester que je n'avais rien foiré d'autre - et l'ancien écran n'est pas apparu en premier. Donc, quoi que j'ai fait, cela a dû vider l'ancien cache.


0

J'ai eu le même problème mais uniquement avec l'image utilisée dans le storyboard de l'écran de lancement. Le déplacement de l'image du catalogue d'actifs en changeant son nom vers l'ensemble d'applications (par exemple, l'ancien ensemble d'images dans le catalogue d'actifs s'appelait launch_logo et l'image dans l'ensemble d'applications s'appelle launchscreen_logo.png) a résolu le problème pour nous.


0

Je suppose que cela dépend des situations. Quand cela se produit au débogage ou au test, fonctionne sur la suppression de l'image sur l'écran de lancement. Ou désinstallez vos applications, puis redémarrez le lancement.

Mais cela va même après l'archivage, alors cela ne résout pas avec la réinitialisation et le nettoyage.


0

Dans mon cas, je n'ai pas sélectionné AppIcon Source à partir des paramètres de l'application -> Général - entrez la description de l'image ici> Icônes d'application et images de lancement -> Source des icônes d'application


0

Essayez-le dans 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

Solution travailler pour moi

  1. Supprimer votre application de l'appareil
  2. Éteindre l'appareil
  3. Allumer l'appareil
  4. nettoyer le dossier de construction
  5. Encore une fois, créez et installez et lancez l'application.

    Prendre plaisir


0

Assurez-vous d'avoir suivi toutes ces étapes

  1. Recherchez la clé ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME dans le paramètre de compilation et recherchez la valeur de ses actifs dans l'ensemble de l'application, puis supprimez-la.
  2. Supprimer ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME du paramètre de construction.
  3. Créer un nouvel écran de lancement Xcode -> Fichier -> Nouveau -> Fichier -> Écran de lancement
  4. Aller à la cible principale de l'application -> Général -> Icônes d'application et images de lancement -> Fichier d'écran de lancement -> Choisissez le nouveau fichier d'écran de lancement.
  5. Si vous modifiez simplement l'ancien écran de lancement, essayez de nommer les nouveaux actifs avec des noms différents.

-1

Essayez d'ouvrir le simulateur, allez dans Matériel -> Effacer tout le contenu et les paramètres.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.