web-dev-qa-db-fra.com

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

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 intégrant simplement xcode, tout va bien. Cependant, si l'ancienne version de mon application est installée, puis mise à 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 de montrer 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 à l'aide d'iExplorer et j'ai remarqué qu'il y avait une image de l'ancien écran de lancement enregistrée dans le répertoire/Bibliothèque/Caches/Shapshots (je ne sais pas comment ni pourquoi elle est arrivée là). Lorsque je le supprime manuellement via iExplorer, il cesse d'apparaître. Cependant, lorsque j'essaie de le supprimer avec du code à l'aide des méthodes NSFileManager, des erreurs m'indiquent que je ne suis pas autorisé à supprimer des fichiers de ce répertoire. 

Quelqu'un en at-il déjà fait l'expérience et a-t-il des conseils?

99
lramirez135

J'ai pu obtenir de manière fiable le cache du springboard effacé pour tester les modifications d'image de lancement en procédant comme suit:

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

L'image est mise à 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.

205
Brian Trzupek

Springboard utilise ces caches pour faciliter le basculement des applications. Ce n'est pas un problème qui affectera vos utilisateurs en production et devrait en théorie disparaître la prochaine fois que Springboard décidera de capturer votre application.

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

30
InkGolem

Pour le simulateur juste Reset Contents and Settings...

22
Murray Sagal

@InkGolem  

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

est vrai.  

Je faisais face à ce problème lorsque j'ai changé mon écran de lancement, SplashScreen et icône de l'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 celle-ci depuis App Store avec le périphérique que je n'ai pas utilisé pour le développement . SplashScreen et App Icon fonctionnent normalement !!!

12
chinnawatp

J'ai trouvé une solution de contournement si vous voulez vraiment résoudre ce problème . Apple dispose de mécanismes pour mettre en cache des images d'écran de lancement indexées par nom de fichier.

Lorsque vous modifiez des images sur l'écran de lancement et que vous souhaitez les voir immédiatement lors de la prochaine exécution. veuillez utiliser le nouveau nom d'image que vous avez modifié et associer un nouveau fichier image au storyboard ou au xib. 

Exécutez à nouveau, vous verrez nouvelle modification apparaît.

10
Yu-Sen Han

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

8
Ankit Pundhir

J'ai aussi fait face au même problème. Cela arrive parce que simulateur/périphérique iOS met en cache l'image de lancement lorsque nous lançons l'application pour la première fois. J'ajoute quelques modifications à la réponse de Brian Trzupek.

  1. Supprimer le jeu d'images des ressources Xcode (par exemple, launch_image)
  2. Ajoutez un nouveau jeu d'images et ajoutez-y des images.
  3. Eteignez et allumez le périphérique iOS. (Réinitialiser le contenu et les paramètres du simulateur).
  4. Nettoyez le dossier de construction de Xcode (appuyez sur Commande + Option + Maj + K).
  5. Supprimez l'application de l'appareil/simulateur (si disponible).
  6. Exécuter à nouveau.
4
A.G

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ésolvez ce problème - nommez votre nouvelle image différemment de celle-ci était avant dans le cas où votre nouveau a le même nom que l'ancien et sortez-le du dossier * .xcassets dans le répertoire du projet et référencez-le dans votre UIImageView. Et c'est tout. Cela semble facile mais stupide oh ah ah combien de rage j'avais.

3
JERC

Connectez simplement votre appareil, accédez à 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, allez au fichier généré, cliquez à droite, Afficher le contenu du paquet, AppData, Bibliothèque Caches, et supprimer des fichiers . Maintenant, allez dans Xcode> Fenêtre> Appareils> Votre appareil> votre application et faites un clic droit pour remplacer les conteneurs.

3
user6312715
  1. Supprimer votre application de l'appareil
  2. Éteignez l'appareil
  3. Dispositif d'alimentation
  4. Installez et lancez l'application.
2
Jone Ren

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, xib a été supprimé et remplacé uniquement par des images de lancement statiques. 

La solution consiste à utiliser un écran de démarrage 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 des instantanés était remplacé par l'instantané du xib. 

1
lramirez135

Xcode 10/iOS 12

Après avoir essayé toutes les choses mentionnées ci-dessus, je devais supprimer la vue image de LaunchScreen et la remplacer par une nouvelle.

