iOS Збереження старого екрана запуску та значок додатка після оновлення


173

У мене є додаток, де я нещодавно замінив зображення запуску та піктограми додатків, я видалив усі старі активи з усіх проектів проекту. Коли я оновлюю додаток зі старої версії до нової, просто будуючи Xcode, все добре. Однак якщо у мене встановлена ​​стара версія мого додатка, то оновіть її з TestFlight, кожен раз, коли я вбиваю програму, потім перезавантажую її, старе зображення запускається ненадовго, перш ніж показувати нове зображення запуску. Так само коли я закриваю програму, старий значок програми коротко миготить, перш ніж перейти на новий.

Я відкрив додаток за допомогою iExplorer і помітив, що в /Library/Caches/Shapshotsкаталозі є зображення старого екрана запуску (я не знаю, як і чому він потрапив туди). Коли я видаляю його вручну через iExplorer, він не перестає з'являтися. Однак, коли я намагаюся видалити його за допомогою коду NSFileManagerметодами, я отримую помилки, кажучи, що мені заборонено видаляти файли в цьому каталозі.

Хто-небудь відчував це раніше і має якісь поради?


3
Ця ж проблема, і з екранами запуску новий екран запуску ніколи не відображається, він використовує кешоване зображення попередньої версії.
Крістоф Фондчічі

Відповіді:


327

Мені вдалося надійно очистити кеш-трамплін для тестування змін зображення, виконавши це:

  1. Видаліть додаток із пристрою
  2. Вимкніть живлення пристрою
  3. Вмикайте пристрій, встановлюйте та запускайте додаток.

Зображення оновлюється належним чином кожного разу. Сором мені потрібно вимкнути пристрій, щоб змусити його працювати - але, принаймні, мені вдалося просунутися таким чином. Я сподіваюся, що це комусь допоможе.

У випадку тренажера слід просто перезапустити тренажер.


19
Це єдине рішення, яке працювало на мене. Дуже тобі дякую!
Marcin Kapusta

Дякую Герою !! Працював як шарм.
Раві

5
Працює і для емулятора.
Олексій Підласов

1
Це також виправлення для TestFlight? оновлення програми з TestFlight також кешує зображення запуску. ви впевнені, що цього не відбудеться у версії програми на відміну від тестового польоту?
хасан

1
Це мені нагадує Автозеркальну комедію. Але це працює приголомшливо. Дякую!
ssowri1

49

Ці кеші використовуються Springboard для швидкого переключення додатків. Це не проблема, яка вплине на ваших виробничих користувачів, і теоретично повинна піти наступного разу, коли Springboard вирішить зробити знімок вашої програми.

Але, це не проблема, яку ви можете вирішити. Це помилка в коді Apple, а не ваш.

ОНОВЛЕННЯ: Здається, існує робота, яка не потребує перезавантаження пристрою.

Це набере чинності після другого запуску!

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

Повне пояснення, як це працює тут: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
Чи можете ви зв’язатись із документацією, яка б підтвердила вашу заяву "Це не проблема, яка вплине на ваших виробничих користувачів"? У мене точно така ж проблема, я в порядку, якщо це лише розробник, але я не ризикую без офіційної документації, яка чітко вказує, що ви говорите.
Крістоф Фондччі

