iOS Zachowanie starego ekranu uruchamiania i ikony aplikacji po aktualizacji


173

Mam aplikację, w której niedawno wymieniłem obrazy uruchamiania i ikony aplikacji. Usunąłem wszystkie stare zasoby z całego projektu. Kiedy uaktualniam aplikację ze starej do nowej wersji, po prostu budując w Xcode, wszystko jest w porządku. Jeśli jednak mam zainstalowaną starą wersję mojej aplikacji, a następnie zaktualizuj ją z TestFlight, za każdym razem, gdy zabijam aplikację, a następnie ponownie ją uruchamiam, stary obraz uruchamiania pojawia się na krótko przed wyświetleniem nowego obrazu uruchamiania. Podobnie, gdy zamykam aplikację, ikona starej aplikacji przez chwilę miga przed przełączeniem się z powrotem na nową.

Otworzyłem aplikację za pomocą iExplorera i zauważyłem, że w /Library/Caches/Shapshotskatalogu jest zapisany obraz starego ekranu startowego (nie wiem jak i dlaczego się tam dostał). Kiedy usuwam go ręcznie przez iExplorer, przestaje się pojawiać. Jednak gdy próbuję usunąć go za pomocą kodu przy użyciu NSFileManagermetod, pojawiają się błędy informujące, że nie wolno mi usuwać plików w tym katalogu.

Czy ktoś już tego doświadczył i ma jakieś rady?


3
Ten sam problem, aw przypadku ekranów uruchamiania nowy ekran uruchamiania nigdy się nie wyświetla, używa buforowanego obrazu poprzedniej wersji.
Christophe Fondacci

Odpowiedzi:


327

Udało mi się niezawodnie wyczyścić pamięć podręczną trampoliny do testowania zmian obrazu uruchamiania, wykonując następujące czynności:

  1. Usuń aplikację z urządzenia
  2. Wyłącz urządzenie
  3. Włącz urządzenie, zainstaluj i uruchom aplikację.

Obraz aktualizuje się poprawnie za każdym razem. Szkoda, że ​​muszę wyłączyć urządzenie, aby je uruchomić - ale przynajmniej udało mi się zrobić postęp w ten sposób. Mam nadzieję, że to komuś pomoże.

W przypadku symulatora wystarczy restart symulatora.


19
To jedyne rozwiązanie, które zadziałało. Dziękuję Ci bardzo!
Marcin Kapusta

Dzięki, bohaterze !! Działał jak urok.
Ravi

5
Działa również dla emulatora.
Alexey Podlasov 10-17

1
Czy to również poprawka dla TestFlight? aktualizacja aplikacji z TestFlight również buforuje obrazy startowe. Czy na pewno tak się nie stanie w wersji aplikacji, w przeciwieństwie do lotu próbnego?
hasan

1
Przypomina mi to komedię Auto Mirror. Ale działa świetnie. Dziękuję Ci!
ssowri 1

49

Springboard używa tych pamięci podręcznych do szybkiego przełączania aplikacji. Nie jest to problem, który wpłynie na użytkowników produkcyjnych i teoretycznie powinien zniknąć, gdy Springboard następnym razem zdecyduje się zrobić migawkę aplikacji.

Biorąc to pod uwagę, nie jest to problem, który można naprawić. To jest błąd w kodzie Apple, a nie twój.

AKTUALIZACJA: Wydaje się, że istnieje obejście, które nie wymaga ponownego uruchamiania urządzenia.

Stanie się to po drugim uruchomieniu!

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

Pełne wyjaśnienie, jak to działa tutaj: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
Czy możesz podać link do dokumentacji, która potwierdzi Twoje stwierdzenie „To nie jest problem, który wpłynie na Twoich użytkowników produkcyjnych”? Mam dokładnie ten sam problem, nic mi nie jest, jeśli to tylko programista, ale nie zaryzykuję bez oficjalnej dokumentacji, która jasno określa, co mówisz.
Christophe Fondacci

