iOS Mantenere la vecchia schermata di avvio e l'icona dell'app dopo l'aggiornamento


173

Ho un'app in cui ho recentemente sostituito le immagini di avvio e le icone delle app, ho rimosso tutti i vecchi asset da qualsiasi parte del progetto. Quando aggiorno l'app dalla vecchia versione alla nuova versione semplicemente compilando in Xcode, tutto va bene. Tuttavia, se ho installato la vecchia versione della mia app, la aggiorno da TestFlight, ogni volta che uccido l'app e la riavvio, viene visualizzata brevemente la vecchia immagine di avvio prima di mostrare la nuova immagine di lancio. Allo stesso modo, quando chiudo l'app, l'icona della vecchia app lampeggia brevemente prima di tornare a quella nuova.

Ho aperto l'app usando iExplorer e ho notato che esiste un'immagine della vecchia schermata di avvio salvata nella /Library/Caches/Shapshotsdirectory (non so come o perché sia ​​arrivata lì). Quando lo elimino manualmente tramite iExplorer, smette di apparire. Tuttavia, quando provo a rimuoverlo con il codice usando i NSFileManagermetodi, ricevo errori che dicono che è vietato eliminare i file in questa directory.

Qualcuno lo ha mai sperimentato prima e hai qualche consiglio?


3
Stesso problema e con le schermate di avvio la nuova schermata di avvio non viene mai visualizzata, utilizza l'immagine memorizzata nella cache della versione precedente.
Christophe Fondacci,

Risposte:


327

Sono stato in grado di svuotare in modo affidabile la cache del trampolino di lancio per testare le modifiche delle immagini di avvio facendo questo:

  1. Elimina la tua app dal dispositivo
  2. Spegni il dispositivo
  3. Accendi il dispositivo, installa e avvia l'app.

L'immagine si aggiorna correttamente ogni volta. Peccato che sia necessario spegnere il dispositivo per farlo funzionare, ma almeno sono stato in grado di fare progressi in questo modo. Spero che questo aiuti qualcuno.

Nel caso del simulatore, il riavvio del simulatore dovrebbe funzionare.


19
Questa è l'unica soluzione che ha funzionato per me. Grazie mille!
Marcin Kapusta

Grazie eroe !! Ha funzionato come un fascino.
Ravi,

5
Funziona anche per l'emulatore.
Alexey Podlasov,

1
Questa è anche la correzione per TestFlight? l'aggiornamento dell'app da TestFlight memorizza anche nella cache le immagini di avvio. sei sicuro che questo non accadrà sulla versione dell'app a differenza del testflight?
Hasan,

1
Mi ricorda la commedia dello specchio Auto per me. Ma funziona alla grande. Grazie!
ssowri1,

49

Queste cache sono utilizzate da Springboard per velocizzare la commutazione delle app. Questo non è un problema che influirà sugli utenti della produzione e, in teoria, dovrebbe scomparire la prossima volta che Springboard deciderà di eseguire un'istantanea della tua app.

Detto questo, questo non è un problema che puoi risolvere. Questo è un bug nel codice Apple non tuo.

AGGIORNAMENTO: sembra esserci un problema che non richiede il riavvio del dispositivo.

Questo avrà effetto dopo il secondo lancio!

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

Una spiegazione completa di come funziona qui: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
Potete per favore collegarvi alla documentazione che confermerebbe la vostra dichiarazione "Questo non è un problema che influenzerà i vostri utenti di produzione"? Ho lo stesso identico problema, sto bene se questo è solo dev ma non ne approfitterò senza la documentazione ufficiale che affermi chiaramente ciò che dici.
Christophe Fondacci,

6
Per alcune persone
ottengo

15
Purtroppo posso confermare che questo problema riguarda anche gli utenti della produzione (quindi dopo aver aggiornato l'app dall'App Store).
Eugenio,

Sì, influisce sui build di produzione / sui build dell'App Store.
Jonny,

Qualche fonte per questo?
Daniel Springer,

27

Solo per il simulatore Reset Contents and Settings...


