diff --git a/ios/App/App/SceneDelegate.swift b/ios/App/App/SceneDelegate.swift index 367209d..8a90ab1 100644 --- a/ios/App/App/SceneDelegate.swift +++ b/ios/App/App/SceneDelegate.swift @@ -33,21 +33,24 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = scene as? UIWindowScene else { return } - // Le manifeste déclare `UISceneStoryboardFile = Main` : UIKit a donc - // déjà chargé Main.storyboard et instancié `MainViewController`, qui - // porte l'enregistrement des plugins natifs et la config WKWebView. + // ⚠️ Ne PAS conditionner cette création à `window == nil`. // - // Le template de Capacitor pose ici un `CAPBridgeViewController()` nu. - // L'appliquer tel quel remplacerait notre sous-classe et ferait perdre - // cette configuration **sans erreur visible**. On ne crée donc la - // fenêtre que si le storyboard ne l'a pas fait, et avec notre - // contrôleur. - if window == nil { - let fenetre = UIWindow(windowScene: windowScene) - fenetre.rootViewController = MainViewController() - window = fenetre - fenetre.makeKeyAndVisible() - } + // C'était ma première version, par prudence : le manifeste déclarant + // `UISceneStoryboardFile = Main`, je supposais qu'UIKit avait déjà + // monté la fenêtre et qu'il ne fallait pas l'écraser. Résultat sur + // appareil : **écran noir permanent, sans la moindre erreur**. UIKit + // fournit bien une fenêtre, mais ne la rend pas visible à notre place ; + // la garde sautait donc `makeKeyAndVisible()` et rien ne s'affichait. + // + // Le template de Capacitor crée la fenêtre sans condition, et c'est le + // chemin éprouvé. Le seul écart nécessaire est `MainViewController` au + // lieu d'un `CAPBridgeViewController` nu : notre sous-classe enregistre + // les neuf plugins in-app dans `capacitorDidLoad()`. Elle ne dépend de + // rien du storyboard, donc l'instancier ici est sans perte. + let fenetre = UIWindow(windowScene: windowScene) + fenetre.rootViewController = MainViewController() + window = fenetre + fenetre.makeKeyAndVisible() SceneDelegateProxy.shared.scene(scene, willConnectTo: session, options: connectionOptions) }