Vous ne devez pas du tout mettre ce genre de codes dans le délégué d'application, sinon vous vous retrouverez face à l'erreur suivante Délégué de Massive App . Vous devriez plutôt envisager de refactoriser votre code en morceaux plus significatifs, puis de placer la bonne partie au bon endroit. Dans ce cas, la seule chose dont vous avez besoin est d'être sûr que le code exécute ces fonctions une fois que l'application est prête et une seule fois. Ainsi, le init
La méthode pourrait être géniale :
@main
struct MyApp: App {
init() {
setupFirebase()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
private extension MyApp {
func setupFirebase() {
FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()
}
}
AppDelegate ?
Vous pouvez avoir votre propre classe personnalisée et l'assigner en tant que delegate
. Mais notez que cela ne fonctionnera pas pour les événements qui se produisent avant l'affectation. Par exemple :
class CustomDelegate: NSObject, UIApplicationDelegate {
static let Shared = CustomDelegate()
}
Et plus tard :
UIApplication.shared.delegate = CustomDelegate.Shared
Observer pour les notifications
La plupart des AppDelegate
sont en fait des méthodes d'observation sur des notifications que vous pouvez observer manuellement au lieu de définir une nouvelle classe. Par exemple :
NotificationCenter.default.addObserver(
self,
selector: #selector(<#T##@objc method#>),
name: UIApplication.didBecomeActiveNotification,
object: nil
)
Native AppDelegate
Wrapper
Vous pouvez injecter directement un délégué d'application dans le @main
struct :
@UIApplicationDelegateAdaptor(CustomDelegate.self) var appDelegate
Remarque : L'utilisation de AppDelegate
N'oubliez pas que l'ajout d'AppDelegate signifie que vous supprimez la prise en charge multiplateforme par défaut et que vous devez vérifier la plateforme manuellement.