0
ahbou

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

  1. Cliquez avec le bouton droit de la souris sur LaunchScreen.xib ou sur votre fichier d'écran de lancement et sélectionnez Remove file, puis sélectionnez Remove to trash. Cela supprimera toutes les références du fichier et de ses mises à jour antérieures de votre projet.

  2. Allez dans votre corbeille et faites glisser le fichier dans votre projet xCode (dans yourProjectName).

  3. Nettoyer et reconstruire.

0
Walter Monecke

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ée en .storyboard a relancé l'application juste pour tester si je n'avais rien bousillé - et l'ancien écran n'était pas apparu en premier. Donc quoi que j'ai fait, il doit avoir vidé la vieille cache. 

0
richard s. hill

@Chino

@InkGolem

Ce n'est pas un problème qui affectera vos utilisateurs en production est vrai.

Je faisais face à ce problème lorsque j'ai changé d’écran de lancement, SplashScreen et App Icône. J'ai essayé toutes les méthodes, mais cela n'a pas fonctionné. Enfin, je viens de publier mon application et téléchargé mon application depuis l'App Store avec le périphérique que je n'ai pas utilisé Pour le developpement. SplashScreen et App Icon fonctionnent normalement !!!

Avez-vous installé la version précédente sur cet appareil? Je crois que c'est le même que les réponses ci-dessus en disant de supprimer et réinstaller ou supprimer, redémarrer et réinstaller. 

Je rencontre le même problème avec les appareils de développement et de production, avec simulateur et depuis l’appstore. J'ai également pu recréer le problème à l'aide du simulateur. J'exécute d'abord le simulateur avec une version précédente de mon code, puis le simulateur avec une version ultérieure. Dans les deux cas, l’ancien écran de lancement est conservé. Dans le simulateur, la suppression de l'instantané ne fonctionne pas car elle est simplement recréée. Lorsque vous fermez l'application en appuyant sur le bouton d'accueil, un nouvel instantané est pris avec l'ancien écran de lancement. Maintenant ... si je supprime l'ancienne version de l'application du téléphone ou du simulateur, puis l'installe à l'aide de xcode ou de l'app store, l'écran de lancement se met à jour correctement. Cependant, ce n'est pas une solution idéale pour les utilisateurs finaux.

Quelqu'un a-t-il proposé une solution qui n'implique pas la suppression de la précédente application du téléphone?

J'ai essayé: Renommer le fichier LaunchScreen xib Renommer les images utilisées par LaunchScreen Ajouter une image vide au screen.window sur applicationDidEnterBackground pour masquer l'écran avant prise

Ajout d'une pause sur [application didFinishLaunchingWithOptions] Je constate que l'ancien LaunchScreen apparaît avant l'appel de didFinishLaunchingWithOptions.

0
dschlabach

Qu'est-ce que a travaillé pour moi:

  • Supprimez les contrôleurs Scene et View de LaunchScreen et créez-en un nouveau (assurez-vous de le définir comme "Contrôleur de vue initial" dans l'inspecteur des attributs).

Qu'est-ce que (pas} _ _ a fonctionné pour moi: 

  • Suppression de l'application
  • Redémarrage de l'iPhone, Mac ou Xcode
  • Suppression des données dérivées
  • Suppression du conteneur de l'appareil
  • Nettoyage
  • Burning 3 poupées vaudou de Steve Jobs
0
Daniel Springer

Honnêtement, je n'ai pas pris le risque d'aller vivre sans être sûr que cela sera mis à jour ou non.

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

  1. Supprimer l'ancien jeu d'images 
  2. Recréez 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 de jeu d'images

Il mettra à 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 autre.

0
hico

Essayez d’ouvrir le simulateur en allant dans Matériel -> Effacer tout le contenu et tous les paramètres.

0
Tigran Iskandaryan

Avait le même problème, mais seulement avec l'image utilisée dans le scénariseur launchscreen. Le déplacement de l'image du catalogue d'actifs en changeant son nom vers l'ensemble d'applications (par exemple, l'ancien jeu d'images s'appelait launch_logo et l'image dans l'ensemble d'applications launchscreen_logo.png) a résolu le problème.

0
Anton Filimonov