iOS Mantener la pantalla de inicio antigua y el ícono de la aplicación después de la actualización

173

Tengo una aplicación donde recientemente reemplacé las imágenes de lanzamiento y los íconos de la aplicación, eliminé todos los activos antiguos de todas partes del proyecto. Cuando actualizo la aplicación de la versión anterior a la nueva simplemente construyendo en Xcode, todo está bien. Sin embargo, si tengo instalada la versión anterior de mi aplicación, actualícela desde TestFlight, cada vez que cierre la aplicación y luego la reinicie, la imagen de inicio anterior aparece brevemente antes de mostrar la nueva imagen de inicio. De manera similar, cuando cierro la aplicación, el ícono de la aplicación anterior parpadea brevemente antes de volver a la nueva.

Abrí la aplicación usando iExplorer y noté que hay una imagen de la pantalla de inicio antigua guardada en el /Library/Caches/Shapshotsdirectorio (no sé cómo ni por qué llegó allí). Cuando lo elimino manualmente a través de iExplorer, deja de aparecer. Sin embargo, cuando trato de eliminarlo con código utilizando NSFileManagermétodos, recibo errores que dicen que tengo prohibido eliminar archivos en este directorio.

¿Alguien ha experimentado esto antes y tiene algún consejo?

lramirez135
fuente
3
El mismo problema, y ​​con las pantallas de inicio, la nueva pantalla de inicio nunca se muestra, está utilizando la imagen en caché de la versión anterior.
Christophe Fondacci

Respuestas:

327

He podido obtener de forma confiable el caché de trampolín borrado para probar los cambios de la imagen de inicio haciendo esto:

  1. Eliminar tu aplicación del dispositivo
  2. Apague el dispositivo
  3. Encienda el dispositivo, instale y ejecute la aplicación.

La imagen se actualiza correctamente cada vez. Es una pena que necesite apagar el dispositivo para que funcione, pero al menos he podido avanzar de esta manera. Espero que esto ayude a alguien.

En el caso del simulador, solo debería reiniciar el simulador.

Brian Trzupek
fuente
19
Esta es la única solución que funcionó para mí. ¡Muchas gracias!
Marcin Kapusta
¡Gracias héroe! Trabajado como un encanto.
Ravi
55
Funciona también para el emulador.
Alexey Podlasov
1
¿Es esta también la solución para el TestFlight? actualizar la aplicación desde TestFlight también almacena en caché las imágenes de inicio. ¿estás seguro de que esto no sucederá en la versión de la aplicación a diferencia del testflight?
hasan
1
Me recuerda a la comedia espejo automático. Pero está funcionando genial. ¡Gracias!
ssowri1
49

Springboard utiliza estos cachés para hacer que el cambio de aplicaciones sea rápido. Este no es un problema que afectará a los usuarios de producción y, en teoría, debería desaparecer la próxima vez que Springboard decida capturar su aplicación.

Dicho esto, este no es un problema que pueda solucionar. Este es un error en el código de Apple, no el tuyo.

ACTUALIZACIÓN: Parece que hay una solución que no requiere reiniciar el dispositivo.

¡Esto surtirá efecto después del segundo lanzamiento!

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

Una explicación completa de cómo funciona aquí: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html

InkGolem
fuente
77
¿Puede vincular a la documentación que confirmaría su afirmación "Este no es un problema que afectará a sus usuarios de producción"? Tengo exactamente el mismo problema, estoy bien si esto es solo para desarrolladores, pero no aprovecharé la oportunidad sin documentación oficial que indique claramente lo que dices.
Christophe Fondacci
66
Para algunas personas
obtengo
15
Lamentablemente, puedo confirmar que este problema afecta incluso a los usuarios de producción (así que después de actualizar la aplicación desde App Store).
Eugenio
Sí, afecta a las compilaciones de producción / compilaciones de App Store.
Jonny
¿Alguna fuente para esto?
Daniel Springer
27

Para el simulador solo Reset Contents and Settings...

