iOS Beibehaltung des alten Startbildschirms und des App-Symbols nach dem Update

173

Ich habe eine App, in der ich kürzlich die Startbilder und App-Symbole ersetzt habe. Ich habe alle alten Assets von überall im Projekt entfernt. Wenn ich die App von der alten Version auf die neue Version aktualisiere, indem ich nur Xcode einbaue, ist alles in Ordnung. Wenn ich jedoch die alte Version meiner App installiert habe und sie dann von TestFlight aktualisiere, wird jedes Mal, wenn ich die App beende und dann neu starte, das alte Startbild kurz angezeigt, bevor das neue Startbild angezeigt wird. Wenn ich dann die App schließe, blinkt das alte App-Symbol kurz, bevor ich wieder zu meinem neuen wechsle.

Ich habe die App mit iExplorer geöffnet und festgestellt, dass ein Bild des alten Startbildschirms im /Library/Caches/ShapshotsVerzeichnis gespeichert ist (ich weiß nicht, wie oder warum er dort angekommen ist ). Wenn ich es manuell über iExplorer lösche, wird es nicht mehr angezeigt. Wenn ich jedoch versuche, es mit Code mithilfe von NSFileManagerMethoden zu entfernen , wird die Fehlermeldung angezeigt, dass das Löschen von Dateien in diesem Verzeichnis verboten ist.

Hat jemand dies schon einmal erlebt und hat einen Rat?

lramirez135
quelle
3
Das gleiche Problem, und bei Startbildschirmen wird der neue Startbildschirm nie angezeigt. Es wird das zwischengespeicherte Bild der vorherigen Version verwendet.
Christophe Fondacci

Antworten:

327

Auf diese Weise konnte ich den Springboard-Cache zuverlässig zum Testen von Startbildänderungen löschen:

  1. Löschen Sie Ihre App vom Gerät
  2. Schalten Sie das Gerät aus
  3. Gerät einschalten, App installieren und starten.

Das Bild wird jedes Mal ordnungsgemäß aktualisiert. Schade, dass ich das Gerät ausschalten muss, damit es funktioniert - aber zumindest konnte ich auf diese Weise Fortschritte erzielen. Ich hoffe das hilft jemandem.

Im Falle des Simulators sollte nur ein Neustart des Simulators funktionieren.

Brian Trzupek
quelle
19
Dies ist die einzige Lösung, die für mich funktioniert hat. Vielen Dank!
Marcin Kapusta
Danke Held !! Lief wie am Schnürchen.
Ravi
5
Funktioniert auch für den Emulator.
Alexey Podlasov
1
Ist dies auch das Update für das TestFlight? Durch das Aktualisieren der App von TestFlight werden auch die Startbilder zwischengespeichert. Sind Sie sicher, dass dies in der App-Version im Gegensatz zum Testflug nicht passieren wird?
Hasan
1
Es erinnert mich an Auto Mirror Comedy. Aber es funktioniert großartig. Danke dir!
ssowri1
49

Diese Caches werden von Springboard verwendet, um das Wechseln der App zu beschleunigen. Dies ist kein Problem, das Ihre Produktionsbenutzer betrifft, und sollte theoretisch verschwinden, wenn Springboard das nächste Mal beschließt, einen Snapshot Ihrer App zu erstellen.

Davon abgesehen ist dies kein Problem, das Sie beheben können. Dies ist ein Fehler in Apples Code, der nicht Ihnen gehört.

UPDATE: Es scheint eine Problemumgehung zu geben, bei der das Gerät nicht neu gestartet werden muss.

Dies wird nach dem zweiten Start wirksam!

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

Eine vollständige Erklärung, wie das hier funktioniert: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html

InkGolem
quelle
7
Können Sie bitte einen Link zu einer Dokumentation erstellen, die Ihre Aussage bestätigt: "Dies ist kein Problem, das Ihre Produktionsbenutzer betrifft." Ich habe genau das gleiche Problem. Ich bin in Ordnung, wenn dies nur ein Entwickler ist, aber ich werde das Risiko nicht ohne offizielle Dokumentation eingehen, in der klar angegeben ist, was Sie sagen.
Christophe Fondacci
6
Für einige Leute
bekomme
15
Leider kann ich bestätigen, dass dieses Problem auch Produktionsbenutzer betrifft (also nach dem Upgrade der App aus dem App Store).
Eugenio
Ja, dies wirkt sich auf Produktions-Builds / App Store-Builds aus.
Jonny
Irgendeine Quelle dafür?
Daniel Springer
27

Für den Simulator nur Reset Contents and Settings...

Murray Sagal
quelle
Dies ist keine Frage. Der Punkt ist, dass beim Bereitstellen einer neuen App mit neuen Symbolen oder Bildern nicht alle auf die gleiche Weise aktualisiert werden und einige angezeigt werden, während sie entfernt wurden.
Stephane Paquet
18

