Actualmente estoy usando Xcode 11 Beta 5. Dentro de mi aplicación, funciona bien en iOS 12 y menos. Sin embargo, en iOS 13 parece que está usando el UIScene
. Esto hace que mi aplicación no haga nada.
Cuando la aplicación se inicia con una instalación nueva, hay términos y condiciones que el usuario debe aceptar. Después de aceptar, van a una pantalla de carga que los dirige a la vista principal. En la captura de pantalla que publiqué, la vista detrás de la actual en primer plano es la pantalla de carga de bienvenida.
Pronto analizaremos la posibilidad de agregar soporte para escenas de múltiples vistas en toda la aplicación, pero ahora tenemos cosas de mayor prioridad en las que debemos trabajar.
"Soportar múltiples ventanas" ya está deshabilitado en la configuración general del objetivo de la aplicación. También tengo Enable Multiple Windows configurado en NO en el archivo info.plist.
Hasta ahora nada ha funcionado realmente. Básicamente, quiero excluir / deshabilitar varias ventanas y UIScene / SwiftUI para restaurar el comportamiento original en iOS 10-12. ¿Es esto posible en iOS 13 o tenemos que actualizarlo?
Actualizar:
Aquí hay una captura de pantalla de la jerarquía de depuración de vistas. El lado izquierdo es iOS 12, el lado derecho está en iOS 13. Sin agregar nada a Info.plist ni clases o métodos de delegado de escena, ¿por qué es diferente? Prácticamente lo ejecutó en su código listo para producción existente en Xcode 11.
viewWill|DidAppear
, no se denominan de la misma manera en iOS 13 cuando se descartan los controladores de vista presentados, por ejemplo. Agregue muchos mensajes de depuración y puntos de interrupción del ciclo de vida y compare el flujo entre iOS 12 y 13 y vea dónde es diferente.Respuestas:
Si bien debe aceptar el uso de escenas cuando su aplicación se ejecuta en iOS 13 y posterior, puede optar por no participar mientras aún sea compatible con iOS 12 o anterior.
Elimine completamente la entrada "Application Scene Manifest" de Info.plist.
Si hay una clase de delegado de escena, elimínela.
Si hay algún método relacionado con la escena en el delegado de su aplicación, elimine esos métodos.
Si falta, agregue la propiedad
var window: UIWindow?
al delegado de su aplicación.Su aplicación ahora solo debería usar el delegado de la aplicación y en iOS 13 debería tener el mismo ciclo de vida que iOS 12.
Nota: Nada de esto es específico de Swift o SwiftUI.
fuente
AppDelegate
que me dirigí. ¿Eso vuelve automáticamente en este proceso que describiste? (Me gusta más tu respuesta, ya que ignora por completo las escenas)Usar la respuesta para formatear las cosas con suerte mejor que un comentario. (Siéntete libre de comentar y editaré).
Esto es algo que también enfrenté, y hay algunos escenarios en juego aquí:
UIKit
en Xcode 11, simplemente ábrala y debería funcionar bien. Todas mis aplicaciones tienen, sinSceneDelegate
archivo ni cambiosAppDelegate
o guiones gráficos.UIKIT
aplicación orientada a iOS 13 , simplemente créela y asegúrese de dejar la casilla de verificación "Usar SwiftUI" sin marcar.Pero me pregunto si se enfrenta al tercer escenario, uno que hice hace aproximadamente una semana. Creación de una nueva aplicación `UIKit dirigida a algo anterior a iOS 13 . (¡De hecho, apunté a iOS 9!)
Sí, su plantilla le dará 15 errores (a partir de la versión beta 5), junto con un
SceneDelegate
archivo / clase. Afortunadamente, Xcode te ayudará a corregir automáticamente todos menos uno.La última es agregar una línea que es parte de la
SceneDelegate
clase, pero desafortunadamente Apple la dejó fuera de laAppDelegate
clase, lo que después de más de una docena de@available(iOS 13.0, *)
cláusulas significa que ha optado porSceneDelegate
no usar iOS 12 y ¿adivinen qué? Es que no hay enApDelegate
!Agregue esto a su AppDelegate:
En ese momento, debería tener una
UIKit
aplicación en ejecución destinada a iOS 12 y versiones anteriores.fuente
SceneDelegate
y las pruebas dicen que (a) funcionan en iOS 13 y (b) no admiten varias ventanas, solo dividen la vista entre dos aplicaciones. (Tampoco soy compatible con la función de arrastrar y soltar). ¿Hay algo más que hacer?SceneDelegate
, noSwiftUI
, no tengo la capacidad de crear múltiples instancias de mis aplicaciones iOS 9+. El rendimiento es el mismo de siempre, todos ellos sonCoreImage
filtros personalizados que se actualizan en tiempo real y, bueno, ¿para mí? Si hay algún problema relacionado con el sistema operativo relacionado con escenas en la jerarquía de vistas, es discutible si no admite escenas. (Y para terminar, sí, todavía estoy un poco preocupado. Pero también es la beta 5.) Ojalá tengas una buena copia de seguridad que pueda reproducir lo que estoy viendo.Hice que esto funcionara usando la respuesta de dfd, pero debido a que mi aplicación está en Objective-C, tuve que hacer un cambio:
En Objective-C, quieres poner
en AppDelegate.h (no en .m)
fuente
De acuerdo, lo descubrí. Debido a los cambios en iOS 13 del nuevo estilo de presentación de tarjetas predeterminado de Apple, en mi guión gráfico, la transición de mi pantalla de inicio a mi controlador de navegación de flujo personalizado predeterminado para la nueva presentación (ver captura de pantalla a continuación).
La forma en que lo arreglé fue volver al estilo antiguo que por defecto tenía el ciclo de vida anterior. Vea la captura de pantalla a continuación.
No estoy seguro de por qué lo hizo, ya que este fue el único lugar en mi aplicación que causó esto (una aplicación bastante grande, así que tengo que pasar un tiempo revisando todos los guiones gráficos para asegurarme).
fuente
Xcode 12 - Swift 5.3 - iOS 14
Desde Xcode 12 y con la ayuda de Swift 5.3 y
@main
, puedes tener una aplicación multiplataforma que no tiene ningúnSceneDelegate
eventoAppDelegate
. Solo habrá un archivo simple como:fuente