6
Деякі люди отримують це також для оновлення App Store :(.
Ajumal

15
На жаль, я можу підтвердити, що ця проблема стосується навіть виробників (тому після оновлення програми з App Store).
Євгеніо

Так, це впливає на виробництво / App Store.
Джоні

Будь-яке джерело для цього?
Даніель Спрінгер

27

Для тренажера просто Reset Contents and Settings...


Це не питання. Справа в тому, що під час розгортання нового додатка з новими значками чи зображеннями вони не оновлюються однаково, а деякі відображаються на дисплеї, поки їх видалено.
Стефан Пакет

18

@InkGolem

Це не проблема, яка вплине на ваших виробничих користувачів

правда.

Я зіткнувся з цією проблемою, коли змінив свій екран запуску, SplashScreen і значок програми. Я спробував кожен метод, але це не вийшло. Нарешті, я щойно опублікував свою програму та завантажив свою програму з магазину додатків із пристрою, який я не використовував для розробки . SplashScreen та значок програми працюють як звичайно !!!


1
Будь-яка ідея, що станеться, якщо у вас вже є додаток у магазині, а користувач просто оновлює програму новим екраном запуску?
rhcpfan

У мене вже є додаток для завантаження програми , і я випускаю оновлення з новим екраном запуску. Після випуску програми я тестую більш ніж на 10 пристроях (не використовую для розробки), щоб переконатися, що "Це не проблема, яка вплине на ваших виробничих користувачів" справжня, і я не отримую жодної скарги від користувача щодо заставка.
chinnawatp

7
Ця проблема є щасливою в Appstore build і для мене, і поради @Brian Trzupek спрацювали.
Ajumal

3
Підтверджено, це відбувається в реальній версії від App Store. Ця відповідь має деякі проблеми з мовою; Я не можу сказати, чи означають вони, що проблема впливає на нарощування виробництва чи ні, але мій емпіричний досвід говорить, що це так .
Джоні

2
Це насправді відбувається з виробничими користувачами !! Відображається екран заставки - старий. Перезавантаження телефону виправило це. Сподіваємось, люди побачать новий сплеск протягом наступних годин без перезавантаження.
Валеріо

13

Я знайшов рішення для вирішення питання, що, якщо ви дійсно хочете виправити цю проблему. Apple має деякі механізми кешування зображень екрана запуску, який індексує за назвою файлу зображення.

Коли ви зміните будь-які зображення на екрані запуску, і ви хочете побачити ці зміни в наступному запуску негайно. будь ласка, використовуйте нове ім’я зображення, яке зображення ви змінили, і посилання на новий файл зображення в раскадровці або xib.

Запустіть знову, ви побачите нові зміни.


1
Я не хотів видаляти додаток, тому спробував цей. Цей плюс перезавантаження мого пристрою працював на мене.
Мюррей Сагал

Це не спрацювало для мене. Перезапуск девізу також не спрацював ... я зараз відмовляюся.
Lensflare

Не працювало для мене. Я навіть видалив imageView і створив нове з новим зображенням, і воно все ще не спрацювало.
Рікард Елімяа

Це не працювало для мене. Я отримав старе зображення, яке не завантажується (усе-таки фоновий колір був представлений замість зображення), і він все ще був представлений на частку секунди до появи нового екрану запуску.
Michal Cichon

13

Це працювало для мене: http://arsenkin.com/launch_screen_image_cache.html

Знову ж таки, завдяки нитці, на яку я посилався вище, я знайшов спосіб вирішити цю проблему - назвіть ваше нове зображення іншим чином від того, яке було раніше, на випадок, якщо ваше нове має те саме ім'я, що і старе, та викладіть його із * .xcassets папку до каталогу проекту та посилається на неї у вашому UIImageView. І це все. Звучить дурно легко, але ой гауд, скільки я лютував.


3
Ключ тут , щоб зберегти ці зображення з каталогу активів. Дякую!
Michal Cichon

3
Це рішення справді допомагає, якщо ви дбаєте про хороший UX вашого виробничого користувача і хочете уникнути потворного переходу між старим і новим зображенням.
Michal Cichon

3
нарешті, рішення, яке насправді працює! Ключовим тут є виведення зображень із папки активів.
Елад

1
Відмінно працює без перезавантаження або видалення програми.
Суфіан Хоссам

Дивно. Але фонове зображення, яке я перемістив із каталогу активів, іноді не завантажується, і я отримую чорний фон. Тепер мені потрібно це налагодити ще раз, але я не маю уявлення, як відтворити на жаль.
Michal Cichon

10

Видаліть додаток, перезавантажте телефон і встановіть додаток знову ... Це фактично виправлено в моєму випадку.


5

Я також зіткнувся з тим же питанням. Це відбувається тому, що пристрій тренажера / iOS кешує зображення запуску під час першого запуску програми. Я додав деякі зміни у відповідь Брайана Трзупека :

  1. Видаліть набір зображень із ресурсів Xcode (наприклад, start_image)
  2. Додайте новий набір зображень та додайте до нього зображення.
  3. Вимкніть та увімкніть Пристрій iOS. (Скидання змісту та налаштувань тренажера).
  4. Очистіть папку збірки Xcode (Натисніть command+ option+ shift+ K).
  5. Видаліть додаток із пристрою / симулятора (якщо є).
  6. Біжи знову.

5

Що для мене спрацювало:

  • Видалити контрольний сценарій сцени та перегляду LaunchScreen і створити новий ( переконайтеся, що ви встановили його як "Контролер початкового перегляду" в інспекторі атрибутів ).

Що для мене не вийшло :

  • Видалення програми
  • Перезапуск iPhone, Mac або Xcode
  • Видалення отриманих даних
  • Видалення контейнера пристрою
  • Прибирання
  • Спалення 3 Стів Джобс ляльки Вуду

Примітка:

Іноді потрібно також стирання (тренажер)


4
Я не переконаний. Мені знадобиться джерело розташування ляльок вуду Стіва Джобса для підтвердження.
Chris Brandsma

3

Просто підключіть свій пристрій, перейдіть до Xcode> Window> Devices> Ваш пристрій, тепер у встановлених додатках виберіть додаток, клацніть правою кнопкою миші та завантажте контейнер, перейдіть до створеного файлу, клацніть правою кнопкою миші, Показати вміст пакета, AppData, Бібліотека, Кеші, і видалити файли. Тепер перейдіть до Xcode> Window> Devices> Your device> додаток та клацніть правою кнопкою миші, щоб замінити контейнери.


3

Чесно кажучи, я не ризикував жити, не будучи впевненим, оновиться це чи ні.

Отже, якщо припустити, що ви використовуєте xcassets, простим рішенням є:

  1. Видаліть старий набір зображень
  2. Відтворіть одну з іншою назвою та додайте свої зображення на екрані
  3. Оновіть свою рекламну дошку, щоб використовувати цю "нову" посилання на набір зображень

Він буде оновлений точно! (Я навіть тестував додаток, уже встановлений на пристрої). Не потрібно чистити кеш пристрою чи так.


3
  1. Видаліть додаток із пристрою
  2. Вимкніть живлення пристрою
  3. Пристрій живлення
  4. Встановити та запустити додаток.

1

Гаразд, я вирішив це питання. У попередній версії мого додатка ми використовували стартовий екран XIB. Десь при розробці цієї нової версії xib було видалено і замінено лише статичними зображеннями запуску.

Рішення полягає у використанні XIB Launch Screen. Я помітив, що щойно я вперше застосував екран xib запуску, файл, що зберігається в каталозі знімків, замінили знімком xib.


2
Ні, я використовую стартовий екран XIB, і він не оновлюється. Я думаю, що ви вирішили проблему, перейшовши з екрану запуску> статичного зображення> запустити екран. Змінення екрана запуску в XCode та його запуску все ще показує старий екран запуску на iPhone. Зображення кешується на пристрої. Я думаю, якщо я зміню ім'я екрану запуску, він зробить трюк
Крістоф Фондчі

Відтворення екрана запуску з іншою назвою не вирішило проблему, все ще побачивши старий. Єдина «надія» полягає в тому, що iOS відновлює кеш-пам'ять під час кожного оновлення додатків, але я не можу знайти жодної документації щодо цього
Крістоф Фондачі

1

Xcode 10 / iOS 12

Спробувавши всі вищезгадані речі, мені довелося видалити зображення з LaunchScreen і замінити його на нове.


1

Це найшвидший спосіб вирішити цю проблему, хоча це звучить нерозумно:

  1. Клацніть правою кнопкою миші на LaunchScreen.xibфайлі стартового екрана або виберіть, Remove fileа потім виберіть Remove to trash. Це видалить усі посилання на файл та його попередні оновлення з вашого проекту.

  2. Перейдіть у свій кошик та перетягніть файл назад у ваш проект xCode (всередині yourProjectName).

  3. Почистіть і відновіть.


1

Використовуйте цей фрагмент коду для очищення кешу екрану запуску:

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

Використання:

UIApplication.shared.clearLaunchScreenCache()

0

Була і ця проблема. Будучи абсолютно новачком, я наївно змінив LaunchScreen.storyboard на LaunchScreen.xib. Пробіг не вдався (так), тому я змінив його назад на .storyboard перезапустив додаток лише для того, щоб перевірити, що я нічого не накрутив - і старий екран не з’явився першим. Так що б я не робив, це, мабуть, вимило старий кеш.


0

Була така ж проблема, але лише із зображенням, використовуваним у розгортці розгорнутого екрану. Переміщення зображення з каталогу ресурсів, зміна його назви на пакет додатків (наприклад, старе зображення, встановлене в каталозі активів, називалось запуск_logo, а зображення в наборі додатків називається launchscreen_logo.png) вирішило проблему для нас.


0

Я думаю, це залежить від ситуацій. Коли це відбувається при налагодженні або тестуванні, працює над видаленням зображення на екрані запуску. Або видаліть свої програми, а потім перезапустіть запуск.

Але це навіть після архіву, тоді він не вирішує з перезавантаженням та очищенням.


0

У моєму випадку я не вибрав джерело AppIcon із Налаштування додатків -> Загальне - введіть тут опис зображення> Піктограми додатків та запуску зображень -> Джерело значків додатків


0

Спробуйте це в 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

Рішення працює для мене

  1. Видаліть додаток із пристрою
  2. Вимкніть пристрій
  3. Увімкніть пристрій
  4. чиста збірка папки
  5. Знову створити та встановити та запустити додаток.

    Насолоджуйтесь


0

Переконайтесь, що ви виконали всі ці кроки

  1. Шукайте ключ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME у налаштуваннях збірки та шукайте значення його активів у всій програмі та видаліть його.
  2. Видаліть ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME з налаштування Build.
  3. Створення нового екрана запуску Xcode -> Файл -> Новий -> Файл -> Запуск екрана
  4. Перейдіть до основної цілі програми -> Загальне -> Піктограми додатків та запустіть зображення -> Запуск файлу екрана -> Виберіть новий файл екрану запуску.
  5. Якщо ви просто змінюєте старий екран запуску, спробуйте назвати нові об’єкти різними іменами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.