Murray Sagal
fuente
Esto no es una pregunta. El punto es que al implementar una nueva aplicación con nuevos íconos o imágenes, no todos se actualizan de la misma manera y algunos se mantienen en exhibición mientras se han eliminado.
Stephane Paquet
18

@InkGolem

Este no es un problema que afectará a los usuarios de producción.

es verdad.

Estaba enfrentando este problema cuando cambié la pantalla de inicio, la pantalla de bienvenida y el ícono de la aplicación. Intenté todos los métodos, pero no funcionó. Finalmente, acabo de publicar mi aplicación y la descargué de la tienda de aplicaciones con el dispositivo que no usé para el desarrollo . ¡SplashScreen y el ícono de la aplicación funcionan normalmente!

chinnawatp
fuente
1
¿Alguna idea de lo que sucede si ya tiene una aplicación en la tienda de aplicaciones y el usuario simplemente actualiza la aplicación con la nueva pantalla de inicio?
rhcpfan
Ya tengo una aplicación en las descargas de la tienda de aplicaciones , y lanzo una actualización con la nueva pantalla de inicio. Después de lanzar mi aplicación, pruebo con más de 10 dispositivos (no los uso para el desarrollo) para verificar que "Esto no es un problema que afectará a los usuarios de producción" es real, y hasta ahora no recibo ninguna queja del usuario sobre Pantalla de bienvenida.
chinnawatp
77
Este problema también está ocurriendo en la compilación de la tienda de aplicaciones, y los consejos de @Brian Trzupek funcionaron.
Ajumal
3
Confirmado, esto sucede en compilaciones en vivo desde App Store. Esta respuesta tiene algunos problemas con el lenguaje; No puedo decir si significan que el problema afecta las construcciones de producción o no, pero mi experiencia empírica dice que .
Jonny
2
¡En realidad está sucediendo a los usuarios de producción! La pantalla de presentación que se muestra es la anterior. Reiniciar el teléfono solucionó eso. Esperemos que la gente vea el nuevo chapoteo en las próximas horas sin reiniciar.
Valerio
13

Encontré una solución alternativa, ¿y si realmente quieres solucionar este problema? Apple tiene algunos mecanismos para almacenar en caché las imágenes de la pantalla de inicio que indexan por nombre de archivo de imagen.

Cuando cambia cualquier imagen en la pantalla de inicio y desea ver esos cambios en la próxima ejecución de inmediato. utilice el nombre de la nueva imagen, la imagen que cambió y enlace al nuevo archivo de imagen en storyboard o xib.

Ejecutar nuevamente, verá aparecer nuevos cambios.

Yu-Sen Han
fuente
1
No quería eliminar la aplicación, así que probé esta. Esto más reiniciar mi dispositivo funcionó para mí.
Murray Sagal
Esto no funcionó para mí. Reiniciar el dispositivo tampoco funcionó ... Me rindo ahora.
Lensflare
No funciono para mi. Incluso eliminé el imageView y creé uno nuevo con la nueva imagen, y aún así no funcionó.
Rickard Elimää
No me funcionó. Obtuve la imagen anterior que no se cargaba (todavía se presentó el color de fondo en lugar de una imagen) y todavía se presentó durante una fracción de segundo antes de que apareciera la nueva pantalla de inicio.
Michal Cichon
13

Esto funcionó para mí: http://arsenkin.com/launch_screen_image_cache.html

Nuevamente, gracias al hilo al que he hecho referencia anteriormente, encontré una manera de resolver este problema: nombra tu nueva imagen de manera diferente a la que había antes en caso de que tu nueva tenga el mismo nombre que la anterior y la saques del * .xcassets carpeta al directorio del proyecto y haga referencia a él en su UIImageView. Y eso es. Suena estúpido fácil, pero oh, qué tanta ira tenía.