Questa non è una domanda. Il punto è che quando si distribuisce una nuova app con nuove icone o immagini, non vengono tutti aggiornati allo stesso modo e alcuni vengono mantenuti in mostra mentre sono stati rimossi.
Stephane Paquet,

18

@InkGolem

Questo non è un problema che influenzerà i tuoi utenti di produzione

è vero.

Stavo affrontando questo problema quando ho cambiato la mia schermata di avvio, SplashScreen e l'icona dell'app. Ho provato tutti i metodi, ma non ha funzionato. Infine, ho appena pubblicato la mia app e scaricato l'applicazione dall'App Store con il dispositivo che non ho utilizzato per lo sviluppo . SplashScreen e App Icon funzionano normalmente !!!


1
Hai idea di cosa succede se hai già un'app sull'app store e l'utente aggiorna l'applicazione con la nuova schermata di avvio?
rhcpfan,

Ho già un'app per i download dell'app store e rilascio un aggiornamento con la nuova schermata di avvio. Dopo aver rilasciato la mia app, collaudo con più di 10 dispositivi (non utilizzati per lo sviluppo) per verificare che "Questo non è un problema che influenzerà i tuoi utenti di produzione" è reale e non ricevo alcun reclamo così lontano dagli utenti circa splashscreen.
chinnawatp,

7
Questo problema si sta verificando anche nella build di Appstore per me e i suggerimenti di @Brian Trzupek hanno funzionato.
Ajumal,

3
Confermato, questo accade su build dal vivo da App Store. Questa risposta ha alcuni problemi con il linguaggio; Non so dire se significano che il problema riguarda o meno le costruzioni di produzione, ma la mia esperienza empirica dice che lo fa .
Jonny,

2
Sta effettivamente accadendo agli utenti della produzione !! La schermata iniziale visualizzata è quella precedente. Il riavvio del telefono ha risolto il problema. Spero che la gente vedrà il nuovo splash nelle ore successive senza riavviare.
Valerio,

13

Ho trovato una soluzione alternativa e se davvero volessi risolvere questo problema. Apple ha alcuni meccanismi per memorizzare nella cache le immagini della schermata di avvio che indicizzano in base al nome del file immagine.

Quando si modificano le immagini sulla schermata di avvio e si desidera vederle immediatamente nella prossima esecuzione. si prega di utilizzare il nome della nuova immagine quale immagine è stata modificata e il collegamento al nuovo file di immagine nello storyboard o xib.

Esegui di nuovo, vedrai apparire le nuove modifiche.


1
Non volevo eliminare l'app, quindi ho provato questa. Questo, più il riavvio del mio dispositivo ha funzionato per me.
Murray Sagal,

Questo non ha funzionato per me. Anche il riavvio di Devide non ha funzionato ... Mi arrendo adesso.
Lensflare

Non ha funzionato per me. Ho persino rimosso imageView e ne ho creato uno nuovo con la nuova immagine, ma non ha ancora funzionato.
Rickard Elimää,