6
Dla niektórych osób otrzymuję to również w aktualizacji App Store :(.
Ajumal,

15
Niestety mogę potwierdzić, że problem dotyczy nawet użytkowników produkcyjnych (a więc po aktualizacji aplikacji z App Store).
Eugenio,

Tak, ma to wpływ na kompilacje produkcyjne / kompilacje App Store.
Jonny

Jakieś źródło tego?
Daniel Springer

27

Tylko dla symulatora Reset Contents and Settings...


To nie jest pytanie. Chodzi o to, że podczas wdrażania nowej aplikacji z nowymi ikonami lub obrazami nie wszystkie są odświeżane w ten sam sposób, a niektóre są widoczne, gdy zostały usunięte.
Stephane Paquet

18

@InkGolem

To nie jest problem, który wpłynie na Twoich użytkowników produkcyjnych

jest prawdziwy.

Miałem do czynienia z tym problemem, gdy zmieniłem ekran uruchamiania, ekran SplashScreen i ikonę aplikacji. Wypróbowałem każdą metodę, ale nie zadziałała. Wreszcie, właśnie opublikowałem swoją aplikację i pobrałem ją z App Store na urządzeniu, którego nie używałem do programowania . Ekran SplashScreen i ikona aplikacji działają normalnie !!!


1
Masz jakiś pomysł, co się stanie, jeśli masz już aplikację w sklepie z aplikacjami, a użytkownik po prostu zaktualizuje aplikację za pomocą nowego ekranu uruchamiania?
rhcpfan

Mam już aplikację w sklepie z aplikacjami do pobrania i udostępniam aktualizację z nowym ekranem uruchamiania. Po wydaniu mojej aplikacji testuję na więcej niż 10 urządzeniach (nieużywanych do programowania), aby sprawdzić, czy „To nie jest problem, który wpłynie na Twoich użytkowników produkcyjnych” jest prawdziwy i nie otrzymuję od użytkowników żadnych skarg dotyczących ekran powitalny.
chinnawatp

7
Ten problem występuje również u mnie w kompilacji Appstore, a wskazówki @Brian Trzupek zadziałały.
Ajumal

3
Potwierdzono, dzieje się tak w przypadku kompilacji na żywo z App Store. Ta odpowiedź ma pewne problemy z językiem; Nie mogę powiedzieć, czy mają na myśli, że problem wpływa na kompilacje produkcyjne, czy nie, ale moje doświadczenie empiryczne mówi, że tak .
Jonny

2
To faktycznie dzieje się z użytkownikami produkcyjnymi !! Wyświetlany ekran powitalny jest stary. Ponowne uruchomienie telefonu naprawiło to. Miejmy nadzieję, że ludzie zobaczą nowy splash w ciągu następnych godzin bez ponownego uruchamiania.
Valerio

13

Znalazłem rozwiązanie obejścia problemu, jeśli naprawdę chcesz rozwiązać ten problem. Apple ma pewne mechanizmy do buforowania obrazów ekranu uruchamiania, które są indeksowane według nazwy pliku obrazu.

Gdy zmienisz jakiekolwiek obrazy na ekranie startowym i chcesz natychmiast zobaczyć te zmiany w następnym uruchomieniu. proszę użyć nowej nazwy obrazu, który obraz zmieniłeś i połączyć z nowym plikiem obrazu w serii ujęć lub xib.

Uruchom ponownie, zobaczysz pojawienie się nowej zmiany.


1
Nie chciałem usuwać aplikacji, więc wypróbowałem tę. To plus ponowne uruchomienie urządzenia zadziałało dla mnie.
Murray Sagal

To nie zadziałało dla mnie. Ponowne uruchomienie devide również nie zadziałało ... Poddaję się teraz.
Lensflare

Nie działa dla mnie. Usunąłem nawet imageView i utworzyłem nowy z nowym obrazem i nadal nie działał.
Rickard Elimää

To mi się nie udało. Nie ładuje się stary obraz (zamiast obrazu był wyświetlany nadal kolor tła) i nadal był wyświetlany przez ułamek sekundy przed pojawieniem się nowego ekranu startowego.
Michał Cichon

13

U mnie to zadziałało: http://arsenkin.com/launch_screen_image_cache.html

Ponownie, dzięki wątkowi, o którym wspomniałem powyżej, znalazłem sposób na rozwiązanie tego problemu - nazwij swój nowy obraz inaczej niż ten, który był wcześniej, na wypadek, gdyby twój nowy ma taką samą nazwę jak stary i umieścił go z * .xcassets do katalogu projektu i odwołaj się do niego w swoim UIImageView. I to wszystko. Brzmi głupio łatwo, ale och, ile wściekłości miałem.


3
Kluczem tutaj jest, aby zachować te obrazy z katalogu aktywów. Dzięki!
Michał Cichon

3
To rozwiązanie naprawdę pomaga, jeśli zależy Ci na dobrym UX użytkownika produkcyjnego i chcesz uniknąć tego brzydkiego przejścia między starym a nowym obrazem.
Michał Cichon

3
wreszcie rozwiązanie, które faktycznie działa! Kluczem jest tutaj umieszczenie obrazów z folderu zasobów.
Elad

1
Działa idealnie bez ponownego uruchamiania lub usuwania aplikacji.
Soufian Hossam

Dziwne. Ale obraz tła, który usunąłem z katalogu zasobów, czasami nie ładuje się i mam czarne tło. Teraz muszę go ponownie zdebugować, ale niestety nie mam pojęcia, jak odtworzyć.
Michał Cichon

10

Odinstaluj aplikację, uruchom ponownie telefon i ponownie zainstaluj aplikację ... W moim przypadku to naprawiło.


5

Ja też stanąłem przed tym samym problemem. Dzieje się tak, ponieważ symulator / urządzenie iOS buforuje obraz uruchamiania podczas pierwszego uruchomienia aplikacji. Dodałem kilka modyfikacji do odpowiedzi Briana Trzupka :

  1. Usuń zestaw obrazów z zasobów Xcode (np. Launch_image)
  2. Dodaj nowy zestaw obrazów i dodaj do niego obrazy.
  3. Wyłącz i włącz urządzenie iOS. (Zresetuj zawartość i ustawienia symulatora).
  4. Wyczyść folder kompilacji Xcode (naciśnij command+ option+ shift+ K).
  5. Usuń aplikację z urządzenia / symulatora (jeśli jest dostępny).
  6. Uruchomić ponownie.

5

Co mi pomogło:

  • Usunięcie kontrolera sceny i widoku z LaunchScreen i utworzenie nowego ( upewnij się, że ustawiłeś go jako „Początkowy kontroler widoku” w Inspektorze atrybutów ).

Co mi się nie udało :

  • Usuwanie aplikacji
  • Ponowne uruchomienie iPhone'a, Maca lub Xcode
  • Usuwanie danych pochodnych
  • Usunięcie pojemnika urządzenia
  • Czyszczenie
  • Spalenie 3 lalek Voodoo Steve'a Jobsa

Uwaga:

Czasami potrzebne jest również wymazywanie (symulator)


4
Nie jestem przekonana. Potrzebuję lokalizacji źródłowych lalek voodoo Steve'a Jobsa, aby potwierdzić.
Chris Brandsma

3

Po prostu podłącz swoje urządzenie, przejdź do Xcode> Okno> Urządzenia> Twoje urządzenie, teraz w zainstalowanych aplikacjach, wybierz swoją aplikację, kliknij prawym przyciskiem myszy i pobierz kontener, przejdź do wygenerowanego pliku, kliknij prawym przyciskiem myszy, Pokaż zawartość pakietu, AppData, Biblioteka, Pamięci podręczne, i usuń pliki. Teraz przejdź do Xcode> Okno> Urządzenia> Twoje urządzenie> Twoja aplikacja i kliknij prawym przyciskiem myszy, aby zastąpić kontenery.


3

Szczerze mówiąc, nie zaryzykowałem i nie byłem pewien, czy to zostanie zaktualizowane, czy nie.

Zakładając więc, że korzystasz z xcassets, prostym rozwiązaniem jest:

  1. Usuń stary zestaw obrazów
  2. Utwórz ponownie plik z inną nazwą i dodaj obrazy ekranu powitalnego
  3. Zaktualizuj swój scenorys, aby użyć tego „nowego” odniesienia do zestawu obrazów

Na pewno się zaktualizuje! (Testowałem nawet z aplikacją już zainstalowaną na urządzeniu). Nie ma potrzeby czyszczenia pamięci podręcznej urządzenia.


3
  1. Usuń aplikację z urządzenia
  2. Wyłącz urządzenie
  3. Włącz urządzenie
  4. Zainstaluj i uruchom aplikację.

1

Ok, więc rozwiązałem problem. W poprzedniej wersji mojej aplikacji używaliśmy Launch Screen XIB. Gdzieś w trakcie opracowywania tej nowej wersji xib został usunięty i zastąpiony tylko statycznymi obrazami startowymi.

Rozwiązaniem jest użycie Launch Screen XIB. Zauważyłem, że w momencie, gdy po raz pierwszy użyłem ekranu uruchamiania xib, plik przechowywany w katalogu migawek został zastąpiony migawką xib.


2
Nie, używam programu Launch Screen XIB i nie jest on aktualizowany. Myślę, że możesz obejść problem, przełączając się z ekranu uruchamiania> Obraz statyczny> Ekran uruchamiania. Modyfikacja ekranu startowego w XCode i uruchomienie go nadal wyświetla stary ekran uruchamiania na iPhonie. Obraz jest przechowywany w pamięci podręcznej urządzenia. Myślę, że jeśli zmienię nazwę ekranu startowego, to
załatwi sprawę

Odtworzenie ekranu uruchamiania o innej nazwie nie rozwiązało problemu, nadal widząc stary. Jedyną "nadzieją" jest to, że iOS regeneruje pamięć podręczną przy każdej aktualizacji aplikacji, ale nie mogę znaleźć żadnej dokumentacji na ten temat
Christophe Fondacci

1

Xcode 10 / iOS 12

Po wypróbowaniu wszystkich wymienionych powyżej rzeczy musiałem usunąć widok obrazu z LaunchScreen i zastąpić go nowym.


1

To najszybszy sposób, jaki znalazłem, aby rozwiązać ten problem, chociaż brzmi to głupio:

  1. Kliknij prawym przyciskiem myszy LaunchScreen.xiblub plik ekranu startowego i wybierz, Remove filea następnie wybierz Remove to trash. Spowoduje to usunięcie wszystkich odniesień do pliku i jego wcześniejszych aktualizacji z projektu.

  2. Idź do kosza i przeciągnij i upuść plik z powrotem do projektu xCode (w obrębie yourProjectName).

  3. Oczyść i odbuduj.


1

Użyj tego fragmentu kodu, aby wyczyścić pamięć podręczną ekranu uruchamiania:

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

Stosowanie:

UIApplication.shared.clearLaunchScreenCache()

0

Miałem też ten problem. Będąc całkowitym nowicjuszem, naiwnie zmieniłem LaunchScreen.storyboard na LaunchScreen.xib. Uruchomienie nie powiodło się (duh), więc zmieniłem go z powrotem na .storyboard, ponownie uruchomiłem aplikację tylko po to, aby przetestować, że nic innego nie schrzaniłem - a stary ekran nie pojawił się pierwszy. Więc cokolwiek zrobiłem, musiało to opróżnić starą pamięć podręczną.


0

Miałem ten sam problem, ale tylko z obrazem używanym w scenorysie ekranu startowego. Przeniesienie obrazu z katalogu zasobów i zmiana jego nazwy na pakiet aplikacji (na przykład stary obraz ustawiony w katalogu zasobów miał nazwę launch_logo, a obraz w pakiecie aplikacji to launchscreen_logo.png) rozwiązało problem.


0

Myślę, że to zależy od sytuacji. Kiedy dzieje się to podczas debugowania lub testowania, działa na usuwaniu obrazu na ekranie startowym. Lub odinstalowanie aplikacji, a następnie uruchom ponownie.

Ale dzieje się nawet po archiwum, a potem nie rozwiązuje się przez reset i czyszczenie.


0

W moim przypadku nie wybrałem źródła AppIcon w ustawieniach aplikacji -> Ogólne - wprowadź opis obrazu tutaj> Ikony aplikacji i uruchom obrazy -> Źródło ikon aplikacji


0

Wypróbuj w 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

Rozwiązanie działa dla mnie

  1. Usuń aplikację z urządzenia
  2. Wyłącz urządzenie
  3. Włącz urządzenie
  4. wyczyść folder kompilacji
  5. Ponownie skompiluj, zainstaluj i uruchom aplikację.

    Cieszyć się


0

Upewnij się, że wykonałeś wszystkie te kroki

  1. Wyszukaj klucz ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME w ustawieniach kompilacji i wyszukaj wartość jego zasobów w całej aplikacji, a następnie usuń go.
  2. Usuń ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME z ustawień kompilacji.
  3. Utwórz nowy ekran uruchamiania Xcode -> Plik -> Nowy -> Plik -> Ekran uruchamiania
  4. Przejdź do głównego celu aplikacji -> Ogólne -> Ikony aplikacji i uruchom obrazy -> Uruchom plik ekranu -> Wybierz nowy plik ekranu uruchamiania.
  5. Jeśli zmieniasz tylko stary ekran uruchamiania, spróbuj nazwać nowe zasoby różnymi nazwami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.