Solución:
Los dos archivos están destinados a dividir el trabajo según lo que se necesita para ejecutar la aplicación como un todo y lo que se necesita para una “instancia” que admita la ejecución visible en segundo plano. Esto sería algo así como configurar una base de datos una vez, pero mostrando diferentes conjuntos de valores por ventana.
Podrías pensar en ellos como versiones globales y privadas. Uno se comparte y el otro se limita al propietario individual. En cierto modo, son exactamente lo que cabría esperar por los nombres.
El soporte de múltiples ventanas está sucediendo
La próxima vez que cree un nuevo proyecto de Xcode, verá que su AppDelegate se ha dividido en dos: AppDelegate.swift y SceneDelegate.swift. Este es el resultado del nuevo soporte de múltiples ventanas que aterrizó con iPadOS y divide efectivamente el trabajo del delegado de la aplicación en dos.
A partir de iOS 13, el delegado de su aplicación debe:
- Configure los datos que necesite durante la duración de la aplicación.
- Responda a cualquier evento que se centre en la aplicación, como un archivo que se comparte con usted.
- Regístrese para servicios externos, como notificaciones push.
- Configura tus escenas iniciales.
Por el contrario, los delegados de escena están ahí para manejar una instancia de la interfaz de usuario de su aplicación. Entonces, si el usuario ha creado dos ventanas que muestran su aplicación, tiene dos escenas, ambas respaldadas por el mismo delegado de la aplicación.
Tenga en cuenta que estas escenas están diseñadas para funcionar de forma independiente entre sí. Por lo tanto, su aplicación ya no se mueve al fondo, sino que las escenas individuales lo hacen: el usuario puede mover una al fondo mientras mantiene otra abierta.
Cortesía de https://www.hackingwithswift.com/articles/193/whats-new-in-ios-13
Multiplataforma
Además de la respuesta de Carro abandonado, Desde Xcode 11, tienes una nueva opción llamada Multiplatform
para elegir como plantilla de partida. Ahí es donde solo verá un archivo que contiene:
@main
struct MyMultiplatformApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Así es como el sistema sabe dónde comenzar el código con @main
(en Swift 5.3) y contiene WindowGroup
que gestiona múltiples ventanas de su aplicación en todas las plataformas de Apple. Por lo tanto, ya no necesita preocuparse por SceneDelegate y AppDelegate.
Si necesita que sea como el antiguo delegado de la aplicación, por ejemplo, cuando desea utilizar sus métodos, debe suscribirse para recibir las notificaciones correspondientes. o utilizar el UIAppDelegateAdapter
envoltorio como lo describí aquí