@InKGolem

Dies ist kein Problem, das Ihre Produktionsbenutzer betrifft

ist wahr.

Ich hatte dieses Problem, als ich meinen Startbildschirm, meinen Begrüßungsbildschirm und mein App-Symbol geändert habe. Ich habe jede Methode ausprobiert, aber es hat nicht funktioniert. Schließlich habe ich gerade meine App veröffentlicht und meine Anwendung aus dem App Store mit dem Gerät heruntergeladen , das ich nicht für die Entwicklung verwendet habe . SplashScreen und App Icon funktionieren wie gewohnt !!!

Chinnawatp
quelle
1
Haben Sie eine Idee, was passiert, wenn Sie bereits eine App im Appstore haben und der Benutzer die Anwendung nur mit dem neuen Startbildschirm aktualisiert?
Rhcpfan
Ich habe bereits eine App im Appstore- Download und veröffentliche ein Update mit neuem Startbildschirm. Nach der Freigabe meiner App teste ich mit mehr als 10 Geräten (nicht für die Entwicklung verwendet), um sicherzustellen, dass "Dies ist kein Problem, das Ihre Produktionsbenutzer betrifft" echt ist, und ich bekomme bisher keine Beschwerden vom Benutzer Begrüßungsbildschirm.
Chinnawatp
7
Dieses Problem tritt im Appstore-Build auch für mich auf, und @ Brian Trzupek-Tipps haben funktioniert.
Ajumal
3
Bestätigt, dies geschieht bei Live-Builds aus dem App Store. Diese Antwort hat einige Probleme mit der Sprache; Ich kann nicht sagen, ob sie bedeuten, dass das Problem Produktionsaufbauten betrifft oder nicht, aber meine empirische Erfahrung sagt, dass dies der Fall ist .
Jonny
2
Es passiert tatsächlich Produktionsbenutzern !! Der angezeigte Begrüßungsbildschirm ist der alte. Ein Neustart des Telefons hat das behoben. Hoffentlich werden die Leute den neuen Splash in den folgenden Stunden sehen, ohne neu zu starten.
Valerio
13

Ich habe eine Problemumgehungslösung gefunden. Was ist, wenn Sie dieses Problem wirklich beheben möchten? Apple verfügt über einige Mechanismen zum Zwischenspeichern von Bildern des Startbildschirms, die nach dem Namen der Bilddatei indiziert werden.

Wenn Sie Bilder auf dem Startbildschirm ändern und diese Änderungen beim nächsten Lauf sofort sehen möchten. Bitte verwenden Sie den neuen Bildnamen, welches Bild Sie geändert haben, und verknüpfen Sie es mit einer neuen Bilddatei im Storyboard oder in xib.

Bei erneuter Ausführung wird eine neue Änderung angezeigt.

Yu-Sen Han
quelle
1
Ich wollte die App nicht löschen, also habe ich diese ausprobiert. Dies und der Neustart meines Geräts haben bei mir funktioniert.
Murray Sagal
Das hat bei mir nicht funktioniert. Ein Neustart des Devide hat auch nicht funktioniert ... Ich gebe jetzt auf.
Lensflare
Hat bei mir nicht funktioniert. Ich habe sogar die imageView entfernt und eine neue mit dem neuen Image erstellt, und es hat immer noch nicht funktioniert.
Rickard Elimää
Bei mir hat es nicht funktioniert. Ich habe das alte Bild nicht geladen (es wurde immer noch die Hintergrundfarbe anstelle eines Bildes angezeigt) und es wurde immer noch für den Bruchteil einer Sekunde angezeigt, bevor der neue Startbildschirm angezeigt wurde.
Michal Cichon
13

Das hat bei mir funktioniert: http://arsenkin.com/launch_screen_image_cache.html

Dank des Threads, auf den ich oben verwiesen habe, habe ich wieder einen Weg gefunden, dieses Problem zu lösen. Benennen Sie Ihr neues Bild anders als zuvor, falls Ihr neues den gleichen Namen wie das alte hat, und löschen Sie es aus dem * .xcassets-Ordner auf das Projektverzeichnis und verweisen Sie in Ihrer UIImageView darauf. Und das ist es. Klingt einfach dumm, aber oh gawd, wie viel Wut ich hatte.