Non ha funzionato per me. Ho avuto la vecchia immagine non caricata (è stato presentato il colore di sfondo invece di un'immagine) ed è stato ancora presentato per una frazione di secondo prima che apparisse la nuova schermata di avvio.
Michal Cichon,

13

Questo ha funzionato per me: http://arsenkin.com/launch_screen_image_cache.html

Ancora una volta, grazie al thread a cui ho fatto riferimento in precedenza ho trovato un modo per risolvere questo problema: assegna un nome alla tua nuova immagine in modo diverso da quello esistente nel caso in cui la nuova abbia lo stesso nome di quella precedente e la metta fuori dal * .xcassets nella directory del progetto e fai riferimento in UIImageView. E questo è tutto. Sembra stupido, facile ma oh meraviglia di quanta rabbia ho avuto.


3
La chiave qui è di tenere quelle immagini fuori dal catalogo delle risorse. Grazie!
Michal Cichon,

3
Questa soluzione aiuta davvero se ti interessa la buona UX dell'utente di produzione e vuoi evitare quella brutta transizione tra la vecchia e la nuova immagine.
Michal Cichon,

3
infine, una soluzione che funziona davvero! La chiave qui è di mettere le immagini fuori dalla cartella delle risorse.
Elad

1
Funziona perfettamente senza riavviare o eliminare l'app.
Soufian Hossam,

Strano. Ma l'immagine di sfondo che ho spostato dal catalogo delle risorse a volte non viene caricata e ottengo lo sfondo nero. Ora devo eseguire nuovamente il debug, ma purtroppo non ho idea di come riprodurlo.
Michal Cichon,

10

Disinstalla la tua app, riavvia il telefono e reinstalla la tua app ... Questo in realtà è stato corretto nel mio caso.


5

Ho anche affrontato lo stesso problema. Succede perché il simulatore / dispositivo iOS memorizza nella cache l'immagine di avvio al primo avvio dell'applicazione. Ho aggiunto alcune modifiche alla risposta di Brian Trzupek :

  1. Elimina il set di immagini dagli asset Xcode (ad es. Launch_image)
  2. Aggiungi un nuovo set di immagini e aggiungi immagini ad esso.
  3. Spegnere e accendere il dispositivo iOS. (Ripristina contenuti e impostazioni per il simulatore).
  4. Pulisci la cartella di build Xcode (premi command+ option+ shift+ K).
  5. Elimina l'app dal dispositivo / simulatore (se disponibile).
  6. Esegui di nuovo.

5

Cosa ha funzionato per me:

  • Eliminazione del controller scena e vista di LaunchScreen e crearne uno nuovo ( assicurarsi di impostarlo come "Controller vista iniziale" nella finestra di ispezione degli attributi ).

Cosa non ha funzionato per me:

  • Eliminazione dell'app
  • Riavvio di iPhone, Mac o Xcode
  • Eliminazione dei dati derivati
  • Eliminazione del contenitore del dispositivo
  • Pulizia
  • Bruciare 3 bambole Voodoo di Steve Jobs

Nota:

A volte è necessaria anche la cancellazione (simulatore)


4
Non sono convinto. Avrò bisogno di posizioni di provenienza delle bambole voodoo di Steve Jobs per confermare.
Chris Brandsma,

3

Basta collegare il dispositivo, andare su Xcode> Finestra> Dispositivi> Il dispositivo, ora nelle app installate, selezionare l'app, fare clic con il tasto destro e scaricare il contenitore, andare al file generato, fare clic con il tasto destro, Mostra contenuto pacchetto, AppData, Libreria, Cache, ed elimina i file. Ora vai su Xcode> Finestra> Dispositivi> Il tuo dispositivo> l'app e fai clic con il pulsante destro del mouse per sostituire i contenitori.


3

Onestamente, non ho preso il rischio di andare in diretta senza essere sicuro che questo verrà aggiornato o meno.

Quindi, supponendo che tu stia usando xcasset, una soluzione semplice è:

  1. Elimina il vecchio set di immagini
  2. Ricreane uno con un nome diverso e aggiungi le immagini della schermata iniziale
  3. Aggiorna lo storyboard per utilizzare questo "nuovo" riferimento al set di immagini

Si aggiornerà di sicuro! (Ho anche testato con l'app già installata sul dispositivo). Non è necessario pulire la cache del dispositivo o giù di lì.


3
  1. Elimina la tua app dal dispositivo
  2. Spegni il dispositivo
  3. Accendi il dispositivo
  4. Installa e avvia l'app.

1

Ok, quindi ho capito il problema. Nella versione precedente della mia app utilizzavamo una schermata di avvio XIB. Da qualche parte nello sviluppo di questa nuova versione, lo xib è stato eliminato e sostituito solo con immagini di avvio statiche.

La soluzione è utilizzare una schermata di avvio XIB. Ho notato che nel momento in cui ho usato una schermata di avvio xib per la prima volta, il file archiviato nella directory delle istantanee è stato sostituito con l'istantanea di xib.


2
No, sto usando una schermata di avvio XIB e non si aggiorna. Immagino che tu abbia risolto il problema passando da Schermata di avvio> Immagine statica> Schermata di avvio. La modifica della schermata di avvio in XCode e la sua esecuzione mostra ancora la vecchia schermata di avvio su iPhone. L'immagine viene memorizzata nella cache sul dispositivo. Immagino che se cambio il nome della schermata di avvio farà il trucco
Christophe Fondacci,

Ricreare una schermata di avvio con un nome diverso non ha risolto il problema, vedendo ancora quello vecchio. L'unica "speranza" è che iOS rigenera la sua cache ad ogni aggiornamento dell'app, ma non riesco a trovare alcuna documentazione su questo
Christophe Fondacci,

1

Xcode 10 / iOS 12

Dopo aver provato tutte le cose di cui sopra, ho dovuto eliminare l'immagine visualizzata da LaunchScreen e sostituirla con una nuova.


1

Questo è il modo più veloce che ho trovato per risolvere questo problema, anche se sembra stupido:

  1. Fare clic con il tasto destro del mouse sul LaunchScreen.xibfile della schermata di avvio e selezionare, Remove filequindi selezionare Remove to trash. Ciò rimuoverà tutti i riferimenti del file e i suoi aggiornamenti precedenti dal progetto.

  2. Vai nel cestino e trascina il file nel tuo progetto xCode (all'interno yourProjectName).

  3. Pulito e ricostruito.


1

Utilizzare questo pezzo di codice per pulire la cache della schermata di avvio:

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

Uso:

UIApplication.shared.clearLaunchScreenCache()

0

Aveva anche questo problema. Essendo un principiante totale, ho cambiato ingenuamente LaunchScreen.storyboard in LaunchScreen.xib. La corsa non è andata a buon fine (duh), quindi l'ho cambiata di nuovo in .storyboard rieseguendo nuovamente l'app solo per testare che non avevo rovinato nient'altro - e il vecchio schermo non appariva per primo. Quindi, qualunque cosa abbia fatto, deve aver svuotato la vecchia cache.


0

Aveva lo stesso problema ma solo con l'immagine usata nello storyboard della schermata di avvio. Spostando l'immagine dal catalogo delle risorse cambiando il suo 'nome nel pacchetto dell'app (ad esempio, la vecchia immagine impostata nel catalogo delle risorse si chiamava launch_logo e l'immagine nel pacchetto dell'app si chiamava launchscreen_logo.png) abbiamo risolto il problema per noi.


0

Immagino che dipendano da situazioni. Quando succede durante il debug o il test, lavora sull'eliminazione dell'immagine nella schermata di avvio. O disinstallando le tue app, quindi riavvia il lancio.

Ma va anche dopo l'archivio, quindi non si risolve con reset e clean.


0

Nel mio caso non ho selezionato AppIcon Source da Impostazioni app -> Generale - inserisci qui la descrizione dell'immagine> Icone app e Avvia immagini -> Sorgente icone app


0

Provalo 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")
    }

0

La soluzione funziona per me

  1. Elimina la tua app dal dispositivo
  2. Spegni il dispositivo
  3. Accendi il dispositivo
  4. clean Build Folder
  5. Ancora una volta compilare, installare e avviare l'app.

    Godere


0

Assicurati di aver fatto tutti questi passaggi

  1. Cerca la chiave ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME nell'impostazione della build e cerca il valore delle sue risorse nell'intera applicazione, quindi rimuovila.
  2. Elimina ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME dall'impostazione Build.
  3. Crea nuovo Xcode schermata di avvio -> File -> Nuovo -> File -> Schermata di avvio
  4. Vai a Target principale app -> Generale -> Icone app e avvia immagini -> Avvia file schermata -> Scegli il nuovo file schermata di avvio.
  5. Se hai appena cambiato la vecchia schermata di avvio, prova a nominare le nuove risorse con nomi diversi.

-1

Prova ad aprire il simulatore, andando su Hardware -> Cancella tutto il contenuto e le impostazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.