JERC
fuente
3
La clave aquí es mantener esas imágenes fuera del catálogo de activos. ¡Gracias!
Michal Cichon
3
Esta solución realmente ayuda si te importa la buena experiencia de usuario de tu usuario de producción y quieres evitar esa fea transición entre la imagen antigua y la nueva.
Michal Cichon
3
Finalmente, ¡una solución que realmente funciona! La clave aquí es sacar las imágenes de la carpeta de activos.
Elad
1
Funciona perfectamente sin reiniciar o eliminar la aplicación.
Soufian Hossam
Extraño. Pero la imagen de fondo que saqué del catálogo de activos a veces no se carga y obtengo el fondo negro. Ahora necesito depurarlo nuevamente, pero desafortunadamente no tengo idea de cómo reproducirlo.
Michal Cichon
10

Desinstale su aplicación, reinicie su teléfono e instale su aplicación nuevamente ... Esto realmente se solucionó en mi caso.

Ankit Pundhir
fuente
5

También enfrenté el mismo problema. Ocurre porque el simulador / dispositivo iOS almacena en caché la imagen de inicio cuando inicia la aplicación por primera vez. Agregué algunas modificaciones a la respuesta de Brian Trzupek :

  1. Eliminar el conjunto de imágenes de los activos de Xcode (por ejemplo, launch_image)
  2. Agregue un nuevo conjunto de imágenes y agréguele imágenes.
  3. Apague y encienda el dispositivo iOS. (Restablecer contenido y configuración para simulador).
  4. Limpie la carpeta de compilación de Xcode (Presione command+ option+ shift+ K).
  5. Elimine la aplicación del dispositivo / simulador (si está disponible).
  6. Corre de nuevo.
AG
fuente
5

Lo que funcionó para mí:

  • Eliminar el controlador de escena y vista de LaunchScreen y crear uno nuevo ( asegúrese de configurarlo como "Controlador de vista inicial" en el Inspector de atributos ).

Lo que no funcionó para mí:

  • Eliminar la aplicación
  • Reiniciar el iPhone, Mac o Xcode
  • Eliminar datos derivados
  • Eliminar el contenedor del dispositivo
  • Limpieza
  • Quemando 3 muñecas vudú Steve Jobs

Nota:

A veces también se necesita borrar (simulador)

Daniel Springer
fuente
44
No estoy convencido. Voy a necesitar ubicaciones de origen de las muñecas vudú de Steve Jobs para confirmar.
Chris Brandsma
3

Simplemente conecte su dispositivo, vaya a Xcode> Ventana> Dispositivos> Su dispositivo, ahora en aplicaciones instaladas, seleccione su aplicación, haga clic derecho y descargue el contenedor, vaya al archivo generado, haga clic derecho, Mostrar contenido del paquete, Datos de aplicación, Biblioteca, Caches, y eliminar archivos. Ahora ve a Xcode> Ventana> Dispositivos> Tu dispositivo> tu aplicación y haz clic derecho para reemplazar los contenedores.


fuente
3

Honestamente, no corrí el riesgo de ponerme en marcha sin estar seguro de si esto se actualizará o no.

Entonces, suponiendo que está utilizando xcassets, una solución simple es:

  1. Eliminar el conjunto de imágenes anterior
  2. Recree uno con un nombre diferente y agregue sus imágenes de pantalla de inicio
  3. Actualice su guión gráfico para usar esta referencia de conjunto de imágenes 'nueva'

¡Se actualizará seguro! (Incluso probé con la aplicación ya instalada en el dispositivo). No es necesario limpiar el caché del dispositivo más o menos.

hico
fuente
3
  1. Eliminar tu aplicación del dispositivo
  2. Apague el dispositivo
  3. Dispositivo de encendido
  4. Instalar y ejecutar la aplicación.
Jone Ren
fuente
1

Ok, entonces descubrí el problema. En la versión anterior de mi aplicación, estábamos usando una pantalla de inicio XIB. En algún momento del desarrollo de esta nueva versión, el xib se eliminó y se reemplazó solo con imágenes de lanzamiento estáticas.

La solución es utilizar una pantalla de inicio XIB. Noté que en el momento en que usé una pantalla de inicio xib por primera vez, el archivo almacenado en el directorio de instantáneas fue reemplazado por la instantánea de xib.