JERC
quelle
3
Der Schlüssel hier ist, diese Bilder aus dem Assets-Katalog herauszuhalten. Vielen Dank!
Michal Cichon
2
Diese Lösung ist wirklich hilfreich, wenn Sie sich für die gute Benutzeroberfläche Ihres Produktionsbenutzers interessieren und diesen hässlichen Übergang zwischen dem alten und dem neuen Image vermeiden möchten.
Michal Cichon
2
Endlich eine Lösung, die tatsächlich funktioniert! Der Schlüssel hier ist, die Bilder aus dem Assets-Ordner zu legen.
Elad
1
Funktioniert einwandfrei, ohne die App neu zu starten oder zu löschen.
Soufian Hossam
Seltsam. Aber das Hintergrundbild, das ich aus dem Assets-Katalog entfernt habe, wird manchmal nicht geladen und ich erhalte den schwarzen Hintergrund. Jetzt muss ich es erneut debuggen, aber ich habe leider keine Ahnung, wie ich es reproduzieren soll.
Michal Cichon
10

Deinstallieren Sie Ihre App, starten Sie Ihr Telefon neu und installieren Sie Ihre App erneut ... Dies wurde in meinem Fall tatsächlich behoben.

Ankit Pundhir
quelle
5

Ich stand auch vor dem gleichen Problem. Dies liegt daran, dass der Simulator / das iOS-Gerät das Startabbild beim ersten Start der Anwendung zwischenspeichert. Ich habe einige Änderungen an Brian Trzupeks Antwort hinzugefügt :

  1. Löschen Sie den Bildsatz aus den Xcode-Assets (z. B. launch_image).
  2. Fügen Sie einen neuen Bildsatz hinzu und fügen Sie Bilder hinzu.
  3. Schalten Sie das iOS-Gerät aus und wieder ein. (Inhalt und Einstellungen für den Simulator zurücksetzen).
  4. Bereinigen Sie den Xcode-Build-Ordner (Drücken Sie command+ option+ shift+ K).
  5. Löschen Sie die App vom Gerät / Simulator (falls verfügbar).
  6. Führe es nochmals aus.
AG
quelle
5

Was hat bei mir funktioniert:

  • Löschen Sie den Szenen- und Ansichts-Controller von LaunchScreen und erstellen Sie einen neuen ( stellen Sie sicher, dass Sie ihn im Attributinspektor als "Initial View Controller" festlegen ).

Was bei mir nicht funktioniert hat:

  • App löschen
  • IPhone, Mac oder Xcode neu starten
  • Abgeleitete Daten löschen
  • Löschen des Gerätecontainers
  • Reinigung
  • Brennen von 3 Steve Jobs Voodoo Puppen

Hinweis:

Manchmal ist auch ein Löschen (Simulator) erforderlich

Daniel Springer
quelle
4
Ich bin nicht überzeugt. Ich werde Quellstandorte der Steve Jobs Voodoo-Puppen benötigen, um dies zu bestätigen.
Chris Brandsma
3

Schließen Sie einfach Ihr Gerät an, gehen Sie zu Xcode> Fenster> Geräte> Ihr Gerät, jetzt in installierten Apps, wählen Sie Ihre App aus, klicken Sie mit der rechten Maustaste und laden Sie den Container herunter, gehen Sie zur generierten Datei, klicken Sie mit der rechten Maustaste, Paketinhalt anzeigen, AppData, Bibliothek, Caches, und Dateien löschen. Gehen Sie nun zu Xcode> Fenster> Geräte> Ihr Gerät> Ihre App und klicken Sie mit der rechten Maustaste, um Container zu ersetzen.


quelle
3

Ehrlich gesagt bin ich nicht das Risiko eingegangen, live zu gehen, ohne sicher zu sein, ob dies aktualisiert wird oder nicht.

Angenommen, Sie verwenden xcassets, ist eine einfache Lösung:

  1. Löschen Sie den alten Bildsatz
  2. Erstellen Sie eine mit einem anderen Namen neu und fügen Sie Ihre Begrüßungsbildschirme hinzu
  3. Aktualisieren Sie Ihr Storyboard, um diese 'neue' Bildsatzreferenz zu verwenden

Es wird sicher aktualisiert! (Ich habe sogar mit einer App getestet, die bereits auf dem Gerät installiert ist). Der Cache des Geräts muss nicht bereinigt werden.

hico
quelle
3
  1. Löschen Sie Ihre App vom Gerät
  2. Schalten Sie das Gerät aus
  3. Gerät einschalten
  4. App installieren und starten.
Jone Ren
quelle
1

Ok, also habe ich das Problem herausgefunden. In der vorherigen Version meiner App haben wir einen Startbildschirm XIB verwendet. Irgendwann in der Entwicklung dieser neuen Version wurde die xib gelöscht und nur durch statische Startbilder ersetzt.

Die Lösung besteht darin, einen Startbildschirm XIB zu verwenden. Ich bemerkte, dass in dem Moment, in dem ich zum ersten Mal einen Startbildschirm xib verwendete, die im Snapshots-Verzeichnis gespeicherte Datei durch den Snapshot des xib ersetzt wurde.

