Подтвердить что ты не робот

IOS Сохранение старого экрана запуска и значка приложения после обновления

У меня есть приложение, в котором я недавно заменил образы запуска и значки приложений, я удалил все старые ресурсы из любого места в проекте. Когда я обновляю приложение со старой версии до новой, просто встроив Xcode, все в порядке. Однако, если у меня установлена старая версия моего приложения, затем обновите ее с TestFlight, каждый раз, когда я убиваю приложение, а затем перезапускаю его, на короткое время появляется старое изображение запуска, прежде чем показывать новое изображение запуска. Аналогичным образом, когда я закрываю приложение, значок старого приложения кратковременно мигает, прежде чем вернуться к моему новому.

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

Кто-нибудь сталкивался с этим раньше и есть какие-либо советы?

4b9b3361

Ответ 1

Я смог надежно очистить кеш трамплина для тестирования изменений образа запуска, выполнив следующее:

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

Изображение обновляется правильно каждый раз. Жаль, мне нужно выключить устройство, чтобы оно заработало - но, по крайней мере, я смог добиться прогресса таким образом. Надеюсь, это кому-нибудь поможет.

В случае симулятора, просто перезапуск симулятора должен работать.

Ответ 2

Эти кеши используются Springboard для быстрого переключения приложений. Это не проблема, которая повлияет на ваших пользователей и должна теоретически уйти в следующий раз, когда Springboard решит сделать снимок вашего приложения.

Как говорится, это не проблема, которую вы можете исправить. Это ошибка в коде Apple, а не в вашем.

Ответ 3

Для симулятора просто Reset Contents and Settings...

Ответ 4

@InkGolem

Это не проблема, которая повлияет на ваших производственных пользователей

правда.

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

Ответ 5

Я нашел решение для решения проблемы, если вы действительно хотите исправить эту проблему. У Apple есть некоторые механизмы для кэширования изображений экрана запуска, которые индексируются по имени файла изображения.

Когда вы меняете изображения на экране запуска, и вы хотите немедленно увидеть эти изменения в следующем запуске. используя новое имя изображения, изображение которого вы изменили, и ссылку на новый файл изображения в раскадровке или xib.

Запустите снова, вы увидите новое изменение.

Ответ 6

Удалите приложение, перезагрузите телефон и снова установите приложение... Это действительно исправлено в моем случае.

Ответ 7

Я также столкнулся с той же проблемой. Это происходит потому, что симулятор/устройство iOS кэширует образ запуска при первом запуске приложения. Я добавил некоторые изменения в ответ Брайана Трзупека:

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

Ответ 8

Это сработало для меня: http://arsenkin.com/launch_screen_image_cache.html

Опять же, благодаря ветке, на которую я ссылался выше, я нашел способ решите эту проблему - назовите ваше новое изображение иначе, чем там было раньше в случае, если ваш новый имеет то же имя, что и старый и поместите его из папки *.xcassets в каталог проекта и ссылаться на него в вашем UIImageView. И это оно. Звучит глупо легко, но о боже, сколько ярости у меня было.

Ответ 9

Просто подключите свое устройство, перейдите в Xcode > Окно > Устройствa > Устройство, теперь в установленных приложениях, выберите свое приложение, щелкните правой кнопкой мыши и загрузите контейнер, перейдите к сгенерированному файлу, щелкните правой кнопкой мыши, Покажите содержимое пакета, AppData, Library, Caches и удалите файлы. Теперь перейдите в Xcode > Window > Devices > Your device > ваше приложение и щелкните правой кнопкой мыши, чтобы заменить контейнеры.

Ответ 10

  1. Удалить ваше приложение с устройства
  2. Выключите устройство
  3. Включите устройство
  4. Установите и запустите приложение.

Ответ 11

Что сделал работу для меня:

  • Удалите LaunchScreen Scene и View Controller и создайте новый (убедитесь, что вы установили его как "Initial View Controller" в Инспекторе Атрибутов).

Что не сработало для меня:

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

Ответ 12

Хорошо, поэтому я понял проблему. В предыдущей версии моего приложения мы использовали экран запуска XIB. Где-то в разработке этой новой версии xib был удален и заменен только статическими изображениями запуска.

Решение состоит в использовании XIB запуска экрана. Я заметил, что в тот момент, когда я впервые использовал экран запуска xib, файл, хранящийся в каталоге снимков, был заменен снимком xib.

Ответ 13

Честно говоря, я не рискнул начать жить, не будучи уверенным, будет ли это обновлено или нет.

Итак, если вы используете xcassets, простое решение:

  1. Удалить старый набор изображений
  2. Воссоздайте один с другим именем и добавьте ваши изображения заставки
  3. Обновите раскадровку, чтобы использовать эту "новую" ссылку на набор изображений

Это обязательно обновит! (Я даже протестировал с приложением, уже установленным на устройстве). Нет необходимости чистить кэш устройства или около того.

Ответ 14

Xcode 10/iOS 12

Попробовав все вышеперечисленное, мне пришлось удалить изображение с LaunchScreen и заменить его новым.

Ответ 15

У этой проблемы тоже. Будучи полным новичком, я наивно изменил LaunchScreen.storyboard на LaunchScreen.xib. Пробег завершился неудачно (duh), поэтому я изменил его обратно на .storyboard, повторно запустив приложение, чтобы проверить, что я не прикрутил ничего другого - и старый экран сначала не отображался. Итак, что бы я ни делал, он, должно быть, сбросил старый кеш.

Ответ 16

@Chino

@InkGolem

Это не проблема, которая повлияет на ваших пользователей.

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

На этом устройстве была установлена предыдущая версия? Я полагаю, что это то же самое, что и приведенные выше ответы о том, чтобы удалить и переустановить или удалить, перезапустить и переустановить.

У меня та же проблема и с устройствами для разработки и производства, с симулятором и из магазина приложений. Я также смог воссоздать проблему с помощью симулятора. Сначала я запускаю симулятор с предыдущей версией своего кода, затем запускаю симулятор с более поздней версией. В обоих случаях старый стартовый экран переносится. В симуляторе удаление снимка не работает, так как он просто воссоздается. Когда вы закрываете приложение, нажимая кнопку "Домой", создается новый снимок с более старым экраном запуска. Теперь... если я удаляю старую версию приложения с телефона или симулятора, а затем устанавливаю с помощью xcode или магазина приложений, экран запуска обновляется должным образом. Однако это не идеальное решение для конечных пользователей.

Кто-нибудь придумал решение, которое не включает удаление предыдущего приложения с телефона?

Я пытался: переименование xib файла LaunchScreen. Переименование изображений, используемых LaunchScreen. Добавление пустого изображения в screen.window в applicationDidEnterBackground, чтобы скрыть экран перед снимком

Добавляя перерыв [application didFinishLaunchingWithOptions], я вижу, что старый LaunchScreen появляется до вызова didFinishLaunchingWithOptions.

Ответ 17

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

Ответ 18

Это самый быстрый способ, который я нашел, чтобы решить эту проблему, хотя это звучит глупо:

  1. Щелкните правой кнопкой мыши на LaunchScreen.xib или в файле стартового экрана и выберите Remove file, затем выберите Remove to trash. Это удалит все ссылки на файл и его прошлые обновления из вашего проекта.

  2. Перейдите в корзину и перетащите файл обратно в проект xCode (в пределах yourProjectName).

  3. Очистить и восстановить.

Ответ 19

Попробуйте открыть симулятор, зайдя в Оборудование → Стереть все содержимое и настройки.