lramirez135
fuente
2
No, estoy usando un Launch Screen XIB y no se está actualizando. Supongo que puede solucionar el problema cambiando de Pantalla de inicio> Imagen estática> Pantalla de inicio. La modificación de la pantalla de inicio en XCode y su ejecución aún muestra la antigua pantalla de inicio en el iPhone. La imagen se almacena en caché en el dispositivo. Supongo que si cambio el nombre de la pantalla de inicio funcionará
Christophe Fondacci
La recreación de una pantalla de inicio con un nombre diferente no solucionó el problema, aún viendo el antiguo. La única "esperanza" es que iOS regenera su caché en cada actualización de la aplicación, pero no puedo encontrar ninguna documentación al respecto
Christophe Fondacci
1

Xcode 10 / iOS 12

Después de probar todas las cosas mencionadas anteriormente, tuve que eliminar la vista de imagen de LaunchScreen y reemplazarla por una nueva.

ahbou
fuente
1

Esta es la forma más rápida que encontré para resolver este problema, aunque suena estúpido:

  1. Haga clic derecho sobre LaunchScreen.xibo en su archivo de pantalla de inicio y seleccione y Remove fileluego seleccione Remove to trash. Esto eliminará todas las referencias del archivo y sus actualizaciones anteriores de su proyecto.

  2. Vaya a la papelera y arrastre y suelte el archivo nuevamente en su proyecto xCode (dentro yourProjectName).

  3. Limpiar y reconstruir.

Walter Monecke
fuente
1

Use este código para limpiar la caché de la pantalla de inicio:

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()
Mor4eza
fuente
0

Tenía este problema también. Siendo un novato total, ingenuamente cambié LaunchScreen.storyboard a LaunchScreen.xib. La ejecución falló (duh), así que la cambié a .storyboard volví a ejecutar la aplicación solo para probar que no había estropeado nada más, y la pantalla anterior no apareció primero. Entonces, sea lo que sea que hice, debe haber vaciado el viejo caché.

richard s. colina
fuente
0

Tuve el mismo problema, pero solo con la imagen utilizada en el guión gráfico de la pantalla de inicio. Mover la imagen del catálogo de activos cambiando su nombre al paquete de aplicaciones (por ejemplo, la imagen antigua establecida en el catálogo de activos se llamaba launch_logo, y la imagen en el paquete de aplicaciones se llama launchscreen_logo.png) nos resolvió el problema.

Anton Filimonov
fuente
0

Supongo que esto depende de las situaciones. Cuando sucede en la depuración o prueba, funciona al eliminar la imagen en la pantalla de inicio. O desinstale sus aplicaciones, luego reinicie el inicio.

Pero va incluso después del archivo, luego no se resuelve con restablecer y limpiar.

이혜린
fuente
0

En mi caso, no he seleccionado AppIcon Source desde la configuración de la aplicación -> General - ingrese la descripción de la imagen aquí> Iconos de aplicaciones e imágenes de inicio -> Fuente de iconos de aplicaciones

Mehrdad
fuente
0

Pruébalo en 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
fuente
0

Solución trabaja para mí

  1. Eliminar tu aplicación del dispositivo
  2. Apagar dispositivo
  3. Encender el dispositivo
  4. Carpeta de compilación limpia
  5. Nuevamente compila, instala e inicia la aplicación.

    Disfrutar

M Murteza
fuente
0

Asegúrate de hacer todos estos pasos

  1. Busque la clave ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME en la configuración de compilación y busque el valor de sus activos en toda la aplicación y luego quítela.
  2. Eliminar ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME de la configuración de compilación.
  3. Crear nueva pantalla de inicio Xcode -> Archivo -> Nuevo -> Archivo -> Pantalla de inicio
  4. Ir a destino principal de la aplicación -> General -> Iconos de la aplicación e imágenes de lanzamiento -> Iniciar archivo de pantalla -> Elija el nuevo archivo de pantalla de inicio.
  5. Si solo está cambiando la antigua pantalla de inicio, intente nombrar los nuevos activos con diferentes nombres.
jeff ayan
fuente
-1

Intente abrir el simulador, vaya a Hardware -> Borrar todo el contenido y la configuración.

Tigran Iskandaryan
fuente