lramirez135
quelle
2
Nein, ich verwende ein Startbildschirm XIB und es wird nicht aktualisiert. Ich denke, Sie umgehen das Problem, indem Sie von Startbildschirm> Statisches Image> Startbildschirm wechseln. Wenn Sie den Startbildschirm in XCode ändern und ausführen, wird weiterhin der alte Startbildschirm auf dem iPhone angezeigt. Das Bild wird auf dem Gerät zwischengespeichert. Ich denke, wenn ich den Namen des Startbildschirms ändere, wird es den Trick tun
Christophe Fondacci
Das Neuerstellen eines Startbildschirms mit einem anderen Namen hat das Problem nicht behoben, da immer noch der alte angezeigt wurde. Die einzige "Hoffnung" ist, dass iOS seinen Cache bei jedem App-Update neu generiert, aber ich kann keine Dokumentation dazu finden
Christophe Fondacci
1

Xcode 10 / iOS 12

Nachdem ich alle oben genannten Dinge ausprobiert hatte, musste ich die Bildansicht vom LaunchScreen löschen und durch eine neue ersetzen.

Ahbou
quelle
1

Dies ist der schnellste Weg, um dieses Problem zu beheben, obwohl es dumm klingt:

  1. Klicken LaunchScreen.xibSie mit der rechten Maustaste auf oder auf Ihre Startbildschirmdatei und wählen Sie Remove filedann aus Remove to trash. Dadurch werden alle Verweise auf die Datei und ihre früheren Aktualisierungen aus Ihrem Projekt entfernt.

  2. Gehen Sie in Ihren Papierkorb und ziehen Sie die Datei per Drag & Drop zurück in Ihr xCode-Projekt (innerhalb yourProjectName).

  3. Reinigen und wieder aufbauen.

Walter Monecke
quelle
1

Verwenden Sie diesen Code, um den Startbildschirm-Cache zu bereinigen:

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

Verwendung:

UIApplication.shared.clearLaunchScreenCache()
Mor4eza
quelle
0

Hatte dieses Problem auch. Als absoluter Neuling habe ich das LaunchScreen.storyboard naiv in LaunchScreen.xib geändert. Der Lauf ist fehlgeschlagen (duh), also habe ich ihn wieder in .storyboard geändert und die App erneut ausgeführt, um zu testen, ob ich nichts anderes vermasselt habe - und der alte Bildschirm wurde nicht zuerst angezeigt. Was auch immer ich getan habe, es muss den alten Cache geleert haben.

richard s. Hügel
quelle
0

Hatte das gleiche Problem, aber nur mit dem im Launchscreen-Storyboard verwendeten Bild. Das Verschieben des Images aus dem Asset-Katalog durch Ändern seines Namens in das App-Bundle (z. B. wurde das alte Image im Asset-Katalog als launch_logo und das Image im App-Bundle als launchscreen_logo.png bezeichnet) wurde für uns behoben.

Anton Filimonov
quelle
0

Ich denke, das hängt von den Situationen ab. Wenn dies beim Debuggen oder Testen geschieht, wird das Bild auf dem Startbildschirm gelöscht. Oder deinstallieren Sie Ihre Apps und starten Sie den Start neu.

Aber es geht auch nach dem Archivieren, dann löst es sich nicht mit Zurücksetzen und Reinigen.

이혜린
quelle
0

In meinem Fall habe ich AppIcon Source nicht über App-Einstellungen -> Allgemein - Geben Sie hier die Bildbeschreibung ein> App-Symbole und Bilder starten -> App-Symbol-Quelle ausgewählt

Mehrdad
quelle
0

Versuchen Sie es in 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")
    }
ramazanDev
quelle
0

Lösungsarbeit für mich

  1. Löschen Sie Ihre App vom Gerät
  2. Gerät ausschalten
  3. Gerät einschalten
  4. Bereinigungsordner bereinigen
  5. Erstellen und installieren und starten Sie die App erneut.

    Genießen

M Murteza
quelle
0

Stellen Sie sicher, dass Sie alle diese Schritte ausgeführt haben

  1. Suchen Sie in der Build-Einstellung nach dem Schlüssel ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME und suchen Sie den Wert der Assets in der gesamten Anwendung. Entfernen Sie ihn dann.
  2. Löschen Sie ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME aus der Build-Einstellung.
  3. Neuen Startbildschirm erstellen Xcode -> Datei -> Neu -> Datei -> Startbildschirm
  4. Gehe zu Hauptziel der App -> Allgemein -> App-Symbole und Bilder starten -> Bildschirmdatei starten -> Neue Startbildschirmdatei auswählen.
  5. Wenn Sie nur den alten Startbildschirm ändern, versuchen Sie, die neuen Assets mit unterschiedlichen Namen zu benennen.
Jeff Ayan
quelle
-1

Öffnen Sie den Simulator und gehen Sie zu Hardware -> Alle Inhalte und Einstellungen löschen.

Tigran Iskandaryan
quelle